@taico/taico 0.5.1 → 0.7.0
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 +1 -1
- package/dist/agent-runs/agent-runs.service.js +1 -0
- package/dist/agent-runs/agent-runs.service.js.map +1 -1
- package/dist/agent-runs/dto/service/agent-runs.service.types.d.ts +1 -0
- package/dist/agents/agents.service.js +14 -2
- package/dist/agents/agents.service.js.map +1 -1
- package/dist/agents/errors/agents.errors.d.ts +4 -0
- package/dist/agents/errors/agents.errors.js +8 -1
- package/dist/agents/errors/agents.errors.js.map +1 -1
- package/dist/agents/protected-agents.d.ts +2 -0
- package/dist/agents/protected-agents.js +6 -0
- package/dist/agents/protected-agents.js.map +1 -0
- package/dist/app-init/app-init.runner.d.ts +3 -1
- package/dist/app-init/app-init.runner.js +13 -4
- package/dist/app-init/app-init.runner.js.map +1 -1
- package/dist/app.module.js +18 -0
- package/dist/app.module.js.map +1 -1
- package/dist/auth/core/errors/jwt.errors.d.ts +4 -0
- package/dist/auth/core/errors/jwt.errors.js +8 -1
- package/dist/auth/core/errors/jwt.errors.js.map +1 -1
- package/dist/auth/core/resource-audience.d.ts +9 -0
- package/dist/auth/core/resource-audience.js +47 -0
- package/dist/auth/core/resource-audience.js.map +1 -0
- package/dist/auth/core/scopes/all-api.scopes.js +2 -0
- package/dist/auth/core/scopes/all-api.scopes.js.map +1 -1
- package/dist/auth/crypto/token-verifier.service.d.ts +1 -0
- package/dist/auth/crypto/token-verifier.service.js +9 -0
- package/dist/auth/crypto/token-verifier.service.js.map +1 -1
- package/dist/auth/guards/guards/access-token.guard.js +7 -0
- package/dist/auth/guards/guards/access-token.guard.js.map +1 -1
- package/dist/auth/guards/guards/ws-access-token-guard.js +5 -0
- package/dist/auth/guards/guards/ws-access-token-guard.js.map +1 -1
- package/dist/auth-journeys/auth-journeys.controller.js +2 -8
- package/dist/auth-journeys/auth-journeys.controller.js.map +1 -1
- package/dist/auth-journeys/auth-journeys.service.d.ts +7 -1
- package/dist/auth-journeys/auth-journeys.service.js +18 -7
- package/dist/auth-journeys/auth-journeys.service.js.map +1 -1
- package/dist/auth-journeys/dto/service/auth-journeys.service.types.d.ts +1 -0
- package/dist/auth-journeys/entities/mcp-authorization-flow.entity.js +3 -2
- package/dist/auth-journeys/entities/mcp-authorization-flow.entity.js.map +1 -1
- package/dist/authorization-server/authorization-server.module.js +10 -0
- package/dist/authorization-server/authorization-server.module.js.map +1 -1
- package/dist/authorization-server/authorization.controller.js +10 -3
- package/dist/authorization-server/authorization.controller.js.map +1 -1
- package/dist/authorization-server/authorization.service.d.ts +5 -1
- package/dist/authorization-server/authorization.service.js +52 -14
- package/dist/authorization-server/authorization.service.js.map +1 -1
- package/dist/authorization-server/client-assertion.service.d.ts +15 -0
- package/dist/authorization-server/client-assertion.service.js +136 -0
- package/dist/authorization-server/client-assertion.service.js.map +1 -0
- package/dist/authorization-server/client-id-metadata.service.d.ts +17 -0
- package/dist/authorization-server/client-id-metadata.service.js +253 -0
- package/dist/authorization-server/client-id-metadata.service.js.map +1 -0
- package/dist/authorization-server/client-metadata-document.fetcher.d.ts +25 -0
- package/dist/authorization-server/client-metadata-document.fetcher.js +176 -0
- package/dist/authorization-server/client-metadata-document.fetcher.js.map +1 -0
- package/dist/authorization-server/client-metadata-document.fetcher.spec.d.ts +1 -0
- package/dist/authorization-server/client-metadata-document.fetcher.spec.js +116 -0
- package/dist/authorization-server/client-metadata-document.fetcher.spec.js.map +1 -0
- package/dist/authorization-server/client-registration.service.js +3 -0
- package/dist/authorization-server/client-registration.service.js.map +1 -1
- package/dist/authorization-server/dto/authorization-request.dto.js +6 -2
- package/dist/authorization-server/dto/authorization-request.dto.js.map +1 -1
- package/dist/authorization-server/dto/consent-metadata-response.dto.d.ts +2 -0
- package/dist/authorization-server/dto/consent-metadata-response.dto.js +10 -0
- package/dist/authorization-server/dto/consent-metadata-response.dto.js.map +1 -1
- package/dist/authorization-server/dto/register-client.dto.js +6 -2
- package/dist/authorization-server/dto/register-client.dto.js.map +1 -1
- package/dist/authorization-server/dto/service/authorization.service.types.d.ts +2 -0
- package/dist/authorization-server/dto/token-request.dto.d.ts +3 -1
- package/dist/authorization-server/dto/token-request.dto.js +29 -4
- package/dist/authorization-server/dto/token-request.dto.js.map +1 -1
- package/dist/authorization-server/entities/registered-client.entity.d.ts +8 -1
- package/dist/authorization-server/entities/registered-client.entity.js +33 -0
- package/dist/authorization-server/entities/registered-client.entity.js.map +1 -1
- package/dist/authorization-server/enums/client-registration-method.enum.d.ts +4 -0
- package/dist/authorization-server/enums/client-registration-method.enum.js +9 -0
- package/dist/authorization-server/enums/client-registration-method.enum.js.map +1 -0
- package/dist/authorization-server/enums/index.d.ts +1 -0
- package/dist/authorization-server/enums/index.js +1 -0
- package/dist/authorization-server/enums/index.js.map +1 -1
- package/dist/authorization-server/enums/token-endpoint-auth-method.enum.d.ts +2 -1
- package/dist/authorization-server/enums/token-endpoint-auth-method.enum.js +1 -0
- package/dist/authorization-server/enums/token-endpoint-auth-method.enum.js.map +1 -1
- package/dist/authorization-server/errors/authorization.errors.d.ts +4 -0
- package/dist/authorization-server/errors/authorization.errors.js +8 -1
- package/dist/authorization-server/errors/authorization.errors.js.map +1 -1
- package/dist/authorization-server/errors/client-registration.errors.d.ts +4 -0
- package/dist/authorization-server/errors/client-registration.errors.js +8 -1
- package/dist/authorization-server/errors/client-registration.errors.js.map +1 -1
- package/dist/authorization-server/errors/token.errors.d.ts +12 -0
- package/dist/authorization-server/errors/token.errors.js +22 -1
- package/dist/authorization-server/errors/token.errors.js.map +1 -1
- package/dist/authorization-server/token-exchange.service.js +3 -3
- package/dist/authorization-server/token-exchange.service.js.map +1 -1
- package/dist/authorization-server/token.service.d.ts +7 -4
- package/dist/authorization-server/token.service.js +68 -26
- package/dist/authorization-server/token.service.js.map +1 -1
- package/dist/authorization-server/utils/cache-control.d.ts +1 -0
- package/dist/authorization-server/utils/cache-control.js +20 -0
- package/dist/authorization-server/utils/cache-control.js.map +1 -0
- package/dist/authorization-server/utils/cache-control.spec.d.ts +1 -0
- package/dist/authorization-server/utils/cache-control.spec.js +21 -0
- package/dist/authorization-server/utils/cache-control.spec.js.map +1 -0
- package/dist/authorization-server/utils/client-assertion.d.ts +5 -0
- package/dist/authorization-server/utils/client-assertion.js +40 -0
- package/dist/authorization-server/utils/client-assertion.js.map +1 -0
- package/dist/authorization-server/utils/public-address.d.ts +2 -0
- package/dist/authorization-server/utils/public-address.js +63 -0
- package/dist/authorization-server/utils/public-address.js.map +1 -0
- package/dist/authorization-server/utils/public-address.spec.d.ts +1 -0
- package/dist/authorization-server/utils/public-address.spec.js +71 -0
- package/dist/authorization-server/utils/public-address.spec.js.map +1 -0
- package/dist/authorization-server/utils/redirect-uri.d.ts +3 -0
- package/dist/authorization-server/utils/redirect-uri.js +82 -0
- package/dist/authorization-server/utils/redirect-uri.js.map +1 -0
- package/dist/authorization-server/utils/redirect-uri.spec.d.ts +1 -0
- package/dist/authorization-server/utils/redirect-uri.spec.js +66 -0
- package/dist/authorization-server/utils/redirect-uri.spec.js.map +1 -0
- package/dist/authorization-server/web-auth.controller.js +4 -4
- package/dist/authorization-server/web-auth.controller.js.map +1 -1
- package/dist/authorization-server/web-auth.service.js +2 -1
- package/dist/authorization-server/web-auth.service.js.map +1 -1
- package/dist/context/context.controller.js +4 -1
- package/dist/context/context.controller.js.map +1 -1
- package/dist/context/context.mcp.gateway.js +7 -6
- package/dist/context/context.mcp.gateway.js.map +1 -1
- package/dist/context/context.service.d.ts +3 -3
- package/dist/context/context.service.js +14 -28
- package/dist/context/context.service.js.map +1 -1
- package/dist/context/dto/block-search-result.dto.d.ts +5 -0
- package/dist/context/dto/block-search-result.dto.js +39 -1
- package/dist/context/dto/block-search-result.dto.js.map +1 -1
- package/dist/context/dto/search-blocks-query.dto.d.ts +0 -1
- package/dist/context/dto/search-blocks-query.dto.js +2 -19
- package/dist/context/dto/search-blocks-query.dto.js.map +1 -1
- package/dist/context/dto/service/context.service.types.d.ts +5 -1
- package/dist/discovery/discovery.controller.js +2 -0
- package/dist/discovery/discovery.controller.js.map +1 -1
- package/dist/discovery/discovery.service.js +10 -3
- package/dist/discovery/discovery.service.js.map +1 -1
- package/dist/discovery/dto/authorization-server-metadata.dto.d.ts +2 -0
- package/dist/discovery/dto/authorization-server-metadata.dto.js +18 -1
- package/dist/discovery/dto/authorization-server-metadata.dto.js.map +1 -1
- package/dist/discovery/dto/service/discovery.service.types.d.ts +2 -0
- package/dist/errors/http/error-catalog.js +24 -0
- package/dist/errors/http/error-catalog.js.map +1 -1
- package/dist/executions/executions-worker.gateway.js +7 -1
- package/dist/executions/executions-worker.gateway.js.map +1 -1
- package/dist/global-search/dto/global-search-query.dto.d.ts +2 -1
- package/dist/global-search/dto/global-search-query.dto.js +17 -16
- package/dist/global-search/dto/global-search-query.dto.js.map +1 -1
- package/dist/global-search/dto/global-search-result.dto.d.ts +7 -8
- package/dist/global-search/dto/global-search-result.dto.js +63 -13
- package/dist/global-search/dto/global-search-result.dto.js.map +1 -1
- package/dist/global-search/dto/search-index-status.dto.d.ts +16 -0
- package/dist/global-search/dto/search-index-status.dto.js +98 -0
- package/dist/global-search/dto/search-index-status.dto.js.map +1 -0
- package/dist/global-search/dto/search-settings.dto.d.ts +20 -0
- package/dist/global-search/dto/search-settings.dto.js +161 -0
- package/dist/global-search/dto/search-settings.dto.js.map +1 -0
- package/dist/global-search/dto/update-search-settings.dto.d.ts +20 -0
- package/dist/global-search/dto/update-search-settings.dto.js +247 -0
- package/dist/global-search/dto/update-search-settings.dto.js.map +1 -0
- package/dist/global-search/global-search.controller.js +11 -2
- package/dist/global-search/global-search.controller.js.map +1 -1
- package/dist/global-search/global-search.module.js +4 -14
- package/dist/global-search/global-search.module.js.map +1 -1
- package/dist/global-search/global-search.service.d.ts +7 -19
- package/dist/global-search/global-search.service.js +27 -113
- package/dist/global-search/global-search.service.js.map +1 -1
- package/dist/global-search/search-admin.controller.d.ts +17 -0
- package/dist/global-search/search-admin.controller.js +148 -0
- package/dist/global-search/search-admin.controller.js.map +1 -0
- package/dist/http/app-validation.pipe.d.ts +7 -0
- package/dist/http/app-validation.pipe.js +39 -0
- package/dist/http/app-validation.pipe.js.map +1 -0
- package/dist/http/problem-details.filter.js +2 -2
- package/dist/http/problem-details.filter.js.map +1 -1
- package/dist/identity-provider/actor.controller.js +8 -18
- package/dist/identity-provider/actor.controller.js.map +1 -1
- package/dist/identity-provider/actor.entity.d.ts +1 -0
- package/dist/identity-provider/actor.entity.js +5 -0
- package/dist/identity-provider/actor.entity.js.map +1 -1
- package/dist/identity-provider/actor.service.d.ts +10 -1
- package/dist/identity-provider/actor.service.js +19 -3
- package/dist/identity-provider/actor.service.js.map +1 -1
- package/dist/identity-provider/dto/actor-response.dto.d.ts +1 -0
- package/dist/identity-provider/dto/actor-response.dto.js +13 -0
- package/dist/identity-provider/dto/actor-response.dto.js.map +1 -1
- package/dist/identity-provider/identity-provider.service.js +9 -1
- package/dist/identity-provider/identity-provider.service.js.map +1 -1
- package/dist/main.js +2 -5
- package/dist/main.js.map +1 -1
- package/dist/mcp-registry/dto/service/mcp-registry.service.types.d.ts +0 -10
- package/dist/mcp-registry/mcp-registry.module.js +0 -2
- package/dist/mcp-registry/mcp-registry.module.js.map +1 -1
- package/dist/mcp-registry/mcp-registry.service.d.ts +2 -5
- package/dist/mcp-registry/mcp-registry.service.js +2 -40
- package/dist/mcp-registry/mcp-registry.service.js.map +1 -1
- package/dist/migrations/1760700000000-McpClientIdMetadataDocuments.d.ts +6 -0
- package/dist/migrations/1760700000000-McpClientIdMetadataDocuments.js +27 -0
- package/dist/migrations/1760700000000-McpClientIdMetadataDocuments.js.map +1 -0
- package/dist/migrations/1760800000000-McpClientPrivateKeyJwt.d.ts +6 -0
- package/dist/migrations/1760800000000-McpClientPrivateKeyJwt.js +23 -0
- package/dist/migrations/1760800000000-McpClientPrivateKeyJwt.js.map +1 -0
- package/dist/migrations/1760900000000-ActorSoftDelete.d.ts +6 -0
- package/dist/migrations/1760900000000-ActorSoftDelete.js +16 -0
- package/dist/migrations/1760900000000-ActorSoftDelete.js.map +1 -0
- package/dist/migrations/1761000000000-ThreadTaskSubscriptions.d.ts +6 -0
- package/dist/migrations/1761000000000-ThreadTaskSubscriptions.js +18 -0
- package/dist/migrations/1761000000000-ThreadTaskSubscriptions.js.map +1 -0
- package/dist/migrations/1761100000000-ThreadTaskSubscriptionWaitingFor.d.ts +6 -0
- package/dist/migrations/1761100000000-ThreadTaskSubscriptionWaitingFor.js +14 -0
- package/dist/migrations/1761100000000-ThreadTaskSubscriptionWaitingFor.js.map +1 -0
- package/dist/migrations/1761200000000-SearchIndex.d.ts +6 -0
- package/dist/migrations/1761200000000-SearchIndex.js +19 -0
- package/dist/migrations/1761200000000-SearchIndex.js.map +1 -0
- package/dist/migrations/1761300000000-ThreadSecret.d.ts +6 -0
- package/dist/migrations/1761300000000-ThreadSecret.js +14 -0
- package/dist/migrations/1761300000000-ThreadSecret.js.map +1 -0
- package/dist/migrations/1761400000000-ThreadReadStates.d.ts +6 -0
- package/dist/migrations/1761400000000-ThreadReadStates.js +19 -0
- package/dist/migrations/1761400000000-ThreadReadStates.js.map +1 -0
- package/dist/migrations/1761500000000-ThreadLastActivity.d.ts +6 -0
- package/dist/migrations/1761500000000-ThreadLastActivity.js +19 -0
- package/dist/migrations/1761500000000-ThreadLastActivity.js.map +1 -0
- package/dist/public/assets/index-ChunDgwd.css +1 -0
- package/dist/public/assets/index-DRkJsm_M.js +118 -0
- package/dist/public/beta/assets/{index-B9fCnAUe.js → index-tTf096QG.js} +30 -30
- package/dist/public/beta/index.html +1 -1
- package/dist/public/index.html +2 -2
- package/dist/public/package.json +4 -4
- package/dist/search/enums/index.d.ts +1 -0
- package/dist/search/enums/index.js +18 -0
- package/dist/search/enums/index.js.map +1 -0
- package/dist/search/enums/search.enums.d.ts +18 -0
- package/dist/search/enums/search.enums.js +25 -0
- package/dist/search/enums/search.enums.js.map +1 -0
- package/dist/search/index/chunk-plan.d.ts +17 -0
- package/dist/search/index/chunk-plan.js +39 -0
- package/dist/search/index/chunk-plan.js.map +1 -0
- package/dist/search/index/chunk-plan.spec.d.ts +1 -0
- package/dist/search/index/chunk-plan.spec.js +57 -0
- package/dist/search/index/chunk-plan.spec.js.map +1 -0
- package/dist/search/index/chunker.d.ts +9 -0
- package/dist/search/index/chunker.js +114 -0
- package/dist/search/index/chunker.js.map +1 -0
- package/dist/search/index/chunker.spec.d.ts +1 -0
- package/dist/search/index/chunker.spec.js +61 -0
- package/dist/search/index/chunker.spec.js.map +1 -0
- package/dist/search/index/index-search.service.d.ts +16 -0
- package/dist/search/index/index-search.service.js +322 -0
- package/dist/search/index/index-search.service.js.map +1 -0
- package/dist/search/index/search-embedder.service.d.ts +23 -0
- package/dist/search/index/search-embedder.service.js +251 -0
- package/dist/search/index/search-embedder.service.js.map +1 -0
- package/dist/search/index/search-embeddings.service.d.ts +19 -0
- package/dist/search/index/search-embeddings.service.js +115 -0
- package/dist/search/index/search-embeddings.service.js.map +1 -0
- package/dist/search/index/search-excerpt.d.ts +21 -0
- package/dist/search/index/search-excerpt.js +33 -0
- package/dist/search/index/search-excerpt.js.map +1 -0
- package/dist/search/index/search-excerpt.spec.d.ts +1 -0
- package/dist/search/index/search-excerpt.spec.js +96 -0
- package/dist/search/index/search-excerpt.spec.js.map +1 -0
- package/dist/search/index/search-index-admin.service.d.ts +34 -0
- package/dist/search/index/search-index-admin.service.js +107 -0
- package/dist/search/index/search-index-admin.service.js.map +1 -0
- package/dist/search/index/search-indexer.service.d.ts +29 -0
- package/dist/search/index/search-indexer.service.js +271 -0
- package/dist/search/index/search-indexer.service.js.map +1 -0
- package/dist/search/index/search-projections.d.ts +10 -0
- package/dist/search/index/search-projections.js +139 -0
- package/dist/search/index/search-projections.js.map +1 -0
- package/dist/search/index/search-schema.d.ts +6 -0
- package/dist/search/index/search-schema.js +74 -0
- package/dist/search/index/search-schema.js.map +1 -0
- package/dist/search/index/search-settings.d.ts +32 -0
- package/dist/search/index/search-settings.js +71 -0
- package/dist/search/index/search-settings.js.map +1 -0
- package/dist/search/index/search-settings.service.d.ts +10 -0
- package/dist/search/index/search-settings.service.js +46 -0
- package/dist/search/index/search-settings.service.js.map +1 -0
- package/dist/search/index/search-settings.spec.d.ts +1 -0
- package/dist/search/index/search-settings.spec.js +39 -0
- package/dist/search/index/search-settings.spec.js.map +1 -0
- package/dist/search/index/search-vector-store.service.d.ts +19 -0
- package/dist/search/index/search-vector-store.service.js +123 -0
- package/dist/search/index/search-vector-store.service.js.map +1 -0
- package/dist/search/search.module.js +20 -2
- package/dist/search/search.module.js.map +1 -1
- package/dist/search/search.scopes.d.ts +8 -0
- package/dist/search/search.scopes.js +11 -0
- package/dist/search/search.scopes.js.map +1 -0
- package/dist/search/search.types.d.ts +21 -0
- package/dist/task-blueprints/task-blueprints.service.js +3 -2
- package/dist/task-blueprints/task-blueprints.service.js.map +1 -1
- package/dist/tasks/dto/comment-response.dto.js +1 -8
- package/dist/tasks/dto/comment-response.dto.js.map +1 -1
- package/dist/tasks/dto/search-tasks-query.dto.d.ts +0 -1
- package/dist/tasks/dto/search-tasks-query.dto.js +2 -19
- package/dist/tasks/dto/search-tasks-query.dto.js.map +1 -1
- package/dist/tasks/dto/service/tasks.service.types.d.ts +9 -1
- package/dist/tasks/dto/task-response.dto.js +3 -16
- package/dist/tasks/dto/task-response.dto.js.map +1 -1
- package/dist/tasks/dto/task-search-result.dto.d.ts +8 -0
- package/dist/tasks/dto/task-search-result.dto.js +69 -1
- package/dist/tasks/dto/task-search-result.dto.js.map +1 -1
- package/dist/tasks/tasks.controller.js +7 -1
- package/dist/tasks/tasks.controller.js.map +1 -1
- package/dist/tasks/tasks.mcp.gateway.js +7 -6
- package/dist/tasks/tasks.mcp.gateway.js.map +1 -1
- package/dist/tasks/tasks.service.auto-prune.spec.js +1 -0
- package/dist/tasks/tasks.service.auto-prune.spec.js.map +1 -1
- package/dist/tasks/tasks.service.d.ts +3 -3
- package/dist/tasks/tasks.service.js +27 -34
- package/dist/tasks/tasks.service.js.map +1 -1
- package/dist/threads/agent/agent-context.utils.d.ts +3 -0
- package/dist/threads/agent/agent-context.utils.js +14 -0
- package/dist/threads/agent/agent-context.utils.js.map +1 -1
- package/dist/threads/agent/agent-context.utils.spec.js +25 -0
- package/dist/threads/agent/agent-context.utils.spec.js.map +1 -1
- package/dist/threads/agent/hooks/compaction.hook.js +2 -1
- package/dist/threads/agent/hooks/compaction.hook.js.map +1 -1
- package/dist/threads/agent/hooks/easter-egg.hook.js +4 -3
- package/dist/threads/agent/hooks/easter-egg.hook.js.map +1 -1
- package/dist/threads/agent/hooks/thread-agent-hook.interface.js.map +1 -1
- package/dist/threads/agent/hooks/thread-agent-hooks.runner.js +2 -1
- package/dist/threads/agent/hooks/thread-agent-hooks.runner.js.map +1 -1
- package/dist/threads/agent/thread-agent-log.service.d.ts +13 -0
- package/dist/threads/agent/thread-agent-log.service.js +95 -2
- package/dist/threads/agent/thread-agent-log.service.js.map +1 -1
- package/dist/threads/agent/thread-agent-tools.factory.d.ts +11 -0
- package/dist/threads/agent/thread-agent-tools.factory.js +71 -0
- package/dist/threads/agent/thread-agent-tools.factory.js.map +1 -0
- package/dist/threads/agent/thread-agent.prompts.d.ts +15 -1
- package/dist/threads/agent/thread-agent.prompts.js +52 -2
- package/dist/threads/agent/thread-agent.prompts.js.map +1 -1
- package/dist/threads/agent/thread-agent.prompts.spec.d.ts +1 -0
- package/dist/threads/agent/thread-agent.prompts.spec.js +51 -0
- package/dist/threads/agent/thread-agent.prompts.spec.js.map +1 -0
- package/dist/threads/agent/thread-agent.service.d.ts +7 -4
- package/dist/threads/agent/thread-agent.service.js +37 -22
- package/dist/threads/agent/thread-agent.service.js.map +1 -1
- package/dist/threads/agent/thread-agent.service.spec.js +79 -18
- package/dist/threads/agent/thread-agent.service.spec.js.map +1 -1
- package/dist/threads/dto/service/threads.service.types.d.ts +17 -0
- package/dist/threads/dto/task-subscription-response.dto.d.ts +9 -0
- package/dist/threads/dto/task-subscription-response.dto.js +59 -0
- package/dist/threads/dto/task-subscription-response.dto.js.map +1 -0
- package/dist/threads/dto/thread-list-item-response.dto.d.ts +2 -0
- package/dist/threads/dto/thread-list-item-response.dto.js +16 -0
- package/dist/threads/dto/thread-list-item-response.dto.js.map +1 -1
- package/dist/threads/dto/thread-response.dto.d.ts +2 -0
- package/dist/threads/dto/thread-response.dto.js +10 -0
- package/dist/threads/dto/thread-response.dto.js.map +1 -1
- package/dist/threads/dto/thread-token-usage-response.dto.d.ts +8 -0
- package/dist/threads/dto/thread-token-usage-response.dto.js +63 -0
- package/dist/threads/dto/thread-token-usage-response.dto.js.map +1 -0
- package/dist/threads/events/threads.events.d.ts +8 -0
- package/dist/threads/events/threads.events.js +8 -1
- package/dist/threads/events/threads.events.js.map +1 -1
- package/dist/threads/read-state/thread-read-state.entity.d.ts +9 -0
- package/dist/threads/read-state/thread-read-state.entity.js +49 -0
- package/dist/threads/read-state/thread-read-state.entity.js.map +1 -0
- package/dist/threads/read-state/thread-read-state.service.d.ts +14 -0
- package/dist/threads/read-state/thread-read-state.service.js +81 -0
- package/dist/threads/read-state/thread-read-state.service.js.map +1 -0
- package/dist/threads/task-subscriptions/thread-task-subscription-notifier.service.d.ts +16 -0
- package/dist/threads/task-subscriptions/thread-task-subscription-notifier.service.js +88 -0
- package/dist/threads/task-subscriptions/thread-task-subscription-notifier.service.js.map +1 -0
- package/dist/threads/task-subscriptions/thread-task-subscription.entity.d.ts +17 -0
- package/dist/threads/task-subscriptions/thread-task-subscription.entity.js +82 -0
- package/dist/threads/task-subscriptions/thread-task-subscription.entity.js.map +1 -0
- package/dist/threads/task-subscriptions/thread-task-subscriptions.service.d.ts +29 -0
- package/dist/threads/task-subscriptions/thread-task-subscriptions.service.js +110 -0
- package/dist/threads/task-subscriptions/thread-task-subscriptions.service.js.map +1 -0
- package/dist/threads/thread-message-writer.service.d.ts +13 -0
- package/dist/threads/thread-message-writer.service.js +48 -0
- package/dist/threads/thread-message-writer.service.js.map +1 -0
- package/dist/threads/thread-message.entity.js +1 -0
- package/dist/threads/thread-message.entity.js.map +1 -1
- package/dist/threads/thread-task-assignment-projector.service.spec.js +2 -0
- package/dist/threads/thread-task-assignment-projector.service.spec.js.map +1 -1
- package/dist/threads/thread.entity.d.ts +2 -0
- package/dist/threads/thread.entity.js +24 -0
- package/dist/threads/thread.entity.js.map +1 -1
- package/dist/threads/threads-state.service.spec.js +2 -0
- package/dist/threads/threads-state.service.spec.js.map +1 -1
- package/dist/threads/threads.controller.d.ts +9 -2
- package/dist/threads/threads.controller.js +56 -6
- package/dist/threads/threads.controller.js.map +1 -1
- package/dist/threads/threads.gateway.d.ts +2 -1
- package/dist/threads/threads.gateway.js +40 -0
- package/dist/threads/threads.gateway.js.map +1 -1
- package/dist/threads/threads.module.js +14 -0
- package/dist/threads/threads.module.js.map +1 -1
- package/dist/threads/threads.service.d.ts +8 -1
- package/dist/threads/threads.service.js +52 -23
- package/dist/threads/threads.service.js.map +1 -1
- package/dist/threads/threads.service.spec.js +2 -0
- package/dist/threads/threads.service.spec.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -6
- package/dist/public/assets/index-Bu8fSAx2.js +0 -117
- package/dist/public/assets/index-DOm5BmlC.css +0 -1
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var SearchIndexerService_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.SearchIndexerService = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const event_emitter_1 = require("@nestjs/event-emitter");
|
|
16
|
+
const schedule_1 = require("@nestjs/schedule");
|
|
17
|
+
const typeorm_1 = require("typeorm");
|
|
18
|
+
const context_events_1 = require("../../context/events/context.events");
|
|
19
|
+
const tasks_events_1 = require("../../tasks/events/tasks.events");
|
|
20
|
+
const threads_events_1 = require("../../threads/events/threads.events");
|
|
21
|
+
const env_config_1 = require("../../config/env.config");
|
|
22
|
+
const search_embedder_service_1 = require("./search-embedder.service");
|
|
23
|
+
const search_schema_1 = require("./search-schema");
|
|
24
|
+
const search_projections_1 = require("./search-projections");
|
|
25
|
+
const SWEEP_INTERVAL_MS = 60_000;
|
|
26
|
+
let SearchIndexerService = SearchIndexerService_1 = class SearchIndexerService {
|
|
27
|
+
dataSource;
|
|
28
|
+
embedder;
|
|
29
|
+
logger = new common_1.Logger(SearchIndexerService_1.name);
|
|
30
|
+
sweeping = false;
|
|
31
|
+
constructor(dataSource, embedder) {
|
|
32
|
+
this.dataSource = dataSource;
|
|
33
|
+
this.embedder = embedder;
|
|
34
|
+
}
|
|
35
|
+
async onApplicationBootstrap() {
|
|
36
|
+
if ((0, env_config_1.isTypeormSchemaSyncEnabled)()) {
|
|
37
|
+
for (const statement of search_schema_1.LEXICAL_SCHEMA_STATEMENTS) {
|
|
38
|
+
await this.dataSource.query(statement);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
void this.sweep();
|
|
42
|
+
}
|
|
43
|
+
async sweep() {
|
|
44
|
+
if (this.sweeping) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
this.sweeping = true;
|
|
48
|
+
try {
|
|
49
|
+
const changed = await this.syncAll();
|
|
50
|
+
if (changed > 0) {
|
|
51
|
+
this.logger.log({ message: 'Search index sweep applied changes', changed });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
this.logger.error({ message: 'Search index sweep failed', error: errorMessage(error) });
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
this.sweeping = false;
|
|
59
|
+
}
|
|
60
|
+
this.embedder.wake();
|
|
61
|
+
}
|
|
62
|
+
async syncAll() {
|
|
63
|
+
let changed = 0;
|
|
64
|
+
for (const projection of search_projections_1.SEARCH_PROJECTIONS) {
|
|
65
|
+
changed += await this.syncProjection(projection, null);
|
|
66
|
+
}
|
|
67
|
+
return changed;
|
|
68
|
+
}
|
|
69
|
+
async syncResult(resultType, resultId) {
|
|
70
|
+
try {
|
|
71
|
+
for (const projection of search_projections_1.SEARCH_PROJECTIONS) {
|
|
72
|
+
if (projection.resultType === resultType) {
|
|
73
|
+
await this.syncProjection(projection, resultId);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
this.logger.error({
|
|
79
|
+
message: 'Failed to update the search index',
|
|
80
|
+
resultType,
|
|
81
|
+
resultId,
|
|
82
|
+
error: errorMessage(error),
|
|
83
|
+
});
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
this.embedder.wake();
|
|
87
|
+
}
|
|
88
|
+
async syncProjection(projection, resultId) {
|
|
89
|
+
const scoped = resultId !== null;
|
|
90
|
+
const select = (0, search_projections_1.projectionSelect)(projection, scoped);
|
|
91
|
+
const parameters = scoped ? [resultId] : [];
|
|
92
|
+
const entityType = `'${projection.entityType}'`;
|
|
93
|
+
const outdated = scoped
|
|
94
|
+
? 'TRUE'
|
|
95
|
+
: `d."id" IS NULL
|
|
96
|
+
OR d."source_updated_at" IS DISTINCT FROM src.source_updated_at
|
|
97
|
+
OR d."keywords" IS DISTINCT FROM src.keywords`;
|
|
98
|
+
const upserted = await this.dataSource.query(`WITH written AS (
|
|
99
|
+
INSERT INTO "search_documents" (
|
|
100
|
+
"entity_type", "entity_id", "result_type", "result_id", "title", "search_title",
|
|
101
|
+
"body", "keywords", "body_weight", "meta", "source_updated_at", "content_hash"
|
|
102
|
+
)
|
|
103
|
+
SELECT ${entityType}, src.entity_id, '${projection.resultType}', src.result_id, src.title,
|
|
104
|
+
src.search_title, src.body, src.keywords, src.body_weight, src.meta,
|
|
105
|
+
src.source_updated_at,
|
|
106
|
+
md5(src.title || chr(31) || src.search_title || chr(31) || src.body)
|
|
107
|
+
FROM (${select}) src
|
|
108
|
+
LEFT JOIN "search_documents" d
|
|
109
|
+
ON d."entity_type" = ${entityType} AND d."entity_id" = src.entity_id
|
|
110
|
+
WHERE ${outdated}
|
|
111
|
+
ON CONFLICT ("entity_type", "entity_id") DO UPDATE SET
|
|
112
|
+
"result_id" = EXCLUDED."result_id",
|
|
113
|
+
"title" = EXCLUDED."title",
|
|
114
|
+
"search_title" = EXCLUDED."search_title",
|
|
115
|
+
"body" = EXCLUDED."body",
|
|
116
|
+
"keywords" = EXCLUDED."keywords",
|
|
117
|
+
"body_weight" = EXCLUDED."body_weight",
|
|
118
|
+
"meta" = EXCLUDED."meta",
|
|
119
|
+
"source_updated_at" = EXCLUDED."source_updated_at",
|
|
120
|
+
"content_hash" = EXCLUDED."content_hash",
|
|
121
|
+
"indexed_at" = now(),
|
|
122
|
+
-- New text gets a fresh set of embedding attempts.
|
|
123
|
+
"embed_attempts" = CASE
|
|
124
|
+
WHEN "search_documents"."content_hash" = EXCLUDED."content_hash"
|
|
125
|
+
THEN "search_documents"."embed_attempts" ELSE 0 END,
|
|
126
|
+
"embed_retry_at" = CASE
|
|
127
|
+
WHEN "search_documents"."content_hash" = EXCLUDED."content_hash"
|
|
128
|
+
THEN "search_documents"."embed_retry_at" ELSE NULL END
|
|
129
|
+
WHERE ("search_documents"."content_hash", "search_documents"."keywords",
|
|
130
|
+
"search_documents"."meta", "search_documents"."source_updated_at",
|
|
131
|
+
"search_documents"."title", "search_documents"."result_id")
|
|
132
|
+
IS DISTINCT FROM
|
|
133
|
+
(EXCLUDED."content_hash", EXCLUDED."keywords", EXCLUDED."meta",
|
|
134
|
+
EXCLUDED."source_updated_at", EXCLUDED."title", EXCLUDED."result_id")
|
|
135
|
+
RETURNING 1
|
|
136
|
+
)
|
|
137
|
+
SELECT count(*) AS count FROM written`, parameters);
|
|
138
|
+
const deleted = await this.dataSource.query(`WITH removed AS (
|
|
139
|
+
DELETE FROM "search_documents" d
|
|
140
|
+
WHERE d."entity_type" = ${entityType}
|
|
141
|
+
${scoped ? 'AND d."result_id" = $1' : ''}
|
|
142
|
+
AND NOT EXISTS (SELECT 1 FROM (${select}) src WHERE src.entity_id = d."entity_id")
|
|
143
|
+
RETURNING 1
|
|
144
|
+
)
|
|
145
|
+
SELECT count(*) AS count FROM removed`, parameters);
|
|
146
|
+
return Number(upserted[0].count) + Number(deleted[0].count);
|
|
147
|
+
}
|
|
148
|
+
async onTaskChanged(event) {
|
|
149
|
+
await this.syncResult('task', event.payload.id);
|
|
150
|
+
}
|
|
151
|
+
async onTaskDeleted(event) {
|
|
152
|
+
await this.syncResult('task', event.taskId);
|
|
153
|
+
}
|
|
154
|
+
async onCommentAdded(event) {
|
|
155
|
+
await this.syncResult('task', event.payload.taskId);
|
|
156
|
+
}
|
|
157
|
+
async onBlockChanged(event) {
|
|
158
|
+
await this.syncResult('context_block', event.block.id);
|
|
159
|
+
await this.syncThreadOfStateBlock(event.block.id);
|
|
160
|
+
}
|
|
161
|
+
async onThreadChanged(event) {
|
|
162
|
+
await this.syncResult('thread', event.payload.id);
|
|
163
|
+
await this.syncResult('context_block', event.payload.stateContextBlockId);
|
|
164
|
+
}
|
|
165
|
+
async onThreadTitleUpdated(event) {
|
|
166
|
+
await this.syncResult('thread', event.payload.threadId);
|
|
167
|
+
}
|
|
168
|
+
async onThreadDeleted(event) {
|
|
169
|
+
await this.syncResult('thread', event.threadId);
|
|
170
|
+
}
|
|
171
|
+
async syncThreadOfStateBlock(blockId) {
|
|
172
|
+
let threads;
|
|
173
|
+
try {
|
|
174
|
+
threads = await this.dataSource.query(`SELECT "id" FROM "threads" WHERE "state_context_block_id" = $1`, [blockId]);
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
this.logger.error({
|
|
178
|
+
message: 'Failed to look up the thread of a state block',
|
|
179
|
+
blockId,
|
|
180
|
+
error: errorMessage(error),
|
|
181
|
+
});
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
for (const thread of threads) {
|
|
185
|
+
await this.syncResult('thread', thread.id);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
async onAgentChanged() {
|
|
189
|
+
await this.syncResult('agent', null);
|
|
190
|
+
}
|
|
191
|
+
async onBlockDeleted(event) {
|
|
192
|
+
await this.syncResult('context_block', event.blockId);
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
exports.SearchIndexerService = SearchIndexerService;
|
|
196
|
+
__decorate([
|
|
197
|
+
(0, schedule_1.Interval)(SWEEP_INTERVAL_MS),
|
|
198
|
+
__metadata("design:type", Function),
|
|
199
|
+
__metadata("design:paramtypes", []),
|
|
200
|
+
__metadata("design:returntype", Promise)
|
|
201
|
+
], SearchIndexerService.prototype, "sweep", null);
|
|
202
|
+
__decorate([
|
|
203
|
+
(0, event_emitter_1.OnEvent)(tasks_events_1.TaskCreatedEvent.INTERNAL),
|
|
204
|
+
(0, event_emitter_1.OnEvent)(tasks_events_1.TaskUpdatedEvent.INTERNAL),
|
|
205
|
+
(0, event_emitter_1.OnEvent)(tasks_events_1.TaskAssignedEvent.INTERNAL),
|
|
206
|
+
(0, event_emitter_1.OnEvent)(tasks_events_1.TaskStatusChangedEvent.INTERNAL),
|
|
207
|
+
__metadata("design:type", Function),
|
|
208
|
+
__metadata("design:paramtypes", [Object]),
|
|
209
|
+
__metadata("design:returntype", Promise)
|
|
210
|
+
], SearchIndexerService.prototype, "onTaskChanged", null);
|
|
211
|
+
__decorate([
|
|
212
|
+
(0, event_emitter_1.OnEvent)(tasks_events_1.TaskDeletedEvent.INTERNAL),
|
|
213
|
+
__metadata("design:type", Function),
|
|
214
|
+
__metadata("design:paramtypes", [tasks_events_1.TaskDeletedEvent]),
|
|
215
|
+
__metadata("design:returntype", Promise)
|
|
216
|
+
], SearchIndexerService.prototype, "onTaskDeleted", null);
|
|
217
|
+
__decorate([
|
|
218
|
+
(0, event_emitter_1.OnEvent)(tasks_events_1.CommentAddedEvent.INTERNAL),
|
|
219
|
+
__metadata("design:type", Function),
|
|
220
|
+
__metadata("design:paramtypes", [tasks_events_1.CommentAddedEvent]),
|
|
221
|
+
__metadata("design:returntype", Promise)
|
|
222
|
+
], SearchIndexerService.prototype, "onCommentAdded", null);
|
|
223
|
+
__decorate([
|
|
224
|
+
(0, event_emitter_1.OnEvent)(context_events_1.BlockCreatedEvent.INTERNAL),
|
|
225
|
+
(0, event_emitter_1.OnEvent)(context_events_1.BlockUpdatedEvent.INTERNAL),
|
|
226
|
+
__metadata("design:type", Function),
|
|
227
|
+
__metadata("design:paramtypes", [Object]),
|
|
228
|
+
__metadata("design:returntype", Promise)
|
|
229
|
+
], SearchIndexerService.prototype, "onBlockChanged", null);
|
|
230
|
+
__decorate([
|
|
231
|
+
(0, event_emitter_1.OnEvent)(threads_events_1.ThreadCreatedEvent.INTERNAL),
|
|
232
|
+
(0, event_emitter_1.OnEvent)(threads_events_1.ThreadUpdatedEvent.INTERNAL),
|
|
233
|
+
__metadata("design:type", Function),
|
|
234
|
+
__metadata("design:paramtypes", [Object]),
|
|
235
|
+
__metadata("design:returntype", Promise)
|
|
236
|
+
], SearchIndexerService.prototype, "onThreadChanged", null);
|
|
237
|
+
__decorate([
|
|
238
|
+
(0, event_emitter_1.OnEvent)(threads_events_1.ThreadTitleUpdatedEvent.INTERNAL),
|
|
239
|
+
__metadata("design:type", Function),
|
|
240
|
+
__metadata("design:paramtypes", [threads_events_1.ThreadTitleUpdatedEvent]),
|
|
241
|
+
__metadata("design:returntype", Promise)
|
|
242
|
+
], SearchIndexerService.prototype, "onThreadTitleUpdated", null);
|
|
243
|
+
__decorate([
|
|
244
|
+
(0, event_emitter_1.OnEvent)(threads_events_1.ThreadDeletedEvent.INTERNAL),
|
|
245
|
+
__metadata("design:type", Function),
|
|
246
|
+
__metadata("design:paramtypes", [threads_events_1.ThreadDeletedEvent]),
|
|
247
|
+
__metadata("design:returntype", Promise)
|
|
248
|
+
], SearchIndexerService.prototype, "onThreadDeleted", null);
|
|
249
|
+
__decorate([
|
|
250
|
+
(0, event_emitter_1.OnEvent)('agent.created'),
|
|
251
|
+
(0, event_emitter_1.OnEvent)('agent.updated'),
|
|
252
|
+
(0, event_emitter_1.OnEvent)('agent.deleted'),
|
|
253
|
+
__metadata("design:type", Function),
|
|
254
|
+
__metadata("design:paramtypes", []),
|
|
255
|
+
__metadata("design:returntype", Promise)
|
|
256
|
+
], SearchIndexerService.prototype, "onAgentChanged", null);
|
|
257
|
+
__decorate([
|
|
258
|
+
(0, event_emitter_1.OnEvent)(context_events_1.BlockDeletedEvent.INTERNAL),
|
|
259
|
+
__metadata("design:type", Function),
|
|
260
|
+
__metadata("design:paramtypes", [context_events_1.BlockDeletedEvent]),
|
|
261
|
+
__metadata("design:returntype", Promise)
|
|
262
|
+
], SearchIndexerService.prototype, "onBlockDeleted", null);
|
|
263
|
+
exports.SearchIndexerService = SearchIndexerService = SearchIndexerService_1 = __decorate([
|
|
264
|
+
(0, common_1.Injectable)(),
|
|
265
|
+
__metadata("design:paramtypes", [typeorm_1.DataSource,
|
|
266
|
+
search_embedder_service_1.SearchEmbedderService])
|
|
267
|
+
], SearchIndexerService);
|
|
268
|
+
function errorMessage(error) {
|
|
269
|
+
return error instanceof Error ? error.message : String(error);
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=search-indexer.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-indexer.service.js","sourceRoot":"","sources":["../../../src/search/index/search-indexer.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { SearchResultType } from '../enums';
|
|
2
|
+
import { SearchEntityType } from '../search.types';
|
|
3
|
+
export type SearchProjection = {
|
|
4
|
+
entityType: SearchEntityType;
|
|
5
|
+
resultType: `${SearchResultType}`;
|
|
6
|
+
select: string;
|
|
7
|
+
resultIdExpression: string;
|
|
8
|
+
};
|
|
9
|
+
export declare const SEARCH_PROJECTIONS: readonly SearchProjection[];
|
|
10
|
+
export declare function projectionSelect(projection: SearchProjection, scoped: boolean): string;
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SEARCH_PROJECTIONS = void 0;
|
|
4
|
+
exports.projectionSelect = projectionSelect;
|
|
5
|
+
const internal_auth_target_constant_1 = require("../../auth/core/constants/internal-auth-target.constant");
|
|
6
|
+
const TASK_TAGS = `(
|
|
7
|
+
SELECT string_agg(g."name", ' ' ORDER BY g."name")
|
|
8
|
+
FROM "task_tags" tt JOIN "tags" g ON g."id" = tt."tag_id"
|
|
9
|
+
WHERE tt."task_id" = t."id" AND g."deleted_at" IS NULL
|
|
10
|
+
)`;
|
|
11
|
+
const BLOCK_TAGS = `(
|
|
12
|
+
SELECT string_agg(g."name", ' ' ORDER BY g."name")
|
|
13
|
+
FROM "context_block_tags" bt JOIN "tags" g ON g."id" = bt."tag_id"
|
|
14
|
+
WHERE bt."block_id" = b."id" AND g."deleted_at" IS NULL
|
|
15
|
+
)`;
|
|
16
|
+
const THREAD_TAGS = `(
|
|
17
|
+
SELECT string_agg(g."name", ' ' ORDER BY g."name")
|
|
18
|
+
FROM "thread_tags" tt JOIN "tags" g ON g."id" = tt."tag_id"
|
|
19
|
+
WHERE tt."thread_id" = t."id" AND g."deleted_at" IS NULL
|
|
20
|
+
)`;
|
|
21
|
+
exports.SEARCH_PROJECTIONS = [
|
|
22
|
+
{
|
|
23
|
+
entityType: 'task',
|
|
24
|
+
resultType: 'task',
|
|
25
|
+
resultIdExpression: `t."id"`,
|
|
26
|
+
select: `
|
|
27
|
+
SELECT t."id" AS entity_id, t."id" AS result_id,
|
|
28
|
+
t."name"::text AS title, t."name"::text AS search_title,
|
|
29
|
+
coalesce(t."description", '') AS body,
|
|
30
|
+
coalesce(${TASK_TAGS}, '') AS keywords,
|
|
31
|
+
'B'::"char" AS body_weight,
|
|
32
|
+
jsonb_build_object('status', t."status") AS meta,
|
|
33
|
+
t."updated_at" AS source_updated_at
|
|
34
|
+
FROM "tasks" t
|
|
35
|
+
WHERE t."deleted_at" IS NULL {{SCOPE}}`,
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
entityType: 'comment',
|
|
39
|
+
resultType: 'task',
|
|
40
|
+
resultIdExpression: `t."id"`,
|
|
41
|
+
select: `
|
|
42
|
+
SELECT c."id" AS entity_id, t."id" AS result_id,
|
|
43
|
+
t."name"::text AS title, '' AS search_title,
|
|
44
|
+
c."content" AS body,
|
|
45
|
+
'' AS keywords,
|
|
46
|
+
'C'::"char" AS body_weight,
|
|
47
|
+
jsonb_build_object('status', t."status", 'author', a."display_name") AS meta,
|
|
48
|
+
greatest(c."updated_at", t."updated_at") AS source_updated_at
|
|
49
|
+
FROM "comments" c
|
|
50
|
+
JOIN "tasks" t ON t."id" = c."task_id"
|
|
51
|
+
LEFT JOIN "actors" a ON a."id" = c."commenter_actor_id"
|
|
52
|
+
WHERE c."deleted_at" IS NULL AND t."deleted_at" IS NULL {{SCOPE}}`,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
entityType: 'context_block',
|
|
56
|
+
resultType: 'context_block',
|
|
57
|
+
resultIdExpression: `b."id"`,
|
|
58
|
+
select: `
|
|
59
|
+
SELECT b."id" AS entity_id, b."id" AS result_id,
|
|
60
|
+
b."title" AS title, b."title" AS search_title,
|
|
61
|
+
coalesce(b."content", '') AS body,
|
|
62
|
+
coalesce(${BLOCK_TAGS}, '') AS keywords,
|
|
63
|
+
'B'::"char" AS body_weight,
|
|
64
|
+
'{}'::jsonb AS meta,
|
|
65
|
+
b."updated_at" AS source_updated_at
|
|
66
|
+
FROM "context_blocks" b
|
|
67
|
+
-- A thread's state memory is indexed as the thread, below. The check includes
|
|
68
|
+
-- deleted threads on purpose: their state stops being searchable altogether.
|
|
69
|
+
WHERE b."deleted_at" IS NULL
|
|
70
|
+
AND NOT EXISTS (SELECT 1 FROM "threads" t WHERE t."state_context_block_id" = b."id") {{SCOPE}}`,
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
entityType: 'thread',
|
|
74
|
+
resultType: 'thread',
|
|
75
|
+
resultIdExpression: `t."id"`,
|
|
76
|
+
select: `
|
|
77
|
+
SELECT t."id" AS entity_id, t."id" AS result_id,
|
|
78
|
+
t."title" AS title, t."title" AS search_title,
|
|
79
|
+
coalesce(b."content", '') AS body,
|
|
80
|
+
coalesce(${THREAD_TAGS}, '') AS keywords,
|
|
81
|
+
'B'::"char" AS body_weight,
|
|
82
|
+
'{}'::jsonb AS meta,
|
|
83
|
+
greatest(t."updated_at", b."updated_at") AS source_updated_at
|
|
84
|
+
FROM "threads" t
|
|
85
|
+
JOIN "context_blocks" b ON b."id" = t."state_context_block_id" AND b."deleted_at" IS NULL
|
|
86
|
+
WHERE t."deleted_at" IS NULL {{SCOPE}}`,
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
entityType: 'tool',
|
|
90
|
+
resultType: 'tool',
|
|
91
|
+
resultIdExpression: `s."id"`,
|
|
92
|
+
select: `
|
|
93
|
+
SELECT s."id" AS entity_id, s."id" AS result_id,
|
|
94
|
+
s."name"::text AS title, s."name"::text AS search_title,
|
|
95
|
+
coalesce(s."description", '') AS body,
|
|
96
|
+
s."providedId"::text AS keywords,
|
|
97
|
+
'B'::"char" AS body_weight,
|
|
98
|
+
'{}'::jsonb AS meta,
|
|
99
|
+
s."updatedAt" AS source_updated_at
|
|
100
|
+
FROM "mcp_servers" s
|
|
101
|
+
-- The worker's own registry entry exists for authorization only.
|
|
102
|
+
WHERE s."deletedAt" IS NULL AND s."providedId" <> '${internal_auth_target_constant_1.INTERNAL_WORKER_AUTH_TARGET_ID}' {{SCOPE}}`,
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
entityType: 'agent',
|
|
106
|
+
resultType: 'agent',
|
|
107
|
+
resultIdExpression: `g."id"`,
|
|
108
|
+
select: `
|
|
109
|
+
SELECT g."id" AS entity_id, g."id" AS result_id,
|
|
110
|
+
a."display_name" AS title, a."display_name" AS search_title,
|
|
111
|
+
concat_ws(E'\\n\\n', nullif(g."description", ''), nullif(a."introduction", '')) AS body,
|
|
112
|
+
a."slug" AS keywords,
|
|
113
|
+
'B'::"char" AS body_weight,
|
|
114
|
+
jsonb_build_object('slug', a."slug") AS meta,
|
|
115
|
+
greatest(g."updated_at", a."updated_at") AS source_updated_at
|
|
116
|
+
FROM "agents" g
|
|
117
|
+
JOIN "actors" a ON a."id" = g."actor_id"
|
|
118
|
+
WHERE g."deleted_at" IS NULL AND a."deleted_at" IS NULL {{SCOPE}}`,
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
entityType: 'project',
|
|
122
|
+
resultType: 'project',
|
|
123
|
+
resultIdExpression: `p."id"`,
|
|
124
|
+
select: `
|
|
125
|
+
SELECT p."id" AS entity_id, p."id" AS result_id,
|
|
126
|
+
p."slug" AS title, p."slug" AS search_title,
|
|
127
|
+
coalesce(p."description", '') AS body,
|
|
128
|
+
coalesce(p."repoUrl", '') AS keywords,
|
|
129
|
+
'B'::"char" AS body_weight,
|
|
130
|
+
'{}'::jsonb AS meta,
|
|
131
|
+
p."updated_at" AS source_updated_at
|
|
132
|
+
FROM "projects" p
|
|
133
|
+
WHERE p."deleted_at" IS NULL {{SCOPE}}`,
|
|
134
|
+
},
|
|
135
|
+
];
|
|
136
|
+
function projectionSelect(projection, scoped) {
|
|
137
|
+
return projection.select.replace('{{SCOPE}}', scoped ? `AND ${projection.resultIdExpression} = $1` : '');
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=search-projections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-projections.js","sourceRoot":"","sources":["../../../src/search/index/search-projections.ts"],"names":[],"mappings":";;;AAoKA,4CAKC;AAzKD,2GAAuG;AA0BvG,MAAM,SAAS,GAAG;;;;EAIhB,CAAC;AAEH,MAAM,UAAU,GAAG;;;;EAIjB,CAAC;AAEH,MAAM,WAAW,GAAG;;;;EAIlB,CAAC;AAEU,QAAA,kBAAkB,GAAgC;IAC7D;QACE,UAAU,EAAE,MAAM;QAClB,UAAU,EAAE,MAAM;QAClB,kBAAkB,EAAE,QAAQ;QAC5B,MAAM,EAAE;;;;wBAIY,SAAS;;;;;6CAKY;KAC1C;IACD;QAGE,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,MAAM;QAClB,kBAAkB,EAAE,QAAQ;QAC5B,MAAM,EAAE;;;;;;;;;;;wEAW4D;KACrE;IACD;QACE,UAAU,EAAE,eAAe;QAC3B,UAAU,EAAE,eAAe;QAC3B,kBAAkB,EAAE,QAAQ;QAC5B,MAAM,EAAE;;;;wBAIY,UAAU;;;;;;;;uGAQqE;KACpG;IACD;QAGE,UAAU,EAAE,QAAQ;QACpB,UAAU,EAAE,QAAQ;QACpB,kBAAkB,EAAE,QAAQ;QAC5B,MAAM,EAAE;;;;wBAIY,WAAW;;;;;;6CAMU;KAC1C;IACD;QACE,UAAU,EAAE,MAAM;QAClB,UAAU,EAAE,MAAM;QAClB,kBAAkB,EAAE,QAAQ;QAC5B,MAAM,EAAE;;;;;;;;;;2DAU+C,8DAA8B,aAAa;KACnG;IACD;QACE,UAAU,EAAE,OAAO;QACnB,UAAU,EAAE,OAAO;QACnB,kBAAkB,EAAE,QAAQ;QAC5B,MAAM,EAAE;;;;;;;;;;wEAU4D;KACrE;IACD;QACE,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,SAAS;QACrB,kBAAkB,EAAE,QAAQ;QAC5B,MAAM,EAAE;;;;;;;;;6CASiC;KAC1C;CACF,CAAC;AAEF,SAAgB,gBAAgB,CAAC,UAA4B,EAAE,MAAe;IAC5E,OAAO,UAAU,CAAC,MAAM,CAAC,OAAO,CAC9B,WAAW,EACX,MAAM,CAAC,CAAC,CAAC,OAAO,UAAU,CAAC,kBAAkB,OAAO,CAAC,CAAC,CAAC,EAAE,CAC1D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const SEARCH_TEXT_CONFIG = "english";
|
|
2
|
+
export declare const LEXICAL_SCHEMA_STATEMENTS: readonly string[];
|
|
3
|
+
export declare const VECTOR_SCHEMA_STATEMENTS: readonly string[];
|
|
4
|
+
export declare const MAX_ANN_INDEX_DIMENSIONS = 2000;
|
|
5
|
+
export declare function annIndexStatement(dimensions: number): string;
|
|
6
|
+
export declare const DROP_SEARCH_SCHEMA_STATEMENTS: readonly string[];
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DROP_SEARCH_SCHEMA_STATEMENTS = exports.MAX_ANN_INDEX_DIMENSIONS = exports.VECTOR_SCHEMA_STATEMENTS = exports.LEXICAL_SCHEMA_STATEMENTS = exports.SEARCH_TEXT_CONFIG = void 0;
|
|
4
|
+
exports.annIndexStatement = annIndexStatement;
|
|
5
|
+
const TSVECTOR_INPUT_CHARS = 400_000;
|
|
6
|
+
exports.SEARCH_TEXT_CONFIG = 'english';
|
|
7
|
+
exports.LEXICAL_SCHEMA_STATEMENTS = [
|
|
8
|
+
`CREATE EXTENSION IF NOT EXISTS "pg_trgm"`,
|
|
9
|
+
`CREATE TABLE IF NOT EXISTS "search_documents" (
|
|
10
|
+
"id" uuid NOT NULL DEFAULT gen_random_uuid(),
|
|
11
|
+
"entity_type" text NOT NULL,
|
|
12
|
+
"entity_id" uuid NOT NULL,
|
|
13
|
+
"result_type" text NOT NULL,
|
|
14
|
+
"result_id" uuid NOT NULL,
|
|
15
|
+
"title" text NOT NULL,
|
|
16
|
+
"search_title" text NOT NULL DEFAULT '',
|
|
17
|
+
"body" text NOT NULL DEFAULT '',
|
|
18
|
+
"keywords" text NOT NULL DEFAULT '',
|
|
19
|
+
"body_weight" "char" NOT NULL DEFAULT 'B',
|
|
20
|
+
"meta" jsonb NOT NULL DEFAULT '{}',
|
|
21
|
+
"source_updated_at" TIMESTAMP WITH TIME ZONE NOT NULL,
|
|
22
|
+
"content_hash" text NOT NULL,
|
|
23
|
+
"tsv" tsvector GENERATED ALWAYS AS (
|
|
24
|
+
setweight(to_tsvector('${exports.SEARCH_TEXT_CONFIG}', left("search_title", ${TSVECTOR_INPUT_CHARS})), 'A') ||
|
|
25
|
+
setweight(to_tsvector('${exports.SEARCH_TEXT_CONFIG}', left("keywords", ${TSVECTOR_INPUT_CHARS})), 'B') ||
|
|
26
|
+
setweight(to_tsvector('${exports.SEARCH_TEXT_CONFIG}', left("body", ${TSVECTOR_INPUT_CHARS})), "body_weight")
|
|
27
|
+
) STORED,
|
|
28
|
+
"embedded_fingerprint" text,
|
|
29
|
+
"embed_attempts" integer NOT NULL DEFAULT 0,
|
|
30
|
+
"embed_error" text,
|
|
31
|
+
"embed_retry_at" TIMESTAMP WITH TIME ZONE,
|
|
32
|
+
"embed_claimed_until" TIMESTAMP WITH TIME ZONE,
|
|
33
|
+
"indexed_at" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
|
|
34
|
+
CONSTRAINT "PK_search_documents" PRIMARY KEY ("id"),
|
|
35
|
+
CONSTRAINT "UQ_search_documents_entity" UNIQUE ("entity_type", "entity_id")
|
|
36
|
+
)`,
|
|
37
|
+
`CREATE INDEX IF NOT EXISTS "IDX_search_documents_result" ON "search_documents" ("result_type", "result_id")`,
|
|
38
|
+
`CREATE INDEX IF NOT EXISTS "IDX_search_documents_tsv" ON "search_documents" USING gin ("tsv")`,
|
|
39
|
+
`CREATE INDEX IF NOT EXISTS "IDX_search_documents_title_trgm" ON "search_documents" USING gin ("search_title" gin_trgm_ops)`,
|
|
40
|
+
`CREATE TABLE IF NOT EXISTS "search_settings" (
|
|
41
|
+
"id" smallint NOT NULL DEFAULT 1,
|
|
42
|
+
"settings" jsonb NOT NULL DEFAULT '{}',
|
|
43
|
+
"updated_at" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
|
|
44
|
+
CONSTRAINT "PK_search_settings" PRIMARY KEY ("id"),
|
|
45
|
+
CONSTRAINT "CHK_search_settings_single_row" CHECK ("id" = 1)
|
|
46
|
+
)`,
|
|
47
|
+
];
|
|
48
|
+
exports.VECTOR_SCHEMA_STATEMENTS = [
|
|
49
|
+
`CREATE TABLE IF NOT EXISTS "search_chunks" (
|
|
50
|
+
"id" uuid NOT NULL DEFAULT gen_random_uuid(),
|
|
51
|
+
"document_id" uuid NOT NULL,
|
|
52
|
+
"kind" text NOT NULL,
|
|
53
|
+
"ordinal" integer NOT NULL,
|
|
54
|
+
"text" text NOT NULL,
|
|
55
|
+
"text_hash" text NOT NULL,
|
|
56
|
+
"model" text NOT NULL,
|
|
57
|
+
"dimensions" integer NOT NULL,
|
|
58
|
+
"embedding" vector NOT NULL,
|
|
59
|
+
CONSTRAINT "PK_search_chunks" PRIMARY KEY ("id"),
|
|
60
|
+
CONSTRAINT "FK_search_chunks_document" FOREIGN KEY ("document_id") REFERENCES "search_documents"("id") ON DELETE CASCADE
|
|
61
|
+
)`,
|
|
62
|
+
`CREATE INDEX IF NOT EXISTS "IDX_search_chunks_document" ON "search_chunks" ("document_id")`,
|
|
63
|
+
];
|
|
64
|
+
exports.MAX_ANN_INDEX_DIMENSIONS = 2000;
|
|
65
|
+
function annIndexStatement(dimensions) {
|
|
66
|
+
const n = Math.trunc(dimensions);
|
|
67
|
+
return `CREATE INDEX IF NOT EXISTS "IDX_search_chunks_hnsw_${n}" ON "search_chunks" USING hnsw (("embedding"::vector(${n})) vector_cosine_ops) WHERE "dimensions" = ${n}`;
|
|
68
|
+
}
|
|
69
|
+
exports.DROP_SEARCH_SCHEMA_STATEMENTS = [
|
|
70
|
+
`DROP TABLE IF EXISTS "search_chunks"`,
|
|
71
|
+
`DROP TABLE IF EXISTS "search_documents"`,
|
|
72
|
+
`DROP TABLE IF EXISTS "search_settings"`,
|
|
73
|
+
];
|
|
74
|
+
//# sourceMappingURL=search-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-schema.js","sourceRoot":"","sources":["../../../src/search/index/search-schema.ts"],"names":[],"mappings":";;;AAuFA,8CAGC;AA/ED,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAExB,QAAA,kBAAkB,GAAG,SAAS,CAAC;AAE/B,QAAA,yBAAyB,GAAsB;IAC1D,0CAA0C;IAC1C;;;;;;;;;;;;;;;+BAe6B,0BAAkB,2BAA2B,oBAAoB;+BACjE,0BAAkB,uBAAuB,oBAAoB;+BAC7D,0BAAkB,mBAAmB,oBAAoB;;;;;;;;;;IAUpF;IACF,6GAA6G;IAC7G,+FAA+F;IAC/F,4HAA4H;IAC5H;;;;;;IAME;CACH,CAAC;AAOW,QAAA,wBAAwB,GAAsB;IACzD;;;;;;;;;;;;IAYE;IACF,4FAA4F;CAC7F,CAAC;AAGW,QAAA,wBAAwB,GAAG,IAAI,CAAC;AAO7C,SAAgB,iBAAiB,CAAC,UAAkB;IAClD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACjC,OAAO,sDAAsD,CAAC,yDAAyD,CAAC,8CAA8C,CAAC,EAAE,CAAC;AAC5K,CAAC;AAEY,QAAA,6BAA6B,GAAsB;IAC9D,sCAAsC;IACtC,yCAAyC;IACzC,wCAAwC;CACzC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export type SearchSettings = {
|
|
2
|
+
semanticEnabled: boolean;
|
|
3
|
+
chunkSizeChars: number;
|
|
4
|
+
chunkOverlapChars: number;
|
|
5
|
+
queryInstruction: string;
|
|
6
|
+
queryEmbeddingTimeoutMs: number;
|
|
7
|
+
candidatesPerStrategy: number;
|
|
8
|
+
semanticMinSimilarity: number;
|
|
9
|
+
semanticMaxGap: number;
|
|
10
|
+
keywordMinDensity: number;
|
|
11
|
+
fuzzyMinSimilarity: number;
|
|
12
|
+
rrfK: number;
|
|
13
|
+
keywordWeight: number;
|
|
14
|
+
fuzzyTitleWeight: number;
|
|
15
|
+
semanticWeight: number;
|
|
16
|
+
exactTitleBoost: number;
|
|
17
|
+
doneTaskMultiplier: number;
|
|
18
|
+
excerptMaxChars: number;
|
|
19
|
+
defaultLimit: number;
|
|
20
|
+
};
|
|
21
|
+
export declare const DEFAULT_SEARCH_SETTINGS: SearchSettings;
|
|
22
|
+
type NumericKey = {
|
|
23
|
+
[K in keyof SearchSettings]: SearchSettings[K] extends number ? K : never;
|
|
24
|
+
}[keyof SearchSettings];
|
|
25
|
+
export declare const SEARCH_SETTINGS_BOUNDS: Record<NumericKey, {
|
|
26
|
+
min: number;
|
|
27
|
+
max: number;
|
|
28
|
+
integer: boolean;
|
|
29
|
+
}>;
|
|
30
|
+
export declare const MAX_QUERY_INSTRUCTION_CHARS = 500;
|
|
31
|
+
export declare function resolveSearchSettings(stored: unknown): SearchSettings;
|
|
32
|
+
export {};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_QUERY_INSTRUCTION_CHARS = exports.SEARCH_SETTINGS_BOUNDS = exports.DEFAULT_SEARCH_SETTINGS = void 0;
|
|
4
|
+
exports.resolveSearchSettings = resolveSearchSettings;
|
|
5
|
+
exports.DEFAULT_SEARCH_SETTINGS = {
|
|
6
|
+
semanticEnabled: true,
|
|
7
|
+
chunkSizeChars: 1600,
|
|
8
|
+
chunkOverlapChars: 200,
|
|
9
|
+
queryInstruction: 'Given a search query, retrieve relevant passages that answer the query',
|
|
10
|
+
queryEmbeddingTimeoutMs: 2000,
|
|
11
|
+
candidatesPerStrategy: 50,
|
|
12
|
+
semanticMinSimilarity: 0.45,
|
|
13
|
+
semanticMaxGap: 0.15,
|
|
14
|
+
keywordMinDensity: 0.005,
|
|
15
|
+
fuzzyMinSimilarity: 0.5,
|
|
16
|
+
rrfK: 60,
|
|
17
|
+
keywordWeight: 1,
|
|
18
|
+
fuzzyTitleWeight: 1,
|
|
19
|
+
semanticWeight: 1,
|
|
20
|
+
exactTitleBoost: 0.02,
|
|
21
|
+
doneTaskMultiplier: 0.9,
|
|
22
|
+
excerptMaxChars: 1200,
|
|
23
|
+
defaultLimit: 10,
|
|
24
|
+
};
|
|
25
|
+
exports.SEARCH_SETTINGS_BOUNDS = {
|
|
26
|
+
chunkSizeChars: { min: 200, max: 8000, integer: true },
|
|
27
|
+
chunkOverlapChars: { min: 0, max: 1000, integer: true },
|
|
28
|
+
queryEmbeddingTimeoutMs: { min: 100, max: 30_000, integer: true },
|
|
29
|
+
candidatesPerStrategy: { min: 5, max: 500, integer: true },
|
|
30
|
+
semanticMinSimilarity: { min: 0, max: 1, integer: false },
|
|
31
|
+
semanticMaxGap: { min: 0, max: 1, integer: false },
|
|
32
|
+
keywordMinDensity: { min: 0, max: 1, integer: false },
|
|
33
|
+
fuzzyMinSimilarity: { min: 0.1, max: 1, integer: false },
|
|
34
|
+
rrfK: { min: 1, max: 1000, integer: true },
|
|
35
|
+
keywordWeight: { min: 0, max: 10, integer: false },
|
|
36
|
+
fuzzyTitleWeight: { min: 0, max: 10, integer: false },
|
|
37
|
+
semanticWeight: { min: 0, max: 10, integer: false },
|
|
38
|
+
exactTitleBoost: { min: 0, max: 1, integer: false },
|
|
39
|
+
doneTaskMultiplier: { min: 0, max: 1, integer: false },
|
|
40
|
+
excerptMaxChars: { min: 100, max: 20_000, integer: true },
|
|
41
|
+
defaultLimit: { min: 1, max: 100, integer: true },
|
|
42
|
+
};
|
|
43
|
+
exports.MAX_QUERY_INSTRUCTION_CHARS = 500;
|
|
44
|
+
function resolveSearchSettings(stored) {
|
|
45
|
+
const settings = { ...exports.DEFAULT_SEARCH_SETTINGS };
|
|
46
|
+
if (!stored || typeof stored !== 'object') {
|
|
47
|
+
return settings;
|
|
48
|
+
}
|
|
49
|
+
const values = stored;
|
|
50
|
+
if (typeof values.semanticEnabled === 'boolean') {
|
|
51
|
+
settings.semanticEnabled = values.semanticEnabled;
|
|
52
|
+
}
|
|
53
|
+
if (typeof values.queryInstruction === 'string' &&
|
|
54
|
+
values.queryInstruction.length <= exports.MAX_QUERY_INSTRUCTION_CHARS) {
|
|
55
|
+
settings.queryInstruction = values.queryInstruction.trim();
|
|
56
|
+
}
|
|
57
|
+
for (const key of Object.keys(exports.SEARCH_SETTINGS_BOUNDS)) {
|
|
58
|
+
const value = values[key];
|
|
59
|
+
const bounds = exports.SEARCH_SETTINGS_BOUNDS[key];
|
|
60
|
+
if (typeof value === 'number' &&
|
|
61
|
+
Number.isFinite(value) &&
|
|
62
|
+
value >= bounds.min &&
|
|
63
|
+
value <= bounds.max &&
|
|
64
|
+
(!bounds.integer || Number.isInteger(value))) {
|
|
65
|
+
settings[key] = value;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
settings.chunkOverlapChars = Math.min(settings.chunkOverlapChars, Math.floor(settings.chunkSizeChars / 2));
|
|
69
|
+
return settings;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=search-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-settings.js","sourceRoot":"","sources":["../../../src/search/index/search-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DataSource } from 'typeorm';
|
|
2
|
+
import { SearchSettings } from './search-settings';
|
|
3
|
+
export declare class SearchSettingsService {
|
|
4
|
+
private readonly dataSource;
|
|
5
|
+
private readonly logger;
|
|
6
|
+
constructor(dataSource: DataSource);
|
|
7
|
+
get(): Promise<SearchSettings>;
|
|
8
|
+
update(changes: Partial<SearchSettings>): Promise<SearchSettings>;
|
|
9
|
+
reset(): Promise<SearchSettings>;
|
|
10
|
+
}
|