@besales/mcp 0.47.1 → 1.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +109 -164
- package/README.onprem.ru.md +35 -0
- package/bin/besales-mcp-http.js +9 -0
- package/bin/besales-onprem.mjs +19 -0
- package/dist/auth/connection-store.d.ts +3 -1
- package/dist/auth/connection-store.js +9 -3
- package/dist/auth/connection-store.js.map +1 -1
- package/dist/auth/oauth-client.d.ts +20 -27
- package/dist/auth/oauth-client.js +31 -23
- package/dist/auth/oauth-client.js.map +1 -1
- package/dist/auth/session-workspace.d.ts +1 -0
- package/dist/auth/session-workspace.js +10 -1
- package/dist/auth/session-workspace.js.map +1 -1
- package/dist/auth/token-storage.js +4 -1
- package/dist/auth/token-storage.js.map +1 -1
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +80 -19
- package/dist/cli.js.map +1 -1
- package/dist/constants/crm-catalog.d.ts +2 -0
- package/dist/constants/crm-catalog.js +3 -0
- package/dist/constants/crm-catalog.js.map +1 -0
- package/dist/http/api-client.d.ts +52 -7
- package/dist/http/api-client.js +131 -66
- package/dist/http/api-client.js.map +1 -1
- package/dist/http/feedback-document-error.d.ts +26 -0
- package/dist/http/feedback-document-error.js +22 -0
- package/dist/http/feedback-document-error.js.map +1 -0
- package/dist/http-server.d.ts +15 -0
- package/dist/http-server.js +378 -0
- package/dist/http-server.js.map +1 -0
- package/dist/instructions/server-instructions.d.ts +1 -1
- package/dist/instructions/server-instructions.js +6 -3
- package/dist/instructions/server-instructions.js.map +1 -1
- package/dist/network/constants.d.ts +25 -0
- package/dist/network/constants.js +26 -0
- package/dist/network/constants.js.map +1 -0
- package/dist/network/failed-verifications.d.ts +10 -0
- package/dist/network/failed-verifications.js +37 -0
- package/dist/network/failed-verifications.js.map +1 -0
- package/dist/network/http-test-fixture.d.ts +3 -0
- package/dist/network/http-test-fixture.js +86 -0
- package/dist/network/http-test-fixture.js.map +1 -0
- package/dist/network/known-keys.d.ts +10 -0
- package/dist/network/known-keys.js +38 -0
- package/dist/network/known-keys.js.map +1 -0
- package/dist/network/memory-credentials.d.ts +11 -0
- package/dist/network/memory-credentials.js +24 -0
- package/dist/network/memory-credentials.js.map +1 -0
- package/dist/network/rate-limit.d.ts +23 -0
- package/dist/network/rate-limit.js +62 -0
- package/dist/network/rate-limit.js.map +1 -0
- package/dist/network/rejected-keys.d.ts +9 -0
- package/dist/network/rejected-keys.js +39 -0
- package/dist/network/rejected-keys.js.map +1 -0
- package/dist/network/request-work.d.ts +8 -0
- package/dist/network/request-work.js +20 -0
- package/dist/network/request-work.js.map +1 -0
- package/dist/network/successful-keys.d.ts +17 -0
- package/dist/network/successful-keys.js +47 -0
- package/dist/network/successful-keys.js.map +1 -0
- package/dist/resources/concepts/external-execution.md +3 -1
- package/dist/resources/concepts/feedback-sheets.md +21 -12
- package/dist/resources/concepts/icp.md +8 -1
- package/dist/resources/concepts/sandbox.md +15 -6
- package/dist/resources/concepts/triggers.md +8 -0
- package/dist/resources/concepts/workbook-classification.md +104 -50
- package/dist/resources/docs/agent-behavior.md +51 -382
- package/dist/resources/docs/campaigns.md +9 -16
- package/dist/resources/docs/crm-integration.md +39 -523
- package/dist/resources/docs/files-and-uploads.md +23 -286
- package/dist/resources/docs/follow-up.md +47 -12
- package/dist/resources/docs/knowledge-base.md +52 -521
- package/dist/resources/docs/pipeline-builder.md +26 -216
- package/dist/resources/docs/pipeline-settings-deep.md +27 -220
- package/dist/resources/docs/platforms.md +106 -519
- package/dist/resources/docs/prompt-anatomy.md +39 -285
- package/dist/resources/docs/routing.md +8 -16
- package/dist/resources/docs/trigger-actions.md +40 -24
- package/dist/resources/docs/variables.md +8 -12
- package/dist/resources/operator-edit.contract.d.ts +7 -0
- package/dist/resources/operator-edit.contract.js +8 -0
- package/dist/resources/operator-edit.contract.js.map +1 -0
- package/dist/resources/registry.js +20 -4
- package/dist/resources/registry.js.map +1 -1
- package/dist/resources/workflows/audit-dialogues.md +23 -12
- package/dist/resources/workflows/compare-models.md +6 -4
- package/dist/resources/workflows/connect-crm-from-scratch.md +15 -12
- package/dist/resources/workflows/connect-datasource-from-scratch.md +5 -4
- package/dist/resources/workflows/extract-from-document.md +8 -6
- package/dist/resources/workflows/operator-edit.md +15 -0
- package/dist/resources/workflows/platform-setup-from-scratch.md +59 -70
- package/dist/resources/workflows/production-readiness-check.md +25 -15
- package/dist/schemas/mcp-tools.json +12061 -6753
- package/dist/schemas/voice-actions-api.contract.json +248 -0
- package/dist/shared/constants/broadcast-reason.constants.d.ts +2 -0
- package/dist/shared/constants/broadcast-reason.constants.js +47 -0
- package/dist/shared/constants/broadcast-reason.constants.js.map +1 -0
- package/dist/shared/constants/crm-stage-pool.constants.d.ts +2 -0
- package/dist/shared/constants/crm-stage-pool.constants.js +3 -0
- package/dist/shared/constants/crm-stage-pool.constants.js.map +1 -0
- package/dist/shared/constants/followup-note.constants.d.ts +3 -0
- package/dist/shared/constants/followup-note.constants.js +4 -0
- package/dist/shared/constants/followup-note.constants.js.map +1 -0
- package/dist/shared/constants/followup-session.constants.d.ts +2 -0
- package/dist/shared/constants/followup-session.constants.js +3 -0
- package/dist/shared/constants/followup-session.constants.js.map +1 -0
- package/dist/shared/constants/funnel-analytics.constants.d.ts +2 -0
- package/dist/shared/constants/funnel-analytics.constants.js +3 -0
- package/dist/shared/constants/funnel-analytics.constants.js.map +1 -0
- package/dist/shared/constants/message-filter.constants.d.ts +7 -0
- package/dist/shared/constants/message-filter.constants.js +8 -0
- package/dist/shared/constants/message-filter.constants.js.map +1 -0
- package/dist/shared/utils/trigger-repeat-mapping.d.ts +72 -0
- package/dist/shared/utils/trigger-repeat-mapping.js +53 -0
- package/dist/shared/utils/trigger-repeat-mapping.js.map +1 -0
- package/dist/skills/besales-dialogue-audit/SKILL.md +31 -20
- package/dist/tasks/task-state-store.js +5 -0
- package/dist/tasks/task-state-store.js.map +1 -1
- package/dist/tools/annotations.js +4 -3
- package/dist/tools/annotations.js.map +1 -1
- package/dist/tools/definitions/agent-design.d.ts +78 -21
- package/dist/tools/definitions/agent-design.js +246 -90
- package/dist/tools/definitions/agent-design.js.map +1 -1
- package/dist/tools/definitions/agent-model-notice.d.ts +5 -0
- package/dist/tools/definitions/agent-model-notice.js +31 -0
- package/dist/tools/definitions/agent-model-notice.js.map +1 -0
- package/dist/tools/definitions/agent-models.d.ts +5 -0
- package/dist/tools/definitions/agent-models.js +26 -0
- package/dist/tools/definitions/agent-models.js.map +1 -0
- package/dist/tools/definitions/agent-settings.d.ts +85 -0
- package/dist/tools/definitions/agent-settings.js +187 -0
- package/dist/tools/definitions/agent-settings.js.map +1 -0
- package/dist/tools/definitions/ai-costs.d.ts +12 -0
- package/dist/tools/definitions/ai-costs.js +142 -0
- package/dist/tools/definitions/ai-costs.js.map +1 -0
- package/dist/tools/definitions/api-tool-request.d.ts +15 -0
- package/dist/tools/definitions/api-tool-request.js +2 -0
- package/dist/tools/definitions/api-tool-request.js.map +1 -0
- package/dist/tools/definitions/behavior-shipped-form.d.ts +182 -0
- package/dist/tools/definitions/behavior-shipped-form.js +185 -0
- package/dist/tools/definitions/behavior-shipped-form.js.map +1 -0
- package/dist/tools/definitions/broadcast-alerts.d.ts +6 -0
- package/dist/tools/definitions/broadcast-alerts.js +72 -0
- package/dist/tools/definitions/broadcast-alerts.js.map +1 -0
- package/dist/tools/definitions/broadcast-analytics.d.ts +102 -18
- package/dist/tools/definitions/broadcast-analytics.js +732 -427
- package/dist/tools/definitions/broadcast-analytics.js.map +1 -1
- package/dist/tools/definitions/broadcast-scheduler.d.ts +19 -13
- package/dist/tools/definitions/broadcast-scheduler.js +217 -128
- package/dist/tools/definitions/broadcast-scheduler.js.map +1 -1
- package/dist/tools/definitions/call-operator-task.schema.d.ts +11 -0
- package/dist/tools/definitions/call-operator-task.schema.js +30 -0
- package/dist/tools/definitions/call-operator-task.schema.js.map +1 -0
- package/dist/tools/definitions/contacts.d.ts +3 -0
- package/dist/tools/definitions/contacts.js +57 -31
- package/dist/tools/definitions/contacts.js.map +1 -1
- package/dist/tools/definitions/crm-platform.d.ts +28 -39
- package/dist/tools/definitions/crm-platform.js +235 -344
- package/dist/tools/definitions/crm-platform.js.map +1 -1
- package/dist/tools/definitions/crm-stage-pool.messages.d.ts +39 -0
- package/dist/tools/definitions/crm-stage-pool.messages.js +43 -0
- package/dist/tools/definitions/crm-stage-pool.messages.js.map +1 -0
- package/dist/tools/definitions/crm-stage-pool.schema.d.ts +64 -0
- package/dist/tools/definitions/crm-stage-pool.schema.js +109 -0
- package/dist/tools/definitions/crm-stage-pool.schema.js.map +1 -0
- package/dist/tools/definitions/custom-reports.d.ts +12 -0
- package/dist/tools/definitions/custom-reports.js +68 -0
- package/dist/tools/definitions/custom-reports.js.map +1 -0
- package/dist/tools/definitions/datasource.d.ts +2 -1
- package/dist/tools/definitions/datasource.js +28 -13
- package/dist/tools/definitions/datasource.js.map +1 -1
- package/dist/tools/definitions/dialog-review-findings-response.d.ts +14 -0
- package/dist/tools/definitions/dialog-review-findings-response.js +23 -0
- package/dist/tools/definitions/dialog-review-findings-response.js.map +1 -0
- package/dist/tools/definitions/dialog-review-safe-response.d.ts +5 -0
- package/dist/tools/definitions/dialog-review-safe-response.js +152 -0
- package/dist/tools/definitions/dialog-review-safe-response.js.map +1 -0
- package/dist/tools/definitions/dialog-review.d.ts +49 -0
- package/dist/tools/definitions/dialog-review.js +383 -0
- package/dist/tools/definitions/dialog-review.js.map +1 -0
- package/dist/tools/definitions/dialogue-analysis.d.ts +46 -0
- package/dist/tools/definitions/dialogue-analysis.js +170 -0
- package/dist/tools/definitions/dialogue-analysis.js.map +1 -0
- package/dist/tools/definitions/dialogue-audit-agent-scope.d.ts +7 -0
- package/dist/tools/definitions/dialogue-audit-agent-scope.js +41 -0
- package/dist/tools/definitions/dialogue-audit-agent-scope.js.map +1 -0
- package/dist/tools/definitions/dialogue-audit-alias.d.ts +67 -0
- package/dist/tools/definitions/dialogue-audit-alias.js +559 -0
- package/dist/tools/definitions/dialogue-audit-alias.js.map +1 -0
- package/dist/tools/definitions/dialogue-export.d.ts +7 -1
- package/dist/tools/definitions/dialogue-export.js +89 -32
- package/dist/tools/definitions/dialogue-export.js.map +1 -1
- package/dist/tools/definitions/dialogue-followup-state.d.ts +9 -0
- package/dist/tools/definitions/dialogue-followup-state.js +69 -0
- package/dist/tools/definitions/dialogue-followup-state.js.map +1 -0
- package/dist/tools/definitions/edit-version-transport.test-fixtures.d.ts +13 -0
- package/dist/tools/definitions/edit-version-transport.test-fixtures.js +292 -0
- package/dist/tools/definitions/edit-version-transport.test-fixtures.js.map +1 -0
- package/dist/tools/definitions/edit-version.d.ts +5 -0
- package/dist/tools/definitions/edit-version.js +20 -0
- package/dist/tools/definitions/edit-version.js.map +1 -0
- package/dist/tools/definitions/external-api-channels.js +17 -15
- package/dist/tools/definitions/external-api-channels.js.map +1 -1
- package/dist/tools/definitions/feedback-document-access.d.ts +16 -0
- package/dist/tools/definitions/feedback-document-access.js +63 -0
- package/dist/tools/definitions/feedback-document-access.js.map +1 -0
- package/dist/tools/definitions/fixtures/shipped-setup-status.d.ts +3 -0
- package/dist/tools/definitions/fixtures/shipped-setup-status.js +9 -0
- package/dist/tools/definitions/fixtures/shipped-setup-status.js.map +1 -0
- package/dist/tools/definitions/follow-up-config.d.ts +79 -0
- package/dist/tools/definitions/follow-up-config.js +258 -0
- package/dist/tools/definitions/follow-up-config.js.map +1 -0
- package/dist/tools/definitions/follow-up-funnel-test.d.ts +4 -3
- package/dist/tools/definitions/follow-up-funnel-test.js +65 -52
- package/dist/tools/definitions/follow-up-funnel-test.js.map +1 -1
- package/dist/tools/definitions/follow-up-promotion-instructions.d.ts +2 -0
- package/dist/tools/definitions/follow-up-promotion-instructions.js +7 -0
- package/dist/tools/definitions/follow-up-promotion-instructions.js.map +1 -0
- package/dist/tools/definitions/follow-up-setup.d.ts +4 -28
- package/dist/tools/definitions/follow-up-setup.js +20 -87
- package/dist/tools/definitions/follow-up-setup.js.map +1 -1
- package/dist/tools/definitions/follow-up.d.ts +20 -122
- package/dist/tools/definitions/follow-up.js +200 -354
- package/dist/tools/definitions/follow-up.js.map +1 -1
- package/dist/tools/definitions/followup-getcourse-compat.d.ts +29 -0
- package/dist/tools/definitions/followup-getcourse-compat.js +62 -0
- package/dist/tools/definitions/followup-getcourse-compat.js.map +1 -0
- package/dist/tools/definitions/followup-sequence-config.schema.d.ts +10 -0
- package/dist/tools/definitions/followup-sequence-config.schema.js +14 -0
- package/dist/tools/definitions/followup-sequence-config.schema.js.map +1 -0
- package/dist/tools/definitions/funnel-analytics.d.ts +18 -0
- package/dist/tools/definitions/funnel-analytics.js +150 -0
- package/dist/tools/definitions/funnel-analytics.js.map +1 -0
- package/dist/tools/definitions/getcourse-anchor-refresh.d.ts +5 -9
- package/dist/tools/definitions/getcourse-anchor-refresh.js +26 -31
- package/dist/tools/definitions/getcourse-anchor-refresh.js.map +1 -1
- package/dist/tools/definitions/getcourse-cold-outbound-settings.d.ts +46 -0
- package/dist/tools/definitions/getcourse-cold-outbound-settings.js +37 -0
- package/dist/tools/definitions/getcourse-cold-outbound-settings.js.map +1 -0
- package/dist/tools/definitions/getcourse-cold-welcome.d.ts +17 -29
- package/dist/tools/definitions/getcourse-cold-welcome.js +182 -242
- package/dist/tools/definitions/getcourse-cold-welcome.js.map +1 -1
- package/dist/tools/definitions/getcourse-wave-welcome.messages.d.ts +10 -0
- package/dist/tools/definitions/getcourse-wave-welcome.messages.js +17 -0
- package/dist/tools/definitions/getcourse-wave-welcome.messages.js.map +1 -0
- package/dist/tools/definitions/help.js.map +1 -1
- package/dist/tools/definitions/icp-import-source.d.ts +75 -0
- package/dist/tools/definitions/icp-import-source.js +88 -0
- package/dist/tools/definitions/icp-import-source.js.map +1 -0
- package/dist/tools/definitions/inbound-analytics.d.ts +13 -0
- package/dist/tools/definitions/inbound-analytics.js +55 -0
- package/dist/tools/definitions/inbound-analytics.js.map +1 -0
- package/dist/tools/definitions/instagram-comment.templates.d.ts +19 -0
- package/dist/tools/definitions/instagram-comment.templates.js +34 -0
- package/dist/tools/definitions/instagram-comment.templates.js.map +1 -0
- package/dist/tools/definitions/instagram-settings-compat.d.ts +33 -0
- package/dist/tools/definitions/instagram-settings-compat.js +7 -0
- package/dist/tools/definitions/instagram-settings-compat.js.map +1 -0
- package/dist/tools/definitions/knowledge-chunking.d.ts +42 -0
- package/dist/tools/definitions/knowledge-chunking.js +83 -0
- package/dist/tools/definitions/knowledge-chunking.js.map +1 -0
- package/dist/tools/definitions/knowledge-space-search-fields.d.ts +12 -0
- package/dist/tools/definitions/knowledge-space-search-fields.js +30 -0
- package/dist/tools/definitions/knowledge-space-search-fields.js.map +1 -0
- package/dist/tools/definitions/knowledge.d.ts +24 -14
- package/dist/tools/definitions/knowledge.js +342 -233
- package/dist/tools/definitions/knowledge.js.map +1 -1
- package/dist/tools/definitions/legacy-trigger-repeat.d.ts +17 -0
- package/dist/tools/definitions/legacy-trigger-repeat.js +53 -0
- package/dist/tools/definitions/legacy-trigger-repeat.js.map +1 -0
- package/dist/tools/definitions/link-tracking.d.ts +8 -0
- package/dist/tools/definitions/link-tracking.js +141 -38
- package/dist/tools/definitions/link-tracking.js.map +1 -1
- package/dist/tools/definitions/mailing-variant-content.d.ts +75 -0
- package/dist/tools/definitions/mailing-variant-content.js +73 -0
- package/dist/tools/definitions/mailing-variant-content.js.map +1 -0
- package/dist/tools/definitions/model-comparison.d.ts +1 -0
- package/dist/tools/definitions/model-comparison.js +4 -5
- package/dist/tools/definitions/model-comparison.js.map +1 -1
- package/dist/tools/definitions/money-currency.d.ts +5 -0
- package/dist/tools/definitions/money-currency.js +10 -0
- package/dist/tools/definitions/money-currency.js.map +1 -0
- package/dist/tools/definitions/operator-workflow.d.ts +5 -5
- package/dist/tools/definitions/operator-workflow.js +80 -27
- package/dist/tools/definitions/operator-workflow.js.map +1 -1
- package/dist/tools/definitions/platform-funnel-analytics.d.ts +42 -0
- package/dist/tools/definitions/platform-funnel-analytics.js +72 -0
- package/dist/tools/definitions/platform-funnel-analytics.js.map +1 -0
- package/dist/tools/definitions/platform-getcourse-wave-field-bindings.d.ts +42 -0
- package/dist/tools/definitions/platform-getcourse-wave-field-bindings.js +51 -0
- package/dist/tools/definitions/platform-getcourse-wave-field-bindings.js.map +1 -0
- package/dist/tools/definitions/platform-settings-limits.d.ts +5 -0
- package/dist/tools/definitions/platform-settings-limits.js +6 -0
- package/dist/tools/definitions/platform-settings-limits.js.map +1 -0
- package/dist/tools/definitions/platform-settings-shipped-form.d.ts +37 -0
- package/dist/tools/definitions/platform-settings-shipped-form.js +310 -0
- package/dist/tools/definitions/platform-settings-shipped-form.js.map +1 -0
- package/dist/tools/definitions/platform-settings-update.d.ts +300 -0
- package/dist/tools/definitions/platform-settings-update.js +134 -0
- package/dist/tools/definitions/platform-settings-update.js.map +1 -0
- package/dist/tools/definitions/{getcourse-wave.d.ts → platform-setup-wave.d.ts} +75 -6
- package/dist/tools/definitions/platform-setup-wave.js +1079 -0
- package/dist/tools/definitions/platform-setup-wave.js.map +1 -0
- package/dist/tools/definitions/platform-setup.d.ts +701 -222
- package/dist/tools/definitions/platform-setup.js +313 -752
- package/dist/tools/definitions/platform-setup.js.map +1 -1
- package/dist/tools/definitions/platform-widget-page-rules.schema.d.ts +10 -0
- package/dist/tools/definitions/platform-widget-page-rules.schema.js +7 -0
- package/dist/tools/definitions/platform-widget-page-rules.schema.js.map +1 -0
- package/dist/tools/definitions/prompt-authoring.constants.d.ts +2 -0
- package/dist/tools/definitions/prompt-authoring.constants.js +3 -0
- package/dist/tools/definitions/prompt-authoring.constants.js.map +1 -0
- package/dist/tools/definitions/prompt-batch-controls.d.ts +5 -0
- package/dist/tools/definitions/prompt-batch-controls.js +40 -0
- package/dist/tools/definitions/prompt-batch-controls.js.map +1 -0
- package/dist/tools/definitions/prompt-draft-authoring.d.ts +5 -0
- package/dist/tools/definitions/prompt-draft-authoring.js +24 -0
- package/dist/tools/definitions/prompt-draft-authoring.js.map +1 -0
- package/dist/tools/definitions/prompt-text-projection.d.ts +11 -0
- package/dist/tools/definitions/prompt-text-projection.js +62 -0
- package/dist/tools/definitions/prompt-text-projection.js.map +1 -0
- package/dist/tools/definitions/reviewer-paid.d.ts +19 -0
- package/dist/tools/definitions/reviewer-paid.js +115 -0
- package/dist/tools/definitions/reviewer-paid.js.map +1 -0
- package/dist/tools/definitions/routing-condition-projection.d.ts +31 -0
- package/dist/tools/definitions/routing-condition-projection.js +97 -0
- package/dist/tools/definitions/routing-condition-projection.js.map +1 -0
- package/dist/tools/definitions/schedule-selection-hints.d.ts +3 -0
- package/dist/tools/definitions/schedule-selection-hints.js +42 -0
- package/dist/tools/definitions/schedule-selection-hints.js.map +1 -0
- package/dist/tools/definitions/{scheduled-tasks.d.ts → scheduled-task-alias.d.ts} +12 -10
- package/dist/tools/definitions/scheduled-task-alias.js +207 -0
- package/dist/tools/definitions/scheduled-task-alias.js.map +1 -0
- package/dist/tools/definitions/session.js +3 -3
- package/dist/tools/definitions/session.js.map +1 -1
- package/dist/tools/definitions/setup-init-operation.schema.d.ts +2 -0
- package/dist/tools/definitions/setup-init-operation.schema.js +6 -0
- package/dist/tools/definitions/setup-init-operation.schema.js.map +1 -0
- package/dist/tools/definitions/shared-input.helpers.d.ts +51 -0
- package/dist/tools/definitions/shared-input.helpers.js +323 -0
- package/dist/tools/definitions/shared-input.helpers.js.map +1 -0
- package/dist/tools/definitions/shared.d.ts +414 -284
- package/dist/tools/definitions/shared.js +436 -619
- package/dist/tools/definitions/shared.js.map +1 -1
- package/dist/tools/definitions/shipped-output-names.d.ts +19 -0
- package/dist/tools/definitions/shipped-output-names.js +123 -0
- package/dist/tools/definitions/shipped-output-names.js.map +1 -0
- package/dist/tools/definitions/task-state.d.ts +5 -5
- package/dist/tools/definitions/task-state.js +2 -1
- package/dist/tools/definitions/task-state.js.map +1 -1
- package/dist/tools/definitions/telegram-personal-capacity.d.ts +4 -0
- package/dist/tools/definitions/telegram-personal-capacity.js +18 -0
- package/dist/tools/definitions/telegram-personal-capacity.js.map +1 -0
- package/dist/tools/definitions/telegram-pool-policy.d.ts +8 -0
- package/dist/tools/definitions/telegram-pool-policy.js +56 -0
- package/dist/tools/definitions/telegram-pool-policy.js.map +1 -0
- package/dist/tools/definitions/touch-history-alias.d.ts +4 -0
- package/dist/tools/definitions/touch-history-alias.js +99 -0
- package/dist/tools/definitions/touch-history-alias.js.map +1 -0
- package/dist/tools/definitions/trigger-action-item.schema.d.ts +254 -0
- package/dist/tools/definitions/trigger-action-item.schema.js +121 -0
- package/dist/tools/definitions/trigger-action-item.schema.js.map +1 -0
- package/dist/tools/definitions/trigger-argument.schema.d.ts +14 -0
- package/dist/tools/definitions/trigger-argument.schema.js +23 -0
- package/dist/tools/definitions/trigger-argument.schema.js.map +1 -0
- package/dist/tools/definitions/trigger-claim-alias.d.ts +10 -0
- package/dist/tools/definitions/trigger-claim-alias.js +90 -0
- package/dist/tools/definitions/trigger-claim-alias.js.map +1 -0
- package/dist/tools/definitions/trigger-echo-projection.d.ts +1 -0
- package/dist/tools/definitions/trigger-echo-projection.js +41 -0
- package/dist/tools/definitions/trigger-echo-projection.js.map +1 -0
- package/dist/tools/definitions/trigger-upsert.tool.d.ts +29 -0
- package/dist/tools/definitions/trigger-upsert.tool.js +122 -0
- package/dist/tools/definitions/trigger-upsert.tool.js.map +1 -0
- package/dist/tools/definitions/v15-port-descriptions.d.ts +11 -0
- package/dist/tools/definitions/v15-port-descriptions.js +30 -0
- package/dist/tools/definitions/v15-port-descriptions.js.map +1 -0
- package/dist/tools/definitions/variables.d.ts +44 -0
- package/dist/tools/definitions/variables.js +310 -0
- package/dist/tools/definitions/variables.js.map +1 -0
- package/dist/tools/definitions/voice-action-input.d.ts +9 -0
- package/dist/tools/definitions/voice-action-input.js +141 -0
- package/dist/tools/definitions/voice-action-input.js.map +1 -0
- package/dist/tools/definitions/widget-customization-compat.d.ts +51 -0
- package/dist/tools/definitions/widget-customization-compat.js +23 -0
- package/dist/tools/definitions/widget-customization-compat.js.map +1 -0
- package/dist/tools/definitions.d.ts +1105 -621
- package/dist/tools/definitions.js +57 -27
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/description-localization.js +3 -2
- package/dist/tools/description-localization.js.map +1 -1
- package/dist/tools/follow-up-request.d.ts +19 -0
- package/dist/tools/follow-up-request.js +81 -0
- package/dist/tools/follow-up-request.js.map +1 -0
- package/dist/tools/followup-revision.d.ts +4 -0
- package/dist/tools/followup-revision.js +29 -0
- package/dist/tools/followup-revision.js.map +1 -0
- package/dist/tools/incomplete-list.js +4 -0
- package/dist/tools/incomplete-list.js.map +1 -1
- package/dist/tools/inventory.js +47 -11
- package/dist/tools/inventory.js.map +1 -1
- package/dist/tools/operation-recovery.d.ts +4 -0
- package/dist/tools/operation-recovery.js +33 -0
- package/dist/tools/operation-recovery.js.map +1 -0
- package/dist/tools/registry-mapping-primary.cases.d.ts +2 -0
- package/dist/tools/registry-mapping-primary.cases.js +753 -0
- package/dist/tools/registry-mapping-primary.cases.js.map +1 -0
- package/dist/tools/registry-mapping-secondary.cases.d.ts +2 -0
- package/dist/tools/registry-mapping-secondary.cases.js +626 -0
- package/dist/tools/registry-mapping-secondary.cases.js.map +1 -0
- package/dist/tools/registry-mapping.cases.d.ts +8 -0
- package/dist/tools/registry-mapping.cases.js +13 -0
- package/dist/tools/registry-mapping.cases.js.map +1 -0
- package/dist/tools/registry-test-fixtures.d.ts +50 -0
- package/dist/tools/registry-test-fixtures.js +120 -0
- package/dist/tools/registry-test-fixtures.js.map +1 -0
- package/dist/tools/registry.d.ts +2 -0
- package/dist/tools/registry.js +82 -52
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/result.d.ts +1 -0
- package/dist/tools/result.js +90 -22
- package/dist/tools/result.js.map +1 -1
- package/dist/tools/toolsets.d.ts +16 -0
- package/dist/tools/toolsets.js +25 -1
- package/dist/tools/toolsets.js.map +1 -1
- package/dist/types/api-contract.gen.d.ts +105862 -22115
- package/dist/utils/credential-signatures.d.ts +3 -0
- package/dist/utils/credential-signatures.js +10 -0
- package/dist/utils/credential-signatures.js.map +1 -0
- package/dist/utils/data-source-column-name.d.ts +10 -0
- package/dist/utils/data-source-column-name.js +36 -0
- package/dist/utils/data-source-column-name.js.map +1 -0
- package/dist/utils/logger.d.ts +1 -0
- package/dist/utils/logger.js +32 -8
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/secret-read-boundary.d.ts +2 -0
- package/dist/utils/secret-read-boundary.js +88 -0
- package/dist/utils/secret-read-boundary.js.map +1 -0
- package/dist/utils/setup-secrets.d.ts +4 -0
- package/dist/utils/setup-secrets.js +40 -0
- package/dist/utils/setup-secrets.js.map +1 -0
- package/docs/agent-models.md +9 -0
- package/docs/agent-usage-guide.full.ru.md +1 -4
- package/docs/analytics-contract.md +67 -0
- package/docs/async-operation-lifecycle.md +10 -3
- package/docs/connect.ru.md +144 -4
- package/docs/contact-company-profile.md +17 -0
- package/docs/contact-recommendations.md +7 -0
- package/docs/crm-stage-pool.md +73 -0
- package/docs/customer-data.md +61 -0
- package/docs/edit-versions.md +36 -0
- package/docs/failure-semantics.md +17 -9
- package/docs/help-navigation.md +15 -42
- package/docs/host-compatibility-matrix.md +72 -93
- package/docs/host-setup.md +33 -35
- package/docs/invariants/public-api-and-contracts.md +16 -0
- package/docs/legacy-action-settings.md +21 -0
- package/docs/main-transfer-dependencies.md +38 -0
- package/docs/mcp2-parity.md +50 -0
- package/docs/modules/analytics.md +79 -0
- package/docs/modules/besales-mcp.md +137 -0
- package/docs/modules/dialog-review-report.md +38 -0
- package/docs/modules/dialogue-followup-adapters.md +39 -0
- package/docs/modules/message-reactions.md +17 -0
- package/docs/modules/network-mode.md +284 -0
- package/docs/modules/prompt-batch-and-dialogue-controls.md +69 -0
- package/docs/pii-policy.md +21 -16
- package/docs/response-size-budget.md +197 -7
- package/docs/secret-read-boundary.md +102 -0
- package/docs/task-state.md +7 -2
- package/docs/telegram-pool-policy.md +19 -0
- package/docs/tool-effects.md +15 -9
- package/docs/tool-surface.md +205 -4
- package/docs/voice-actions-and-inbox.md +95 -0
- package/docs/wazzup-instagram-comments.md +26 -0
- package/package.json +17 -10
- package/scripts/api-source-loader.spec.mjs +40 -0
- package/scripts/audit-bridge-controls.mjs +129 -0
- package/scripts/audit-revert-mutants.mjs +107 -0
- package/scripts/bridge-api-input.spec.mjs +98 -0
- package/scripts/bridge-controls-mutants.mjs +130 -0
- package/scripts/brx3-shipped-refusals.spec.mjs +149 -0
- package/scripts/brx4-ledger-payload.spec.mjs +127 -0
- package/scripts/build-onprem.mjs +108 -0
- package/scripts/connect-clients.sh +141 -0
- package/scripts/connect-scopes.mjs +166 -0
- package/scripts/connect-scopes.spec.mjs +83 -0
- package/scripts/emit-personal-link-carrier.mjs +31 -0
- package/scripts/emit-setup-init-schemas.mjs +24 -0
- package/scripts/emit-tool-routes.mjs +878 -0
- package/scripts/emit-tool-routes.spec.mjs +300 -0
- package/scripts/followup-registry.spec.mjs +107 -0
- package/scripts/generate-crm-rotation-contract.mjs +98 -0
- package/scripts/generate-followup-session-contract.mjs +16 -0
- package/scripts/icp-import-verification/mutate.cjs +70 -0
- package/scripts/import-secret-read-contract.mjs +53 -0
- package/scripts/install-claude-desktop.js +1 -1
- package/scripts/lag-decisions.mjs +37 -0
- package/scripts/lag-decisions.spec.mjs +87 -0
- package/scripts/lag-open-task-owners.mjs +46 -0
- package/scripts/lag-open-task-owners.spec.mjs +78 -0
- package/scripts/lag-payload.mjs +10 -0
- package/scripts/legacy-action-lag.spec.mjs +22 -0
- package/scripts/legacy-field-refusal.shipped.spec.mjs +99 -0
- package/scripts/mcpcompat-handler.mjs +34 -0
- package/scripts/mcpcompat-loader.mjs +36 -0
- package/scripts/mcpcompat-typescript.mjs +3 -0
- package/scripts/platform-settings-shipped-parity.spec.mjs +89 -0
- package/scripts/prbr-round1-recheck.spec.mjs +605 -0
- package/scripts/prbr-shipped-compatibility.spec.mjs +276 -0
- package/scripts/publish-mcp-registry.mjs +98 -0
- package/scripts/publish-mcp-registry.spec.mjs +68 -0
- package/scripts/record-scheduled-task-call.mjs +26 -0
- package/scripts/refusal-probe.mjs +17 -0
- package/scripts/refusal-probe.spec.mjs +29 -0
- package/scripts/registry-diff.mjs +502 -0
- package/scripts/registry-diff.spec.mjs +787 -0
- package/scripts/request-query.mjs +43 -0
- package/scripts/request-query.spec.mjs +82 -0
- package/scripts/route-lag.mjs +23 -0
- package/scripts/route-lag.spec.mjs +30 -0
- package/scripts/sample-args.mjs +174 -0
- package/scripts/sample-args.spec.mjs +160 -0
- package/scripts/shipped-definitions.mjs +197 -0
- package/scripts/shipped-definitions.spec.mjs +57 -0
- package/scripts/shipped-inputs.spec.mjs +136 -0
- package/scripts/shipped-recordings.spec.mjs +19 -0
- package/scripts/shipped-ref.d.mts +5 -0
- package/scripts/shipped-ref.mjs +20 -0
- package/scripts/shipped-ref.spec.mjs +59 -0
- package/scripts/shipped-registry.mjs +107 -0
- package/scripts/shipped-sample-candidates.mjs +69 -0
- package/scripts/shipped-sample-candidates.spec.mjs +117 -0
- package/scripts/shipped-sample.mjs +868 -0
- package/scripts/shipped-sample.spec.mjs +451 -0
- package/scripts/sync-agent-model-schemas.mjs +72 -0
- package/scripts/sync-api-contracts.mjs +85 -0
- package/scripts/sync-api-contracts.spec.mjs +144 -0
- package/scripts/sync-contract-ledger-schemas.mjs +161 -0
- package/scripts/sync-crm-stage-pool-schema.mjs +85 -0
- package/scripts/sync-prompt-draft-schema.mjs +92 -0
- package/scripts/sync-route-map.mjs +94 -0
- package/scripts/sync-schema-descriptions.mjs +25 -0
- package/scripts/sync-tool-inventory.mjs +27 -0
- package/scripts/sync-trigger-argument-schema.mjs +121 -0
- package/scripts/sync-trigger-repeat-mapping.mjs +12 -0
- package/scripts/sync-voice-actions-contract.mjs +67 -0
- package/scripts/sync-voice-actions-tools.mjs +97 -0
- package/scripts/sync-wave-id-schemas.mjs +55 -0
- package/scripts/tool-input-schemas.mjs +46 -0
- package/scripts/tool-input-schemas.spec.mjs +50 -0
- package/scripts/verify-followup-adapters.mjs +235 -0
- package/scripts/verify-secret-read-import.mjs +84 -0
- package/scripts/verify-secret-read-mutants.mjs +143 -0
- package/dist/tools/definitions/analytics.d.ts +0 -40
- package/dist/tools/definitions/analytics.js +0 -233
- package/dist/tools/definitions/analytics.js.map +0 -1
- package/dist/tools/definitions/broadcast-mailing-variants.d.ts +0 -41
- package/dist/tools/definitions/broadcast-mailing-variants.js +0 -194
- package/dist/tools/definitions/broadcast-mailing-variants.js.map +0 -1
- package/dist/tools/definitions/dialogue-audit.d.ts +0 -38
- package/dist/tools/definitions/dialogue-audit.js +0 -292
- package/dist/tools/definitions/dialogue-audit.js.map +0 -1
- package/dist/tools/definitions/getcourse-wave.js +0 -519
- package/dist/tools/definitions/getcourse-wave.js.map +0 -1
- package/dist/tools/definitions/operational-overview.d.ts +0 -3
- package/dist/tools/definitions/operational-overview.js +0 -23
- package/dist/tools/definitions/operational-overview.js.map +0 -1
- package/dist/tools/definitions/scheduled-tasks.js +0 -173
- package/dist/tools/definitions/scheduled-tasks.js.map +0 -1
- package/dist/tools/definitions/trigger-contact-claims.d.ts +0 -7
- package/dist/tools/definitions/trigger-contact-claims.js +0 -60
- package/dist/tools/definitions/trigger-contact-claims.js.map +0 -1
- package/dist/tools/registry-mapping-cases-core.d.ts +0 -38
- package/dist/tools/registry-mapping-cases-core.js +0 -927
- package/dist/tools/registry-mapping-cases-core.js.map +0 -1
- package/dist/tools/registry-mapping-cases-platform.d.ts +0 -2
- package/dist/tools/registry-mapping-cases-platform.js +0 -1052
- package/dist/tools/registry-mapping-cases-platform.js.map +0 -1
- package/dist/tools/trigger-action-config.d.ts +0 -49
- package/dist/tools/trigger-action-config.js +0 -171
- package/dist/tools/trigger-action-config.js.map +0 -1
- package/docs/evals/model-behavior-scorecard.md +0 -80
- package/docs/operation-coverage.md +0 -114
- package/scripts/mock-credentials.js +0 -77
- package/scripts/model-eval-server.js +0 -213
- package/scripts/run-model-eval.js +0 -447
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
import { safeReviewRun, safeReviewRunPage } from './dialog-review-safe-response.js';
|
|
2
|
+
// Периодический разбор диалогов: настройка на АГЕНТА (не на канал), охват каналов и час запуска.
|
|
3
|
+
//
|
|
4
|
+
// ⚠️ Это НЕ порт отгруженных `besales_scheduled_task_*`: та пара обслуживает менеджера-человека
|
|
5
|
+
// (подсказка по конкретному клиенту, запись в CRM), а здесь инженер промпта получает находки об
|
|
6
|
+
// ошибках агента. Из шестнадцати полей отгруженного обновления сюда переносится одно, поэтому
|
|
7
|
+
// инструменты новые и имена у них v2-канонические.
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { projectReviewFindingsPage } from './dialog-review-findings-response.js';
|
|
10
|
+
import { buildListQuery, compactObject, defineTool, uuidSchema, withInstructions, } from './shared.js';
|
|
11
|
+
const MAX_CHANNELS = 100;
|
|
12
|
+
const MAX_SEGMENTS_MIN = 1;
|
|
13
|
+
const MAX_SEGMENTS_MAX = 2000;
|
|
14
|
+
const HOUR_MIN = 0;
|
|
15
|
+
const HOUR_MAX = 23;
|
|
16
|
+
const MIN_NEW_REPLIES_FLOOR = 1;
|
|
17
|
+
const MIN_NEW_REPLIES_CEILING = 50;
|
|
18
|
+
const COMMENT_MAX_LENGTH = 2000;
|
|
19
|
+
const FINDINGS_LIMIT_MIN = 1;
|
|
20
|
+
const FINDINGS_LIMIT_MAX = 100;
|
|
21
|
+
/**
|
|
22
|
+
* Важность и состояние разметки перечислены, род находки — нет. Причина не в лени: род задаётся
|
|
23
|
+
* перечислением базы и растёт вместе с ней, поэтому копия здесь устаревала бы молча, отвергая
|
|
24
|
+
* значение, которое сервер принимает. Важность и разметка — закрытые наборы из трёх-четырёх
|
|
25
|
+
* значений, у которых своя цена ошибки: опечатка в них дала бы не отказ, а ПУСТОЙ список,
|
|
26
|
+
* неотличимый от «таких находок нет».
|
|
27
|
+
*/
|
|
28
|
+
const FINDING_SEVERITIES = ['LOW', 'MEDIUM', 'HIGH', 'CRITICAL'];
|
|
29
|
+
const FINDING_REVIEW_STATES = ['NOT_REVIEWED', 'GOOD', 'BAD'];
|
|
30
|
+
const configPath = (workspaceId, agentId) => {
|
|
31
|
+
const base = `/workspaces/${workspaceId}/improvement-lab/dialog-review/configs`;
|
|
32
|
+
return agentId === undefined ? base : `${base}/${agentId}`;
|
|
33
|
+
};
|
|
34
|
+
const runsPath = (workspaceId, runId) => {
|
|
35
|
+
const base = `/workspaces/${workspaceId}/improvement-lab/dialog-review/runs`;
|
|
36
|
+
return runId === undefined ? base : `${base}/${runId}`;
|
|
37
|
+
};
|
|
38
|
+
const observationReviewPath = (workspaceId, observationId) => `/workspaces/${workspaceId}/improvement-lab/dialog-review/observations/${observationId}/review`;
|
|
39
|
+
/**
|
|
40
|
+
* Шесть мест, где оператор увидит успех и не получит эффекта. Текст висит на ОБОИХ инструментах:
|
|
41
|
+
* половину из них видно только после чтения настройки, вторую — только после записи, а спрашивает
|
|
42
|
+
* оператор «почему ничего не происходит» одинаково в обоих случаях.
|
|
43
|
+
*/
|
|
44
|
+
const TRAPS = [
|
|
45
|
+
'Час запуска сравнивается ТОЧНО. Планировщик просыпается раз в час и берёт агентов, у которых run_hour_utc совпал с текущим часом UTC. Включили разбор в 09:20 с часом 3 — первый прогон будет через восемнадцать часов, а не «в ближайшие минуты». Нужен прогон сейчас — запускайте вручную.',
|
|
46
|
+
'Час трактуется в UTC, а не в поясе канала и не в московском. «20:00 по Москве» — это run_hour_utc: 17. Перенесённое из старой настройки значение сдвинет запуск на три часа.',
|
|
47
|
+
'Счётчика «один раз в сутки» нет — есть только «один живой прогон на агента». Перевод часа вперёд в тот же день даст ВТОРОЙ прогон за эти сутки, перевод назад — пропуск суток.',
|
|
48
|
+
'Смена охвата на середине прогона не действует: настройка читается один раз, при захвате прогона. Остановить уже идущий разбор можно только его отменой.',
|
|
49
|
+
'Канал в охвате проверяется на принадлежность рабочей области, но НЕ на привязку к агенту. Выбрали каналы, где этот агент не работает, — прогон завершится с нулём разобранных отрезков и без ошибки.',
|
|
50
|
+
'Канал с включённой анонимизацией выпадает из охвата молча — как и канал с нечитаемой настройкой приватности. В настройке он остаётся видимым, но отрезков с него не будет и объяснения не будет тоже.',
|
|
51
|
+
];
|
|
52
|
+
const updateSchema = z
|
|
53
|
+
.object({
|
|
54
|
+
workspace_id: uuidSchema.optional(),
|
|
55
|
+
agent_id: uuidSchema,
|
|
56
|
+
enabled: z.boolean(),
|
|
57
|
+
run_hour_utc: z.number().int().min(HOUR_MIN).max(HOUR_MAX),
|
|
58
|
+
channel_scope: z.enum(['ALL', 'SELECTED']),
|
|
59
|
+
channel_ids: z.array(uuidSchema).max(MAX_CHANNELS).optional(),
|
|
60
|
+
max_segments_per_run: z.number().int().min(MAX_SEGMENTS_MIN).max(MAX_SEGMENTS_MAX).optional(),
|
|
61
|
+
min_new_agent_replies: z
|
|
62
|
+
.number()
|
|
63
|
+
.int()
|
|
64
|
+
.min(MIN_NEW_REPLIES_FLOOR)
|
|
65
|
+
.max(MIN_NEW_REPLIES_CEILING)
|
|
66
|
+
.optional(),
|
|
67
|
+
})
|
|
68
|
+
.strict()
|
|
69
|
+
// Пустой охват — состояние настройки, а не разрешение «все». Сервер отвергает такую запись; мост
|
|
70
|
+
// отвергает её раньше, чтобы отказ назывался словами, а не кодом ответа.
|
|
71
|
+
.refine((input) => !(input.enabled &&
|
|
72
|
+
input.channel_scope === 'SELECTED' &&
|
|
73
|
+
(input.channel_ids ?? []).length === 0), {
|
|
74
|
+
message: 'Разбор нельзя включить с channel_scope=SELECTED и пустым channel_ids: перечислите каналы либо поставьте channel_scope=ALL',
|
|
75
|
+
});
|
|
76
|
+
export const dialogReviewTools = [
|
|
77
|
+
defineTool({
|
|
78
|
+
name: 'besales_dialog_review_get',
|
|
79
|
+
sideEffect: 'none',
|
|
80
|
+
closedWorld: true,
|
|
81
|
+
requiredFields: [],
|
|
82
|
+
defaultWorkspaceId: true,
|
|
83
|
+
schema: z
|
|
84
|
+
.object({
|
|
85
|
+
workspace_id: uuidSchema.optional(),
|
|
86
|
+
agent_id: uuidSchema.optional(),
|
|
87
|
+
})
|
|
88
|
+
.strict(),
|
|
89
|
+
createRequest: (input) => ({
|
|
90
|
+
method: 'GET',
|
|
91
|
+
path: configPath(input.workspace_id, input.agent_id),
|
|
92
|
+
}),
|
|
93
|
+
enhanceResponse: (response) => withInstructions(response, [
|
|
94
|
+
'Единица настройки — АГЕНТ, а не канал: у одного агента одна настройка, каналы задаются её охватом.',
|
|
95
|
+
'Без agent_id отдаётся список настроек рабочей области. Агенты, которым разбор ни разу не настраивали, в списке отсутствуют — это не то же самое, что «разбор выключен».',
|
|
96
|
+
'Рядом с каждой настройкой идёт lastRun — сводка ПОСЛЕДНЕГО прогона: статус, момент постановки, старта и завершения, число кандидатов и находок. null означает, что прогонов не было вовсе.',
|
|
97
|
+
'Состояние прогона читайте по СТАТУСУ, а не по пустоте времён: у поставленного прогона момент постановки уже есть, а начаться он не начинался.',
|
|
98
|
+
'⚠️ candidateSegments = 0 при успешном статусе означает «расписание отработало, но разбирать было нечего» — по одному статусу это не отличить от полезного прогона.',
|
|
99
|
+
...TRAPS,
|
|
100
|
+
]),
|
|
101
|
+
}),
|
|
102
|
+
defineTool({
|
|
103
|
+
name: 'besales_dialog_review_update',
|
|
104
|
+
sideEffect: 'write',
|
|
105
|
+
requiredFields: ['agent_id', 'enabled', 'run_hour_utc', 'channel_scope'],
|
|
106
|
+
defaultWorkspaceId: true,
|
|
107
|
+
schema: updateSchema,
|
|
108
|
+
createRequest: (input) => ({
|
|
109
|
+
method: 'PUT',
|
|
110
|
+
path: configPath(input.workspace_id, input.agent_id),
|
|
111
|
+
body: compactObject({
|
|
112
|
+
enabled: input.enabled,
|
|
113
|
+
runHourUtc: input.run_hour_utc,
|
|
114
|
+
channelScope: input.channel_scope,
|
|
115
|
+
channelIds: input.channel_ids,
|
|
116
|
+
maxSegmentsPerRun: input.max_segments_per_run,
|
|
117
|
+
minNewAgentReplies: input.min_new_agent_replies,
|
|
118
|
+
}),
|
|
119
|
+
}),
|
|
120
|
+
enhanceResponse: (response) => withInstructions(response, [
|
|
121
|
+
'⚠️ Запись — ЗАМЕНА, а не слияние. Непереданный channel_ids ОБНУЛЯЕТ охват каналов. Поэтому час и признак охвата обязательны: сперва прочитайте текущую настройку besales_dialog_review_get, затем шлите её целиком с изменённым полем.',
|
|
122
|
+
'channel_scope=ALL — весь агент; SELECTED — только перечисленные каналы. Включение с SELECTED и пустым списком отвергается: пустой охват означает «ещё ничего не выбрано», а не «все».',
|
|
123
|
+
'max_segments_per_run и min_new_agent_replies — два поля, которые замена НЕ обнуляет: непереданными они оставляют уже сохранённые значения, а у новой настройки берутся значения по умолчанию.',
|
|
124
|
+
'min_new_agent_replies — сколько новых ответов агента должно накопиться, чтобы диалог разобрали ПОВТОРНО (по умолчанию 2, допустимо 1..50). Первый разбор диалога идёт от одного ответа, и порог к нему не применяется. Значение 1 означает «разбирать на каждый новый ответ» — это отдельный оплаченный вызов модели с полной инструкцией агента внутри на каждую реплику.',
|
|
125
|
+
'⚠️ Поле warnings в ответе — это предупреждения к УСПЕШНОЙ записи, а не отказ: настройка сохранена в любом случае. Пустой массив означает «разбирать есть что».',
|
|
126
|
+
'DIALOG_REVIEW_NO_CHANNELS_IN_SCOPE — под охват не попало ни одного канала: в рабочей области их просто нет. Заведите канал, настройку менять не нужно.',
|
|
127
|
+
'DIALOG_REVIEW_PRIVACY_BLOCKS_ALL_CHANNELS — каналы есть, но все они запрещают разбор настройкой приватности (обезличивание включено либо настройка нечитаема). Чинится в настройках канала, а не здесь.',
|
|
128
|
+
'DIALOG_REVIEW_NO_JUDGEABLE_MATERIAL — каналы разрешены, но агент ещё ни разу не отвечал клиенту за последние 30 дней. У нового агента это норма: разбор включён и начнёт работать, как только появятся ответы.',
|
|
129
|
+
'⚠️ DIALOG_REVIEW_MATERIAL_CHECK_UNAVAILABLE — проверить НЕ УДАЛОСЬ (отказ проверки либо превышение её лимита времени). Это НЕ «разбирать нечего»: делать из него вывод об агенте нельзя.',
|
|
130
|
+
...TRAPS,
|
|
131
|
+
]),
|
|
132
|
+
}),
|
|
133
|
+
defineTool({
|
|
134
|
+
name: 'besales_dialog_review_run_start',
|
|
135
|
+
// Имя проверки из имени операции не выводится: суффиксы не парные.
|
|
136
|
+
verifyWithToolName: 'besales_dialog_review_launch_outcome',
|
|
137
|
+
sideEffect: 'spend',
|
|
138
|
+
requiredFields: ['agent_id', 'idempotency_key', 'explicit_confirmation', 'confirmation_reason'],
|
|
139
|
+
defaultWorkspaceId: true,
|
|
140
|
+
schema: z
|
|
141
|
+
.object({
|
|
142
|
+
workspace_id: uuidSchema.optional(),
|
|
143
|
+
agent_id: uuidSchema,
|
|
144
|
+
idempotency_key: uuidSchema,
|
|
145
|
+
period_from: z.string().datetime().optional(),
|
|
146
|
+
period_to: z.string().datetime().optional(),
|
|
147
|
+
/**
|
|
148
|
+
* ⛔ Пробел, вскрытый объявлением переименования: у отгруженного инструмента подтверждение
|
|
149
|
+
* было, у v2 его не стало. Прогон ОПЛАЧИВАЕТСЯ, а с периодом — переплачивается за уже
|
|
150
|
+
* разобранное; хост, одобряющий вызовы автоматически, запускал бы платный перебор истории
|
|
151
|
+
* без единого вопроса. Тот же порог в v2 стоит у соседей того же класса: пакетная правка
|
|
152
|
+
* промптов, переиндексация знаний, векторизация справочника.
|
|
153
|
+
*/
|
|
154
|
+
explicit_confirmation: z.literal(true),
|
|
155
|
+
confirmation_reason: z.string().trim().min(1),
|
|
156
|
+
})
|
|
157
|
+
.strict()
|
|
158
|
+
// Полуоткрытое окно означает неограниченный платный перебор истории, а выглядит безобидным
|
|
159
|
+
// умолчанием. Сервер такое отвергает; мост отвергает раньше, чтобы отказ назывался словами.
|
|
160
|
+
.refine((input) => (input.period_from === undefined) === (input.period_to === undefined), {
|
|
161
|
+
message: 'period_from и period_to задаются ВМЕСТЕ: без них разбирается всё непроверенное, с одной границей запрос отвергается',
|
|
162
|
+
}),
|
|
163
|
+
createRequest: (input) => ({
|
|
164
|
+
method: 'POST',
|
|
165
|
+
path: `${runsPath(input.workspace_id)}/keyed`,
|
|
166
|
+
body: compactObject({
|
|
167
|
+
agentId: input.agent_id,
|
|
168
|
+
idempotencyKey: input.idempotency_key,
|
|
169
|
+
periodFrom: input.period_from,
|
|
170
|
+
periodTo: input.period_to,
|
|
171
|
+
}),
|
|
172
|
+
}),
|
|
173
|
+
enhanceResponse: (response) => withInstructions(response, [
|
|
174
|
+
'Прогон СТАВИТСЯ В ОЧЕРЕДЬ, а не выполняется в этом вызове: ответ отдаёт идентификатор, состояние читается besales_dialog_review_run_get.',
|
|
175
|
+
'Разбор оплачивается. Ключ сохраняется до первого POST; тот же ключ возвращает тот же прогон и после завершения. Другой состав под ключом — 409. Исход потерянного ответа читается besales_dialog_review_launch_outcome.',
|
|
176
|
+
'Ручной запуск доступен при выключенном расписании. Сохрани настройку и непустой охват; настройку запуск не включает.',
|
|
177
|
+
'Без периода разбирается всё непроверенное по отметкам «докуда разобрано» — уже разобранное второй раз не оплачивается.',
|
|
178
|
+
'⚠️ С периодом названное окно перепроверяется ЗАНОВО, даже если оно уже разбиралось: это ОТДЕЛЬНЫЙ оплаченный проход по тем же диалогам. Так проверяют переписку после правки инструкции агента.',
|
|
179
|
+
'Отметки «докуда разобрано» перепроверка не откатывает: они двигаются только вперёд, поэтому следующий плановый прогон не пойдёт по хвосту заново.',
|
|
180
|
+
]),
|
|
181
|
+
}),
|
|
182
|
+
defineTool({
|
|
183
|
+
name: 'besales_dialog_review_run_cancel',
|
|
184
|
+
sideEffect: 'write',
|
|
185
|
+
requiredFields: ['run_id'],
|
|
186
|
+
defaultWorkspaceId: true,
|
|
187
|
+
schema: z
|
|
188
|
+
.object({
|
|
189
|
+
workspace_id: uuidSchema.optional(),
|
|
190
|
+
run_id: uuidSchema,
|
|
191
|
+
})
|
|
192
|
+
.strict(),
|
|
193
|
+
createRequest: (input) => ({
|
|
194
|
+
method: 'POST',
|
|
195
|
+
path: `${runsPath(input.workspace_id, input.run_id)}/cancel`,
|
|
196
|
+
}),
|
|
197
|
+
enhanceResponse: (response) => withInstructions(response, [
|
|
198
|
+
'Остановка освобождает агента НЕМЕДЛЕННО: следующий запуск возможен сразу, ждать окончания текущего отрезка не нужно.',
|
|
199
|
+
'Уже завершённый прогон остановить нельзя — это отказ, а не повторная остановка.',
|
|
200
|
+
'Отрезки, разобранные до остановки, остаются: их находки читаются besales_dialog_review_findings.',
|
|
201
|
+
]),
|
|
202
|
+
}),
|
|
203
|
+
defineTool({
|
|
204
|
+
name: 'besales_dialog_review_runs_list',
|
|
205
|
+
// Постраничная выдача уже работает: конверт подменил бы исправный механизм тихой потерей.
|
|
206
|
+
resultPolicy: { neverTruncate: true },
|
|
207
|
+
sideEffect: 'none',
|
|
208
|
+
closedWorld: true,
|
|
209
|
+
requiredFields: [],
|
|
210
|
+
defaultWorkspaceId: true,
|
|
211
|
+
schema: z
|
|
212
|
+
.object({
|
|
213
|
+
workspace_id: uuidSchema.optional(),
|
|
214
|
+
agent_id: uuidSchema.optional(),
|
|
215
|
+
limit: z.number().int().min(FINDINGS_LIMIT_MIN).max(FINDINGS_LIMIT_MAX).optional(),
|
|
216
|
+
// Курсор — id последнего прогона страницы (форма прежней системы: отгруженный мост принимает только UUID).
|
|
217
|
+
cursor: uuidSchema.optional(),
|
|
218
|
+
})
|
|
219
|
+
.strict(),
|
|
220
|
+
createRequest: (input) => ({
|
|
221
|
+
method: 'GET',
|
|
222
|
+
path: `${runsPath(input.workspace_id)}${buildListQuery({
|
|
223
|
+
agentId: input.agent_id,
|
|
224
|
+
limit: input.limit,
|
|
225
|
+
cursor: input.cursor,
|
|
226
|
+
})}`,
|
|
227
|
+
}),
|
|
228
|
+
enhanceResponse: (response) => withInstructions(safeReviewRunPage(response), [
|
|
229
|
+
'Страница прогонов рабочей области, свежие первыми: список в поле items, указатель следующей — в nextCursor. `nextCursor: null` означает, что дальше ничего нет.',
|
|
230
|
+
'Следующая страница берётся передачей nextCursor обратно в cursor: это id последнего прогона предыдущей страницы. Неизвестный прогон — отказ DIALOG_REVIEW_RUN_CURSOR_UNKNOWN, а не пустая страница.',
|
|
231
|
+
'Прогоны появляются во время листания — их ставит часовой планировщик. Поэтому страницы идут по указателю, а не по номеру: по номеру строка съезжала бы между запросами.',
|
|
232
|
+
'Искать конкретный прогон надёжнее по идентификатору через besales_dialog_review_run_get: у области с несколькими агентами свой прогон вытесняется чужими периодическими.',
|
|
233
|
+
'Счётчики прогона (разобрано, пропущено, найдено) наполняются ПО ХОДУ работы: у живого прогона это промежуточные значения, а не итог.',
|
|
234
|
+
'Причина неуспеха в error_code называет виновника: кончился бюджет рабочей области, сработал наш потолок времени, отказывал провайдер, инструкция агента одна больше бюджета разбора. Это разные поломки с разным лечением.',
|
|
235
|
+
]),
|
|
236
|
+
}),
|
|
237
|
+
defineTool({
|
|
238
|
+
name: 'besales_dialog_review_run_get',
|
|
239
|
+
carriesCustomerData: true,
|
|
240
|
+
sideEffect: 'none',
|
|
241
|
+
closedWorld: true,
|
|
242
|
+
requiredFields: ['run_id'],
|
|
243
|
+
defaultWorkspaceId: true,
|
|
244
|
+
schema: z
|
|
245
|
+
.object({
|
|
246
|
+
workspace_id: uuidSchema.optional(),
|
|
247
|
+
run_id: uuidSchema,
|
|
248
|
+
})
|
|
249
|
+
.strict(),
|
|
250
|
+
createRequest: (input) => ({
|
|
251
|
+
method: 'GET',
|
|
252
|
+
path: runsPath(input.workspace_id, input.run_id),
|
|
253
|
+
}),
|
|
254
|
+
enhanceResponse: (response) => withInstructions(safeReviewRun(response), [
|
|
255
|
+
'Прогон чужой рабочей области и несуществующий дают ОДИН ответ — «не найден». По различию ответов чужие прогоны можно было бы перечислить.',
|
|
256
|
+
'Признак дрейфа промпта троичный: на первом разборе агента прежнего текста не существует, и «не менялся» там означало бы знание, которого нет.',
|
|
257
|
+
'Число находок — счётчик ЗАПИСАННЫХ строк. Находка по контакту, стёртому во время прогона, не создаётся вовсе и в счётчик не попадает.',
|
|
258
|
+
]),
|
|
259
|
+
}),
|
|
260
|
+
defineTool({
|
|
261
|
+
name: 'besales_dialog_review_run_delete',
|
|
262
|
+
sideEffect: 'write',
|
|
263
|
+
requiredFields: ['run_id', 'explicit_confirmation'],
|
|
264
|
+
defaultWorkspaceId: true,
|
|
265
|
+
schema: z
|
|
266
|
+
.object({
|
|
267
|
+
workspace_id: uuidSchema.optional(),
|
|
268
|
+
run_id: uuidSchema,
|
|
269
|
+
explicit_confirmation: z.literal(true),
|
|
270
|
+
confirmation_reason: z.string().optional(),
|
|
271
|
+
})
|
|
272
|
+
.strict(),
|
|
273
|
+
createRequest: (input) => ({
|
|
274
|
+
method: 'DELETE',
|
|
275
|
+
path: runsPath(input.workspace_id, input.run_id),
|
|
276
|
+
}),
|
|
277
|
+
enhanceResponse: (response) => withInstructions(response, [
|
|
278
|
+
'⚠️ Необратимо. Вместе с отчётом навсегда исчезают его находки — И разметка человека («хорошо»/«плохо» с комментарием). Отдельного «удалить отчёт, но сохранить оценки» нет.',
|
|
279
|
+
'⛔ Отметки «докуда разобрано» удаление ПЕРЕЖИВАЮТ: для системы эти диалоги остаются разобранными, и следующая проверка их не вернёт. Удаление отчёта — не способ перепроверить период.',
|
|
280
|
+
'Живой прогон удалить нельзя: сначала остановка besales_dialog_review_run_cancel. Чужой и несуществующий отчёт отвечают одинаково.',
|
|
281
|
+
]),
|
|
282
|
+
}),
|
|
283
|
+
defineTool({
|
|
284
|
+
name: 'besales_dialog_review_findings',
|
|
285
|
+
carriesCustomerData: true,
|
|
286
|
+
// Постраничная выдача уже работает: конверт подменил бы исправный механизм тихой потерей.
|
|
287
|
+
resultPolicy: { neverTruncate: true },
|
|
288
|
+
sideEffect: 'none',
|
|
289
|
+
closedWorld: true,
|
|
290
|
+
requiredFields: ['run_id'],
|
|
291
|
+
defaultWorkspaceId: true,
|
|
292
|
+
schema: z
|
|
293
|
+
.object({
|
|
294
|
+
workspace_id: uuidSchema.optional(),
|
|
295
|
+
run_id: uuidSchema,
|
|
296
|
+
limit: z.number().int().min(FINDINGS_LIMIT_MIN).max(FINDINGS_LIMIT_MAX).optional(),
|
|
297
|
+
/**
|
|
298
|
+
* ⛔ Три отбора — про ДОСТИЖИМОСТЬ, а не про удобство. Выдача обрезана потолком, идёт по
|
|
299
|
+
* времени и курсора не имеет: у прогона с находками сверх потолка хвост недостижим никаким
|
|
300
|
+
* набором аргументов, и критичная находка в этом хвосте просто не показывается. Сервер
|
|
301
|
+
* применяет отбор В ЗАПРОСЕ, до обрезки.
|
|
302
|
+
*
|
|
303
|
+
* Имена — v2-канон, а не отгруженные: у отгруженного это были `category` и `status`
|
|
304
|
+
* (NEW/LIKED/DISLIKED). Обёрток совместимости не строим — переезд объявлен.
|
|
305
|
+
*/
|
|
306
|
+
observation_type: z.string().min(1).optional(),
|
|
307
|
+
severity: z.enum(FINDING_SEVERITIES).optional(),
|
|
308
|
+
review_state: z.enum(FINDING_REVIEW_STATES).optional(),
|
|
309
|
+
})
|
|
310
|
+
.strict(),
|
|
311
|
+
createRequest: (input) => ({
|
|
312
|
+
method: 'GET',
|
|
313
|
+
path: `${runsPath(input.workspace_id, input.run_id)}/findings${buildListQuery({
|
|
314
|
+
limit: input.limit,
|
|
315
|
+
format: 'page',
|
|
316
|
+
observationType: input.observation_type,
|
|
317
|
+
severity: input.severity,
|
|
318
|
+
reviewState: input.review_state,
|
|
319
|
+
})}`,
|
|
320
|
+
}),
|
|
321
|
+
enhanceResponse: (response) => withInstructions(projectReviewFindingsPage(response), [
|
|
322
|
+
'Находки ИМЕННО этого прогона. Общий список наблюдений рабочей области собирает ещё и находки турн-критика — там связь с прогоном разбора не видна.',
|
|
323
|
+
'⚠️ Первыми идут самые тяжёлые находки. truncated=true означает, что показана часть; при limit меньше 100 увеличьте limit, на потолке сузьте отбор. truncated=null у прежнего сервера означает «не измерено».',
|
|
324
|
+
'review_state=NOT_REVIEWED — находки, которых ещё никто не смотрел. Это отдельное состояние, а не отсутствие фильтра: без фильтра приходят все, включая уже размеченные.',
|
|
325
|
+
'observation_type — род находки (например HALLUCINATION, PROMPT_VIOLATION, BROKEN_PROMISE). Неизвестный род сервер отвергает: список родов общий с копилкой наблюдений.',
|
|
326
|
+
'Разметка находки («хорошо»/«плохо» с комментарием) ставится besales_dialog_review_finding_review по идентификатору находки и служит обучающим сигналом.',
|
|
327
|
+
'Пустой список у существующего прогона означает «находок нет», а не «прогон не найден»: у несуществующего и чужого ответ другой — отказ.',
|
|
328
|
+
]),
|
|
329
|
+
}),
|
|
330
|
+
defineTool({
|
|
331
|
+
name: 'besales_dialog_review_finding_review',
|
|
332
|
+
sideEffect: 'write',
|
|
333
|
+
requiredFields: ['observation_id', 'verdict'],
|
|
334
|
+
defaultWorkspaceId: true,
|
|
335
|
+
schema: z
|
|
336
|
+
.object({
|
|
337
|
+
workspace_id: uuidSchema.optional(),
|
|
338
|
+
observation_id: uuidSchema,
|
|
339
|
+
verdict: z.enum(['GOOD', 'BAD']),
|
|
340
|
+
// ⛔ Три состояния, и разница несущая: поле не передано — прежний комментарий остаётся;
|
|
341
|
+
// передан null — стирается; передана строка — записывается.
|
|
342
|
+
comment: z.string().max(COMMENT_MAX_LENGTH).nullable().optional(),
|
|
343
|
+
})
|
|
344
|
+
.strict(),
|
|
345
|
+
createRequest: (input) => ({
|
|
346
|
+
method: 'POST',
|
|
347
|
+
path: observationReviewPath(input.workspace_id, input.observation_id),
|
|
348
|
+
body: compactObject({
|
|
349
|
+
verdict: input.verdict,
|
|
350
|
+
// Явный null обязан дойти до сервера: он означает «сотри», а не «не передавали».
|
|
351
|
+
...(input.comment === undefined ? {} : { comment: input.comment }),
|
|
352
|
+
}),
|
|
353
|
+
}),
|
|
354
|
+
enhanceResponse: (response) => withInstructions(response, [
|
|
355
|
+
'Оценка находки — обучающий сигнал: GOOD означает «разбор прав», BAD — «находка ошибочна, применять её нельзя».',
|
|
356
|
+
'Право на разметку — уровня ПРОСМОТРА агента: её ставят читатели отчёта, а не только тот, кто настраивает агента.',
|
|
357
|
+
'Комментарий трёхзначен: не передан — прежний текст сохраняется; передан null — стирается; передана строка — записывается. Прежде смена вердикта стирала чужой комментарий молча.',
|
|
358
|
+
'Ошибочную оценку снимает besales_dialog_review_finding_review_clear — вердикт не «перезаписывается на пустой», а снимается целиком.',
|
|
359
|
+
]),
|
|
360
|
+
}),
|
|
361
|
+
defineTool({
|
|
362
|
+
name: 'besales_dialog_review_finding_review_clear',
|
|
363
|
+
sideEffect: 'write',
|
|
364
|
+
requiredFields: ['observation_id'],
|
|
365
|
+
defaultWorkspaceId: true,
|
|
366
|
+
schema: z
|
|
367
|
+
.object({
|
|
368
|
+
workspace_id: uuidSchema.optional(),
|
|
369
|
+
observation_id: uuidSchema,
|
|
370
|
+
})
|
|
371
|
+
.strict(),
|
|
372
|
+
createRequest: (input) => ({
|
|
373
|
+
method: 'DELETE',
|
|
374
|
+
path: observationReviewPath(input.workspace_id, input.observation_id),
|
|
375
|
+
}),
|
|
376
|
+
enhanceResponse: (response) => withInstructions(response, [
|
|
377
|
+
'Находка возвращается в состояние «человек её не оценивал»: уходят вердикт, комментарий, автор и время разом.',
|
|
378
|
+
'Комментарий без вердикта не остаётся: такую находку отчёт считал бы неразмеченной, а текст в ней лежал бы без автора.',
|
|
379
|
+
'Сама находка НЕ удаляется — снимается только человеческая оценка. Удаление находок происходит вместе с отчётом (besales_dialog_review_run_delete).',
|
|
380
|
+
]),
|
|
381
|
+
}),
|
|
382
|
+
];
|
|
383
|
+
//# sourceMappingURL=dialog-review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialog-review.js","sourceRoot":"","sources":["../../../src/tools/definitions/dialog-review.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export declare const dialogueAnalysisTools: (import("./shared.js").ToolDefinition<{
|
|
2
|
+
channel_id: string;
|
|
3
|
+
workspace_id?: string | undefined;
|
|
4
|
+
}> | import("./shared.js").ToolDefinition<{
|
|
5
|
+
channel_id: string;
|
|
6
|
+
type: "DIALOGUE_ANALYSIS";
|
|
7
|
+
is_enabled: boolean;
|
|
8
|
+
explicit_confirmation: true;
|
|
9
|
+
workspace_id?: string | undefined;
|
|
10
|
+
daily?: {
|
|
11
|
+
enabled: boolean;
|
|
12
|
+
summary_time?: string | undefined;
|
|
13
|
+
output?: "hidden" | "note" | undefined;
|
|
14
|
+
} | undefined;
|
|
15
|
+
hourly?: {
|
|
16
|
+
enabled: boolean;
|
|
17
|
+
window_start?: string | undefined;
|
|
18
|
+
window_end?: string | undefined;
|
|
19
|
+
min_new_events?: number | undefined;
|
|
20
|
+
output?: "hidden" | "note" | undefined;
|
|
21
|
+
} | undefined;
|
|
22
|
+
pipeline_scope?: {
|
|
23
|
+
mode: "ALL" | "SELECTED";
|
|
24
|
+
pipeline_ids: string[];
|
|
25
|
+
} | undefined;
|
|
26
|
+
manager_scope?: {
|
|
27
|
+
mode: "ALL" | "SELECTED";
|
|
28
|
+
operator_ids: string[];
|
|
29
|
+
} | undefined;
|
|
30
|
+
stage_scope?: {
|
|
31
|
+
mode: "SELECTED";
|
|
32
|
+
stages: {
|
|
33
|
+
pipeline_crm_id: string;
|
|
34
|
+
pipeline_id: string | number;
|
|
35
|
+
status_id: string | number;
|
|
36
|
+
}[];
|
|
37
|
+
} | null | undefined;
|
|
38
|
+
prompts?: {
|
|
39
|
+
daily?: string | null | undefined;
|
|
40
|
+
hourly?: string | null | undefined;
|
|
41
|
+
} | undefined;
|
|
42
|
+
}> | import("./shared.js").ToolDefinition<{
|
|
43
|
+
conversation_id: string;
|
|
44
|
+
workspace_id?: string | undefined;
|
|
45
|
+
since?: string | undefined;
|
|
46
|
+
}>)[];
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { SCHEDULED_MODEL_HINT, ANALYSIS_WINDOW_HINT } from './v15-port-descriptions.js';
|
|
2
|
+
// Плановый разбор переписки клиента. Настройка принадлежит КАНАЛУ, а результат читается по
|
|
3
|
+
// ДИАЛОГУ. Это не ревизор dialog-review: тот ищет ошибки агента для инженера промптов.
|
|
4
|
+
import { CRM_CATALOG_CODE_MAX_LENGTH } from '../../constants/crm-catalog.js';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { buildListQuery, compactObject, defineTool, uuidSchema, withInstructions } from './shared.js';
|
|
7
|
+
const clockSchema = z
|
|
8
|
+
.string()
|
|
9
|
+
.regex(/^([01]\d|2[0-3]):[0-5]\d$/, 'Время в формате HH:mm (локальное время канала)');
|
|
10
|
+
const outputSchema = z.enum(['note', 'hidden']);
|
|
11
|
+
const scopeModeSchema = z.enum(['ALL', 'SELECTED']);
|
|
12
|
+
const externalIdSchema = z.union([z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER), z.string().trim().min(1).max(CRM_CATALOG_CODE_MAX_LENGTH)]);
|
|
13
|
+
const dailySchema = z
|
|
14
|
+
.object({
|
|
15
|
+
enabled: z.boolean(),
|
|
16
|
+
summary_time: clockSchema.optional(),
|
|
17
|
+
output: outputSchema.optional(),
|
|
18
|
+
})
|
|
19
|
+
.strict()
|
|
20
|
+
.refine((value) => !value.enabled || value.summary_time !== undefined, {
|
|
21
|
+
message: 'Для включённого режима «саммари дня» обязателен summary_time',
|
|
22
|
+
});
|
|
23
|
+
const hourlySchema = z
|
|
24
|
+
.object({
|
|
25
|
+
enabled: z.boolean(),
|
|
26
|
+
window_start: clockSchema.optional(),
|
|
27
|
+
window_end: clockSchema.optional(),
|
|
28
|
+
min_new_events: z.number().int().min(1).optional(),
|
|
29
|
+
output: outputSchema.optional(),
|
|
30
|
+
})
|
|
31
|
+
.strict()
|
|
32
|
+
.refine((value) => !value.enabled || (value.window_start !== undefined && value.window_end !== undefined), { message: 'Для включённого режима «статус коммуникации» обязательны window_start и window_end' });
|
|
33
|
+
const pipelineScopeSchema = z
|
|
34
|
+
.object({
|
|
35
|
+
mode: scopeModeSchema,
|
|
36
|
+
pipeline_ids: z.array(uuidSchema),
|
|
37
|
+
})
|
|
38
|
+
.strict();
|
|
39
|
+
const managerScopeSchema = z
|
|
40
|
+
.object({
|
|
41
|
+
mode: scopeModeSchema,
|
|
42
|
+
operator_ids: z.array(uuidSchema),
|
|
43
|
+
})
|
|
44
|
+
.strict();
|
|
45
|
+
const stageSchema = z
|
|
46
|
+
.object({
|
|
47
|
+
pipeline_crm_id: uuidSchema,
|
|
48
|
+
pipeline_id: externalIdSchema,
|
|
49
|
+
status_id: externalIdSchema,
|
|
50
|
+
})
|
|
51
|
+
.strict();
|
|
52
|
+
const stageScopeSchema = z
|
|
53
|
+
.object({
|
|
54
|
+
mode: z.literal('SELECTED'),
|
|
55
|
+
stages: z.array(stageSchema),
|
|
56
|
+
})
|
|
57
|
+
.strict();
|
|
58
|
+
const promptsSchema = z
|
|
59
|
+
.object({
|
|
60
|
+
daily: z.string().min(1).nullable().optional(),
|
|
61
|
+
hourly: z.string().min(1).nullable().optional(),
|
|
62
|
+
})
|
|
63
|
+
.strict();
|
|
64
|
+
const updateSchema = z
|
|
65
|
+
.object({
|
|
66
|
+
workspace_id: uuidSchema.optional(),
|
|
67
|
+
channel_id: uuidSchema,
|
|
68
|
+
type: z.literal('DIALOGUE_ANALYSIS').default('DIALOGUE_ANALYSIS'),
|
|
69
|
+
is_enabled: z.boolean(),
|
|
70
|
+
daily: dailySchema.optional(),
|
|
71
|
+
hourly: hourlySchema.optional(),
|
|
72
|
+
pipeline_scope: pipelineScopeSchema.optional(),
|
|
73
|
+
manager_scope: managerScopeSchema.optional(),
|
|
74
|
+
stage_scope: stageScopeSchema.nullable().optional(),
|
|
75
|
+
prompts: promptsSchema.optional(),
|
|
76
|
+
explicit_confirmation: z.literal(true),
|
|
77
|
+
})
|
|
78
|
+
.strict();
|
|
79
|
+
function buildConfig(input) {
|
|
80
|
+
return compactObject({
|
|
81
|
+
daily: input.daily,
|
|
82
|
+
hourly: input.hourly,
|
|
83
|
+
pipeline_scope: input.pipeline_scope,
|
|
84
|
+
manager_scope: input.manager_scope,
|
|
85
|
+
stage_scope: input.stage_scope,
|
|
86
|
+
prompts: input.prompts,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
export const dialogueAnalysisTools = [
|
|
90
|
+
defineTool({
|
|
91
|
+
name: 'besales_dialogue_analysis_task_list',
|
|
92
|
+
sideEffect: 'none',
|
|
93
|
+
closedWorld: true,
|
|
94
|
+
requiredFields: ['channel_id'],
|
|
95
|
+
defaultWorkspaceId: true,
|
|
96
|
+
schema: z
|
|
97
|
+
.object({
|
|
98
|
+
workspace_id: uuidSchema.optional(),
|
|
99
|
+
channel_id: uuidSchema,
|
|
100
|
+
})
|
|
101
|
+
.strict(),
|
|
102
|
+
createRequest: (input) => ({
|
|
103
|
+
method: 'GET',
|
|
104
|
+
path: `/channels/${input.channel_id}/scheduled-tasks`,
|
|
105
|
+
}),
|
|
106
|
+
enhanceResponse: (response) => withInstructions(response, [
|
|
107
|
+
'Пустой список означает, что плановый разбор на канале ещё не настраивали.',
|
|
108
|
+
'Единственный тип задачи — DIALOGUE_ANALYSIS: саммари дня и почасовой статус коммуникации. Режимы независимы.',
|
|
109
|
+
'isEnabled=false выключает задачу целиком, независимо от enabled внутри daily и hourly.',
|
|
110
|
+
'pipeline_scope и manager_scope используют локальные идентификаторы справочников Besales. Режим ALL задаётся явно; пустой SELECTED — ненастроенный охват, а не «все».',
|
|
111
|
+
'config.prompts хранит ИМЕНА шаблонов реестра промптов, не тексты. Отсутствие имени означает встроенный промпт режима.',
|
|
112
|
+
]),
|
|
113
|
+
}),
|
|
114
|
+
defineTool({
|
|
115
|
+
name: 'besales_dialogue_analysis_task_update',
|
|
116
|
+
sideEffect: 'write',
|
|
117
|
+
requiredFields: ['channel_id', 'is_enabled', 'explicit_confirmation'],
|
|
118
|
+
defaultWorkspaceId: true,
|
|
119
|
+
schema: updateSchema,
|
|
120
|
+
createRequest: (input) => ({
|
|
121
|
+
method: 'PATCH',
|
|
122
|
+
path: `/channels/${input.channel_id}/scheduled-tasks/${input.type}`,
|
|
123
|
+
body: {
|
|
124
|
+
isEnabled: input.is_enabled,
|
|
125
|
+
config: buildConfig(input),
|
|
126
|
+
},
|
|
127
|
+
}),
|
|
128
|
+
enhanceResponse: (response) => withInstructions(response, [
|
|
129
|
+
'⚠️ Задача пишет разбор в CRM клиента по расписанию. Вызывай инструмент только после явного подтверждения оператора и передавай explicit_confirmation=true.',
|
|
130
|
+
'Конфиг МЕРЖИТСЯ на сервере: верхний уровень и поля daily/hourly обновляются частично. Непереданные секции сохраняются.',
|
|
131
|
+
'Включённая задача требует хотя бы один активный режим, полное расписание этого режима и заданный охват. Тип DIALOGUE_ANALYSIS поддержан только каналом Bitrix24 Bot.',
|
|
132
|
+
'Время задаётся в локальной зоне канала. Для hourly требуется window_start < window_end; окно через полночь не поддерживается.',
|
|
133
|
+
'output=note пишет комментарий в таймлайн CRM. output=hidden пишет скрытую подсказку в существующий диалог Bitrix; клиент её не видит.',
|
|
134
|
+
'pipeline_scope.pipeline_ids — локальные crm_pipelines.id, manager_scope.operator_ids — локальные crm_operators.id. Бери их из инструментов каталога CRM.',
|
|
135
|
+
'stage_scope=null означает все стадии выбранных воронок. Пустой список стадий у включённой задачи запрещён; каждая стадия проверяется по локальному каталогу CRM.',
|
|
136
|
+
'prompts.daily и prompts.hourly — ИМЕНА шаблонов реестра промптов. null или строка из пробелов снимает переопределение одного режима; сырой текст промпта сюда не передавай.',
|
|
137
|
+
SCHEDULED_MODEL_HINT,
|
|
138
|
+
ANALYSIS_WINDOW_HINT,
|
|
139
|
+
'Настройка подхватывается следующим пятиминутным тиком планировщика.',
|
|
140
|
+
]),
|
|
141
|
+
}),
|
|
142
|
+
defineTool({
|
|
143
|
+
name: 'besales_dialogue_analysis_notes',
|
|
144
|
+
carriesCustomerData: true,
|
|
145
|
+
sideEffect: 'none',
|
|
146
|
+
closedWorld: true,
|
|
147
|
+
requiredFields: ['conversation_id'],
|
|
148
|
+
defaultWorkspaceId: true,
|
|
149
|
+
schema: z
|
|
150
|
+
.object({
|
|
151
|
+
workspace_id: uuidSchema.optional(),
|
|
152
|
+
conversation_id: uuidSchema,
|
|
153
|
+
since: z.string().datetime().optional(),
|
|
154
|
+
})
|
|
155
|
+
.strict(),
|
|
156
|
+
createRequest: (input) => ({
|
|
157
|
+
method: 'GET',
|
|
158
|
+
path: `/conversations/${input.conversation_id}/dialogue-analysis${buildListQuery({
|
|
159
|
+
since: input.since,
|
|
160
|
+
})}`,
|
|
161
|
+
}),
|
|
162
|
+
enhanceResponse: (response) => withInstructions(response, [
|
|
163
|
+
'Ответ содержит персональные данные клиентов воркспейса: текст разбора может пересказывать реплики и сохранится в транскрипте MCP-хоста.',
|
|
164
|
+
'Без since возвращаются последние разборы, новые первыми. С since возвращается окно от указанного момента, старые первыми.',
|
|
165
|
+
'Разбор не является сообщением переписки: он виден сотрудникам и не отправляется клиенту.',
|
|
166
|
+
'mode различает дневной и почасовой разбор; output показывает выбранный способ записи, а writtenAt — время локальной фиксации результата.',
|
|
167
|
+
]),
|
|
168
|
+
}),
|
|
169
|
+
];
|
|
170
|
+
//# sourceMappingURL=dialogue-analysis.js.map
|