@besales/mcp 0.48.0 → 1.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 -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 +9902 -4734
- 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 -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 +28 -41
- package/dist/tools/definitions/crm-platform.js +235 -368
- 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 -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 +180 -254
- 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 +686 -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 +396 -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 +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 +1089 -636
- 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 +105875 -22205
- 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 -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,502 @@
|
|
|
1
|
+
// Сравнение отгруженного реестра инструментов с реестром ветки v2.
|
|
2
|
+
//
|
|
3
|
+
// Меряются ТРИ разных отказа, и путать их нельзя:
|
|
4
|
+
// состав — инструмента в v2 нет вовсе (после переезда он исчезает у оператора);
|
|
5
|
+
// контракт — поле или значение, которое отгруженный инструмент принимает, а v2-двойник не знает
|
|
6
|
+
// (после переезда функция недостижима; а если адрес совпал — отгруженный клиент уже
|
|
7
|
+
// сегодня получает 400, потому что приёмная сторона отвергает незнакомое поле целиком);
|
|
8
|
+
// схема↔zod — поле объявлено в JSON-реестре, но фактический фильтр аргументов (zod) его не знает,
|
|
9
|
+
// то есть инструмент молча срезает значение вместо отказа.
|
|
10
|
+
//
|
|
11
|
+
// Обе сравниваемые стороны первых двух проверок — реестры одного вида (рукописный JSON), поэтому
|
|
12
|
+
// сравнение по ограничениям здесь не даёт шума: замер на 154 общих инструментах дал 18 расхождений
|
|
13
|
+
// на все измерения вместе.
|
|
14
|
+
|
|
15
|
+
const MAX_DEPTH = 8;
|
|
16
|
+
const MAX_REF_HOPS = 8;
|
|
17
|
+
|
|
18
|
+
function siblingsOf(node) {
|
|
19
|
+
const { $ref: _ignored, ...siblings } = node;
|
|
20
|
+
return siblings;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Разрешает локальную ссылку `$ref` в тело определения из `$defs`.
|
|
25
|
+
*
|
|
26
|
+
* ⛔ Fail-closed. Неразрешимая ссылка РОНЯЕТ сверку, а не «остаётся как есть»: узел с одним лишь
|
|
27
|
+
* `$ref` не имеет ни `enum`, ни `type`, ни `properties` — то есть для обхода он неотличим от
|
|
28
|
+
* схемы БЕЗ ограничений. Именно так и выглядела слепота, ради которой пишется эта функция: пока
|
|
29
|
+
* ссылки не разворачивались, любое расхождение внутри общего определения проходило зелёным.
|
|
30
|
+
* Оставить битую ссылку молча значило бы сохранить ту же дыру под другим именем.
|
|
31
|
+
*
|
|
32
|
+
* Соседние ключи узла-ссылки побеждают тело определения: `{"$ref": …, "description": …}` не
|
|
33
|
+
* должен терять собственное описание.
|
|
34
|
+
*/
|
|
35
|
+
export function resolveSchemaRef(node, root, context) {
|
|
36
|
+
let current = node;
|
|
37
|
+
for (let hop = 0; hop <= MAX_REF_HOPS; hop += 1) {
|
|
38
|
+
if (current === null || typeof current !== 'object' || typeof current.$ref !== 'string') {
|
|
39
|
+
return current;
|
|
40
|
+
}
|
|
41
|
+
const pointer = current.$ref;
|
|
42
|
+
if (pointer === '#') {
|
|
43
|
+
// Указатель на корень схемы — законный локальный случай, а не внешний документ. Проверка
|
|
44
|
+
// объектности та же, что у прочих целей: нечестный корень дал бы пустой узел, то есть
|
|
45
|
+
// «ограничений нет».
|
|
46
|
+
if (root === null || typeof root !== 'object' || Array.isArray(root)) {
|
|
47
|
+
throw new Error(`${context}: указатель # ведёт не на объект-схему`);
|
|
48
|
+
}
|
|
49
|
+
current = { ...root, ...siblingsOf(current) };
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (!pointer.startsWith('#/')) {
|
|
53
|
+
throw new Error(
|
|
54
|
+
`${context}: внешняя ссылка ${pointer} — её документ сверке недоступен, ограничения внутри неё проверить нечем`,
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
let target = root;
|
|
58
|
+
for (const rawSegment of pointer.slice(2).split('/')) {
|
|
59
|
+
const segment = rawSegment.replace(/~1/gu, '/').replace(/~0/gu, '~');
|
|
60
|
+
target = target === null || typeof target !== 'object' ? undefined : target[segment];
|
|
61
|
+
}
|
|
62
|
+
if (target === undefined) {
|
|
63
|
+
throw new Error(`${context}: указатель ${pointer} никуда не ведёт`);
|
|
64
|
+
}
|
|
65
|
+
// ⛔ Цель обязана быть ОБЪЕКТОМ-схемой. `false` в JSON Schema означает «не принимать ничего»,
|
|
66
|
+
// `true` — «принимать всё», массив и скаляр схемой не являются вовсе; спред любого из них дал
|
|
67
|
+
// бы пустой узел, то есть «ограничений нет» — тот самый fail-open, ради устранения которого
|
|
68
|
+
// разыменование и написано.
|
|
69
|
+
if (target === null || typeof target !== 'object' || Array.isArray(target)) {
|
|
70
|
+
throw new Error(
|
|
71
|
+
`${context}: указатель ${pointer} ведёт не на объект-схему (${JSON.stringify(target)})`,
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
current = { ...target, ...siblingsOf(current) };
|
|
75
|
+
}
|
|
76
|
+
throw new Error(`${context}: цепочка ссылок длиннее ${MAX_REF_HOPS} переходов — вероятен цикл`);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Ограничения одного узла схемы, которые имеет смысл сравнивать между двумя реестрами.
|
|
81
|
+
*
|
|
82
|
+
* `const` и одноэлементный `enum` — одно и то же множество допустимых значений, записанное разными
|
|
83
|
+
* генераторами схем. Не сведи их к общему виду — и подтверждение платного запуска (`literal(true)`
|
|
84
|
+
* против `enum:[true]`) числилось бы расхождением, которого нет.
|
|
85
|
+
*/
|
|
86
|
+
function constraintsOf(node, required) {
|
|
87
|
+
const values = Array.isArray(node.enum)
|
|
88
|
+
? node.enum
|
|
89
|
+
: node.const !== undefined
|
|
90
|
+
? [node.const]
|
|
91
|
+
: undefined;
|
|
92
|
+
return {
|
|
93
|
+
type: node.type,
|
|
94
|
+
enum: values === undefined ? undefined : [...values].map(String).sort().join('|'),
|
|
95
|
+
minimum: node.minimum,
|
|
96
|
+
maximum: node.maximum,
|
|
97
|
+
minLength: node.minLength,
|
|
98
|
+
maxLength: node.maxLength,
|
|
99
|
+
minItems: node.minItems,
|
|
100
|
+
maxItems: node.maxItems,
|
|
101
|
+
pattern: node.pattern,
|
|
102
|
+
format: node.format,
|
|
103
|
+
required,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** Ограничения веток `anyOf`/`oneOf` свойства — невидимым ключом: в сравнение и сериализацию сам узел не меняет. */
|
|
108
|
+
const ALTERNATIVES = Symbol('alternatives');
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Ограничения узла вместе с его ветками `anyOf`/`oneOf`.
|
|
112
|
+
*
|
|
113
|
+
* ⛔ У свойства-объединения («дата ИЛИ момент») собственных `format`/`type` бывает не видно: без веток сверка читала
|
|
114
|
+
* бы его как «формат не объявлен» и заводила строку отставания там, где отгруженная форма по-прежнему принимается.
|
|
115
|
+
* Ветка наследует ограничения узла, которых сама не задаёт.
|
|
116
|
+
*/
|
|
117
|
+
function constraintsWithAlternatives(node, required, root, context) {
|
|
118
|
+
const own = constraintsOf(node, required);
|
|
119
|
+
const branches = [
|
|
120
|
+
...(Array.isArray(node.anyOf) ? node.anyOf : []),
|
|
121
|
+
...(Array.isArray(node.oneOf) ? node.oneOf : []),
|
|
122
|
+
];
|
|
123
|
+
if (branches.length === 0) return own;
|
|
124
|
+
own[ALTERNATIVES] = branches.map((branch) => {
|
|
125
|
+
const constraints = constraintsOf(resolveSchemaRef(branch, root, context), required);
|
|
126
|
+
return Object.fromEntries(
|
|
127
|
+
Object.entries(own).map(([key, value]) => [
|
|
128
|
+
key,
|
|
129
|
+
constraints[key] === undefined ? value : constraints[key],
|
|
130
|
+
]),
|
|
131
|
+
);
|
|
132
|
+
});
|
|
133
|
+
return own;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Пути свойств JSON-схемы с их ограничениями: `a`, `a.b`, `a[].c`.
|
|
138
|
+
* Ветки `oneOf`/`anyOf`/`allOf` разворачиваются в объединение — инструмент принимает любую из них.
|
|
139
|
+
*/
|
|
140
|
+
export function schemaConstraints(
|
|
141
|
+
node,
|
|
142
|
+
prefix = '',
|
|
143
|
+
out = new Map(),
|
|
144
|
+
depth = 0,
|
|
145
|
+
root = node,
|
|
146
|
+
context = 'схема',
|
|
147
|
+
) {
|
|
148
|
+
if (node === null || typeof node !== 'object' || depth > MAX_DEPTH) return out;
|
|
149
|
+
node = resolveSchemaRef(node, root, context);
|
|
150
|
+
if (node === null || typeof node !== 'object') return out;
|
|
151
|
+
for (const key of ['oneOf', 'anyOf', 'allOf']) {
|
|
152
|
+
if (Array.isArray(node[key])) {
|
|
153
|
+
for (const branch of node[key])
|
|
154
|
+
schemaConstraints(branch, prefix, out, depth + 1, root, context);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (node.properties !== undefined && node.properties !== null) {
|
|
158
|
+
const required = new Set(Array.isArray(node.required) ? node.required : []);
|
|
159
|
+
for (const [name, child] of Object.entries(node.properties)) {
|
|
160
|
+
const path = prefix === '' ? name : `${prefix}.${name}`;
|
|
161
|
+
if (!out.has(path)) {
|
|
162
|
+
out.set(
|
|
163
|
+
path,
|
|
164
|
+
constraintsWithAlternatives(
|
|
165
|
+
resolveSchemaRef(child, root, context),
|
|
166
|
+
required.has(name),
|
|
167
|
+
root,
|
|
168
|
+
context,
|
|
169
|
+
),
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
schemaConstraints(child, path, out, depth + 1, root, context);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (node.items !== undefined && node.items !== null) {
|
|
176
|
+
// Ограничения САМОГО элемента массива (тип, перечисление, формат) обязаны попасть в сравнение:
|
|
177
|
+
// сужение `items.enum` при одинаковом объявлении родителя не меняет ни одного пути свойств, но
|
|
178
|
+
// отвергает вызов отгруженного клиента.
|
|
179
|
+
if (!out.has(`${prefix}[]`)) {
|
|
180
|
+
out.set(
|
|
181
|
+
`${prefix}[]`,
|
|
182
|
+
constraintsWithAlternatives(
|
|
183
|
+
resolveSchemaRef(node.items, root, context),
|
|
184
|
+
false,
|
|
185
|
+
root,
|
|
186
|
+
context,
|
|
187
|
+
),
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
schemaConstraints(node.items, `${prefix}[]`, out, depth + 1, root, context);
|
|
191
|
+
}
|
|
192
|
+
return out;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Сохраняется ли путь в ВЫХОДНОЙ схеме фильтра. Входная схема Zod разрешает лишние поля даже
|
|
197
|
+
* у объекта, который срезает их при разборе; выходная различает strip и passthrough.
|
|
198
|
+
* Именованный дочерний объект проверяется сам: passthrough родителя не защищает его поля.
|
|
199
|
+
*/
|
|
200
|
+
export function schemaRetainsPath(node, path, root = node, depth = 0) {
|
|
201
|
+
// Полностью пройденный путь не требует ещё одного спуска (nullable добавляет ветку схемы).
|
|
202
|
+
if (depth > MAX_DEPTH && path !== '')
|
|
203
|
+
throw new Error(`Путь фильтра глубже ${MAX_DEPTH} уровней: ${path}`);
|
|
204
|
+
if (node === true) return true;
|
|
205
|
+
if (node === false || node === null || typeof node !== 'object') return false;
|
|
206
|
+
node = resolveSchemaRef(node, root, 'выходная схема фильтра');
|
|
207
|
+
if (path === '') return true;
|
|
208
|
+
|
|
209
|
+
for (const key of ['anyOf', 'oneOf', 'allOf']) {
|
|
210
|
+
if (Array.isArray(node[key])) {
|
|
211
|
+
const retained = node[key].map((branch) => schemaRetainsPath(branch, path, root, depth + 1));
|
|
212
|
+
// Пересечение Zod сливает результаты разбора: поле достаточно сохранить в одной части.
|
|
213
|
+
if (retained.some(Boolean)) return true;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
const hasShape =
|
|
218
|
+
node.type !== undefined ||
|
|
219
|
+
node.properties !== undefined ||
|
|
220
|
+
node.items !== undefined ||
|
|
221
|
+
node.additionalProperties !== undefined;
|
|
222
|
+
// Неограниченное значение (z.unknown / passthrough) сохраняет и всё вложенное содержимое.
|
|
223
|
+
if (!hasShape && node.anyOf === undefined && node.oneOf === undefined && node.allOf === undefined)
|
|
224
|
+
return true;
|
|
225
|
+
if (path.startsWith('[]')) {
|
|
226
|
+
return schemaRetainsPath(node.items, path.slice(2).replace(/^\./, ''), root, depth + 1);
|
|
227
|
+
}
|
|
228
|
+
const [name] = path.split(/[.\[]/, 1);
|
|
229
|
+
const rest = path.slice(name.length).replace(/^\./, '');
|
|
230
|
+
if (Object.hasOwn(node.properties ?? {}, name)) {
|
|
231
|
+
return schemaRetainsPath(node.properties[name], rest, root, depth + 1);
|
|
232
|
+
}
|
|
233
|
+
if (node.additionalProperties === true) return true;
|
|
234
|
+
return schemaRetainsPath(node.additionalProperties, rest, root, depth + 1);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/** Независимый обход перечней: ветки объединений не теряются при записи ограничений первого пути. */
|
|
238
|
+
export function enumValuesByPath(schema) {
|
|
239
|
+
const found = new Map();
|
|
240
|
+
const stack = new Set();
|
|
241
|
+
function visit(raw, path) {
|
|
242
|
+
if (raw === null || typeof raw !== 'object' || Array.isArray(raw)) return;
|
|
243
|
+
if (stack.has(raw)) throw new Error(`перечни::${path}: цикл схемы`);
|
|
244
|
+
stack.add(raw);
|
|
245
|
+
try {
|
|
246
|
+
const node = resolveSchemaRef(raw, schema, `перечни::${path}`);
|
|
247
|
+
if (node.type === 'null') return;
|
|
248
|
+
const values = [
|
|
249
|
+
...(Array.isArray(node.enum) ? node.enum : []),
|
|
250
|
+
...(Object.hasOwn(node, 'const') ? [node.const] : []),
|
|
251
|
+
].filter((value) => value !== null);
|
|
252
|
+
if (values.length > 0) {
|
|
253
|
+
const merged = found.get(path) ?? new Map();
|
|
254
|
+
for (const value of values) merged.set(JSON.stringify(value), value);
|
|
255
|
+
found.set(path, merged);
|
|
256
|
+
}
|
|
257
|
+
for (const kind of ['anyOf', 'oneOf', 'allOf']) {
|
|
258
|
+
for (const branch of node[kind] ?? []) visit(branch, path);
|
|
259
|
+
}
|
|
260
|
+
for (const [name, child] of Object.entries(node.properties ?? {}))
|
|
261
|
+
visit(child, path === '' ? name : `${path}.${name}`);
|
|
262
|
+
if (node.items !== undefined) visit(node.items, `${path}[]`);
|
|
263
|
+
for (const item of node.prefixItems ?? []) visit(item, `${path}[]`);
|
|
264
|
+
} finally {
|
|
265
|
+
stack.delete(raw);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
visit(schema, '');
|
|
269
|
+
return new Map(
|
|
270
|
+
[...found].map(([path, values]) => [
|
|
271
|
+
path,
|
|
272
|
+
[...values.entries()].sort(([a], [b]) => a.localeCompare(b)).map(([, value]) => value),
|
|
273
|
+
]),
|
|
274
|
+
);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
function differingKeys(shipped, local) {
|
|
278
|
+
return Object.keys(shipped).filter(
|
|
279
|
+
(key) => JSON.stringify(shipped[key]) !== JSON.stringify(local[key]),
|
|
280
|
+
);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* @returns {{
|
|
285
|
+
* missingTools: string[],
|
|
286
|
+
* contractLag: Array<{ tool: string, path: string, kind: 'MISSING_FIELD' | 'CONSTRAINT', shipped: unknown, v2: unknown }>,
|
|
287
|
+
* v2Only: string[],
|
|
288
|
+
* }}
|
|
289
|
+
*/
|
|
290
|
+
export function diffRegistries(shippedTools, localTools, toolSuccessors = {}) {
|
|
291
|
+
const local = new Map(localTools.map((tool) => [tool.name, tool]));
|
|
292
|
+
const shippedNames = new Set(shippedTools.map((tool) => tool.name));
|
|
293
|
+
const successorTargets = new Set();
|
|
294
|
+
for (const [shippedName, v2Name] of Object.entries(toolSuccessors)) {
|
|
295
|
+
if (!shippedNames.has(shippedName)) {
|
|
296
|
+
throw new Error(
|
|
297
|
+
`Преемник объявлен для отсутствующего отгруженного инструмента: ${shippedName}`,
|
|
298
|
+
);
|
|
299
|
+
}
|
|
300
|
+
if (typeof v2Name !== 'string' || v2Name.length === 0 || v2Name === shippedName) {
|
|
301
|
+
throw new Error(`Некорректный преемник ${shippedName}: ${String(v2Name)}`);
|
|
302
|
+
}
|
|
303
|
+
if (local.has(shippedName)) {
|
|
304
|
+
throw new Error(`Преемник ${shippedName} протух: старое имя уже существует в v2`);
|
|
305
|
+
}
|
|
306
|
+
if (!local.has(v2Name)) {
|
|
307
|
+
throw new Error(
|
|
308
|
+
`Преемник ${shippedName} указывает на отсутствующий v2-инструмент: ${v2Name}`,
|
|
309
|
+
);
|
|
310
|
+
}
|
|
311
|
+
if (shippedNames.has(v2Name) || successorTargets.has(v2Name)) {
|
|
312
|
+
throw new Error(`v2-инструмент ${v2Name} неоднозначно сопоставлен отгруженной поверхности`);
|
|
313
|
+
}
|
|
314
|
+
successorTargets.add(v2Name);
|
|
315
|
+
}
|
|
316
|
+
const missingTools = [];
|
|
317
|
+
const contractLag = [];
|
|
318
|
+
|
|
319
|
+
for (const shipped of shippedTools) {
|
|
320
|
+
const successorName = toolSuccessors[shipped.name];
|
|
321
|
+
const mine = local.get(successorName ?? shipped.name);
|
|
322
|
+
if (mine === undefined) {
|
|
323
|
+
missingTools.push(shipped.name);
|
|
324
|
+
continue;
|
|
325
|
+
}
|
|
326
|
+
// ⛔ Переименование обязано быть видно ДВУМЯ фактами, а не одним. Преемник объясняет, ЧЕМ
|
|
327
|
+
// заменён инструмент, и позволяет сверить схемы пофайлово — но отгруженное ИМЯ при этом
|
|
328
|
+
// исчезает с поверхности, и клиент, зовущий его сегодня, получит «инструмент не найден».
|
|
329
|
+
// Пряча имя из `missingTools`, сторож переставал показывать именно этот, клиентский, разрыв.
|
|
330
|
+
// Тот же приём уже применён к переименованию инструментов ревизора диалогов.
|
|
331
|
+
if (successorName !== undefined) {
|
|
332
|
+
missingTools.push(shipped.name);
|
|
333
|
+
}
|
|
334
|
+
const shippedSchema = shipped.inputSchema ?? {};
|
|
335
|
+
const localSchema = mine.inputSchema ?? {};
|
|
336
|
+
const shippedPaths = schemaConstraints(
|
|
337
|
+
shippedSchema,
|
|
338
|
+
'',
|
|
339
|
+
new Map(),
|
|
340
|
+
0,
|
|
341
|
+
shippedSchema,
|
|
342
|
+
`отгруженный ${shipped.name}`,
|
|
343
|
+
);
|
|
344
|
+
const localPaths = schemaConstraints(
|
|
345
|
+
localSchema,
|
|
346
|
+
'',
|
|
347
|
+
new Map(),
|
|
348
|
+
0,
|
|
349
|
+
localSchema,
|
|
350
|
+
`v2 ${mine.name}`,
|
|
351
|
+
);
|
|
352
|
+
// Walking only shipped paths misses a new mandatory root argument entirely.
|
|
353
|
+
// Optional extensions remain harmless; a required addition breaks the old call.
|
|
354
|
+
const localRoot = resolveSchemaRef(localSchema, localSchema, `v2 ${mine.name}`);
|
|
355
|
+
for (const path of localRoot.required ?? []) {
|
|
356
|
+
if (!shippedPaths.has(path) && localPaths.has(path)) {
|
|
357
|
+
contractLag.push({
|
|
358
|
+
tool: shipped.name,
|
|
359
|
+
path: `${path}#required`,
|
|
360
|
+
kind: 'CONSTRAINT',
|
|
361
|
+
shipped: false,
|
|
362
|
+
v2: true,
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
for (const [path, constraints] of shippedPaths) {
|
|
367
|
+
const mineConstraints = localPaths.get(path);
|
|
368
|
+
if (mineConstraints === undefined) {
|
|
369
|
+
contractLag.push({
|
|
370
|
+
tool: shipped.name,
|
|
371
|
+
path,
|
|
372
|
+
kind: 'MISSING_FIELD',
|
|
373
|
+
shipped: constraints.type ?? 'any',
|
|
374
|
+
v2: null,
|
|
375
|
+
});
|
|
376
|
+
continue;
|
|
377
|
+
}
|
|
378
|
+
// Отгруженная форма, которую держит хотя бы одна ветка объединения v2, по-прежнему принимается.
|
|
379
|
+
const candidates = [mineConstraints, ...(mineConstraints[ALTERNATIVES] ?? [])];
|
|
380
|
+
if (candidates.some((candidate) => differingKeys(constraints, candidate).length === 0))
|
|
381
|
+
continue;
|
|
382
|
+
for (const key of differingKeys(constraints, mineConstraints)) {
|
|
383
|
+
contractLag.push({
|
|
384
|
+
tool: shipped.name,
|
|
385
|
+
path: `${path}#${key}`,
|
|
386
|
+
kind: 'CONSTRAINT',
|
|
387
|
+
shipped: constraints[key] ?? null,
|
|
388
|
+
v2: mineConstraints[key] ?? null,
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
return {
|
|
395
|
+
missingTools: missingTools.sort(),
|
|
396
|
+
contractLag: contractLag.sort((a, b) =>
|
|
397
|
+
a.tool === b.tool ? a.path.localeCompare(b.path) : a.tool.localeCompare(b.tool),
|
|
398
|
+
),
|
|
399
|
+
v2Only: localTools
|
|
400
|
+
.map((tool) => tool.name)
|
|
401
|
+
.filter((name) => !shippedNames.has(name) && !successorTargets.has(name))
|
|
402
|
+
.sort(),
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* Ключ строки реестра отставания: расхождение адресуется парой, а не одним именем инструмента.
|
|
408
|
+
*
|
|
409
|
+
* В ключ входят и САМИ значения: иначе строка, объявленная для предела «4000 против 2000», молча
|
|
410
|
+
* накрыла бы будущее «6000 против 1000» — путь тот же, решение другое, а ратификации никакой.
|
|
411
|
+
*/
|
|
412
|
+
export function lagKey(entry) {
|
|
413
|
+
return `${entry.tool}::${entry.path}::${JSON.stringify(entry.shipped)}→${JSON.stringify(entry.v2)}`;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* Сверка найденного отставания с объявленным реестром — в ОБЕ стороны.
|
|
418
|
+
* Незаявленное отставание означает новую дыру; заявленное, но исчезнувшее — протухшую строку,
|
|
419
|
+
* которая иначе стала бы способом молча пропустить будущее расхождение под тем же именем.
|
|
420
|
+
*/
|
|
421
|
+
export const LAG_SEVERITIES = [
|
|
422
|
+
'LIVE_400',
|
|
423
|
+
'SCHEMA_LOOSER',
|
|
424
|
+
'ROUTE_MOVED',
|
|
425
|
+
'ROUTE_ABSENT',
|
|
426
|
+
'TOOL_ABSENT',
|
|
427
|
+
'DELIBERATE',
|
|
428
|
+
];
|
|
429
|
+
const OWNER_PATTERN = /^TASK-\d+(?:\.\d+)+$/u;
|
|
430
|
+
const DECISION_REF = /decision:\d+(?:\.\d+)+:[^\s;,]+/u;
|
|
431
|
+
|
|
432
|
+
function hasReason(value) {
|
|
433
|
+
return (
|
|
434
|
+
typeof value === 'string' &&
|
|
435
|
+
value.replace(/decision:[^\s;,]+/gu, '').replace(/[;\s]/gu, '') !== ''
|
|
436
|
+
);
|
|
437
|
+
}
|
|
438
|
+
function hasDecision(row) {
|
|
439
|
+
return row?.owner !== 'DELIBERATE' || DECISION_REF.test(row.reason ?? '');
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
export function validLagOwner(owner) {
|
|
443
|
+
return typeof owner === 'string' && (owner === 'DELIBERATE' || OWNER_PATTERN.test(owner));
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
export const LAG_SECTIONS = [
|
|
447
|
+
'missingTools',
|
|
448
|
+
'contractLag',
|
|
449
|
+
'legacyActionLag',
|
|
450
|
+
'routeLag',
|
|
451
|
+
'responseLag',
|
|
452
|
+
'optionalInputExtensions',
|
|
453
|
+
'contractExtensions',
|
|
454
|
+
];
|
|
455
|
+
|
|
456
|
+
/** Осознанное расхождение не имеет задачи, которая когда-нибудь снимет его. */
|
|
457
|
+
export function lagMetadataErrors(registry) {
|
|
458
|
+
return LAG_SECTIONS.flatMap((section) =>
|
|
459
|
+
Object.entries(registry[section] ?? {})
|
|
460
|
+
.filter(
|
|
461
|
+
([, row]) =>
|
|
462
|
+
!hasReason(row?.reason) ||
|
|
463
|
+
!hasDecision(row) ||
|
|
464
|
+
!validLagOwner(row?.owner) ||
|
|
465
|
+
![...LAG_SEVERITIES, 'LIVE_422', 'RESPONSE_ABSENT'].includes(row?.severity) ||
|
|
466
|
+
(row?.owner === 'DELIBERATE') !== (row?.severity === 'DELIBERATE'),
|
|
467
|
+
)
|
|
468
|
+
.map(([key]) => `${section}:${key}`),
|
|
469
|
+
).sort();
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
/** Пустая отписка — не объявление: строка обязана называть причину, владельца и тяжесть из словаря. */
|
|
473
|
+
function incompleteEntries(section) {
|
|
474
|
+
return Object.entries(section ?? {})
|
|
475
|
+
.filter(
|
|
476
|
+
([, value]) =>
|
|
477
|
+
!hasReason(value?.reason) ||
|
|
478
|
+
!hasDecision(value) ||
|
|
479
|
+
!validLagOwner(value?.owner) ||
|
|
480
|
+
!LAG_SEVERITIES.includes(value?.severity) ||
|
|
481
|
+
(value?.owner === 'DELIBERATE') !== (value?.severity === 'DELIBERATE'),
|
|
482
|
+
)
|
|
483
|
+
.map(([key]) => key);
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
export function reconcileWithRegistry(diff, registry) {
|
|
487
|
+
const declaredMissing = new Set(Object.keys(registry.missingTools ?? {}));
|
|
488
|
+
const declaredLag = new Set(Object.keys(registry.contractLag ?? {}));
|
|
489
|
+
const foundMissing = new Set(diff.missingTools);
|
|
490
|
+
const foundLag = new Set(diff.contractLag.map(lagKey));
|
|
491
|
+
|
|
492
|
+
return {
|
|
493
|
+
undeclaredMissing: [...foundMissing].filter((name) => !declaredMissing.has(name)).sort(),
|
|
494
|
+
staleMissing: [...declaredMissing].filter((name) => !foundMissing.has(name)).sort(),
|
|
495
|
+
undeclaredLag: [...foundLag].filter((key) => !declaredLag.has(key)).sort(),
|
|
496
|
+
staleLag: [...declaredLag].filter((key) => !foundLag.has(key)).sort(),
|
|
497
|
+
incomplete: [
|
|
498
|
+
...incompleteEntries(registry.missingTools),
|
|
499
|
+
...incompleteEntries(registry.contractLag),
|
|
500
|
+
].sort(),
|
|
501
|
+
};
|
|
502
|
+
}
|