@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
|
@@ -1,5 +1,67 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
2
|
+
import { knowledgeSpaceSearchFields } from './knowledge-space-search-fields.js';
|
|
3
|
+
/** Номер страницы нельзя молча превратить в первую страницу курсорного списка. */
|
|
4
|
+
const retiredKnowledgePageSchema = z.number().int().min(1).optional().superRefine((value, context) => {
|
|
5
|
+
if (value !== undefined)
|
|
6
|
+
context.addIssue({
|
|
7
|
+
code: 'custom',
|
|
8
|
+
message: 'page упразднён: продолжайте список по cursor из предыдущего ответа; страница не прочитана',
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
import { refineSplitOverride, splitOverrideSchema, toV2Chunking } from './knowledge-chunking.js';
|
|
12
|
+
import { buildKnowledgeSpaceListQuery, compactObject, defineTool, knowledgeTableSourceSchema, knowledgeSpaceIdSchema, uuidSchema, withInstructions, } from './shared.js';
|
|
13
|
+
const QA_SOURCE_NAME_MAX_CODE_POINTS = 80;
|
|
14
|
+
function mapDocumentStatus(status) {
|
|
15
|
+
if (status === undefined)
|
|
16
|
+
return undefined;
|
|
17
|
+
if (status === 'COMPLETED')
|
|
18
|
+
return 'ACTIVE';
|
|
19
|
+
if (status === 'FAILED')
|
|
20
|
+
return 'FAILED';
|
|
21
|
+
if (status === 'LOADED' || status === 'TEXT_EXTRACTED')
|
|
22
|
+
return 'PENDING';
|
|
23
|
+
return 'INDEXING';
|
|
24
|
+
}
|
|
25
|
+
function mapWebsiteStatus(status) {
|
|
26
|
+
if (status === undefined || status === 'PENDING' || status === 'FAILED')
|
|
27
|
+
return status;
|
|
28
|
+
return status === 'COMPLETED' ? 'ACTIVE' : 'INDEXING';
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* limit и cursor передаются серверу; номер page отвергается до запроса с адресом поля.
|
|
32
|
+
* Курсор сохраняет обход при создании и удалении источников между страницами:
|
|
33
|
+
* смещение могло бы пропустить строку или показать её дважды.
|
|
34
|
+
*/
|
|
35
|
+
function buildSourceListQuery(sourceType, filters = {}) {
|
|
36
|
+
const query = new URLSearchParams({ sourceType });
|
|
37
|
+
if (filters.status)
|
|
38
|
+
query.set('status', filters.status);
|
|
39
|
+
if (filters.qaMode)
|
|
40
|
+
query.set('qaMode', filters.qaMode);
|
|
41
|
+
if (filters.isActive !== undefined)
|
|
42
|
+
query.set('isActive', String(filters.isActive));
|
|
43
|
+
if (filters.limit !== undefined)
|
|
44
|
+
query.set('limit', String(filters.limit));
|
|
45
|
+
if (filters.cursor)
|
|
46
|
+
query.set('cursor', filters.cursor);
|
|
47
|
+
return `?${query.toString()}`;
|
|
48
|
+
}
|
|
49
|
+
function deriveQaSourceName(question) {
|
|
50
|
+
const normalized = question.normalize('NFC').trim().replace(/\s+/gu, ' ');
|
|
51
|
+
return [...normalized].slice(0, QA_SOURCE_NAME_MAX_CODE_POINTS).join('');
|
|
52
|
+
}
|
|
53
|
+
function mapQaAnswerChunks(chunks, answer, create) {
|
|
54
|
+
if (chunks) {
|
|
55
|
+
return chunks.map((chunk) => compactObject({
|
|
56
|
+
text: chunk.text,
|
|
57
|
+
storedFileId: chunk.stored_file_id,
|
|
58
|
+
buttons: chunk.buttons,
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
if (answer !== undefined)
|
|
62
|
+
return [{ text: answer }];
|
|
63
|
+
return create ? [{}] : undefined;
|
|
64
|
+
}
|
|
3
65
|
function requireSingleSheetSelector(value, ctx) {
|
|
4
66
|
const count = [value.sheet_title, value.sheet_gid, value.sheet_index].filter((item) => item !== undefined).length;
|
|
5
67
|
if (count !== 1) {
|
|
@@ -66,14 +128,14 @@ export const knowledgeTools = [
|
|
|
66
128
|
}),
|
|
67
129
|
}),
|
|
68
130
|
enhanceResponse: (response) => withInstructions(response, [
|
|
69
|
-
'Это инвентаризация и sample, а не полное чтение.
|
|
131
|
+
'Это инвентаризация и sample, а не полное чтение. truncated/rowsTruncated/columnsTruncated требуют постраничного `besales_workbook_sheet_read` либо явного сообщения о parser cap.',
|
|
70
132
|
'Проверь readError у каждой вкладки: ошибка чтения не означает, что лист пуст.',
|
|
71
|
-
'Пройди по
|
|
133
|
+
'Пройди по содержимому ВСЕХ вкладок — не делай вывод «этого нет в файле», пока не дочитал доступные страницы каждой.',
|
|
72
134
|
'Если контент на языке, отличном от языка диалога с пользователем — ПЕРЕД внедрением (RAG/промпт/ICP) дай пользователю краткое саммари на его языке: что нашёл и что внедряешь; по цифрам/процентам/условиям дождись подтверждения.',
|
|
73
135
|
'Классифицируй каждую вкладку по таксономии из `besales://concepts/workbook-classification`.',
|
|
74
136
|
'Для compact knowledge (≤8k chars) — сделай локальную LLM-выжимку и положи через `besales_agent_facts_set`.',
|
|
75
137
|
'Для bulk knowledge (>8k) — `besales_workbook_to_knowledge_document`.',
|
|
76
|
-
'
|
|
138
|
+
'XLSX с amoCRM-ссылками можно передать в besales_icp_import_dialogues с source.kind=xlsx_upload, storedFileId и crmConnectionId; потребуются request_key и явное gdpr_confirmed=true.',
|
|
77
139
|
'Если Google Sheets 403 (`google_sheets_not_shared`) — покажи юзеру `serviceAccountEmail` из response и попроси расшарить таблицу.',
|
|
78
140
|
'После классификации зафиксируй решения через `besales_workbook_classification_update`.',
|
|
79
141
|
]),
|
|
@@ -112,10 +174,9 @@ export const knowledgeTools = [
|
|
|
112
174
|
path: `/workspaces/${input.workspace_id}/workbooks/${input.workbook_id}/sheets/read?${buildWorkbookSheetReadQuery(input)}`,
|
|
113
175
|
}),
|
|
114
176
|
enhanceResponse: (response) => withInstructions(response, [
|
|
115
|
-
'
|
|
116
|
-
'
|
|
117
|
-
'
|
|
118
|
-
'Если sourceTruncated=true, backend знает, что часть источника лежит за parser cap: не называй результат полным и не внедряй его как полный набор.',
|
|
177
|
+
'Для полного 2D-обхода пройди rowOffset до scanUpperBoundRowCount для каждого columnOffset, затем сбрось rowOffset в 0 и перейди к следующему nextColumnOffset.',
|
|
178
|
+
'Пустая страница не доказывает конец данных: offsets продвигаются до явных scanUpperBound.',
|
|
179
|
+
'Если sourceTruncated=true, часть источника лежит за parser cap: не называй результат полным и не внедряй его как полный набор.',
|
|
119
180
|
'Повтори страницу перед внедрением и сравни pageFingerprint, если источник мог измениться во время чтения.',
|
|
120
181
|
]),
|
|
121
182
|
}),
|
|
@@ -149,13 +210,13 @@ export const knowledgeTools = [
|
|
|
149
210
|
path: `/workspaces/${input.workspace_id}/workbooks/${input.workbook_id}/archive`,
|
|
150
211
|
}),
|
|
151
212
|
enhanceResponse: (response) => withInstructions(response, [
|
|
152
|
-
'SourceWorkbook архивирован; созданные
|
|
213
|
+
'SourceWorkbook архивирован; созданные knowledge documents не удалены.',
|
|
153
214
|
'Для проверки перечитай книгу через `besales_workbook_get` и проверь archivedAt.',
|
|
154
215
|
]),
|
|
155
216
|
}),
|
|
156
217
|
defineTool({
|
|
157
218
|
name: 'besales_workbook_extract_amocrm_leads',
|
|
158
|
-
sideEffect: '
|
|
219
|
+
sideEffect: 'none',
|
|
159
220
|
requiredFields: ['workbook_id'],
|
|
160
221
|
defaultWorkspaceId: true,
|
|
161
222
|
schema: z
|
|
@@ -179,7 +240,7 @@ export const knowledgeTools = [
|
|
|
179
240
|
}),
|
|
180
241
|
enhanceResponse: (response) => withInstructions(response, [
|
|
181
242
|
'Возвращены все amoCRM lead-ID из ВСЕЙ вкладки (без sample-лимита inspect).',
|
|
182
|
-
'
|
|
243
|
+
'lead-ID можно передать в besales_icp_import_dialogues с source.kind=amocrm_calls, crmConnectionId и leadIds; потребуются request_key и явное gdpr_confirmed=true.',
|
|
183
244
|
'Если truncated=true — вкладка длиннее 10000 строк (hard cap); часть строк не прочитана.',
|
|
184
245
|
]),
|
|
185
246
|
}),
|
|
@@ -195,42 +256,58 @@ export const knowledgeTools = [
|
|
|
195
256
|
sheet_title: z.string().optional(),
|
|
196
257
|
sheet_gid: z.number().int().optional(),
|
|
197
258
|
sheet_index: z.number().int().min(0).optional(),
|
|
259
|
+
/**
|
|
260
|
+
* Два способа адресовать одно и то же пространство знаний, и это НЕ дублирование:
|
|
261
|
+
* отгруженный клиент называет пространство ИМЕНЕМ (`namespace`), а в v2 пространство —
|
|
262
|
+
* сущность с идентификатором. Прежняя редакция ветки оставляла только идентификатор, и
|
|
263
|
+
* отгруженный вызов с именем ронялся сервером на неизвестном поле. Разрешение имени
|
|
264
|
+
* делает СЕРВЕР — одной операцией, точным совпадением; поиск на стороне моста означал бы
|
|
265
|
+
* второй запрос и гонку между чтением списка и записью документа.
|
|
266
|
+
*/
|
|
267
|
+
knowledge_space_id: knowledgeSpaceIdSchema.optional(),
|
|
198
268
|
namespace: z.string().optional(),
|
|
199
|
-
split_override:
|
|
200
|
-
.object({
|
|
201
|
-
split_mode: z.enum(['size', 'separator']),
|
|
202
|
-
separator: z.string().optional(),
|
|
203
|
-
chunk_size: z.number().int().min(100).optional(),
|
|
204
|
-
chunk_overlap: z.number().int().min(0).optional(),
|
|
205
|
-
max_chunk_size: z.number().int().min(100).optional(),
|
|
206
|
-
})
|
|
207
|
-
.optional(),
|
|
269
|
+
split_override: splitOverrideSchema.optional(),
|
|
208
270
|
replace_existing: z.boolean().optional(),
|
|
271
|
+
target_knowledge_source_id: uuidSchema.optional(),
|
|
209
272
|
})
|
|
210
|
-
.superRefine(
|
|
273
|
+
.superRefine((value, ctx) => {
|
|
274
|
+
requireSingleSheetSelector(value, ctx);
|
|
275
|
+
refineSplitOverride(value.split_override, ctx);
|
|
276
|
+
// Оба поля можно опустить: сервер разрешит имя general тем же правилом, что явное имя.
|
|
277
|
+
// Одновременная адресация двумя способами остаётся ошибкой до сетевого запроса.
|
|
278
|
+
const byId = value.knowledge_space_id !== undefined;
|
|
279
|
+
const byName = value.namespace !== undefined;
|
|
280
|
+
if (byId && byName) {
|
|
281
|
+
ctx.addIssue({
|
|
282
|
+
code: z.ZodIssueCode.custom,
|
|
283
|
+
message: 'knowledge_space_id и namespace взаимоисключающи: назови пространство одним способом',
|
|
284
|
+
path: ['knowledge_space_id'],
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
}),
|
|
211
288
|
createRequest: (input) => ({
|
|
212
289
|
path: `/workspaces/${input.workspace_id}/workbooks/${input.workbook_id}/knowledge-document`,
|
|
213
290
|
body: compactObject({
|
|
214
291
|
sheetTitle: input.sheet_title,
|
|
215
292
|
sheetGid: input.sheet_gid,
|
|
216
293
|
sheetIndex: input.sheet_index,
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
splitMode: input.split_override.split_mode,
|
|
221
|
-
separator: input.split_override.separator,
|
|
222
|
-
chunkSize: input.split_override.chunk_size,
|
|
223
|
-
chunkOverlap: input.split_override.chunk_overlap,
|
|
224
|
-
maxChunkSize: input.split_override.max_chunk_size,
|
|
225
|
-
})
|
|
226
|
-
: undefined,
|
|
294
|
+
knowledgeSpaceId: input.knowledge_space_id,
|
|
295
|
+
knowledgeSpaceName: input.namespace,
|
|
296
|
+
chunking: input.split_override ? toV2Chunking(input.split_override) : undefined,
|
|
227
297
|
replaceExisting: input.replace_existing,
|
|
298
|
+
targetKnowledgeSourceId: input.target_knowledge_source_id,
|
|
228
299
|
}),
|
|
229
300
|
}),
|
|
230
301
|
enhanceResponse: (response) => withInstructions(response, [
|
|
231
|
-
'
|
|
232
|
-
'
|
|
233
|
-
'
|
|
302
|
+
'outcome=CONTENT_REPLACED означает, что содержимое выбранного документа поставлено на переиндексацию; outcome=CREATED — создан новый документ.',
|
|
303
|
+
'Цель выбирается по порядку: явный target_knowledge_source_id → единственное доказуемое совпадение → новый документ. Признак совпадения зависит от рода книги: у Google это ТОЛЬКО стабильный gid (заголовок вкладки мутабелен и не участвует), у xlsx — книга и заголовок вкладки; Google без gid цель не ищет вовсе.',
|
|
304
|
+
'Несколько совпадений — отказ 409 со списком knowledgeSourceIds, документ НЕ создаётся: удали лишние либо назови нужный в target_knowledge_source_id.',
|
|
305
|
+
'Перезалитый xlsx автоматически не опознаётся как та же книга: для замены передай target_knowledge_source_id явно.',
|
|
306
|
+
'possibleDuplicates — только подсказка и ничего не изменяет. При необходимости повтори вызов с target_knowledge_source_id.',
|
|
307
|
+
'indexingStatus=QUEUED означает асинхронную индексацию: ответ не обещает, что новые чанки уже активны.',
|
|
308
|
+
'splitDecision называет применённые правила разбиения: OVERRIDE — из split_override этого вызова, GLOBAL_DEFAULT — умолчание (памяти прошлых правил у документа нет: замена без split_override возвращает умолчание).',
|
|
309
|
+
'Пространство можно назвать ОДНИМ способом: knowledge_space_id либо namespace (имя). Без обоих полей используется пространство с именем general. Имя сравнивается ТОЧНО — как его уникализирует база; несуществующее имя даёт отказ, пространство по нему не создаётся.',
|
|
310
|
+
'Привяжи knowledge-пространство к агенту, если оно ещё не привязано (см. besales_agent_update).',
|
|
234
311
|
]),
|
|
235
312
|
}),
|
|
236
313
|
// v1.5 — Knowledge Spaces (Increment 1): создание/управление namespaces для агентов
|
|
@@ -245,7 +322,7 @@ export const knowledgeTools = [
|
|
|
245
322
|
name: z.string().min(1).max(100),
|
|
246
323
|
scope_type: z.enum(['WORKSPACE', 'CHANNEL']),
|
|
247
324
|
channel_id: uuidSchema.optional(),
|
|
248
|
-
|
|
325
|
+
...knowledgeSpaceSearchFields,
|
|
249
326
|
})
|
|
250
327
|
.superRefine((value, ctx) => {
|
|
251
328
|
if (value.scope_type === 'CHANNEL' && !value.channel_id) {
|
|
@@ -262,19 +339,22 @@ export const knowledgeTools = [
|
|
|
262
339
|
}
|
|
263
340
|
}),
|
|
264
341
|
createRequest: (input) => ({
|
|
265
|
-
path:
|
|
342
|
+
path: '/knowledge-spaces',
|
|
266
343
|
body: compactObject({
|
|
344
|
+
workspaceId: input.workspace_id,
|
|
267
345
|
name: input.name,
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
346
|
+
scopeType: input.scope_type,
|
|
347
|
+
scopeId: input.channel_id,
|
|
348
|
+
accessMode: input.access_mode,
|
|
349
|
+
purpose: input.purpose,
|
|
350
|
+
searchKeywords: input.search_keywords,
|
|
271
351
|
}),
|
|
272
352
|
}),
|
|
273
353
|
enhanceResponse: (response) => withInstructions(response, [
|
|
274
|
-
'
|
|
275
|
-
'
|
|
276
|
-
'
|
|
277
|
-
'
|
|
354
|
+
'База знаний создана. Её идентификатор нужен для добавления источников.',
|
|
355
|
+
'Общую базу можно подключить к нужным каналам; база отдельного канала доступна только ему.',
|
|
356
|
+
'Добавь документ или проверенную пару вопрос–ответ и дождись индексации.',
|
|
357
|
+
'Назначение помогает агенту выбрать базу по запросу. Слова обязательного поиска добавляют доступную активную базу в автоматический план при совпадении с вопросом.',
|
|
278
358
|
]),
|
|
279
359
|
}),
|
|
280
360
|
defineTool({
|
|
@@ -299,11 +379,11 @@ export const knowledgeTools = [
|
|
|
299
379
|
defaultWorkspaceId: true,
|
|
300
380
|
schema: z.object({
|
|
301
381
|
workspace_id: uuidSchema.optional(),
|
|
302
|
-
knowledge_space_id:
|
|
382
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
303
383
|
}),
|
|
304
384
|
createRequest: (input) => ({
|
|
305
385
|
method: 'GET',
|
|
306
|
-
path: `/
|
|
386
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}`,
|
|
307
387
|
}),
|
|
308
388
|
}),
|
|
309
389
|
defineTool({
|
|
@@ -313,16 +393,18 @@ export const knowledgeTools = [
|
|
|
313
393
|
defaultWorkspaceId: true,
|
|
314
394
|
schema: z.object({
|
|
315
395
|
workspace_id: uuidSchema.optional(),
|
|
316
|
-
knowledge_space_id:
|
|
396
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
317
397
|
name: z.string().min(1).max(100).optional(),
|
|
318
|
-
|
|
398
|
+
...knowledgeSpaceSearchFields,
|
|
319
399
|
}),
|
|
320
400
|
createRequest: (input) => ({
|
|
321
401
|
method: 'PATCH',
|
|
322
|
-
path: `/
|
|
402
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}`,
|
|
323
403
|
body: compactObject({
|
|
324
404
|
name: input.name,
|
|
325
|
-
|
|
405
|
+
accessMode: input.access_mode,
|
|
406
|
+
purpose: input.purpose,
|
|
407
|
+
searchKeywords: input.search_keywords,
|
|
326
408
|
}),
|
|
327
409
|
}),
|
|
328
410
|
}),
|
|
@@ -333,12 +415,13 @@ export const knowledgeTools = [
|
|
|
333
415
|
defaultWorkspaceId: true,
|
|
334
416
|
schema: z.object({
|
|
335
417
|
workspace_id: uuidSchema.optional(),
|
|
336
|
-
knowledge_space_id:
|
|
418
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
337
419
|
channel_id: uuidSchema,
|
|
338
420
|
}),
|
|
339
421
|
createRequest: (input) => ({
|
|
340
|
-
|
|
341
|
-
|
|
422
|
+
method: 'PUT',
|
|
423
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/channel-links/${input.channel_id}`,
|
|
424
|
+
body: {},
|
|
342
425
|
}),
|
|
343
426
|
}),
|
|
344
427
|
defineTool({
|
|
@@ -348,39 +431,32 @@ export const knowledgeTools = [
|
|
|
348
431
|
defaultWorkspaceId: true,
|
|
349
432
|
schema: z.object({
|
|
350
433
|
workspace_id: uuidSchema.optional(),
|
|
351
|
-
knowledge_space_id:
|
|
434
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
352
435
|
channel_id: uuidSchema,
|
|
353
436
|
}),
|
|
354
437
|
createRequest: (input) => ({
|
|
355
438
|
method: 'DELETE',
|
|
356
|
-
path: `/
|
|
439
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/channel-links/${input.channel_id}`,
|
|
357
440
|
}),
|
|
358
441
|
}),
|
|
359
442
|
// v1.5 — Knowledge Documents (Increment 1): загрузка/удаление документов в space
|
|
360
443
|
defineTool({
|
|
361
444
|
name: 'besales_knowledge_document_upload',
|
|
362
|
-
sideEffect: '
|
|
445
|
+
sideEffect: 'spend',
|
|
363
446
|
requiredFields: ['knowledge_space_id', 'source_kind'],
|
|
364
447
|
defaultWorkspaceId: true,
|
|
365
448
|
schema: z
|
|
366
449
|
.object({
|
|
367
450
|
workspace_id: uuidSchema.optional(),
|
|
368
|
-
knowledge_space_id:
|
|
451
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
369
452
|
source_kind: z.enum(['STORED_FILE', 'TEXT']),
|
|
370
453
|
stored_file_id: uuidSchema.optional(),
|
|
371
454
|
content: z.string().optional(),
|
|
372
455
|
filename: z.string().optional(),
|
|
373
|
-
split_override:
|
|
374
|
-
.object({
|
|
375
|
-
split_mode: z.enum(['size', 'separator']),
|
|
376
|
-
separator: z.string().optional(),
|
|
377
|
-
chunk_size: z.number().int().min(100).optional(),
|
|
378
|
-
chunk_overlap: z.number().int().min(0).optional(),
|
|
379
|
-
max_chunk_size: z.number().int().min(100).optional(),
|
|
380
|
-
})
|
|
381
|
-
.optional(),
|
|
456
|
+
split_override: splitOverrideSchema.optional(),
|
|
382
457
|
})
|
|
383
458
|
.superRefine((value, ctx) => {
|
|
459
|
+
refineSplitOverride(value.split_override, ctx);
|
|
384
460
|
if (value.source_kind === 'STORED_FILE' && !value.stored_file_id) {
|
|
385
461
|
ctx.addIssue({
|
|
386
462
|
code: z.ZodIssueCode.custom,
|
|
@@ -393,30 +469,49 @@ export const knowledgeTools = [
|
|
|
393
469
|
message: 'content и filename обязательны для source_kind=TEXT',
|
|
394
470
|
});
|
|
395
471
|
}
|
|
472
|
+
else if (value.source_kind === 'TEXT' && value.content.trim() === '') {
|
|
473
|
+
// Как у прежней системы: пустой текст — отказ, а не документ (и не замена рабочего документа пустотой).
|
|
474
|
+
ctx.addIssue({
|
|
475
|
+
code: z.ZodIssueCode.custom,
|
|
476
|
+
path: ['content'],
|
|
477
|
+
message: 'content не может состоять из одних пробелов',
|
|
478
|
+
});
|
|
479
|
+
}
|
|
396
480
|
}),
|
|
397
|
-
createRequest: (input) =>
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
481
|
+
createRequest: (input) => {
|
|
482
|
+
const chunking = input.split_override ? toV2Chunking(input.split_override) : undefined;
|
|
483
|
+
// Файл библиотеки: сервер копирует тело в собственный файл документа; content и filename не читаются (как у
|
|
484
|
+
// прежней системы — имя документа берётся из имени файла).
|
|
485
|
+
if (input.source_kind === 'STORED_FILE') {
|
|
486
|
+
return {
|
|
487
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/sources/document/from-file`,
|
|
488
|
+
body: compactObject({ storedFileId: input.stored_file_id, chunking }),
|
|
489
|
+
};
|
|
490
|
+
}
|
|
491
|
+
const filename = input.filename ?? 'document.txt';
|
|
492
|
+
const body = new FormData();
|
|
493
|
+
body.append('name', filename);
|
|
494
|
+
// Как у прежней системы: повтор текста с тем же именем даёт документу новое содержимое, а не второй документ.
|
|
495
|
+
// Сервер заменяет текстом только документ, созданный ассистентом (текстом, из файла библиотеки, из вкладки книги):
|
|
496
|
+
// документ с тем же именем, загруженный человеком файлом, — отказ 409.
|
|
497
|
+
body.append('replaceExisting', 'true');
|
|
498
|
+
// ⛔ Правила — ОДНИМ полем JSON: плоское поле формы уходит с заменой перевода строки на «возврат каретки +
|
|
499
|
+
// перевод строки», и разделитель вида «\\n## » пришёл бы на сервер изменённым.
|
|
500
|
+
if (chunking !== undefined)
|
|
501
|
+
body.append('chunking', JSON.stringify(chunking));
|
|
502
|
+
body.append('file', new Blob([input.content ?? ''], { type: 'text/plain;charset=utf-8' }), filename);
|
|
503
|
+
return {
|
|
504
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/sources/document`,
|
|
505
|
+
body,
|
|
506
|
+
};
|
|
507
|
+
},
|
|
415
508
|
enhanceResponse: (response) => withInstructions(response, [
|
|
416
|
-
'
|
|
417
|
-
'
|
|
418
|
-
'
|
|
419
|
-
'
|
|
509
|
+
'outcome=CREATED — документ создан в статусе PENDING; outcome=CONTENT_REPLACED — у текстового документа с тем же именем заменено содержимое (document_replaced прежней системы). Индексация асинхронна.',
|
|
510
|
+
'Создание: опрашивай besales_knowledge_document_get до status=ACTIVE, FAILED либо EMPTY. EMPTY — в файле не нашлось текста (например, скан без текстового слоя): такой документ ничего не отвечает — удали его и загрузи файл с текстом.',
|
|
511
|
+
'Замена: status остаётся ACTIVE и во время переиндексации, и после её провала — по статусу замену не проверить. Новый текст отвечает, когда lastIndexedAt станет позже updatedAt из этого ответа; непустой errorMessage — переиндексация не удалась, отвечает прежний текст. Не сообщай «новый текст в базе знаний», пока lastIndexedAt не обновился.',
|
|
512
|
+
'Текстом заменяется документ, созданный ассистентом: текстом этого инструмента, из файла библиотеки (source_kind=STORED_FILE) или из вкладки книги. Документ с тем же именем, загруженный человеком файлом через интерфейс (в том числе .txt или .md), — отказ 409 KNOWLEDGE_REPLACE_TARGET_UPLOADED; выбери другое имя или удали документ.',
|
|
513
|
+
'Файл из библиотеки: besales_file_upload_request → besales_file_upload_status (READY → stored_file_id) → этот инструмент с source_kind=STORED_FILE. Имя документа — имя файла; документ с таким именем уже есть — отказ 409 «имя занято»: удали его либо загрузи файл под другим именем. В знания идёт только файл библиотеки: присланный человеком в переписке и пришедший из CRM — отказ (знания видят все клиенты).',
|
|
514
|
+
'split_override задаёт правила разбиения этого документа: size — по размеру куска, separator — по разделителю (раздел длиннее max_chunk_size дорезается). Без split_override — правила по умолчанию.',
|
|
420
515
|
]),
|
|
421
516
|
}),
|
|
422
517
|
defineTool({
|
|
@@ -427,8 +522,9 @@ export const knowledgeTools = [
|
|
|
427
522
|
requiredFields: ['knowledge_space_id'],
|
|
428
523
|
defaultWorkspaceId: true,
|
|
429
524
|
schema: z.object({
|
|
525
|
+
page: retiredKnowledgePageSchema,
|
|
430
526
|
workspace_id: uuidSchema.optional(),
|
|
431
|
-
knowledge_space_id:
|
|
527
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
432
528
|
status: z
|
|
433
529
|
.enum([
|
|
434
530
|
'LOADED',
|
|
@@ -441,12 +537,12 @@ export const knowledgeTools = [
|
|
|
441
537
|
'CHUNKS_SAVED',
|
|
442
538
|
])
|
|
443
539
|
.optional(),
|
|
444
|
-
|
|
540
|
+
cursor: z.string().min(1).optional(),
|
|
445
541
|
limit: z.number().int().min(1).max(100).optional(),
|
|
446
542
|
}),
|
|
447
543
|
createRequest: (input) => ({
|
|
448
544
|
method: 'GET',
|
|
449
|
-
path: `/
|
|
545
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/sources${buildSourceListQuery('DOCUMENT', { status: mapDocumentStatus(input.status), limit: input.limit, cursor: input.cursor })}`,
|
|
450
546
|
}),
|
|
451
547
|
}),
|
|
452
548
|
defineTool({
|
|
@@ -456,12 +552,12 @@ export const knowledgeTools = [
|
|
|
456
552
|
defaultWorkspaceId: true,
|
|
457
553
|
schema: z.object({
|
|
458
554
|
workspace_id: uuidSchema.optional(),
|
|
459
|
-
knowledge_space_id:
|
|
555
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
460
556
|
document_id: uuidSchema,
|
|
461
557
|
}),
|
|
462
558
|
createRequest: (input) => ({
|
|
463
559
|
method: 'GET',
|
|
464
|
-
path: `/
|
|
560
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/sources/${input.document_id}`,
|
|
465
561
|
}),
|
|
466
562
|
}),
|
|
467
563
|
defineTool({
|
|
@@ -471,25 +567,24 @@ export const knowledgeTools = [
|
|
|
471
567
|
defaultWorkspaceId: true,
|
|
472
568
|
schema: z.object({
|
|
473
569
|
workspace_id: uuidSchema.optional(),
|
|
474
|
-
knowledge_space_id:
|
|
570
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
475
571
|
document_id: uuidSchema,
|
|
476
572
|
explicit_confirmation: z.literal(true),
|
|
477
573
|
}),
|
|
478
574
|
createRequest: (input) => ({
|
|
479
575
|
method: 'DELETE',
|
|
480
|
-
path: `/
|
|
481
|
-
body: { explicit_confirmation: input.explicit_confirmation },
|
|
576
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/sources/${input.document_id}`,
|
|
482
577
|
}),
|
|
483
578
|
}),
|
|
484
579
|
// ----- v1.5 Increment 2: Q&A CRUD (7 tools) -----
|
|
485
580
|
defineTool({
|
|
486
581
|
name: 'besales_knowledge_qa_create',
|
|
487
|
-
sideEffect: '
|
|
582
|
+
sideEffect: 'spend',
|
|
488
583
|
requiredFields: ['knowledge_space_id', 'question'],
|
|
489
584
|
defaultWorkspaceId: true,
|
|
490
585
|
schema: z.object({
|
|
491
586
|
workspace_id: uuidSchema.optional(),
|
|
492
|
-
knowledge_space_id:
|
|
587
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
493
588
|
question: z.string().min(1),
|
|
494
589
|
answer: z.string().optional(),
|
|
495
590
|
answer_chunks: z
|
|
@@ -509,22 +604,25 @@ export const knowledgeTools = [
|
|
|
509
604
|
is_call_qa_only: z.boolean().optional(),
|
|
510
605
|
}),
|
|
511
606
|
createRequest: (input) => ({
|
|
512
|
-
path: `/
|
|
513
|
-
body:
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
607
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/sources`,
|
|
608
|
+
body: {
|
|
609
|
+
sourceType: 'QA',
|
|
610
|
+
name: deriveQaSourceName(input.question),
|
|
611
|
+
qa: compactObject({
|
|
612
|
+
question: input.question,
|
|
613
|
+
alias: input.alias,
|
|
614
|
+
mode: input.mode ?? 'SIMPLE',
|
|
615
|
+
callOperator: input.call_operator,
|
|
616
|
+
chunkDelaySeconds: input.chunk_delay_seconds,
|
|
617
|
+
isCallQaOnly: input.is_call_qa_only,
|
|
618
|
+
answerChunks: mapQaAnswerChunks(input.answer_chunks, input.answer, true),
|
|
619
|
+
}),
|
|
620
|
+
},
|
|
523
621
|
}),
|
|
524
622
|
enhanceResponse: (response) => withInstructions(response, [
|
|
525
|
-
'
|
|
526
|
-
'mode=SIMPLE
|
|
527
|
-
'is_call_qa_only=true
|
|
623
|
+
'QA source создан в статусе PENDING; индексация выполняется асинхронно.',
|
|
624
|
+
'mode=SIMPLE участвует в обычном retrieval; STRICT/ONCE_STRICT сохраняют специальную QA-семантику.',
|
|
625
|
+
'is_call_qa_only=true исключает source из auto-retrieval.',
|
|
528
626
|
]),
|
|
529
627
|
}),
|
|
530
628
|
defineTool({
|
|
@@ -535,15 +633,16 @@ export const knowledgeTools = [
|
|
|
535
633
|
requiredFields: ['knowledge_space_id'],
|
|
536
634
|
defaultWorkspaceId: true,
|
|
537
635
|
schema: z.object({
|
|
636
|
+
page: retiredKnowledgePageSchema,
|
|
538
637
|
workspace_id: uuidSchema.optional(),
|
|
539
|
-
knowledge_space_id:
|
|
638
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
540
639
|
mode: z.enum(['SIMPLE', 'STRICT', 'ONCE_STRICT']).optional(),
|
|
541
|
-
|
|
640
|
+
cursor: z.string().min(1).optional(),
|
|
542
641
|
limit: z.number().int().min(1).max(100).optional(),
|
|
543
642
|
}),
|
|
544
643
|
createRequest: (input) => ({
|
|
545
644
|
method: 'GET',
|
|
546
|
-
path: `/
|
|
645
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/sources${buildSourceListQuery('QA', { qaMode: input.mode, limit: input.limit, cursor: input.cursor })}`,
|
|
547
646
|
}),
|
|
548
647
|
}),
|
|
549
648
|
defineTool({
|
|
@@ -553,12 +652,12 @@ export const knowledgeTools = [
|
|
|
553
652
|
defaultWorkspaceId: true,
|
|
554
653
|
schema: z.object({
|
|
555
654
|
workspace_id: uuidSchema.optional(),
|
|
556
|
-
knowledge_space_id:
|
|
655
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
557
656
|
qa_id: uuidSchema,
|
|
558
657
|
}),
|
|
559
658
|
createRequest: (input) => ({
|
|
560
659
|
method: 'GET',
|
|
561
|
-
path: `/
|
|
660
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/sources/${input.qa_id}`,
|
|
562
661
|
}),
|
|
563
662
|
}),
|
|
564
663
|
defineTool({
|
|
@@ -568,14 +667,17 @@ export const knowledgeTools = [
|
|
|
568
667
|
defaultWorkspaceId: true,
|
|
569
668
|
schema: z.object({
|
|
570
669
|
workspace_id: uuidSchema.optional(),
|
|
571
|
-
knowledge_space_id:
|
|
670
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
572
671
|
qa_id: uuidSchema,
|
|
573
672
|
question: z.string().min(1).optional(),
|
|
574
673
|
answer: z.string().optional(),
|
|
575
674
|
answer_chunks: z
|
|
576
675
|
.array(z.object({
|
|
577
676
|
text: z.string().optional(),
|
|
578
|
-
|
|
677
|
+
// ⛔ nullable, а не только optional: «ключ не прислан» = не менять, а `null` =
|
|
678
|
+
// СНЯТЬ вложение. Без null снять его было нечем — схема отвергала значение до
|
|
679
|
+
// отправки, и построенного пути открепления у клиента не существовало вовсе.
|
|
680
|
+
stored_file_id: uuidSchema.nullable().optional(),
|
|
579
681
|
buttons: z
|
|
580
682
|
.array(z.object({ name: z.string().min(1), url: z.string().min(1) }))
|
|
581
683
|
.optional(),
|
|
@@ -590,17 +692,18 @@ export const knowledgeTools = [
|
|
|
590
692
|
}),
|
|
591
693
|
createRequest: (input) => ({
|
|
592
694
|
method: 'PATCH',
|
|
593
|
-
path: `/
|
|
594
|
-
body:
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
695
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/sources/${input.qa_id}`,
|
|
696
|
+
body: {
|
|
697
|
+
qa: compactObject({
|
|
698
|
+
question: input.question,
|
|
699
|
+
alias: input.alias,
|
|
700
|
+
mode: input.mode,
|
|
701
|
+
callOperator: input.call_operator,
|
|
702
|
+
chunkDelaySeconds: input.chunk_delay_seconds,
|
|
703
|
+
isCallQaOnly: input.is_call_qa_only,
|
|
704
|
+
answerChunks: mapQaAnswerChunks(input.answer_chunks, input.answer, false),
|
|
705
|
+
}),
|
|
706
|
+
},
|
|
604
707
|
}),
|
|
605
708
|
}),
|
|
606
709
|
defineTool({
|
|
@@ -610,35 +713,34 @@ export const knowledgeTools = [
|
|
|
610
713
|
defaultWorkspaceId: true,
|
|
611
714
|
schema: z.object({
|
|
612
715
|
workspace_id: uuidSchema.optional(),
|
|
613
|
-
knowledge_space_id:
|
|
716
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
614
717
|
qa_id: uuidSchema,
|
|
615
718
|
explicit_confirmation: z.literal(true),
|
|
616
719
|
}),
|
|
617
720
|
createRequest: (input) => ({
|
|
618
721
|
method: 'DELETE',
|
|
619
|
-
path: `/
|
|
620
|
-
body: { explicit_confirmation: input.explicit_confirmation },
|
|
722
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/sources/${input.qa_id}`,
|
|
621
723
|
}),
|
|
622
724
|
}),
|
|
623
725
|
defineTool({
|
|
624
726
|
name: 'besales_knowledge_qa_search',
|
|
625
727
|
sideEffect: 'none',
|
|
626
|
-
closedWorld: true,
|
|
627
728
|
requiredFields: ['knowledge_space_id', 'query'],
|
|
628
729
|
defaultWorkspaceId: true,
|
|
629
730
|
schema: z.object({
|
|
630
731
|
workspace_id: uuidSchema.optional(),
|
|
631
|
-
knowledge_space_id:
|
|
732
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
632
733
|
query: z.string().min(1),
|
|
633
734
|
top_k: z.number().int().min(1).max(50).optional(),
|
|
634
735
|
min_score: z.number().optional(),
|
|
635
736
|
}),
|
|
636
737
|
createRequest: (input) => ({
|
|
637
|
-
path: `/
|
|
738
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/sources/search`,
|
|
638
739
|
body: compactObject({
|
|
639
740
|
query: input.query,
|
|
640
|
-
|
|
641
|
-
|
|
741
|
+
sourceType: 'QA',
|
|
742
|
+
topK: input.top_k,
|
|
743
|
+
minScore: input.min_score,
|
|
642
744
|
}),
|
|
643
745
|
}),
|
|
644
746
|
}),
|
|
@@ -649,47 +751,46 @@ export const knowledgeTools = [
|
|
|
649
751
|
defaultWorkspaceId: true,
|
|
650
752
|
schema: z.object({
|
|
651
753
|
workspace_id: uuidSchema.optional(),
|
|
652
|
-
source_space_id:
|
|
754
|
+
source_space_id: knowledgeSpaceIdSchema,
|
|
653
755
|
qa_id: uuidSchema,
|
|
654
|
-
target_space_id:
|
|
756
|
+
target_space_id: knowledgeSpaceIdSchema,
|
|
655
757
|
explicit_confirmation: z.literal(true),
|
|
656
758
|
}),
|
|
657
759
|
createRequest: (input) => ({
|
|
658
|
-
path: `/
|
|
760
|
+
path: `/knowledge-spaces/${input.source_space_id}/sources/${input.qa_id}/move`,
|
|
659
761
|
body: {
|
|
660
|
-
|
|
661
|
-
explicit_confirmation: input.explicit_confirmation,
|
|
762
|
+
targetSpaceId: input.target_space_id,
|
|
662
763
|
},
|
|
663
764
|
}),
|
|
664
765
|
enhanceResponse: (response) => withInstructions(response, [
|
|
665
|
-
'
|
|
666
|
-
'
|
|
667
|
-
'
|
|
766
|
+
'Источник перенесён транзакционно в новый knowledge space.',
|
|
767
|
+
'ID источника, alias и существующие chunks сохраняются; ссылки обновлять не нужно.',
|
|
768
|
+
'Перенос не запускает переиндексацию.',
|
|
668
769
|
]),
|
|
669
770
|
}),
|
|
670
771
|
// ----- v1.5 Increment 2: Websites (4 tools) -----
|
|
671
772
|
defineTool({
|
|
672
773
|
name: 'besales_knowledge_website_add',
|
|
673
|
-
sideEffect: '
|
|
774
|
+
sideEffect: 'spend',
|
|
674
775
|
requiredFields: ['knowledge_space_id', 'url'],
|
|
675
776
|
defaultWorkspaceId: true,
|
|
676
777
|
schema: z.object({
|
|
677
778
|
workspace_id: uuidSchema.optional(),
|
|
678
|
-
knowledge_space_id:
|
|
779
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
679
780
|
url: z.string().url(),
|
|
680
781
|
display_name: z.string().optional(),
|
|
681
782
|
}),
|
|
682
783
|
createRequest: (input) => ({
|
|
683
|
-
path: `/
|
|
684
|
-
body:
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
784
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/sources`,
|
|
785
|
+
body: {
|
|
786
|
+
sourceType: 'WEBSITE',
|
|
787
|
+
name: input.display_name ?? input.url,
|
|
788
|
+
website: { url: input.url },
|
|
789
|
+
},
|
|
688
790
|
}),
|
|
689
791
|
enhanceResponse: (response) => withInstructions(response, [
|
|
690
|
-
'
|
|
691
|
-
'
|
|
692
|
-
'Status: PENDING → CRAWLING → PROCESSING → COMPLETED | FAILED.',
|
|
792
|
+
'WEBSITE source создан в статусе PENDING; crawl и индексация выполняются асинхронно.',
|
|
793
|
+
'Опрашивай besales_knowledge_website_get до status=ACTIVE либо FAILED.',
|
|
693
794
|
]),
|
|
694
795
|
}),
|
|
695
796
|
defineTool({
|
|
@@ -700,15 +801,16 @@ export const knowledgeTools = [
|
|
|
700
801
|
requiredFields: ['knowledge_space_id'],
|
|
701
802
|
defaultWorkspaceId: true,
|
|
702
803
|
schema: z.object({
|
|
804
|
+
page: retiredKnowledgePageSchema,
|
|
703
805
|
workspace_id: uuidSchema.optional(),
|
|
704
|
-
knowledge_space_id:
|
|
806
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
705
807
|
status: z.enum(['PENDING', 'CRAWLING', 'PROCESSING', 'COMPLETED', 'FAILED']).optional(),
|
|
706
|
-
|
|
808
|
+
cursor: z.string().min(1).optional(),
|
|
707
809
|
limit: z.number().int().min(1).max(100).optional(),
|
|
708
810
|
}),
|
|
709
811
|
createRequest: (input) => ({
|
|
710
812
|
method: 'GET',
|
|
711
|
-
path: `/
|
|
813
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/sources${buildSourceListQuery('WEBSITE', { status: mapWebsiteStatus(input.status), limit: input.limit, cursor: input.cursor })}`,
|
|
712
814
|
}),
|
|
713
815
|
}),
|
|
714
816
|
defineTool({
|
|
@@ -718,12 +820,12 @@ export const knowledgeTools = [
|
|
|
718
820
|
defaultWorkspaceId: true,
|
|
719
821
|
schema: z.object({
|
|
720
822
|
workspace_id: uuidSchema.optional(),
|
|
721
|
-
knowledge_space_id:
|
|
823
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
722
824
|
website_id: uuidSchema,
|
|
723
825
|
}),
|
|
724
826
|
createRequest: (input) => ({
|
|
725
827
|
method: 'GET',
|
|
726
|
-
path: `/
|
|
828
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/sources/${input.website_id}`,
|
|
727
829
|
}),
|
|
728
830
|
}),
|
|
729
831
|
defineTool({
|
|
@@ -733,14 +835,13 @@ export const knowledgeTools = [
|
|
|
733
835
|
defaultWorkspaceId: true,
|
|
734
836
|
schema: z.object({
|
|
735
837
|
workspace_id: uuidSchema.optional(),
|
|
736
|
-
knowledge_space_id:
|
|
838
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
737
839
|
website_id: uuidSchema,
|
|
738
840
|
explicit_confirmation: z.literal(true),
|
|
739
841
|
}),
|
|
740
842
|
createRequest: (input) => ({
|
|
741
843
|
method: 'DELETE',
|
|
742
|
-
path: `/
|
|
743
|
-
body: { explicit_confirmation: input.explicit_confirmation },
|
|
844
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/sources/${input.website_id}`,
|
|
744
845
|
}),
|
|
745
846
|
}),
|
|
746
847
|
// ============================================================
|
|
@@ -748,12 +849,12 @@ export const knowledgeTools = [
|
|
|
748
849
|
// ============================================================
|
|
749
850
|
defineTool({
|
|
750
851
|
name: 'besales_knowledge_table_link',
|
|
751
|
-
sideEffect: '
|
|
852
|
+
sideEffect: 'spend',
|
|
752
853
|
requiredFields: ['knowledge_space_id', 'source', 'display_name'],
|
|
753
854
|
defaultWorkspaceId: true,
|
|
754
855
|
schema: z.object({
|
|
755
856
|
workspace_id: uuidSchema.optional(),
|
|
756
|
-
knowledge_space_id:
|
|
857
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
757
858
|
source: knowledgeTableSourceSchema,
|
|
758
859
|
display_name: z.string(),
|
|
759
860
|
header_row_index: z.number().int().min(1).optional(),
|
|
@@ -765,25 +866,26 @@ export const knowledgeTools = [
|
|
|
765
866
|
}),
|
|
766
867
|
createRequest: (input) => ({
|
|
767
868
|
method: 'POST',
|
|
768
|
-
path: `/
|
|
769
|
-
body:
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
869
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/sources`,
|
|
870
|
+
body: {
|
|
871
|
+
sourceType: 'TABLE',
|
|
872
|
+
name: input.display_name,
|
|
873
|
+
table: compactObject({
|
|
874
|
+
tableName: input.display_name,
|
|
875
|
+
type: 'GOOGLE_SHEETS',
|
|
876
|
+
url: input.source.spreadsheet_url,
|
|
877
|
+
access: input.access,
|
|
878
|
+
headerRowIndex: input.header_row_index === undefined ? undefined : input.header_row_index - 1,
|
|
879
|
+
cacheTtlSeconds: input.cache_ttl_seconds,
|
|
880
|
+
useVectorIndex: input.use_vector_index,
|
|
881
|
+
vectorTopK: input.vector_top_k,
|
|
882
|
+
vectorEmbedMaxChars: input.vector_embed_max_chars,
|
|
883
|
+
}),
|
|
884
|
+
},
|
|
783
885
|
}),
|
|
784
886
|
enhanceResponse: (response) => withInstructions(response, [
|
|
785
|
-
'
|
|
786
|
-
'Для
|
|
887
|
+
'TABLE source создан в статусе PENDING.',
|
|
888
|
+
'Для row-level vector retrieval включи use_vector_index и вызови besales_knowledge_table_reindex.',
|
|
787
889
|
]),
|
|
788
890
|
}),
|
|
789
891
|
defineTool({
|
|
@@ -794,15 +896,16 @@ export const knowledgeTools = [
|
|
|
794
896
|
requiredFields: ['knowledge_space_id'],
|
|
795
897
|
defaultWorkspaceId: true,
|
|
796
898
|
schema: z.object({
|
|
899
|
+
page: retiredKnowledgePageSchema,
|
|
797
900
|
workspace_id: uuidSchema.optional(),
|
|
798
|
-
knowledge_space_id:
|
|
901
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
799
902
|
is_active: z.boolean().optional(),
|
|
800
|
-
|
|
903
|
+
cursor: z.string().min(1).optional(),
|
|
801
904
|
limit: z.number().int().min(1).max(100).optional(),
|
|
802
905
|
}),
|
|
803
906
|
createRequest: (input) => ({
|
|
804
907
|
method: 'GET',
|
|
805
|
-
path: `/
|
|
908
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/sources${buildSourceListQuery('TABLE', { isActive: input.is_active, limit: input.limit, cursor: input.cursor })}`,
|
|
806
909
|
}),
|
|
807
910
|
}),
|
|
808
911
|
defineTool({
|
|
@@ -812,12 +915,12 @@ export const knowledgeTools = [
|
|
|
812
915
|
defaultWorkspaceId: true,
|
|
813
916
|
schema: z.object({
|
|
814
917
|
workspace_id: uuidSchema.optional(),
|
|
815
|
-
knowledge_space_id:
|
|
918
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
816
919
|
table_id: uuidSchema,
|
|
817
920
|
}),
|
|
818
921
|
createRequest: (input) => ({
|
|
819
922
|
method: 'GET',
|
|
820
|
-
path: `/
|
|
923
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/sources/${input.table_id}`,
|
|
821
924
|
}),
|
|
822
925
|
}),
|
|
823
926
|
defineTool({
|
|
@@ -827,9 +930,9 @@ export const knowledgeTools = [
|
|
|
827
930
|
defaultWorkspaceId: true,
|
|
828
931
|
schema: z.object({
|
|
829
932
|
workspace_id: uuidSchema.optional(),
|
|
830
|
-
knowledge_space_id:
|
|
933
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
831
934
|
table_id: uuidSchema,
|
|
832
|
-
//
|
|
935
|
+
// NATIVE/table_schema остаются неподдержанными, GOOGLE_SHEETS URL патчабелен.
|
|
833
936
|
source: knowledgeTableSourceSchema.optional(),
|
|
834
937
|
display_name: z.string().optional(),
|
|
835
938
|
header_row_index: z.number().int().min(1).optional(),
|
|
@@ -840,29 +943,29 @@ export const knowledgeTools = [
|
|
|
840
943
|
access: z.enum(['PUBLIC', 'PRIVATE']).optional(),
|
|
841
944
|
is_active: z.boolean().optional(),
|
|
842
945
|
}),
|
|
843
|
-
createRequest: (input) =>
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
}
|
|
863
|
-
}
|
|
946
|
+
createRequest: (input) => {
|
|
947
|
+
return {
|
|
948
|
+
method: 'PATCH',
|
|
949
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/sources/${input.table_id}`,
|
|
950
|
+
body: compactObject({
|
|
951
|
+
name: input.display_name,
|
|
952
|
+
table: compactObject({
|
|
953
|
+
tableName: input.display_name,
|
|
954
|
+
type: input.source?.kind,
|
|
955
|
+
url: input.source?.spreadsheet_url,
|
|
956
|
+
access: input.access,
|
|
957
|
+
headerRowIndex: input.header_row_index === undefined ? undefined : input.header_row_index - 1,
|
|
958
|
+
cacheTtlSeconds: input.cache_ttl_seconds,
|
|
959
|
+
useVectorIndex: input.use_vector_index,
|
|
960
|
+
vectorTopK: input.vector_top_k,
|
|
961
|
+
vectorEmbedMaxChars: input.vector_embed_max_chars,
|
|
962
|
+
isActive: input.is_active,
|
|
963
|
+
}),
|
|
964
|
+
}),
|
|
965
|
+
};
|
|
966
|
+
},
|
|
864
967
|
enhanceResponse: (response) => withInstructions(response, [
|
|
865
|
-
'source.
|
|
968
|
+
'source.spreadsheet_url обновляет URL существующей GOOGLE_SHEETS-таблицы.',
|
|
866
969
|
]),
|
|
867
970
|
}),
|
|
868
971
|
defineTool({
|
|
@@ -872,36 +975,33 @@ export const knowledgeTools = [
|
|
|
872
975
|
defaultWorkspaceId: true,
|
|
873
976
|
schema: z.object({
|
|
874
977
|
workspace_id: uuidSchema.optional(),
|
|
875
|
-
knowledge_space_id:
|
|
978
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
876
979
|
table_id: uuidSchema,
|
|
877
980
|
explicit_confirmation: z.literal(true),
|
|
878
981
|
}),
|
|
879
982
|
createRequest: (input) => ({
|
|
880
983
|
method: 'DELETE',
|
|
881
|
-
path: `/
|
|
882
|
-
body: { explicit_confirmation: input.explicit_confirmation },
|
|
984
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/sources/${input.table_id}`,
|
|
883
985
|
}),
|
|
884
986
|
}),
|
|
885
987
|
defineTool({
|
|
886
988
|
name: 'besales_knowledge_table_reindex',
|
|
887
|
-
sideEffect: 'spend',
|
|
888
989
|
verifyWithToolName: 'besales_knowledge_table_reindex_status',
|
|
990
|
+
sideEffect: 'spend',
|
|
889
991
|
requiredFields: ['knowledge_space_id', 'table_id', 'explicit_confirmation'],
|
|
890
992
|
defaultWorkspaceId: true,
|
|
891
993
|
schema: z.object({
|
|
892
994
|
workspace_id: uuidSchema.optional(),
|
|
893
|
-
knowledge_space_id:
|
|
995
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
894
996
|
table_id: uuidSchema,
|
|
895
997
|
explicit_confirmation: z.literal(true),
|
|
896
998
|
}),
|
|
897
999
|
createRequest: (input) => ({
|
|
898
1000
|
method: 'POST',
|
|
899
|
-
path: `/
|
|
900
|
-
body: { explicit_confirmation: input.explicit_confirmation },
|
|
1001
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/sources/${input.table_id}/reindex`,
|
|
901
1002
|
}),
|
|
902
1003
|
enhanceResponse: (response) => withInstructions(response, [
|
|
903
|
-
'
|
|
904
|
-
'Первую проверку сделай через 10–30 секунд через besales_knowledge_table_reindex_status; повторяй до COMPLETED, FAILED или EXPIRED.',
|
|
1004
|
+
'Переиндексация поставлена в knowledge-indexing очередь; повторный живой job дедуплицируется.',
|
|
905
1005
|
]),
|
|
906
1006
|
}),
|
|
907
1007
|
defineTool({
|
|
@@ -911,38 +1011,46 @@ export const knowledgeTools = [
|
|
|
911
1011
|
defaultWorkspaceId: true,
|
|
912
1012
|
schema: z.object({
|
|
913
1013
|
workspace_id: uuidSchema.optional(),
|
|
914
|
-
knowledge_space_id:
|
|
1014
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
915
1015
|
table_id: uuidSchema,
|
|
916
1016
|
}),
|
|
917
1017
|
createRequest: (input) => ({
|
|
918
1018
|
method: 'GET',
|
|
919
|
-
path: `/
|
|
1019
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/sources/${input.table_id}/reindex/status`,
|
|
920
1020
|
}),
|
|
921
1021
|
enhanceResponse: (response) => withInstructions(response, [
|
|
922
|
-
'QUEUED/RUNNING — подожди 10–30 секунд и
|
|
923
|
-
|
|
1022
|
+
'QUEUED/RUNNING — подожди 10–30 секунд и спроси снова; COMPLETED/FAILED — исход известен.',
|
|
1023
|
+
// ⛔ Значение EXPIRED в v2 означает ДРУГОЕ, чем у прежнего сервера. Там оно означало «след
|
|
1024
|
+
// задания очереди уже удалён хранением», то есть исход неизвестен. Здесь статус считается
|
|
1025
|
+
// по прогону РЕСУРСА, и удержание задания на ответ не влияет: EXPIRED означает, что
|
|
1026
|
+
// переиндексации этой цели не было вовсе. Промолчав, инструмент склеил бы «не запускали» с
|
|
1027
|
+
// «не знаем» — за первым идут и запускают, за вторым ждут.
|
|
1028
|
+
'EXPIRED — прогона по этой цели нет: переиндексацию не запускали. Это не «исход неизвестен».',
|
|
924
1029
|
]),
|
|
925
1030
|
}),
|
|
926
1031
|
defineTool({
|
|
927
1032
|
name: 'besales_knowledge_namespace_reindex',
|
|
928
|
-
sideEffect: 'spend',
|
|
929
1033
|
verifyWithToolName: 'besales_knowledge_namespace_reindex_status',
|
|
1034
|
+
sideEffect: 'spend',
|
|
1035
|
+
// Жёсткий гейт: переиндексация ВСЕГО пространства знаний — та же операция, что у одной
|
|
1036
|
+
// таблицы, только по всему набору источников. Гейт стоял на частном случае и отсутствовал
|
|
1037
|
+
// на общем.
|
|
930
1038
|
requiredFields: ['knowledge_space_id', 'explicit_confirmation'],
|
|
931
1039
|
defaultWorkspaceId: true,
|
|
932
1040
|
schema: z.object({
|
|
933
1041
|
workspace_id: uuidSchema.optional(),
|
|
934
|
-
knowledge_space_id:
|
|
1042
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
935
1043
|
types: z.array(z.enum(['qa', 'doc'])).optional(),
|
|
936
1044
|
explicit_confirmation: z.literal(true),
|
|
937
1045
|
}),
|
|
938
1046
|
createRequest: (input) => ({
|
|
939
1047
|
method: 'POST',
|
|
940
|
-
path: `/
|
|
1048
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/reindex`,
|
|
941
1049
|
body: compactObject({ types: input.types }),
|
|
942
1050
|
}),
|
|
943
1051
|
enhanceResponse: (response) => withInstructions(response, [
|
|
944
|
-
'
|
|
945
|
-
'
|
|
1052
|
+
'Фоновая переиндексация QA/DOCUMENT sources в pgvector через knowledge-indexing очередь.',
|
|
1053
|
+
'types опционально; по умолчанию обрабатываются qa и doc. TABLE/WEBSITE не входят.',
|
|
946
1054
|
]),
|
|
947
1055
|
}),
|
|
948
1056
|
defineTool({
|
|
@@ -952,15 +1060,16 @@ export const knowledgeTools = [
|
|
|
952
1060
|
defaultWorkspaceId: true,
|
|
953
1061
|
schema: z.object({
|
|
954
1062
|
workspace_id: uuidSchema.optional(),
|
|
955
|
-
knowledge_space_id:
|
|
1063
|
+
knowledge_space_id: knowledgeSpaceIdSchema,
|
|
956
1064
|
}),
|
|
957
1065
|
createRequest: (input) => ({
|
|
958
1066
|
method: 'GET',
|
|
959
|
-
path: `/
|
|
1067
|
+
path: `/knowledge-spaces/${input.knowledge_space_id}/reindex/status`,
|
|
960
1068
|
}),
|
|
961
1069
|
enhanceResponse: (response) => withInstructions(response, [
|
|
962
|
-
'QUEUED/RUNNING — подожди 10–30 секунд и
|
|
963
|
-
'
|
|
1070
|
+
'QUEUED/RUNNING — подожди 10–30 секунд и спроси снова; COMPLETED/FAILED — исход известен.',
|
|
1071
|
+
'EXPIRED — прогона по этому пространству нет: переиндексацию не запускали. Это не «исход неизвестен».',
|
|
1072
|
+
'progress считает ИСТОЧНИКИ прогона; removed — источники, удалённые или перенесённые во время него.',
|
|
964
1073
|
]),
|
|
965
1074
|
}),
|
|
966
1075
|
];
|