@kedem/okdb 1.0.1 → 1.0.3
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/bin/okdb.js +1 -1
- package/keys/public.pem +3 -0
- package/okdb.js +1 -1
- package/package.json +2 -2
- package/public/admin-app.js +1 -1
- package/public/components/admin-route-host.ok.js +1 -1
- package/public/components/env-picker.ok.js +1 -1
- package/public/components/field-path-input.ok.js +1 -1
- package/public/components/geo-map.ok.js +1 -1
- package/public/components/ok-cron-input.ok.js +1 -1
- package/public/components/ok-dropzone.ok.js +1 -1
- package/public/components/ok-js-input.ok.js +1 -1
- package/public/components/ok-json-input.ok.js +1 -1
- package/public/components/ok-text-monaco-input.ok.js +1 -1
- package/public/components/theme-toggle.ok.js +1 -1
- package/public/login-app.js +1 -1
- package/public/modules/ok.js +1 -1
- package/public/sections/api/parts/api-endpoint.ok.js +1 -1
- package/public/sections/auth/modals/create-token-modal.ok.js +1 -1
- package/public/sections/auth/modals/edit-token-modal.ok.js +1 -1
- package/public/sections/auth/modals/perm-info-popover.ok.js +1 -1
- package/public/sections/auth/parts/token-detail.ok.js +1 -1
- package/public/sections/auth/parts/token-list.ok.js +1 -1
- package/public/sections/db/modals/add-item-modal.ok.js +1 -1
- package/public/sections/db/modals/create-env-modal.ok.js +1 -1
- package/public/sections/db/modals/create-fts-modal.ok.js +1 -1
- package/public/sections/db/modals/create-index-modal.ok.js +1 -1
- package/public/sections/db/modals/create-pipeline-modal.ok.js +1 -1
- package/public/sections/db/modals/demo-env-modal.ok.js +1 -1
- package/public/sections/db/modals/remove-env-modal.ok.js +1 -1
- package/public/sections/db/modals/schema-edit-modal.ok.js +1 -1
- package/public/sections/db/parts/db-overview.ok.js +1 -1
- package/public/sections/db/parts/db-pipelines-panel.ok.js +1 -1
- package/public/sections/db/parts/edit-row.ok.js +1 -1
- package/public/sections/db/parts/tm-timeline.ok.js +1 -1
- package/public/sections/db/parts/type-changelog.ok.js +1 -1
- package/public/sections/db/parts/type-list.ok.js +1 -1
- package/public/sections/db/parts/type-pipelines-tab.ok.js +1 -1
- package/public/sections/db/parts/type-schema-tab.ok.js +1 -1
- package/public/sections/db/parts/type-viewer.ok.js +1 -1
- package/public/sections/db/parts/type-violations-tab.ok.js +1 -1
- package/public/sections/embeddings/modals/register-model-modal.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-create-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-embedder-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-engine-declaration-editor.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-engine-list.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-indexer-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-lifecycle-bar.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-model-catalog.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-overview.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-search-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-worker-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/embeddings-engine-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/engines-overview.ok.js +1 -1
- package/public/sections/embeddings/parts/pipeline-create-panel.ok.js +1 -1
- package/public/sections/engines/engine-panel-shared-style.js +1 -1
- package/public/sections/engines/engine-ui-utils.js +1 -1
- package/public/sections/engines/modals/engine-modal.ok.js +1 -1
- package/public/sections/engines/parts/engine-declaration-editor.ok.js +1 -1
- package/public/sections/engines/parts/engine-lifecycle-actions.ok.js +1 -1
- package/public/sections/engines/parts/engine-panel-shell.ok.js +1 -1
- package/public/sections/engines/parts/engine-resource-card.ok.js +1 -1
- package/public/sections/engines/parts/engine-row-item.ok.js +1 -1
- package/public/sections/engines/parts/generic-engine-panel.ok.js +1 -1
- package/public/sections/files/parts/files-blob-status.ok.js +1 -1
- package/public/sections/files/parts/files-collection-list.ok.js +1 -1
- package/public/sections/files/parts/files-collection-panel.ok.js +1 -1
- package/public/sections/files/parts/files-file-list.ok.js +1 -1
- package/public/sections/files/parts/files-overview.ok.js +1 -1
- package/public/sections/files/parts/files-path-browser.ok.js +1 -1
- package/public/sections/files/parts/files-upload-panel.ok.js +1 -1
- package/public/sections/functions/modals/function-modal.ok.js +1 -1
- package/public/sections/functions/parts/function-detail.ok.js +1 -1
- package/public/sections/functions/parts/function-logs.ok.js +1 -1
- package/public/sections/functions/parts/function-runner.ok.js +1 -1
- package/public/sections/functions/parts/functions-list.ok.js +1 -1
- package/public/sections/license/parts/license-panel.ok.js +1 -1
- package/public/sections/queue/modals/create-bucket-modal.ok.js +1 -1
- package/public/sections/queue/modals/edit-bucket-modal.ok.js +1 -1
- package/public/sections/queue/modals/edit-job-modal.ok.js +1 -1
- package/public/sections/queue/modals/enqueue-job-modal.ok.js +1 -1
- package/public/sections/queue/modals/job-type-modal.ok.js +1 -1
- package/public/sections/queue/parts/ok-job-form.ok.js +1 -1
- package/public/sections/queue/parts/queue-buckets.ok.js +1 -1
- package/public/sections/queue/parts/queue-job-types.ok.js +1 -1
- package/public/sections/queue/parts/queue-jobs.ok.js +1 -1
- package/public/sections/queue/parts/queue-types.ok.js +1 -1
- package/public/sections/queue/parts/queue-workers.ok.js +1 -1
- package/public/sections/sync/parts/sync-node-detail.ok.js +1 -1
- package/public/sections/sync/parts/sync-retention.ok.js +1 -1
- package/public/sections/sync/parts/sync-topology.ok.js +1 -1
- package/public/sections/system/modals/data-ops-modal.ok.js +1 -1
- package/public/sections/system/parts/system-api-panel.ok.js +1 -1
- package/public/sections/system/parts/system-auth-panel.ok.js +1 -1
- package/public/sections/system/parts/system-log-history.ok.js +1 -1
- package/public/sections/system/parts/system-log.ok.js +1 -1
- package/public/sections/system/parts/system-status.ok.js +1 -1
- package/public/sections/system/parts/system-sync-panel.ok.js +1 -1
- package/public/sections/views/modals/create-view-modal.ok.js +1 -1
- package/public/sections/views/parts/view-detail.ok.js +1 -1
- package/public/sections/views/parts/views-list.ok.js +1 -1
- package/public/sections/views/parts/views-overview.ok.js +1 -1
- package/public/setup-app.js +1 -1
- package/public/stores/auth-store.js +1 -1
- package/public/stores/events-store.js +1 -1
- package/public/stores/functions-store.js +1 -1
- package/public/stores/okdb-store.js +1 -1
- package/public/stores/theme-store.js +1 -1
- package/public/util/permissions.js +1 -1
- package/public/util/sift-schema.js +1 -1
- package/public/vendor/okjs/ok.esm.min.js +1 -2
- package/public/vendor/okjs/toolkit/behavior/async.ok.js +1 -1
- package/public/vendor/okjs/toolkit/components/ok-chart.ok.js +1 -1
- package/public/vendor/okjs/toolkit/components/ok-doc-viewer.ok.js +1 -1
- package/public/vendor/okjs/toolkit/components/ok-marked.ok.js +1 -1
- package/public/vendor/okjs/toolkit/components/ok-monaco.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/ok-layer-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/ok-layer.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/ok-overlay.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/ok-sandbox.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/transition.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/virtualized.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-console-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-console.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-fps-monitor-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-fps-monitor.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-inspector-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-inspector.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-js-tree.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-timeline-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-timeline.ok.js +1 -1
- package/public/vendor/okjs/toolkit/docs/doc-viewer.ok.js +1 -1
- package/public/vendor/okjs/toolkit/editor/ok-live-component.ok.js +1 -1
- package/public/vendor/okjs/toolkit/editor/ok-live-example.ok.js +1 -1
- package/public/vendor/okjs/toolkit/editor/ok-live-shell.ok.js +1 -1
- package/public/vendor/okjs/toolkit/elements/ok-dropdown.ok.js +1 -1
- package/public/vendor/okjs/toolkit/elements/ok-icon.ok.js +1 -1
- package/public/vendor/okjs/toolkit/elements/ok-select.ok.js +1 -1
- package/public/vendor/okjs/toolkit/elements/ok-table.ok.js +1 -1
- package/public/vendor/okjs/toolkit/errors/ok-crash-boundary.ok.js +1 -1
- package/public/vendor/okjs/toolkit/errors/ok-crash-info.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/i18n-editor-examples.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/i18n-editor.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/i18n-key-editor-tips.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/i18n-key-editor.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/i18n-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/ok-i18n.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-contextmenu.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-dismiss-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-draggable.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-flyover-panel.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-flyover.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-highlight-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-highlight.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-hotkeys-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-picker-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-popout-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-popout.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-portal-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-submenu.ok.js +1 -1
- package/public/vendor/okjs/toolkit/layout/ok-resizer.ok.js +1 -1
- package/public/vendor/okjs/toolkit/manifest.js +1 -1
- package/public/vendor/okjs/toolkit/modals/ok-modal-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/modals/ok-modal.ok.js +1 -1
- package/public/vendor/okjs/toolkit/modals/ok-toast-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/modals/ok-window.ok.js +1 -1
- package/public/vendor/okjs/toolkit/navigation/hash-router.ok.js +1 -1
- package/public/vendor/okjs/toolkit/navigation/history-router.ok.js +1 -1
- package/public/vendor/okjs/toolkit/navigation/router.ok.js +1 -1
- package/public/vendor/okjs/toolkit/sync/reactive-sync-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/sync/reactive-sync.js +1 -1
- package/public/vendor/okjs/toolkit/theming/blocks/ok-design-button.css.js +1 -1
- package/public/vendor/okjs/toolkit/theming/blocks/ok-design-input.css.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-design-style.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-design-vars.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-design.ok.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-input.ok.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-style.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-utils.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-variable.ok.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-vm.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor.ok.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme.ok.js +1 -1
- package/public/view-models/type-query-vm.js +1 -1
- package/okdb-data/default/data.mdb +0 -0
- package/okdb-data/default/lock.mdb +0 -0
- package/okdb-data/~log/data.mdb +0 -0
- package/okdb-data/~log/lock.mdb +0 -0
- package/okdb-data/~system/data.mdb +0 -0
- package/okdb-data/~system/lock.mdb +0 -0
- package/public/images/logo.png +0 -0
- package/public/images/logo.svg +0 -333
|
@@ -1 +1 @@
|
|
|
1
|
-
function _0x5304(_0x52975e,_0xaca0fc){_0x52975e=_0x52975e-0xfe;const _0x560746=_0x5607();let _0x53044f=_0x560746[_0x52975e];return _0x53044f;}const _0x214a29=_0x5304;(function(_0x46ac77,_0x5b5237){const _0x2ecd12=_0x5304,_0x4ca6cf=_0x46ac77();while(!![]){try{const _0x21525d=-parseInt(_0x2ecd12(0x139))/0x1*(parseInt(_0x2ecd12(0x164))/0x2)+parseInt(_0x2ecd12(0x15e))/0x3*(-parseInt(_0x2ecd12(0x13a))/0x4)+-parseInt(_0x2ecd12(0x144))/0x5*(-parseInt(_0x2ecd12(0x117))/0x6)+-parseInt(_0x2ecd12(0x165))/0x7+-parseInt(_0x2ecd12(0x127))/0x8*(parseInt(_0x2ecd12(0x114))/0x9)+-parseInt(_0x2ecd12(0x175))/0xa+-parseInt(_0x2ecd12(0x12c))/0xb*(-parseInt(_0x2ecd12(0x10b))/0xc);if(_0x21525d===_0x5b5237)break;else _0x4ca6cf['push'](_0x4ca6cf['shift']());}catch(_0x379589){_0x4ca6cf['push'](_0x4ca6cf['shift']());}}}(_0x5607,0xb2a6a));import _0x14bae5 from'@toolkit/elements/ok-table.ok.js';function _0x5607(){const _0x3ec04d=['fetchDoc','chunked\x20·\x20','push','query\x20failed','/env/','busy','$watch','Rebuild\x20complete.','6dKamzu','flat','filter','name','min','modal','2FqxSjg','1963360ooYXyF','embedder','source_type','keys','loadEditAlgorithms','queryBusy','sourceType','$attr','queryResults','API','fields','start','map','slice','engine-updated','embed-search-panel','13783280QyXXVB','\x0a<engine-panel-shell\x0a\x20\x20:engine=\x22eng\x22\x0a\x20\x20:title=\x22name\x22\x0a\x20\x20type-label=\x22vector-search\x22\x0a\x20\x20type-color=\x22var(--okdb-accent)\x22\x0a\x20\x20:badges=\x22headerBadges\x22\x0a\x20\x20show-refresh=\x22true\x22\x0a\x20\x20fill=\x22true\x22\x0a\x20\x20:refresh-busy=\x22busy\x20||\x20queryBusy\x20||\x20actionBusy\x22\x0a\x20\x20:on-refresh=\x22()\x20=>\x20onRefresh()\x22\x0a\x20\x20:on-pipeline=\x22viewPipeline\x22\x0a\x20\x20@engine-updated=\x22$dispatch(\x27engine-updated\x27,\x20$event.detail)\x22\x0a\x20\x20@refresh=\x22$dispatch(\x27refresh\x27)\x22\x0a\x20\x20@deleted=\x22$dispatch(\x27deleted\x27,\x20$event.detail)\x22\x0a>\x0a\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:13px;\x22>{{\x20error\x20}}</div>\x0a\x20\x20</if>\x0a\x0a\x0a\x20\x20<if\x20:=\x22stats\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:8px;min-width:0;flex:1;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22pill-row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Vector\x20search\x20algorithm.\x22>{{\x20s.algorithm\x20||\x20\x27—\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Distance\x20metric.\x22>{{\x20metricValue\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Vector\x20dimensions.\x22>dims:\x20{{\x20dimsValue\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Backing\x20storage\x20key.\x22>store:\x20{{\x20storageKeyValue\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22chunkStrategy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Chunking\x20strategy\x20used\x20by\x20the\x20indexer.\x22>chunk:\x20{{\x20chunkStrategy\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22story-lead\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Query\x20the\x20live\x20vector\x20index\x20for\x20<strong>{{\x20storageKeyValue\x20}}</strong>\x20and\x20inspect\x20the\x20matched\x20source\x20chunks\x20below.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22story-note\x22>Use\x20text\x20search\x20here\x20to\x20validate\x20relevance\x20quickly.\x20Snapshot\x20and\x20rebuild\x20are\x20available\x20below\x20when\x20the\x20in-memory\x20index\x20needs\x20maintenance.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-grid\x20metric-grid--compact\x22\x20style=\x22min-width:min(100%,\x20360px);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Vectors</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22>{{\x20vectorCount\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Capacity</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20style=\x22font-size:18px;\x22>{{\x20capacityValue\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22wm\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:10px;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;justify-content:space-between;gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Performance</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!wm.searchOps\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;opacity:.4;font-style:italic;\x22>Run\x20a\x20search\x20to\x20populate\x20latency\x20metrics.</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-grid\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-cell\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-label\x22>Avg\x20latency</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-value\x22>{{\x20fmtMs(wm.searchLatencyAvgMs)\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-cell\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-label\x22>p95\x20latency</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-value\x22>{{\x20fmtMs(wm.searchLatencyP95Ms)\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-cell\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-label\x22>Searches</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-value\x22>{{\x20wm.searchOps\x20??\x200\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-cell\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-label\x22>Queue\x20depth</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-value\x22>{{\x20wm.pendingOps\x20??\x200\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22wm.workerMemory\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-cell\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-label\x22>Heap\x20used</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-value\x22\x20style=\x22font-size:15px;\x22>{{\x20fmtBytes(wm.workerMemory.heapUsed)\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-cell\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-label\x22>RSS</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-value\x22\x20style=\x22font-size:15px;\x22>{{\x20fmtBytes(wm.workerMemory.rss)\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<div\x20class=\x22card\x22\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:10px;\x20flex:1;\x20min-height:0;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:8px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Search\x20test</div>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22story-note\x22>Run\x20a\x20text\x20query\x20and\x20inspect\x20the\x20raw\x20chunk\x20hits\x20and\x20source\x20context.</span>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22!hasEmbedder\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.55;\x20font-size:12px;\x20font-style:italic;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20No\x20embedder\x20configured\x20—\x20text\x20queries\x20unavailable.\x20Pass\x20a\x20Float32Array\x20via\x20the\x20API\x20directly.\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:8px;\x20align-items:center;\x22>\x0a\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20style=\x22flex:1;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x22Enter\x20text\x20query…\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22queryText\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22queryText\x20=\x20$el.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20@keydown.enter=\x22runQuery\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22!hasEmbedder\x20||\x20!eng.isRunning\x22\x0a\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20type=\x22number\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20style=\x22width:72px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22queryLimit\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22queryLimit\x20=\x20Number($el.value)\x20||\x2010\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20min=\x221\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20max=\x22100\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Top-K\x22\x0a\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22runQuery\x22\x20:disabled=\x22queryBusy\x20||\x20!queryText.trim()\x20||\x20!eng.isRunning\x20||\x20!hasEmbedder\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20{{\x20queryBusy\x20?\x20\x27…\x27\x20:\x20\x27Search\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22queryError\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:13px;\x22>{{\x20queryError\x20}}</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22queryResults\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22overflow:auto;\x20min-height:0;\x20flex:1;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22queryResults.length\x20===\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.5;\x20font-size:13px;\x22>No\x20results.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ok-table\x20:data=\x22queryResults\x22\x20no-scroll\x20style=\x22width:100%;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<columns>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x2236px\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>#</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>{{\x20queryResults.indexOf(row)\x20+\x201\x20}}</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Key</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>{{\x20row.key\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.chunk\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22chunk-loc\x22\x20style=\x22margin-left:8px;\x22>{{\x20fmtRange(row.chunk)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x22200px\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Score</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22flex:1;\x20background:var(--okdb-app-border);\x20border-radius:4px;\x20height:6px;\x20overflow:hidden;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20:style=\x22\x27height:100%;\x20border-radius:4px;\x20background:\x27\x20+\x20scoreColor(row.score)\x20+\x20\x27;\x20width:\x27\x20+\x20scoreBar(row.score)\x20+\x20\x27%\x27\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x20opacity:.8;\x20min-width:42px;\x20text-align:right;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20(row.score\x20*\x20100).toFixed(1)\x20}}%\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</columns>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<expanded\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22padding:10px;\x20font-size:12px;\x20display:flex;\x20flex-direction:column;\x20gap:10px;\x22\x20:data-fetch=\x22autoFetch(row)\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Identity\x20line\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.6;\x20font-size:11px;\x20display:flex;\x20align-items:center;\x20gap:10px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>key:\x20<strong\x20style=\x22color:#fff;\x20opacity:1;\x22>{{\x20row.key\x20}}</strong></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22sourceType\x22><span>type:\x20<strong\x20style=\x22color:var(--okdb-accent);\x22>{{\x20sourceType\x20}}</strong></span></if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.chunk\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22chunk-loc\x22>{{\x20fmtRange(row.chunk)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.chunkHash\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.4;\x20font-family:monospace;\x20font-size:10px;\x22>{{\x20row.chunkHash\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20═══\x20CHUNKED\x20RESULT\x20═══════════════════════════════════════════\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.chunk\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Tier\x201:\x20Matched\x20chunk\x20text\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.5;\x20margin-bottom:4px;\x20display:flex;\x20align-items:center;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Matched\x20chunk</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!row.chunk.text\x20&&\x20usesNonTrivialPrepare\x20&&\x20getChunkText(row)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-warning);\x20font-size:10px;\x22\x20title=\x22Chunk\x20offsets\x20are\x20into\x20the\x20prepared\x20text;\x20extraction\x20from\x20the\x20raw\x20field\x20may\x20be\x20approximate.\x22>⚠\x20approximate</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20storeText:\x20true\x20—\x20text\x20carried\x20in\x20the\x20result\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.chunk.text\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22chunk-text\x22>{{\x20row.chunk.text\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20storeText:\x20false\x20—\x20extract\x20from\x20loaded\x20source\x20doc\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!row.chunk.text\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docCache[row.key]?.busy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.45;\x20font-size:11px;\x20padding:6px\x200;\x22>Loading\x20chunk…</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!docCache[row.key]?.busy\x20&&\x20getChunkText(row)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22chunk-text\x22>{{\x20getChunkText(row)\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!docCache[row.key]?.busy\x20&&\x20!getChunkText(row)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.4;\x20font-size:11px;\x20font-style:italic;\x20padding:4px\x200;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docCache[row.key]?.error\x22>Source\x20doc\x20unavailable.</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!docCache[row.key]?.error\x20&&\x20!sourceType\x22>No\x20source\x20type\x20—\x20cannot\x20look\x20up\x20chunk\x20text.</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!docCache[row.key]?.error\x20&&\x20sourceType\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Chunk\x20text\x20not\x20stored.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!eng.config?.field\x22>\x20No\x20field\x20configured.</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22eng.config?.field\x22>\x20Enable\x20<code>storeText:\x20true</code>\x20in\x20the\x20pipeline\x20to\x20store\x20it.</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Tier\x202:\x20\x22View\x20in\x20context\x20of\x20source\x22\x20collapsible\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22sourceType\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22doc-toggle\x22\x20@click=\x22toggleDocExpand(row)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docExpanded[row.key]\x22>▲\x20hide\x20source\x20context</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!docExpanded[row.key]\x22>▼\x20view\x20in\x20context\x20of\x20source</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docExpanded[row.key]\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-top:8px;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docCache[row.key]?.busy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.45;\x20font-size:11px;\x22>Loading\x20source…</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docCache[row.key]?.error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:12px;\x22>{{\x20docCache[row.key].error\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docCache[row.key]?.value\x20!==\x20undefined\x20&&\x20!docCache[row.key]?.error\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Field\x20known\x20+\x20value\x20present\x20→\x20show\x20highlighted\x20field\x20text\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22eng.config?.field\x20&&\x20docCache[row.key].value?.[eng.config.field]\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.5;\x20margin-bottom:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Field\x20<strong\x20style=\x22color:#fff;\x20opacity:.9;\x22>{{\x20eng.config.field\x20}}</strong>\x20—\x20matched\x20range\x20highlighted\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22usesNonTrivialPrepare\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-warning);\x22\x20title=\x22The\x20pipeline\x20uses\x20prepare:\x27{{\x20stats.indexer.prepare\x20}}\x27.\x20Chunk\x20offsets\x20are\x20into\x20the\x20prepared\x20text,\x20so\x20the\x20highlight\x20position\x20in\x20the\x20raw\x20field\x20is\x20approximate.\x22>\x20⚠\x20approximate\x20(prepare:\x20{{\x20stats.indexer.prepare\x20}})</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22chunk-text\x20chunk-text--ctx\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22splitHighlight(String(docCache[row.key].value[eng.config.field]\x20??\x20\x27\x27),\x20row.chunk)\x22\x20let:item=\x22seg\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:class=\x22seg.highlight\x20?\x20\x27chunk-hl\x27\x20:\x20\x27\x27\x22>{{\x20seg.text\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20No\x20field\x20or\x20field\x20value\x20missing\x20→\x20fall\x20back\x20to\x20full\x20doc\x20JSON\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!(eng.config?.field\x20&&\x20docCache[row.key].value?.[eng.config.field])\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20style=\x22margin:0;\x20white-space:pre-wrap;\x20word-break:break-all;\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px;\x20font-size:11px;\x20max-height:300px;\x20overflow:auto;\x20color:#a5f3fc;\x22>{{\x20fmtDoc(docCache[row.key].value)\x20}}</pre>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!sourceType\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.45;\x20font-size:11px;\x22>No\x20source\x20type\x20linked\x20—\x20cannot\x20load\x20source\x20document.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20═══\x20END\x20CHUNKED\x20══════════════════════════════════════════════\x20-->\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20═══\x20NON-CHUNKED\x20RESULT:\x20show\x20source\x20doc\x20directly\x20(unchanged)\x20═\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!row.chunk\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22sourceType\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docCache[row.key]?.busy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.5;\x20font-size:11px;\x22>Loading…</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docCache[row.key]?.error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20margin-top:4px;\x22>{{\x20docCache[row.key].error\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docCache[row.key]?.value\x20!==\x20undefined\x20&&\x20!docCache[row.key]?.error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20style=\x22margin:0;\x20white-space:pre-wrap;\x20word-break:break-all;\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px;\x20font-size:11px;\x20max-height:220px;\x20overflow:auto;\x20color:#a5f3fc;\x22>{{\x20fmtDoc(docCache[row.key].value)\x20}}</pre>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!sourceType\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.5;\x20font-size:11px;\x22>No\x20source\x20type\x20linked\x20—\x20cannot\x20look\x20up\x20original\x20document.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20═══\x20END\x20NON-CHUNKED\x20══════════════════════════════════════════\x20-->\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</expanded>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</ok-table>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20</div>\x0a\x0a\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;justify-content:space-between;gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Index\x20details</div>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22!editMode\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20style=\x22font-size:12px;padding:3px\x2010px;\x22\x20@click=\x22openEditConfig\x22\x20:disabled=\x22!eng.isRunning\x20&&\x20!eng.config\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Edit\x20config\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22!editMode\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22kv-grid\x20kv-grid--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>algorithm</span><span\x20class=\x22kv-val\x22>{{\x20s.algorithm\x20||\x20eng.config?.algorithm\x20||\x20\x27—\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>metric</span><span\x20class=\x22kv-val\x22>{{\x20metricValue\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>dims</span><span\x20class=\x22kv-val\x22>{{\x20dimsValue\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>storage\x20key</span><span\x20class=\x22kv-val\x22>{{\x20storageKeyValue\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22s.role\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>role</span><span\x20class=\x22kv-val\x22>{{\x20s.role\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22s.M\x20!=\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>M</span><span\x20class=\x22kv-val\x22>{{\x20s.M\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>efConstruction</span><span\x20class=\x22kv-val\x22>{{\x20s.efConstruction\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>efSearch</span><span\x20class=\x22kv-val\x22>{{\x20s.efSearch\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22s.connectivity\x20!=\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>connectivity</span><span\x20class=\x22kv-val\x22>{{\x20s.connectivity\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>expansion\x20search</span><span\x20class=\x22kv-val\x22>{{\x20s.expansionSearch\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22s.changesSince\x20!=\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>changes\x20since\x20snap</span><span\x20class=\x22kv-val\x22>{{\x20s.changesSince\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22s.latestSnapshot\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>last\x20snapshot</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-val\x22\x20style=\x22font-size:11px;\x20word-break:break-all;\x22>{{\x20s.latestSnapshot\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22editMode\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22edit-form\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22edit-note\x22>Saving\x20will\x20restart\x20the\x20engine\x20to\x20apply\x20the\x20new\x20algorithm.\x20stats_data\x20and\x20storage\x20remain\x20intact.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22edit-label\x22>Algorithm</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<select\x20:value=\x22editAlgorithm\x22\x20@change=\x22onEditAlgorithmChange($el.value)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22editAlgorithms\x22\x20let:item=\x22alg\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22alg.key\x22\x20:selected=\x22alg.key\x20===\x20editAlgorithm\x22>{{\x20alg.label\x20||\x20alg.key\x20}}</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22editAlgorithmNote\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22edit-hint\x22>{{\x20editAlgorithmNote\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22editAlgorithmFields\x22\x20let:item=\x22field\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22edit-label\x22>{{\x20field.label\x20||\x20field.key\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22field.type\x20===\x20\x27select\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20:value=\x22editAlgConfig[field.key]\x22\x20@change=\x22editAlgConfig\x20=\x20{\x20...editAlgConfig,\x20[field.key]:\x20$el.value\x20}\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22field.options\x22\x20let:item=\x22opt\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22opt.value\x22\x20:selected=\x22opt.value\x20===\x20editAlgConfig[field.key]\x22>{{\x20opt.label\x20}}</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22field.type\x20!==\x20\x27select\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:type=\x22field.type\x20===\x20\x27number\x27\x20?\x20\x27number\x27\x20:\x20\x27text\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22editAlgConfig[field.key]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22editAlgConfig\x20=\x20{\x20...editAlgConfig,\x20[field.key]:\x20$el.value\x20}\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:placeholder=\x22field.placeholder\x20??\x20\x27\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:min=\x22field.min\x20??\x20undefined\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22field.hint\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22edit-hint\x22>{{\x20field.hint\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22editError\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);font-size:13px;\x22>{{\x20editError\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;gap:8px;margin-top:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22saveConfig\x22\x20:disabled=\x22editBusy\x22>{{\x20editBusy\x20?\x20\x27Saving…\x27\x20:\x20\x27Save\x20&\x20restart\x27\x20}}</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22closeEditConfig\x22\x20:disabled=\x22editBusy\x22\x20style=\x22opacity:.7;\x22>Cancel</button>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a\x0a\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Maintenance</div>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:10px;\x20flex-wrap:wrap;\x20align-items:center;\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22snapshot\x22\x20:disabled=\x22actionBusy\x20||\x20!eng.isRunning\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20{{\x20actionBusy\x20?\x20\x27…\x27\x20:\x20\x27Snapshot\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22rebuild\x22\x20:disabled=\x22actionBusy\x20||\x20!eng.isRunning\x22\x20style=\x22color:var(--okdb-warning);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20{{\x20actionBusy\x20?\x20\x27…\x27\x20:\x20\x27Rebuild\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22story-note\x22>Snapshot\x20current\x20state\x20for\x20faster\x20reloads,\x20or\x20rebuild\x20when\x20the\x20in-memory\x20index\x20drifts\x20from\x20storage.</span>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<if\x20:=\x22actionResult\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-success);\x20font-size:13px;\x22>{{\x20actionResult\x20}}</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20<if\x20:=\x22actionError\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:13px;\x22>{{\x20actionError\x20}}</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a</engine-panel-shell>\x0a','editAlgorithms','editAlgorithmFields','POST','metric','PATCH','editMode','fromEntries','var(--okdb-purple)','engine','queryText','$dispatch','strategy','type','/item/','<1ms','trim','12mJtdlX','algorithm_config','search','stats','maxElements','var(--okdb-danger)','_pipelineUrl','_buildEditAlgConfig','var(--okdb-warning)','9eoReMX','snapshot\x20failed','field','3537582ACGeEO','docCache','$ok','editAlgConfig','$el','note','message','application/json','source_env','var(--okdb-orange)','_seedEditAlgConfig','editAlgorithm','key','toFixed','confirm','text','257144cmtQFe','/snapshot','not\x20found','queryLimit','editBusy','36472117DtBmrg','shared','\x0a\x20\x20.kv-grid\x20{\x20grid-template-columns:160px\x201fr;\x20}\x0a\x20\x20.chunk-loc\x20\x20{\x20font-size:11px;\x20color:var(--okdb-orange);\x20opacity:.9;\x20white-space:nowrap;\x20}\x0a\x20\x20.chunk-text\x20{\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px;\x20font-size:11px;\x20max-height:160px;\x20overflow:auto;\x20white-space:pre-wrap;\x20word-break:break-word;\x20line-height:1.5;\x20}\x0a\x20\x20.chunk-text--ctx\x20{\x20max-height:300px;\x20}\x0a\x20\x20.chunk-hl\x20\x20\x20{\x20background:color-mix(in\x20srgb,\x20var(--okdb-orange)\x2013%,\x20transparent);\x20border-bottom:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-orange)\x2053%,\x20transparent);\x20color:#fed7aa;\x20}\x0a\x20\x20.doc-toggle\x20{\x20font-size:11px;\x20color:var(--okdb-accent);\x20cursor:pointer;\x20opacity:.75;\x20background:none;\x20border:none;\x20padding:0;\x20}\x0a\x20\x20.doc-toggle:hover\x20{\x20opacity:1;\x20}\x0a\x20\x20.approx-note\x20{\x20font-size:10px;\x20opacity:.45;\x20margin-top:3px;\x20}\x0a\x20\x20.perf-grid\x20{\x20display:grid;\x20grid-template-columns:repeat(auto-fill,minmax(110px,1fr));\x20gap:8px;\x20}\x0a\x20\x20.perf-cell\x20{\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:8px;\x20padding:8px\x2010px;\x20}\x0a\x20\x20.perf-label\x20{\x20font-size:10px;\x20opacity:.5;\x20text-transform:uppercase;\x20letter-spacing:.05em;\x20margin-bottom:4px;\x20}\x0a\x20\x20.perf-value\x20{\x20font-size:18px;\x20font-weight:600;\x20color:var(--okdb-accent);\x20}\x0a\x20\x20.perf-unit\x20\x20{\x20font-size:11px;\x20opacity:.55;\x20margin-left:2px;\x20}\x0a\x20\x20.edit-form\x20\x20{\x20display:grid;\x20grid-template-columns:140px\x201fr;\x20gap:8px\x2012px;\x20align-items:start;\x20font-size:13px;\x20}\x0a\x20\x20.edit-form\x20select,\x20.edit-form\x20input\x20{\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:6px;\x20padding:6px\x208px;\x20color:inherit;\x20font-size:13px;\x20width:100%;\x20box-sizing:border-box;\x20}\x0a\x20\x20.edit-form\x20select:focus,\x20.edit-form\x20input:focus\x20{\x20outline:none;\x20border-color:var(--okdb-accent);\x20}\x0a\x20\x20.edit-label\x20{\x20opacity:.65;\x20text-align:right;\x20padding-top:7px;\x20}\x0a\x20\x20.edit-hint\x20\x20{\x20font-size:11px;\x20opacity:.4;\x20font-style:italic;\x20margin-top:2px;\x20grid-column:2;\x20}\x0a\x20\x20.edit-note\x20\x20{\x20font-size:12px;\x20opacity:.55;\x20background:color-mix(in\x20srgb,\x20var(--okdb-warning)\x208%,\x20transparent);\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-warning)\x2025%,\x20transparent);\x20border-radius:6px;\x20padding:7px\x2010px;\x20grid-column:1/-1;\x20}\x0a','/rebuild','length','algorithm','error','var(--okdb-success)','actionError','editAlgorithmMap','docExpanded','json','eng','717393HAkwTl','1530292KPoFLT','isConnected','config','round','max','load','value','data','workerMetrics','chunk','5ERMRZF','actionBusy','isArray','actionResult','number','end','/query','queryError','default','count','\x20GB','result','\x20KB','rebuild\x20failed','Take\x20a\x20snapshot\x20now?','save\x20failed','/embeddings/engines/','editError'];_0x5607=function(){return _0x3ec04d;};return _0x5607();}import _0x81180e from'../../engines/parts/engine-panel-shell.ok.js';import{ENGINE_PANEL_SHARED_STYLE as _0x3bc99f}from'../../engines/engine-panel-shared-style.js';import{buildEmbeddingsPipelineUrl as _0x2bc020,dispatchEnginePipelineSelection as _0x149b46}from'../../engines/engine-ui-utils.js';const a=_0x3bc99f+_0x214a29(0x12e);export default{'tag':_0x214a29(0x174),'dependencies':[_0x14bae5,_0x81180e],'attr':{'name':{},'engine':{}},'context':_0x557513=>({'busy':!0x1,'stats':null,'error':null,'actionBusy':!0x1,'actionResult':null,'actionError':null,'queryText':'','queryLimit':0xa,'queryResults':null,'queryBusy':!0x1,'queryError':null,'docCache':{},'docExpanded':{},'editMode':!0x1,'editBusy':!0x1,'editError':null,'editAlgorithm':null,'editAlgConfig':{},'editAlgorithms':[],'editAlgorithmMap':{},get 'eng'(){const _0xe60470=_0x214a29;return _0x557513[_0xe60470(0x16c)][_0xe60470(0x103)]??{};},get 'name'(){const _0x4ff706=_0x214a29;return _0x557513['$attr'][_0x4ff706(0x161)];},get '_pipelineUrl'(){const _0x5db0aa=_0x214a29;return _0x2bc020(this[_0x5db0aa(0x138)],this['name']);},get 's'(){const _0x5bbd8f=_0x214a29;return this[_0x5bbd8f(0x10e)]?.[_0x5bbd8f(0x10d)]??this[_0x5bbd8f(0x10e)]??{};},get 'hasEmbedder'(){const _0x44f4b3=_0x214a29;return!!this[_0x44f4b3(0x138)][_0x44f4b3(0x13c)]?.[_0x44f4b3(0x166)];},get 'sourceType'(){const _0x297188=_0x214a29;return this[_0x297188(0x10e)]?.['type']??this['s']?.[_0x297188(0x167)]??this['eng'][_0x297188(0x13c)]?.[_0x297188(0x167)]??null;},get 'vectorCount'(){const _0x11f3d0=_0x214a29;return this['s'][_0x11f3d0(0x14d)]??0x0;},get 'capacityValue'(){const _0x444043=_0x214a29;return this['s'][_0x444043(0x10f)]??'∞';},get 'dimsValue'(){return this['s']['dims']??'—';},get 'metricValue'(){const _0x1e314d=_0x214a29;return this['s'][_0x1e314d(0xfe)]||'—';},get 'storageKeyValue'(){return this['s']['storage_key']||'—';},get 'chunkStrategy'(){const _0x72a44=_0x214a29;return this['s'][_0x72a44(0x143)]?.[_0x72a44(0x106)]||null;},get 'wm'(){const _0x3aad1d=_0x214a29;return this['s'][_0x3aad1d(0x142)]??null;},get 'headerBadges'(){const _0x1d4da0=_0x214a29,_0x1c6d36=[];return this['s'][_0x1d4da0(0x131)]&&_0x1c6d36[_0x1d4da0(0x158)]({'text':this['s']['algorithm'],'color':_0x1d4da0(0x102)}),this['s'][_0x1d4da0(0x143)]&&_0x1c6d36['push']({'text':_0x1d4da0(0x157)+this['s'][_0x1d4da0(0x143)][_0x1d4da0(0x106)],'color':_0x1d4da0(0x120)}),_0x1c6d36;},get 'usesNonTrivialPrepare'(){const _0x443a10=_0x214a29,_0x50ec5f=this[_0x443a10(0x10e)]?.['indexer']?.['prepare'];return!!_0x50ec5f&&'none'!==_0x50ec5f;},'fmtBytes':_0xb1bad6=>null==_0xb1bad6?'—':_0xb1bad6>=0x40000000?(_0xb1bad6/0x40000000)[_0x214a29(0x124)](0x1)+_0x214a29(0x14e):_0xb1bad6>=0x100000?(_0xb1bad6/0x100000)[_0x214a29(0x124)](0x1)+'\x20MB':_0xb1bad6>=0x400?(_0xb1bad6/0x400)[_0x214a29(0x124)](0x0)+_0x214a29(0x150):_0xb1bad6+'\x20B','fmtMs':_0x31dd51=>null==_0x31dd51?'—':_0x31dd51<0x1?_0x214a29(0x109):_0x31dd51+'ms',async 'loadEditAlgorithms'(){const _0x3d46ac=_0x214a29;if(!this[_0x3d46ac(0x177)][_0x3d46ac(0x130)])try{const _0x6bfad9=await fetch(__ENV__['API']+'/embeddings/algorithms'),_0x2aa448=await _0x6bfad9[_0x3d46ac(0x137)]();this[_0x3d46ac(0x177)]=_0x2aa448[_0x3d46ac(0x141)]||[],this[_0x3d46ac(0x135)]=Object[_0x3d46ac(0x101)](this[_0x3d46ac(0x177)][_0x3d46ac(0x171)](_0x12409e=>[_0x12409e[_0x3d46ac(0x123)],_0x12409e]));}catch{this['editAlgorithms']=[];}},get 'editAlgorithmFields'(){const _0x1a837e=_0x214a29;return this[_0x1a837e(0x135)][this['editAlgorithm']]?.[_0x1a837e(0x16f)]??[];},get 'editAlgorithmNote'(){const _0x1bfa53=_0x214a29;return this['editAlgorithmMap'][this[_0x1bfa53(0x122)]]?.[_0x1bfa53(0x11c)]??null;},async 'openEditConfig'(){const _0x1221e8=_0x214a29;await this[_0x1221e8(0x169)]();const _0x50b9ae=this[_0x1221e8(0x138)][_0x1221e8(0x13c)]??{};this[_0x1221e8(0x122)]=_0x50b9ae[_0x1221e8(0x131)]??_0x1221e8(0x15f),this[_0x1221e8(0x121)](this[_0x1221e8(0x122)],_0x50b9ae[_0x1221e8(0x10c)]??{}),this['editMode']=!0x0,this[_0x1221e8(0x155)]=null;},'closeEditConfig'(){const _0x482047=_0x214a29;this[_0x482047(0x100)]=!0x1,this[_0x482047(0x155)]=null;},'_seedEditAlgConfig'(_0x1cf2d5,_0xb304dd={}){const _0x136eeb=_0x214a29,_0x548c73=this[_0x136eeb(0x135)][_0x1cf2d5]?.[_0x136eeb(0x16f)]??[],_0x22107e={};for(const _0x567052 of _0x548c73)_0x22107e[_0x567052['key']]=_0xb304dd[_0x567052['key']]??_0x567052[_0x136eeb(0x14c)]??'';this[_0x136eeb(0x11a)]=_0x22107e;},'onEditAlgorithmChange'(_0x51221a){const _0x3efda7=_0x214a29;this['editAlgorithm']=_0x51221a;const _0x2f459e=this[_0x3efda7(0x138)][_0x3efda7(0x13c)]?.[_0x3efda7(0x131)]===_0x51221a?this['eng'][_0x3efda7(0x13c)]?.[_0x3efda7(0x10c)]??{}:{};this['_seedEditAlgConfig'](_0x51221a,_0x2f459e);},'_buildEditAlgConfig'(){const _0x2857d1=_0x214a29,_0x1d956e={};for(const _0x471423 of this[_0x2857d1(0x178)]){const _0x1030ff=this['editAlgConfig'][_0x471423[_0x2857d1(0x123)]];''!==_0x1030ff&&null!=_0x1030ff&&(_0x1d956e[_0x471423[_0x2857d1(0x123)]]=_0x2857d1(0x148)===_0x471423[_0x2857d1(0x107)]?Number(_0x1030ff):_0x1030ff);}return Object[_0x2857d1(0x168)](_0x1d956e)[_0x2857d1(0x130)]>0x0?_0x1d956e:void 0x0;},async 'saveConfig'(){const _0x1a4dce=_0x214a29;this[_0x1a4dce(0x12b)]=!0x0,this[_0x1a4dce(0x155)]=null;try{const _0x3b9189=this[_0x1a4dce(0x112)](),_0x665ec3={'algorithm':this[_0x1a4dce(0x122)]};_0x3b9189?_0x665ec3['algorithm_config']=_0x3b9189:delete _0x665ec3['algorithm_config'];const _0xba15cf=await fetch(__ENV__[_0x1a4dce(0x16e)]+_0x1a4dce(0x154)+encodeURIComponent(this[_0x1a4dce(0x138)][_0x1a4dce(0x123)]),{'method':_0x1a4dce(0xff),'headers':{'Content-Type':'application/json'},'body':JSON['stringify']({'config':_0x665ec3})}),_0x4d0c18=await _0xba15cf[_0x1a4dce(0x137)]();if(!_0xba15cf['ok'])throw new Error(_0x4d0c18?.['error']?.[_0x1a4dce(0x11d)]||_0x1a4dce(0x153));this[_0x1a4dce(0x100)]=!0x1,_0x557513[_0x1a4dce(0x105)](_0x1a4dce(0x173),_0x4d0c18[_0x1a4dce(0x14f)]??_0x4d0c18[_0x1a4dce(0x141)]),await this[_0x1a4dce(0x13f)]();}catch(_0x562ad5){this[_0x1a4dce(0x155)]=_0x562ad5?.[_0x1a4dce(0x11d)]||String(_0x562ad5);}finally{this[_0x1a4dce(0x12b)]=!0x1;}},async 'load'(){const _0x3cd1e2=_0x214a29;this['busy']=!0x0,this[_0x3cd1e2(0x132)]=null;try{const _0x1c8793=await fetch(this[_0x3cd1e2(0x111)]+'/stats'),_0x1bf98d=await _0x1c8793[_0x3cd1e2(0x137)]();if(!_0x1c8793['ok'])throw new Error(_0x1bf98d?.[_0x3cd1e2(0x132)]?.[_0x3cd1e2(0x11d)]||'failed');this[_0x3cd1e2(0x10e)]=_0x1bf98d[_0x3cd1e2(0x141)];}catch(_0x4d620a){this[_0x3cd1e2(0x132)]=_0x4d620a?.[_0x3cd1e2(0x11d)]||String(_0x4d620a),this[_0x3cd1e2(0x10e)]=null;}finally{this[_0x3cd1e2(0x15b)]=!0x1;}},async 'snapshot'(){const _0x3a46d6=_0x214a29;if(await _0x557513[_0x3a46d6(0x119)][_0x3a46d6(0x12d)]['modal']['confirm'](_0x3a46d6(0x152))){this[_0x3a46d6(0x145)]=!0x0,this[_0x3a46d6(0x147)]=null,this[_0x3a46d6(0x134)]=null;try{const _0x7c60ec=await fetch(this[_0x3a46d6(0x111)]+_0x3a46d6(0x128),{'method':_0x3a46d6(0x179)}),_0x51d71b=await _0x7c60ec[_0x3a46d6(0x137)]();if(!_0x7c60ec['ok'])throw new Error(_0x51d71b?.[_0x3a46d6(0x132)]?.[_0x3a46d6(0x11d)]||_0x3a46d6(0x115));this['actionResult']=_0x51d71b['data']?.['snapped']?'Snapshot\x20published.':'No\x20snapshot\x20needed\x20(up\x20to\x20date).',await this['load']();}catch(_0x31cf78){this['actionError']=_0x31cf78?.[_0x3a46d6(0x11d)]||String(_0x31cf78);}finally{this[_0x3a46d6(0x145)]=!0x1;}}},async 'rebuild'(){const _0x5f26d1=_0x214a29;if(await _0x557513[_0x5f26d1(0x119)][_0x5f26d1(0x12d)][_0x5f26d1(0x163)][_0x5f26d1(0x125)]('Rebuild\x20the\x20full\x20index\x20from\x20storage?\x20This\x20may\x20take\x20a\x20while.')){this[_0x5f26d1(0x145)]=!0x0,this['actionResult']=null,this[_0x5f26d1(0x134)]=null;try{const _0x1fb1dd=await fetch(this[_0x5f26d1(0x111)]+_0x5f26d1(0x12f),{'method':_0x5f26d1(0x179)}),_0x3d8887=await _0x1fb1dd[_0x5f26d1(0x137)]();if(!_0x1fb1dd['ok'])throw new Error(_0x3d8887?.[_0x5f26d1(0x132)]?.[_0x5f26d1(0x11d)]||_0x5f26d1(0x151));this[_0x5f26d1(0x147)]=_0x5f26d1(0x15d),await this[_0x5f26d1(0x13f)]();}catch(_0x53c3bc){this[_0x5f26d1(0x134)]=_0x53c3bc?.[_0x5f26d1(0x11d)]||String(_0x53c3bc);}finally{this[_0x5f26d1(0x145)]=!0x1;}}},async 'runQuery'(){const _0x320e74=_0x214a29,_0x63534c=String(this[_0x320e74(0x104)]||'')[_0x320e74(0x10a)]();if(_0x63534c){this[_0x320e74(0x16a)]=!0x0,this['queryError']=null,this[_0x320e74(0x16d)]=null,this[_0x320e74(0x118)]={},this['docExpanded']={};try{const _0x3ed619=await fetch(this[_0x320e74(0x111)]+_0x320e74(0x14a),{'method':'POST','headers':{'Content-Type':_0x320e74(0x11e)},'body':JSON['stringify']({'query':_0x63534c,'limit':Number(this[_0x320e74(0x12a)])||0xa})}),_0x20a4e8=await _0x3ed619['json']();if(!_0x3ed619['ok'])throw new Error(_0x20a4e8?.[_0x320e74(0x132)]?.[_0x320e74(0x11d)]||_0x320e74(0x159));this[_0x320e74(0x16d)]=_0x20a4e8['data']||[];}catch(_0x56ddc8){this[_0x320e74(0x14b)]=_0x56ddc8?.[_0x320e74(0x11d)]||String(_0x56ddc8);}finally{this[_0x320e74(0x16a)]=!0x1;}}},'scoreBar':_0x4f28f3=>Math[_0x214a29(0x13d)](0x64*Math[_0x214a29(0x162)](0x1,Math[_0x214a29(0x13e)](0x0,_0x4f28f3))),'scoreColor':_0x3b784b=>_0x3b784b>=0.8?_0x214a29(0x133):_0x3b784b>=0.5?_0x214a29(0x113):_0x214a29(0x110),get 'isChunked'(){const _0x62bf5a=_0x214a29;return Array[_0x62bf5a(0x146)](this[_0x62bf5a(0x16d)])&&this['queryResults']['some'](_0x2f0008=>_0x2f0008[_0x62bf5a(0x143)]);},'fmtRange':_0x27ff18=>_0x27ff18?'chars\x20'+_0x27ff18[_0x214a29(0x170)]+'–'+_0x27ff18[_0x214a29(0x149)]:'','autoFetch'(_0xff5d4b){const _0x40fa2f=_0x214a29;return!this['sourceType']||this['docCache'][_0xff5d4b[_0x40fa2f(0x123)]]||!!_0xff5d4b['chunk']?.['text']||this[_0x40fa2f(0x156)](_0xff5d4b),null;},async 'fetchDoc'(_0x2c8bba){const _0x7bff10=_0x214a29,_0x55afff=this[_0x7bff10(0x16b)];if(!_0x55afff)return;const _0x372c0d=_0x2c8bba[_0x7bff10(0x123)];this[_0x7bff10(0x118)][_0x372c0d]={'busy':!0x0,'value':void 0x0,'error':null};try{const _0x42ca20=this[_0x7bff10(0x138)]['config']?.[_0x7bff10(0x11f)]??'default',_0x5b5b02=__ENV__[_0x7bff10(0x16e)]+_0x7bff10(0x15a)+encodeURIComponent(_0x42ca20),_0x19f2e5=await fetch(_0x5b5b02+'/type/'+encodeURIComponent(_0x55afff)+_0x7bff10(0x108)+encodeURIComponent(_0x372c0d)),_0x35d206=await _0x19f2e5['json']();if(!_0x19f2e5['ok'])throw new Error(_0x35d206?.[_0x7bff10(0x132)]?.[_0x7bff10(0x11d)]||_0x7bff10(0x129));this['docCache'][_0x372c0d]={'busy':!0x1,'value':_0x35d206[_0x7bff10(0x141)]?.[_0x7bff10(0x140)]??null,'error':null};}catch(_0x18ef18){this[_0x7bff10(0x118)][_0x372c0d]={'busy':!0x1,'value':void 0x0,'error':_0x18ef18?.[_0x7bff10(0x11d)]||String(_0x18ef18)};}},'toggleDocExpand'(_0x377ade){const _0x47cc1f=_0x214a29,_0x450077=_0x377ade[_0x47cc1f(0x123)];this['docExpanded'][_0x450077]=!this['docExpanded'][_0x450077],this[_0x47cc1f(0x136)][_0x450077]&&!this[_0x47cc1f(0x118)][_0x450077]&&this['fetchDoc'](_0x377ade);},'fmtDoc'(_0x4cb1ce){try{return JSON['stringify'](_0x4cb1ce,null,0x2);}catch{return String(_0x4cb1ce);}},'getChunkText'(_0x2e2ea8){const _0x35a7c4=_0x214a29;if(_0x2e2ea8['chunk']?.['text'])return _0x2e2ea8['chunk'][_0x35a7c4(0x126)];const _0x67eb34=this[_0x35a7c4(0x138)]['config']?.[_0x35a7c4(0x116)],_0x2437c6=this[_0x35a7c4(0x118)][_0x2e2ea8[_0x35a7c4(0x123)]];if(!_0x67eb34||!_0x2437c6?.[_0x35a7c4(0x140)]||!_0x2e2ea8['chunk'])return null;const _0x1387e5=_0x2437c6[_0x35a7c4(0x140)][_0x67eb34];return'string'!=typeof _0x1387e5?null:_0x1387e5[_0x35a7c4(0x172)](_0x2e2ea8[_0x35a7c4(0x143)][_0x35a7c4(0x170)],_0x2e2ea8['chunk'][_0x35a7c4(0x149)])||null;},'splitHighlight'(_0xe877a4,_0x141f37){const _0x2a6f96=_0x214a29;if(!_0x141f37||!_0xe877a4||'string'!=typeof _0xe877a4)return null;const {start:_0x371d04,end:_0x2cfca0}=_0x141f37;if('number'!=typeof _0x371d04||_0x2a6f96(0x148)!=typeof _0x2cfca0)return null;const _0x195e29=Math[_0x2a6f96(0x13e)](0x0,_0x371d04),_0x1c4f3a=Math['min'](_0xe877a4[_0x2a6f96(0x130)],Math[_0x2a6f96(0x13e)](_0x195e29,_0x2cfca0));return _0x195e29>=_0x1c4f3a?[{'text':_0xe877a4,'highlight':!0x1}]:[{'text':_0xe877a4[_0x2a6f96(0x172)](0x0,_0x195e29),'highlight':!0x1},{'text':_0xe877a4[_0x2a6f96(0x172)](_0x195e29,_0x1c4f3a),'highlight':!0x0},{'text':_0xe877a4['slice'](_0x1c4f3a),'highlight':!0x1}][_0x2a6f96(0x160)](_0x5686c6=>_0x5686c6[_0x2a6f96(0x126)][_0x2a6f96(0x130)]>0x0);},async 'onRefresh'(){const _0x4e832f=_0x214a29;this[_0x4e832f(0x16d)]=null,this[_0x4e832f(0x136)]={},await this['load']();},'viewPipeline'(){const _0x157fb5=_0x214a29;_0x149b46(_0x557513,this[_0x157fb5(0x138)]);}}),async 'init'(_0x3bc72e){const _0x3c6514=_0x214a29;_0x3bc72e[_0x3c6514(0x15c)](()=>_0x3bc72e[_0x3c6514(0x16c)][_0x3c6514(0x161)],async()=>{const _0x1a3f05=_0x3c6514;this[_0x1a3f05(0x10e)]=null,this[_0x1a3f05(0x16d)]=null,this[_0x1a3f05(0x136)]={},await this[_0x1a3f05(0x13f)]();}),await this[_0x3c6514(0x13f)]();const _0x1321f9=_0x3bc72e[_0x3c6514(0x11b)]??_0x3bc72e['$host']??null,_0x555dde=setInterval(async()=>{const _0x562c86=_0x3c6514;if(!_0x1321f9||_0x1321f9[_0x562c86(0x13b)]){if(!this['busy']&&!this[_0x562c86(0x12b)]&&!this[_0x562c86(0x100)])try{await this['load']();}catch{}}else clearInterval(_0x555dde);},0x1388);},'template':_0x214a29(0x176),'style':a};
|
|
1
|
+
const _0x6bfff0=_0x468a;(function(_0x415dbb,_0x2a8237){const _0x5b4a0e=_0x468a,_0x4f05ad=_0x415dbb();while(!![]){try{const _0x2ec53a=parseInt(_0x5b4a0e(0x155))/0x1*(parseInt(_0x5b4a0e(0x184))/0x2)+-parseInt(_0x5b4a0e(0x15d))/0x3*(-parseInt(_0x5b4a0e(0x15b))/0x4)+-parseInt(_0x5b4a0e(0x12e))/0x5+parseInt(_0x5b4a0e(0x15a))/0x6*(parseInt(_0x5b4a0e(0x125))/0x7)+-parseInt(_0x5b4a0e(0x128))/0x8+parseInt(_0x5b4a0e(0x147))/0x9+parseInt(_0x5b4a0e(0x140))/0xa*(-parseInt(_0x5b4a0e(0x16a))/0xb);if(_0x2ec53a===_0x2a8237)break;else _0x4f05ad['push'](_0x4f05ad['shift']());}catch(_0x398fbf){_0x4f05ad['push'](_0x4f05ad['shift']());}}}(_0x3d06,0xac32a));import _0x20c2f1 from'@toolkit/elements/ok-table.ok.js';import _0x9c39cd from'../../engines/parts/engine-panel-shell.ok.js';import{ENGINE_PANEL_SHARED_STYLE as _0x78b9e2}from'../../engines/engine-panel-shared-style.js';import{buildEmbeddingsPipelineUrl as _0x709943,dispatchEnginePipelineSelection as _0x38d32f}from'../../engines/engine-ui-utils.js';const a=_0x78b9e2+'\x0a\x20\x20.kv-grid\x20{\x20grid-template-columns:160px\x201fr;\x20}\x0a\x20\x20.chunk-loc\x20\x20{\x20font-size:11px;\x20color:var(--okdb-orange);\x20opacity:.9;\x20white-space:nowrap;\x20}\x0a\x20\x20.chunk-text\x20{\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px;\x20font-size:11px;\x20max-height:160px;\x20overflow:auto;\x20white-space:pre-wrap;\x20word-break:break-word;\x20line-height:1.5;\x20}\x0a\x20\x20.chunk-text--ctx\x20{\x20max-height:300px;\x20}\x0a\x20\x20.chunk-hl\x20\x20\x20{\x20background:color-mix(in\x20srgb,\x20var(--okdb-orange)\x2013%,\x20transparent);\x20border-bottom:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-orange)\x2053%,\x20transparent);\x20color:#fed7aa;\x20}\x0a\x20\x20.doc-toggle\x20{\x20font-size:11px;\x20color:var(--okdb-accent);\x20cursor:pointer;\x20opacity:.75;\x20background:none;\x20border:none;\x20padding:0;\x20}\x0a\x20\x20.doc-toggle:hover\x20{\x20opacity:1;\x20}\x0a\x20\x20.approx-note\x20{\x20font-size:10px;\x20opacity:.45;\x20margin-top:3px;\x20}\x0a\x20\x20.perf-grid\x20{\x20display:grid;\x20grid-template-columns:repeat(auto-fill,minmax(110px,1fr));\x20gap:8px;\x20}\x0a\x20\x20.perf-cell\x20{\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:8px;\x20padding:8px\x2010px;\x20}\x0a\x20\x20.perf-label\x20{\x20font-size:10px;\x20opacity:.5;\x20text-transform:uppercase;\x20letter-spacing:.05em;\x20margin-bottom:4px;\x20}\x0a\x20\x20.perf-value\x20{\x20font-size:18px;\x20font-weight:600;\x20color:var(--okdb-accent);\x20}\x0a\x20\x20.perf-unit\x20\x20{\x20font-size:11px;\x20opacity:.55;\x20margin-left:2px;\x20}\x0a\x20\x20.edit-form\x20\x20{\x20display:grid;\x20grid-template-columns:140px\x201fr;\x20gap:8px\x2012px;\x20align-items:start;\x20font-size:13px;\x20}\x0a\x20\x20.edit-form\x20select,\x20.edit-form\x20input\x20{\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:6px;\x20padding:6px\x208px;\x20color:inherit;\x20font-size:13px;\x20width:100%;\x20box-sizing:border-box;\x20}\x0a\x20\x20.edit-form\x20select:focus,\x20.edit-form\x20input:focus\x20{\x20outline:none;\x20border-color:var(--okdb-accent);\x20}\x0a\x20\x20.edit-label\x20{\x20opacity:.65;\x20text-align:right;\x20padding-top:7px;\x20}\x0a\x20\x20.edit-hint\x20\x20{\x20font-size:11px;\x20opacity:.4;\x20font-style:italic;\x20margin-top:2px;\x20grid-column:2;\x20}\x0a\x20\x20.edit-note\x20\x20{\x20font-size:12px;\x20opacity:.55;\x20background:color-mix(in\x20srgb,\x20var(--okdb-warning)\x208%,\x20transparent);\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-warning)\x2025%,\x20transparent);\x20border-radius:6px;\x20padding:7px\x2010px;\x20grid-column:1/-1;\x20}\x0a';function _0x468a(_0x36a661,_0xd54436){_0x36a661=_0x36a661-0x111;const _0x3d0661=_0x3d06();let _0x468a7a=_0x3d0661[_0x36a661];return _0x468a7a;}function _0x3d06(){const _0x1b3709=['flat','stringify','prepare','end','\x20GB','result','Snapshot\x20published.','\x20MB','editBusy','editAlgorithms','_seedEditAlgConfig','busy','modal','algorithm','54CnGQkO','/embeddings/algorithms','$watch','search','length','docCache','start','_pipelineUrl','/query','config','chunk','eng','var(--okdb-success)','editError','/embeddings/engines/','fetchDoc','value','snapshot\x20failed','PATCH','storage_key','filter','default','number','36253rNXbQQ','shared','not\x20found','2804472QpvxwC','load','string','queryBusy','Rebuild\x20the\x20full\x20index\x20from\x20storage?\x20This\x20may\x20take\x20a\x20while.','note','6122890EvSkql','isArray','editAlgorithm','strategy','error','metric','push','POST','/env/','var(--okdb-warning)','type','editAlgorithmFields','toFixed','queryError','sourceType','failed','slice','$dispatch','1210ZKQBEW','/snapshot','actionBusy','loadEditAlgorithms','actionResult','application/json','json','4952925xuRdkq','queryLimit','stats','isConnected','key','source_env','No\x20snapshot\x20needed\x20(up\x20to\x20date).','API','embed-search-panel','data','map','/type/','editAlgConfig','fields','34719DpwSQM','confirm','editMode','save\x20failed','name','318LVsVJq','695012XRaTcY','source_type','9CpEqJM','embedder','docExpanded','keys','editAlgorithmMap','message','some','queryResults','algorithm_config','chars\x20','var(--okdb-purple)','max','/stats','275rskfKW','/item/','round','query\x20failed','min','$attr','var(--okdb-orange)','/rebuild','$ok','actionError','indexer','text'];_0x3d06=function(){return _0x1b3709;};return _0x3d06();}export default{'tag':_0x6bfff0(0x14f),'dependencies':[_0x20c2f1,_0x9c39cd],'attr':{'name':{},'engine':{}},'context':_0x3f2c3c=>({'busy':!0x1,'stats':null,'error':null,'actionBusy':!0x1,'actionResult':null,'actionError':null,'queryText':'','queryLimit':0xa,'queryResults':null,'queryBusy':!0x1,'queryError':null,'docCache':{},'docExpanded':{},'editMode':!0x1,'editBusy':!0x1,'editError':null,'editAlgorithm':null,'editAlgConfig':{},'editAlgorithms':[],'editAlgorithmMap':{},get 'eng'(){const _0x350579=_0x6bfff0;return _0x3f2c3c[_0x350579(0x16f)]['engine']??{};},get 'name'(){const _0x277a5e=_0x6bfff0;return _0x3f2c3c[_0x277a5e(0x16f)]['name'];},get '_pipelineUrl'(){const _0x3fbc51=_0x6bfff0;return _0x709943(this['eng'],this[_0x3fbc51(0x159)]);},get 's'(){const _0x4ddcd7=_0x6bfff0;return this['stats']?.[_0x4ddcd7(0x111)]??this[_0x4ddcd7(0x149)]??{};},get 'hasEmbedder'(){const _0x323adc=_0x6bfff0;return!!this[_0x323adc(0x119)]['config']?.[_0x323adc(0x15e)];},get 'sourceType'(){const _0x4197f2=_0x6bfff0;return this['stats']?.['type']??this['s']?.['source_type']??this[_0x4197f2(0x119)][_0x4197f2(0x117)]?.[_0x4197f2(0x15c)]??null;},get 'vectorCount'(){return this['s']['count']??0x0;},get 'capacityValue'(){return this['s']['maxElements']??'∞';},get 'dimsValue'(){return this['s']['dims']??'—';},get 'metricValue'(){const _0x182179=_0x6bfff0;return this['s'][_0x182179(0x133)]||'—';},get 'storageKeyValue'(){const _0x47f23a=_0x6bfff0;return this['s'][_0x47f23a(0x121)]||'—';},get 'chunkStrategy'(){const _0x1dad01=_0x6bfff0;return this['s'][_0x1dad01(0x118)]?.[_0x1dad01(0x131)]||null;},get 'wm'(){return this['s']['workerMetrics']??null;},get 'headerBadges'(){const _0x56a193=_0x6bfff0,_0x517f77=[];return this['s'][_0x56a193(0x183)]&&_0x517f77[_0x56a193(0x134)]({'text':this['s'][_0x56a193(0x183)],'color':_0x56a193(0x167)}),this['s']['chunk']&&_0x517f77[_0x56a193(0x134)]({'text':'chunked\x20·\x20'+this['s'][_0x56a193(0x118)][_0x56a193(0x131)],'color':_0x56a193(0x170)}),_0x517f77;},get 'usesNonTrivialPrepare'(){const _0xd70b24=_0x6bfff0,_0x230411=this[_0xd70b24(0x149)]?.[_0xd70b24(0x174)]?.[_0xd70b24(0x178)];return!!_0x230411&&'none'!==_0x230411;},'fmtBytes':_0x18b33f=>null==_0x18b33f?'—':_0x18b33f>=0x40000000?(_0x18b33f/0x40000000)[_0x6bfff0(0x13a)](0x1)+_0x6bfff0(0x17a):_0x18b33f>=0x100000?(_0x18b33f/0x100000)['toFixed'](0x1)+_0x6bfff0(0x17d):_0x18b33f>=0x400?(_0x18b33f/0x400)['toFixed'](0x0)+'\x20KB':_0x18b33f+'\x20B','fmtMs':_0x265db7=>null==_0x265db7?'—':_0x265db7<0x1?'<1ms':_0x265db7+'ms',async 'loadEditAlgorithms'(){const _0x21317e=_0x6bfff0;if(!this[_0x21317e(0x17f)][_0x21317e(0x112)])try{const _0x44faaa=await fetch(__ENV__['API']+_0x21317e(0x185)),_0x1bba3d=await _0x44faaa['json']();this['editAlgorithms']=_0x1bba3d[_0x21317e(0x150)]||[],this[_0x21317e(0x161)]=Object['fromEntries'](this[_0x21317e(0x17f)][_0x21317e(0x151)](_0x5ddfee=>[_0x5ddfee['key'],_0x5ddfee]));}catch{this['editAlgorithms']=[];}},get 'editAlgorithmFields'(){const _0xbe7b5f=_0x6bfff0;return this[_0xbe7b5f(0x161)][this['editAlgorithm']]?.['fields']??[];},get 'editAlgorithmNote'(){const _0x3849ec=_0x6bfff0;return this[_0x3849ec(0x161)][this[_0x3849ec(0x130)]]?.[_0x3849ec(0x12d)]??null;},async 'openEditConfig'(){const _0x470b81=_0x6bfff0;await this[_0x470b81(0x143)]();const _0x3d66cd=this[_0x470b81(0x119)]['config']??{};this[_0x470b81(0x130)]=_0x3d66cd[_0x470b81(0x183)]??_0x470b81(0x176),this[_0x470b81(0x180)](this[_0x470b81(0x130)],_0x3d66cd['algorithm_config']??{}),this['editMode']=!0x0,this[_0x470b81(0x11b)]=null;},'closeEditConfig'(){const _0x4943ff=_0x6bfff0;this[_0x4943ff(0x157)]=!0x1,this['editError']=null;},'_seedEditAlgConfig'(_0x3bf60b,_0x5be38a={}){const _0x2e9fc2=_0x6bfff0,_0x43940f=this[_0x2e9fc2(0x161)][_0x3bf60b]?.[_0x2e9fc2(0x154)]??[],_0xe84125={};for(const _0x5a8153 of _0x43940f)_0xe84125[_0x5a8153[_0x2e9fc2(0x14b)]]=_0x5be38a[_0x5a8153[_0x2e9fc2(0x14b)]]??_0x5a8153[_0x2e9fc2(0x123)]??'';this[_0x2e9fc2(0x153)]=_0xe84125;},'onEditAlgorithmChange'(_0x2beaa6){const _0x339ede=_0x6bfff0;this[_0x339ede(0x130)]=_0x2beaa6;const _0x4a46a0=this[_0x339ede(0x119)][_0x339ede(0x117)]?.['algorithm']===_0x2beaa6?this[_0x339ede(0x119)][_0x339ede(0x117)]?.[_0x339ede(0x165)]??{}:{};this[_0x339ede(0x180)](_0x2beaa6,_0x4a46a0);},'_buildEditAlgConfig'(){const _0x34f455=_0x6bfff0,_0x5064f8={};for(const _0x40d7f1 of this[_0x34f455(0x139)]){const _0x4a0421=this[_0x34f455(0x153)][_0x40d7f1[_0x34f455(0x14b)]];''!==_0x4a0421&&null!=_0x4a0421&&(_0x5064f8[_0x40d7f1[_0x34f455(0x14b)]]=_0x34f455(0x124)===_0x40d7f1[_0x34f455(0x138)]?Number(_0x4a0421):_0x4a0421);}return Object[_0x34f455(0x160)](_0x5064f8)['length']>0x0?_0x5064f8:void 0x0;},async 'saveConfig'(){const _0x18f60c=_0x6bfff0;this[_0x18f60c(0x17e)]=!0x0,this[_0x18f60c(0x11b)]=null;try{const _0x5a9243=this['_buildEditAlgConfig'](),_0x28c668={'algorithm':this[_0x18f60c(0x130)]};_0x5a9243?_0x28c668[_0x18f60c(0x165)]=_0x5a9243:delete _0x28c668['algorithm_config'];const _0xf3e988=await fetch(__ENV__[_0x18f60c(0x14e)]+_0x18f60c(0x11c)+encodeURIComponent(this[_0x18f60c(0x119)][_0x18f60c(0x14b)]),{'method':_0x18f60c(0x120),'headers':{'Content-Type':_0x18f60c(0x145)},'body':JSON[_0x18f60c(0x177)]({'config':_0x28c668})}),_0x1c841c=await _0xf3e988['json']();if(!_0xf3e988['ok'])throw new Error(_0x1c841c?.[_0x18f60c(0x132)]?.[_0x18f60c(0x162)]||_0x18f60c(0x158));this[_0x18f60c(0x157)]=!0x1,_0x3f2c3c[_0x18f60c(0x13f)]('engine-updated',_0x1c841c[_0x18f60c(0x17b)]??_0x1c841c[_0x18f60c(0x150)]),await this[_0x18f60c(0x129)]();}catch(_0x1c0b6b){this['editError']=_0x1c0b6b?.['message']||String(_0x1c0b6b);}finally{this[_0x18f60c(0x17e)]=!0x1;}},async 'load'(){const _0x2527f5=_0x6bfff0;this['busy']=!0x0,this['error']=null;try{const _0x5a9b07=await fetch(this[_0x2527f5(0x115)]+_0x2527f5(0x169)),_0x2198cf=await _0x5a9b07[_0x2527f5(0x146)]();if(!_0x5a9b07['ok'])throw new Error(_0x2198cf?.[_0x2527f5(0x132)]?.['message']||_0x2527f5(0x13d));this[_0x2527f5(0x149)]=_0x2198cf[_0x2527f5(0x150)];}catch(_0xe21a75){this[_0x2527f5(0x132)]=_0xe21a75?.['message']||String(_0xe21a75),this['stats']=null;}finally{this['busy']=!0x1;}},async 'snapshot'(){const _0xdb3d0f=_0x6bfff0;if(await _0x3f2c3c[_0xdb3d0f(0x172)][_0xdb3d0f(0x126)]['modal'][_0xdb3d0f(0x156)]('Take\x20a\x20snapshot\x20now?')){this[_0xdb3d0f(0x142)]=!0x0,this['actionResult']=null,this[_0xdb3d0f(0x173)]=null;try{const _0x1d4bf4=await fetch(this[_0xdb3d0f(0x115)]+_0xdb3d0f(0x141),{'method':'POST'}),_0x1ff871=await _0x1d4bf4[_0xdb3d0f(0x146)]();if(!_0x1d4bf4['ok'])throw new Error(_0x1ff871?.['error']?.[_0xdb3d0f(0x162)]||_0xdb3d0f(0x11f));this[_0xdb3d0f(0x144)]=_0x1ff871[_0xdb3d0f(0x150)]?.['snapped']?_0xdb3d0f(0x17c):_0xdb3d0f(0x14d),await this[_0xdb3d0f(0x129)]();}catch(_0x8ffeb0){this[_0xdb3d0f(0x173)]=_0x8ffeb0?.['message']||String(_0x8ffeb0);}finally{this['actionBusy']=!0x1;}}},async 'rebuild'(){const _0x85577e=_0x6bfff0;if(await _0x3f2c3c['$ok'][_0x85577e(0x126)][_0x85577e(0x182)]['confirm'](_0x85577e(0x12c))){this[_0x85577e(0x142)]=!0x0,this[_0x85577e(0x144)]=null,this[_0x85577e(0x173)]=null;try{const _0x4c7258=await fetch(this[_0x85577e(0x115)]+_0x85577e(0x171),{'method':_0x85577e(0x135)}),_0x1d7aae=await _0x4c7258[_0x85577e(0x146)]();if(!_0x4c7258['ok'])throw new Error(_0x1d7aae?.[_0x85577e(0x132)]?.[_0x85577e(0x162)]||'rebuild\x20failed');this[_0x85577e(0x144)]='Rebuild\x20complete.',await this['load']();}catch(_0x24b193){this[_0x85577e(0x173)]=_0x24b193?.[_0x85577e(0x162)]||String(_0x24b193);}finally{this[_0x85577e(0x142)]=!0x1;}}},async 'runQuery'(){const _0x1840f8=_0x6bfff0,_0x4705d8=String(this['queryText']||'')['trim']();if(_0x4705d8){this[_0x1840f8(0x12b)]=!0x0,this['queryError']=null,this[_0x1840f8(0x164)]=null,this['docCache']={},this[_0x1840f8(0x15f)]={};try{const _0x3742f8=await fetch(this['_pipelineUrl']+_0x1840f8(0x116),{'method':_0x1840f8(0x135),'headers':{'Content-Type':_0x1840f8(0x145)},'body':JSON[_0x1840f8(0x177)]({'query':_0x4705d8,'limit':Number(this[_0x1840f8(0x148)])||0xa})}),_0x4026d4=await _0x3742f8[_0x1840f8(0x146)]();if(!_0x3742f8['ok'])throw new Error(_0x4026d4?.[_0x1840f8(0x132)]?.[_0x1840f8(0x162)]||_0x1840f8(0x16d));this['queryResults']=_0x4026d4['data']||[];}catch(_0x3cb6d6){this[_0x1840f8(0x13b)]=_0x3cb6d6?.[_0x1840f8(0x162)]||String(_0x3cb6d6);}finally{this[_0x1840f8(0x12b)]=!0x1;}}},'scoreBar':_0xdce48c=>Math[_0x6bfff0(0x16c)](0x64*Math[_0x6bfff0(0x16e)](0x1,Math[_0x6bfff0(0x168)](0x0,_0xdce48c))),'scoreColor':_0x37c59f=>_0x37c59f>=0.8?_0x6bfff0(0x11a):_0x37c59f>=0.5?_0x6bfff0(0x137):'var(--okdb-danger)',get 'isChunked'(){const _0x4e840a=_0x6bfff0;return Array[_0x4e840a(0x12f)](this[_0x4e840a(0x164)])&&this[_0x4e840a(0x164)][_0x4e840a(0x163)](_0x4c3f3d=>_0x4c3f3d[_0x4e840a(0x118)]);},'fmtRange':_0x2a4147=>_0x2a4147?_0x6bfff0(0x166)+_0x2a4147[_0x6bfff0(0x114)]+'–'+_0x2a4147[_0x6bfff0(0x179)]:'','autoFetch'(_0x3704ae){const _0x25fe64=_0x6bfff0;return!this[_0x25fe64(0x13c)]||this['docCache'][_0x3704ae[_0x25fe64(0x14b)]]||!!_0x3704ae['chunk']?.[_0x25fe64(0x175)]||this['fetchDoc'](_0x3704ae),null;},async 'fetchDoc'(_0x84566e){const _0x1f9dc2=_0x6bfff0,_0xade90d=this['sourceType'];if(!_0xade90d)return;const _0x168cb4=_0x84566e[_0x1f9dc2(0x14b)];this[_0x1f9dc2(0x113)][_0x168cb4]={'busy':!0x0,'value':void 0x0,'error':null};try{const _0x64dee4=this[_0x1f9dc2(0x119)]['config']?.[_0x1f9dc2(0x14c)]??_0x1f9dc2(0x123),_0x41486f=__ENV__[_0x1f9dc2(0x14e)]+_0x1f9dc2(0x136)+encodeURIComponent(_0x64dee4),_0x391f68=await fetch(_0x41486f+_0x1f9dc2(0x152)+encodeURIComponent(_0xade90d)+_0x1f9dc2(0x16b)+encodeURIComponent(_0x168cb4)),_0x21f912=await _0x391f68[_0x1f9dc2(0x146)]();if(!_0x391f68['ok'])throw new Error(_0x21f912?.[_0x1f9dc2(0x132)]?.[_0x1f9dc2(0x162)]||_0x1f9dc2(0x127));this[_0x1f9dc2(0x113)][_0x168cb4]={'busy':!0x1,'value':_0x21f912['data']?.[_0x1f9dc2(0x11e)]??null,'error':null};}catch(_0x5ae273){this['docCache'][_0x168cb4]={'busy':!0x1,'value':void 0x0,'error':_0x5ae273?.[_0x1f9dc2(0x162)]||String(_0x5ae273)};}},'toggleDocExpand'(_0x5384d8){const _0x46ab00=_0x6bfff0,_0x4f86a9=_0x5384d8[_0x46ab00(0x14b)];this[_0x46ab00(0x15f)][_0x4f86a9]=!this[_0x46ab00(0x15f)][_0x4f86a9],this[_0x46ab00(0x15f)][_0x4f86a9]&&!this[_0x46ab00(0x113)][_0x4f86a9]&&this[_0x46ab00(0x11d)](_0x5384d8);},'fmtDoc'(_0x23c656){const _0x5aa0bf=_0x6bfff0;try{return JSON[_0x5aa0bf(0x177)](_0x23c656,null,0x2);}catch{return String(_0x23c656);}},'getChunkText'(_0x5745e8){const _0x2d09a3=_0x6bfff0;if(_0x5745e8[_0x2d09a3(0x118)]?.[_0x2d09a3(0x175)])return _0x5745e8[_0x2d09a3(0x118)][_0x2d09a3(0x175)];const _0x3c68d0=this[_0x2d09a3(0x119)][_0x2d09a3(0x117)]?.['field'],_0x2da400=this[_0x2d09a3(0x113)][_0x5745e8['key']];if(!_0x3c68d0||!_0x2da400?.['value']||!_0x5745e8['chunk'])return null;const _0x1855e3=_0x2da400[_0x2d09a3(0x11e)][_0x3c68d0];return _0x2d09a3(0x12a)!=typeof _0x1855e3?null:_0x1855e3[_0x2d09a3(0x13e)](_0x5745e8[_0x2d09a3(0x118)][_0x2d09a3(0x114)],_0x5745e8[_0x2d09a3(0x118)][_0x2d09a3(0x179)])||null;},'splitHighlight'(_0x1deaf5,_0x327ca2){const _0x496d06=_0x6bfff0;if(!_0x327ca2||!_0x1deaf5||_0x496d06(0x12a)!=typeof _0x1deaf5)return null;const {start:_0x34433d,end:_0x2a2eb8}=_0x327ca2;if(_0x496d06(0x124)!=typeof _0x34433d||'number'!=typeof _0x2a2eb8)return null;const _0x132139=Math[_0x496d06(0x168)](0x0,_0x34433d),_0x4cb99a=Math[_0x496d06(0x16e)](_0x1deaf5[_0x496d06(0x112)],Math[_0x496d06(0x168)](_0x132139,_0x2a2eb8));return _0x132139>=_0x4cb99a?[{'text':_0x1deaf5,'highlight':!0x1}]:[{'text':_0x1deaf5[_0x496d06(0x13e)](0x0,_0x132139),'highlight':!0x1},{'text':_0x1deaf5['slice'](_0x132139,_0x4cb99a),'highlight':!0x0},{'text':_0x1deaf5[_0x496d06(0x13e)](_0x4cb99a),'highlight':!0x1}][_0x496d06(0x122)](_0x266015=>_0x266015[_0x496d06(0x175)]['length']>0x0);},async 'onRefresh'(){const _0x29d925=_0x6bfff0;this[_0x29d925(0x164)]=null,this[_0x29d925(0x15f)]={},await this[_0x29d925(0x129)]();},'viewPipeline'(){const _0x56b5ce=_0x6bfff0;_0x38d32f(_0x3f2c3c,this[_0x56b5ce(0x119)]);}}),async 'init'(_0x5208db){const _0x5a4ca3=_0x6bfff0;_0x5208db[_0x5a4ca3(0x186)](()=>_0x5208db[_0x5a4ca3(0x16f)][_0x5a4ca3(0x159)],async()=>{const _0x2deccd=_0x5a4ca3;this['stats']=null,this[_0x2deccd(0x164)]=null,this[_0x2deccd(0x15f)]={},await this[_0x2deccd(0x129)]();}),await this[_0x5a4ca3(0x129)]();const _0x274c22=_0x5208db['$el']??_0x5208db['$host']??null,_0x452d2d=setInterval(async()=>{const _0x2269ad=_0x5a4ca3;if(!_0x274c22||_0x274c22[_0x2269ad(0x14a)]){if(!this[_0x2269ad(0x181)]&&!this['editBusy']&&!this[_0x2269ad(0x157)])try{await this['load']();}catch{}}else clearInterval(_0x452d2d);},0x1388);},'template':'\x0a<engine-panel-shell\x0a\x20\x20:engine=\x22eng\x22\x0a\x20\x20:title=\x22name\x22\x0a\x20\x20type-label=\x22vector-search\x22\x0a\x20\x20type-color=\x22var(--okdb-accent)\x22\x0a\x20\x20:badges=\x22headerBadges\x22\x0a\x20\x20show-refresh=\x22true\x22\x0a\x20\x20fill=\x22true\x22\x0a\x20\x20:refresh-busy=\x22busy\x20||\x20queryBusy\x20||\x20actionBusy\x22\x0a\x20\x20:on-refresh=\x22()\x20=>\x20onRefresh()\x22\x0a\x20\x20:on-pipeline=\x22viewPipeline\x22\x0a\x20\x20@engine-updated=\x22$dispatch(\x27engine-updated\x27,\x20$event.detail)\x22\x0a\x20\x20@refresh=\x22$dispatch(\x27refresh\x27)\x22\x0a\x20\x20@deleted=\x22$dispatch(\x27deleted\x27,\x20$event.detail)\x22\x0a>\x0a\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:13px;\x22>{{\x20error\x20}}</div>\x0a\x20\x20</if>\x0a\x0a\x0a\x20\x20<if\x20:=\x22stats\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:8px;min-width:0;flex:1;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22pill-row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Vector\x20search\x20algorithm.\x22>{{\x20s.algorithm\x20||\x20\x27—\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Distance\x20metric.\x22>{{\x20metricValue\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Vector\x20dimensions.\x22>dims:\x20{{\x20dimsValue\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Backing\x20storage\x20key.\x22>store:\x20{{\x20storageKeyValue\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22chunkStrategy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Chunking\x20strategy\x20used\x20by\x20the\x20indexer.\x22>chunk:\x20{{\x20chunkStrategy\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22story-lead\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Query\x20the\x20live\x20vector\x20index\x20for\x20<strong>{{\x20storageKeyValue\x20}}</strong>\x20and\x20inspect\x20the\x20matched\x20source\x20chunks\x20below.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22story-note\x22>Use\x20text\x20search\x20here\x20to\x20validate\x20relevance\x20quickly.\x20Snapshot\x20and\x20rebuild\x20are\x20available\x20below\x20when\x20the\x20in-memory\x20index\x20needs\x20maintenance.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-grid\x20metric-grid--compact\x22\x20style=\x22min-width:min(100%,\x20360px);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Vectors</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22>{{\x20vectorCount\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Capacity</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20style=\x22font-size:18px;\x22>{{\x20capacityValue\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22wm\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:10px;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;justify-content:space-between;gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Performance</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!wm.searchOps\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;opacity:.4;font-style:italic;\x22>Run\x20a\x20search\x20to\x20populate\x20latency\x20metrics.</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-grid\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-cell\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-label\x22>Avg\x20latency</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-value\x22>{{\x20fmtMs(wm.searchLatencyAvgMs)\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-cell\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-label\x22>p95\x20latency</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-value\x22>{{\x20fmtMs(wm.searchLatencyP95Ms)\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-cell\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-label\x22>Searches</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-value\x22>{{\x20wm.searchOps\x20??\x200\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-cell\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-label\x22>Queue\x20depth</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-value\x22>{{\x20wm.pendingOps\x20??\x200\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22wm.workerMemory\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-cell\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-label\x22>Heap\x20used</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-value\x22\x20style=\x22font-size:15px;\x22>{{\x20fmtBytes(wm.workerMemory.heapUsed)\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-cell\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-label\x22>RSS</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22perf-value\x22\x20style=\x22font-size:15px;\x22>{{\x20fmtBytes(wm.workerMemory.rss)\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<div\x20class=\x22card\x22\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:10px;\x20flex:1;\x20min-height:0;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:8px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Search\x20test</div>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22story-note\x22>Run\x20a\x20text\x20query\x20and\x20inspect\x20the\x20raw\x20chunk\x20hits\x20and\x20source\x20context.</span>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22!hasEmbedder\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.55;\x20font-size:12px;\x20font-style:italic;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20No\x20embedder\x20configured\x20—\x20text\x20queries\x20unavailable.\x20Pass\x20a\x20Float32Array\x20via\x20the\x20API\x20directly.\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:8px;\x20align-items:center;\x22>\x0a\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20style=\x22flex:1;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x22Enter\x20text\x20query…\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22queryText\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22queryText\x20=\x20$el.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20@keydown.enter=\x22runQuery\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22!hasEmbedder\x20||\x20!eng.isRunning\x22\x0a\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20type=\x22number\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20style=\x22width:72px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22queryLimit\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22queryLimit\x20=\x20Number($el.value)\x20||\x2010\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20min=\x221\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20max=\x22100\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Top-K\x22\x0a\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22runQuery\x22\x20:disabled=\x22queryBusy\x20||\x20!queryText.trim()\x20||\x20!eng.isRunning\x20||\x20!hasEmbedder\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20{{\x20queryBusy\x20?\x20\x27…\x27\x20:\x20\x27Search\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22queryError\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:13px;\x22>{{\x20queryError\x20}}</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22queryResults\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22overflow:auto;\x20min-height:0;\x20flex:1;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22queryResults.length\x20===\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.5;\x20font-size:13px;\x22>No\x20results.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ok-table\x20:data=\x22queryResults\x22\x20no-scroll\x20style=\x22width:100%;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<columns>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x2236px\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>#</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>{{\x20queryResults.indexOf(row)\x20+\x201\x20}}</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Key</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>{{\x20row.key\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.chunk\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22chunk-loc\x22\x20style=\x22margin-left:8px;\x22>{{\x20fmtRange(row.chunk)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x22200px\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Score</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22flex:1;\x20background:var(--okdb-app-border);\x20border-radius:4px;\x20height:6px;\x20overflow:hidden;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20:style=\x22\x27height:100%;\x20border-radius:4px;\x20background:\x27\x20+\x20scoreColor(row.score)\x20+\x20\x27;\x20width:\x27\x20+\x20scoreBar(row.score)\x20+\x20\x27%\x27\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x20opacity:.8;\x20min-width:42px;\x20text-align:right;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20(row.score\x20*\x20100).toFixed(1)\x20}}%\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</columns>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<expanded\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22padding:10px;\x20font-size:12px;\x20display:flex;\x20flex-direction:column;\x20gap:10px;\x22\x20:data-fetch=\x22autoFetch(row)\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Identity\x20line\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.6;\x20font-size:11px;\x20display:flex;\x20align-items:center;\x20gap:10px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>key:\x20<strong\x20style=\x22color:#fff;\x20opacity:1;\x22>{{\x20row.key\x20}}</strong></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22sourceType\x22><span>type:\x20<strong\x20style=\x22color:var(--okdb-accent);\x22>{{\x20sourceType\x20}}</strong></span></if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.chunk\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22chunk-loc\x22>{{\x20fmtRange(row.chunk)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.chunkHash\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.4;\x20font-family:monospace;\x20font-size:10px;\x22>{{\x20row.chunkHash\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20═══\x20CHUNKED\x20RESULT\x20═══════════════════════════════════════════\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.chunk\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Tier\x201:\x20Matched\x20chunk\x20text\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.5;\x20margin-bottom:4px;\x20display:flex;\x20align-items:center;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Matched\x20chunk</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!row.chunk.text\x20&&\x20usesNonTrivialPrepare\x20&&\x20getChunkText(row)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-warning);\x20font-size:10px;\x22\x20title=\x22Chunk\x20offsets\x20are\x20into\x20the\x20prepared\x20text;\x20extraction\x20from\x20the\x20raw\x20field\x20may\x20be\x20approximate.\x22>⚠\x20approximate</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20storeText:\x20true\x20—\x20text\x20carried\x20in\x20the\x20result\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.chunk.text\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22chunk-text\x22>{{\x20row.chunk.text\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20storeText:\x20false\x20—\x20extract\x20from\x20loaded\x20source\x20doc\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!row.chunk.text\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docCache[row.key]?.busy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.45;\x20font-size:11px;\x20padding:6px\x200;\x22>Loading\x20chunk…</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!docCache[row.key]?.busy\x20&&\x20getChunkText(row)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22chunk-text\x22>{{\x20getChunkText(row)\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!docCache[row.key]?.busy\x20&&\x20!getChunkText(row)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.4;\x20font-size:11px;\x20font-style:italic;\x20padding:4px\x200;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docCache[row.key]?.error\x22>Source\x20doc\x20unavailable.</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!docCache[row.key]?.error\x20&&\x20!sourceType\x22>No\x20source\x20type\x20—\x20cannot\x20look\x20up\x20chunk\x20text.</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!docCache[row.key]?.error\x20&&\x20sourceType\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Chunk\x20text\x20not\x20stored.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!eng.config?.field\x22>\x20No\x20field\x20configured.</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22eng.config?.field\x22>\x20Enable\x20<code>storeText:\x20true</code>\x20in\x20the\x20pipeline\x20to\x20store\x20it.</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Tier\x202:\x20\x22View\x20in\x20context\x20of\x20source\x22\x20collapsible\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22sourceType\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22doc-toggle\x22\x20@click=\x22toggleDocExpand(row)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docExpanded[row.key]\x22>▲\x20hide\x20source\x20context</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!docExpanded[row.key]\x22>▼\x20view\x20in\x20context\x20of\x20source</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docExpanded[row.key]\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-top:8px;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docCache[row.key]?.busy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.45;\x20font-size:11px;\x22>Loading\x20source…</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docCache[row.key]?.error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:12px;\x22>{{\x20docCache[row.key].error\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docCache[row.key]?.value\x20!==\x20undefined\x20&&\x20!docCache[row.key]?.error\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Field\x20known\x20+\x20value\x20present\x20→\x20show\x20highlighted\x20field\x20text\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22eng.config?.field\x20&&\x20docCache[row.key].value?.[eng.config.field]\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.5;\x20margin-bottom:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Field\x20<strong\x20style=\x22color:#fff;\x20opacity:.9;\x22>{{\x20eng.config.field\x20}}</strong>\x20—\x20matched\x20range\x20highlighted\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22usesNonTrivialPrepare\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-warning);\x22\x20title=\x22The\x20pipeline\x20uses\x20prepare:\x27{{\x20stats.indexer.prepare\x20}}\x27.\x20Chunk\x20offsets\x20are\x20into\x20the\x20prepared\x20text,\x20so\x20the\x20highlight\x20position\x20in\x20the\x20raw\x20field\x20is\x20approximate.\x22>\x20⚠\x20approximate\x20(prepare:\x20{{\x20stats.indexer.prepare\x20}})</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22chunk-text\x20chunk-text--ctx\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22splitHighlight(String(docCache[row.key].value[eng.config.field]\x20??\x20\x27\x27),\x20row.chunk)\x22\x20let:item=\x22seg\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:class=\x22seg.highlight\x20?\x20\x27chunk-hl\x27\x20:\x20\x27\x27\x22>{{\x20seg.text\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20No\x20field\x20or\x20field\x20value\x20missing\x20→\x20fall\x20back\x20to\x20full\x20doc\x20JSON\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!(eng.config?.field\x20&&\x20docCache[row.key].value?.[eng.config.field])\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20style=\x22margin:0;\x20white-space:pre-wrap;\x20word-break:break-all;\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px;\x20font-size:11px;\x20max-height:300px;\x20overflow:auto;\x20color:#a5f3fc;\x22>{{\x20fmtDoc(docCache[row.key].value)\x20}}</pre>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!sourceType\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.45;\x20font-size:11px;\x22>No\x20source\x20type\x20linked\x20—\x20cannot\x20load\x20source\x20document.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20═══\x20END\x20CHUNKED\x20══════════════════════════════════════════════\x20-->\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20═══\x20NON-CHUNKED\x20RESULT:\x20show\x20source\x20doc\x20directly\x20(unchanged)\x20═\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!row.chunk\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22sourceType\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docCache[row.key]?.busy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.5;\x20font-size:11px;\x22>Loading…</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docCache[row.key]?.error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20margin-top:4px;\x22>{{\x20docCache[row.key].error\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docCache[row.key]?.value\x20!==\x20undefined\x20&&\x20!docCache[row.key]?.error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20style=\x22margin:0;\x20white-space:pre-wrap;\x20word-break:break-all;\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px;\x20font-size:11px;\x20max-height:220px;\x20overflow:auto;\x20color:#a5f3fc;\x22>{{\x20fmtDoc(docCache[row.key].value)\x20}}</pre>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!sourceType\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.5;\x20font-size:11px;\x22>No\x20source\x20type\x20linked\x20—\x20cannot\x20look\x20up\x20original\x20document.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20═══\x20END\x20NON-CHUNKED\x20══════════════════════════════════════════\x20-->\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</expanded>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</ok-table>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20</div>\x0a\x0a\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;justify-content:space-between;gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Index\x20details</div>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22!editMode\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20style=\x22font-size:12px;padding:3px\x2010px;\x22\x20@click=\x22openEditConfig\x22\x20:disabled=\x22!eng.isRunning\x20&&\x20!eng.config\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Edit\x20config\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22!editMode\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22kv-grid\x20kv-grid--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>algorithm</span><span\x20class=\x22kv-val\x22>{{\x20s.algorithm\x20||\x20eng.config?.algorithm\x20||\x20\x27—\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>metric</span><span\x20class=\x22kv-val\x22>{{\x20metricValue\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>dims</span><span\x20class=\x22kv-val\x22>{{\x20dimsValue\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>storage\x20key</span><span\x20class=\x22kv-val\x22>{{\x20storageKeyValue\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22s.role\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>role</span><span\x20class=\x22kv-val\x22>{{\x20s.role\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22s.M\x20!=\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>M</span><span\x20class=\x22kv-val\x22>{{\x20s.M\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>efConstruction</span><span\x20class=\x22kv-val\x22>{{\x20s.efConstruction\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>efSearch</span><span\x20class=\x22kv-val\x22>{{\x20s.efSearch\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22s.connectivity\x20!=\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>connectivity</span><span\x20class=\x22kv-val\x22>{{\x20s.connectivity\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>expansion\x20search</span><span\x20class=\x22kv-val\x22>{{\x20s.expansionSearch\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22s.changesSince\x20!=\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>changes\x20since\x20snap</span><span\x20class=\x22kv-val\x22>{{\x20s.changesSince\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22s.latestSnapshot\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>last\x20snapshot</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-val\x22\x20style=\x22font-size:11px;\x20word-break:break-all;\x22>{{\x20s.latestSnapshot\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22editMode\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22edit-form\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22edit-note\x22>Saving\x20will\x20restart\x20the\x20engine\x20to\x20apply\x20the\x20new\x20algorithm.\x20stats_data\x20and\x20storage\x20remain\x20intact.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22edit-label\x22>Algorithm</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<select\x20:value=\x22editAlgorithm\x22\x20@change=\x22onEditAlgorithmChange($el.value)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22editAlgorithms\x22\x20let:item=\x22alg\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22alg.key\x22\x20:selected=\x22alg.key\x20===\x20editAlgorithm\x22>{{\x20alg.label\x20||\x20alg.key\x20}}</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22editAlgorithmNote\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22edit-hint\x22>{{\x20editAlgorithmNote\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22editAlgorithmFields\x22\x20let:item=\x22field\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22edit-label\x22>{{\x20field.label\x20||\x20field.key\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22field.type\x20===\x20\x27select\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20:value=\x22editAlgConfig[field.key]\x22\x20@change=\x22editAlgConfig\x20=\x20{\x20...editAlgConfig,\x20[field.key]:\x20$el.value\x20}\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22field.options\x22\x20let:item=\x22opt\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22opt.value\x22\x20:selected=\x22opt.value\x20===\x20editAlgConfig[field.key]\x22>{{\x20opt.label\x20}}</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22field.type\x20!==\x20\x27select\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:type=\x22field.type\x20===\x20\x27number\x27\x20?\x20\x27number\x27\x20:\x20\x27text\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22editAlgConfig[field.key]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22editAlgConfig\x20=\x20{\x20...editAlgConfig,\x20[field.key]:\x20$el.value\x20}\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:placeholder=\x22field.placeholder\x20??\x20\x27\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:min=\x22field.min\x20??\x20undefined\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22field.hint\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22edit-hint\x22>{{\x20field.hint\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22editError\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);font-size:13px;\x22>{{\x20editError\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;gap:8px;margin-top:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22saveConfig\x22\x20:disabled=\x22editBusy\x22>{{\x20editBusy\x20?\x20\x27Saving…\x27\x20:\x20\x27Save\x20&\x20restart\x27\x20}}</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22closeEditConfig\x22\x20:disabled=\x22editBusy\x22\x20style=\x22opacity:.7;\x22>Cancel</button>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a\x0a\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Maintenance</div>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:10px;\x20flex-wrap:wrap;\x20align-items:center;\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22snapshot\x22\x20:disabled=\x22actionBusy\x20||\x20!eng.isRunning\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20{{\x20actionBusy\x20?\x20\x27…\x27\x20:\x20\x27Snapshot\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22rebuild\x22\x20:disabled=\x22actionBusy\x20||\x20!eng.isRunning\x22\x20style=\x22color:var(--okdb-warning);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20{{\x20actionBusy\x20?\x20\x27…\x27\x20:\x20\x27Rebuild\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22story-note\x22>Snapshot\x20current\x20state\x20for\x20faster\x20reloads,\x20or\x20rebuild\x20when\x20the\x20in-memory\x20index\x20drifts\x20from\x20storage.</span>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<if\x20:=\x22actionResult\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-success);\x20font-size:13px;\x22>{{\x20actionResult\x20}}</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20<if\x20:=\x22actionError\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:13px;\x22>{{\x20actionError\x20}}</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a</engine-panel-shell>\x0a','style':a};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const _0x534aa7=_0x2dcb;function _0x53eb(){const _0x40efcc=['processed','$ok','8466864HXYcpG','API','eng','embedder',',\x20re-enqueued\x20','Retry\x20all\x20failed\x20queue\x20jobs\x20for\x20type\x20\x22<b>','failed','json','retryBusy','179765DzbJnF','1512XEQulY','data','$dispatch','load','engine','job_type','success','application/json','$attr','concurrency','2562492JvBkBz','busy','/embeddings/workers/','464412TLXgDY','/queue/retryFailed','Cannot\x20determine\x20job_type\x20or\x20indexer\x20name','name','stats','modal','embed-worker-panel','/embeddings/indexers/','Retried\x20','40PePRag','797586Lyiaza','retried','config','/retryFailed','confirm','toast','message','Retry\x20failed','$watch','184170iMaCtE','in_flight','POST','stringify','shared','error','63suPwVm','3251154yJXwey','indexer'];_0x53eb=function(){return _0x40efcc;};return _0x53eb();}(function(_0x5ce672,_0x5332a2){const _0x584ce0=_0x2dcb,_0x366f62=_0x5ce672();while(!![]){try{const _0x39b049=parseInt(_0x584ce0(0x89))/0x1+-parseInt(_0x584ce0(0x86))/0x2+-parseInt(_0x584ce0(0x6e))/0x3+-parseInt(_0x584ce0(0x92))/0x4*(parseInt(_0x584ce0(0x7b))/0x5)+parseInt(_0x584ce0(0x93))/0x6*(-parseInt(_0x584ce0(0x6d))/0x7)+parseInt(_0x584ce0(0x72))/0x8+parseInt(_0x584ce0(0x7c))/0x9*(parseInt(_0x584ce0(0x9c))/0xa);if(_0x39b049===_0x5332a2)break;else _0x366f62['push'](_0x366f62['shift']());}catch(_0x2df6a9){_0x366f62['push'](_0x366f62['shift']());}}}(_0x53eb,0xa9e91));import _0x3e8945 from'../../engines/parts/engine-panel-shell.ok.js';import{ENGINE_PANEL_SHARED_STYLE as _0x440914}from'../../engines/engine-panel-shared-style.js';import{dispatchEnginePipelineSelection as _0x3b473f}from'../../engines/engine-ui-utils.js';function _0x2dcb(_0x5d4424,_0x23515a){_0x5d4424=_0x5d4424-0x6b;const _0x53eb32=_0x53eb();let _0x2dcba7=_0x53eb32[_0x5d4424];return _0x2dcba7;}const s=_0x440914;export default{'tag':_0x534aa7(0x8f),'dependencies':[_0x3e8945],'attr':{'name':{},'engine':{}},'context':_0x3f2fa5=>({'busy':!0x1,'stats':null,'error':null,'retryBusy':!0x1,get 'eng'(){const _0x5d29ca=_0x534aa7;return _0x3f2fa5[_0x5d29ca(0x84)][_0x5d29ca(0x80)]??{};},get 'name'(){return _0x3f2fa5['$attr']['name'];},get 'jobType'(){const _0x19fbaa=_0x534aa7;return this[_0x19fbaa(0x8d)]?.[_0x19fbaa(0x81)]||this[_0x19fbaa(0x74)]?.[_0x19fbaa(0x95)]?.[_0x19fbaa(0x81)]||'—';},get 'indexerName'(){const _0xbf636e=_0x534aa7;return this['stats']?.[_0xbf636e(0x6f)]||this[_0xbf636e(0x74)]?.['config']?.[_0xbf636e(0x6f)]||'—';},get 'embedderName'(){const _0x16922f=_0x534aa7;return this[_0x16922f(0x8d)]?.[_0x16922f(0x75)]||this[_0x16922f(0x74)]?.[_0x16922f(0x95)]?.[_0x16922f(0x75)]||'—';},get 'concurrencyValue'(){const _0x35ab66=_0x534aa7;return this[_0x35ab66(0x8d)]?.[_0x35ab66(0x85)]??this['eng']?.['config']?.['concurrency']??'—';},get 'processedCount'(){const _0x5b2702=_0x534aa7;return this[_0x5b2702(0x8d)]?.[_0x5b2702(0x70)]??0x0;},get 'failedCount'(){const _0x148e62=_0x534aa7;return this[_0x148e62(0x8d)]?.[_0x148e62(0x78)]??0x0;},get 'inflightCount'(){const _0xbd1c0c=_0x534aa7;return this[_0xbd1c0c(0x8d)]?.[_0xbd1c0c(0x9d)]??0x0;},async 'load'(){const _0x37a174=_0x534aa7;this[_0x37a174(0x87)]=!0x0,this[_0x37a174(0x6c)]=null;try{const _0x581d95=await fetch(__ENV__['API']+_0x37a174(0x88)+encodeURIComponent(this['name'])+'/stats'),_0x2d0dd9=await _0x581d95[_0x37a174(0x79)]();if(!_0x581d95['ok'])throw new Error(_0x2d0dd9?.[_0x37a174(0x6c)]?.['message']||_0x37a174(0x78));this['stats']=_0x2d0dd9[_0x37a174(0x7d)];}catch(_0x1eb489){this[_0x37a174(0x6c)]=_0x1eb489?.['message']||String(_0x1eb489),this[_0x37a174(0x8d)]=null;}finally{this[_0x37a174(0x87)]=!0x1;}},async 'onRefresh'(){await this['load']();},'viewPipeline'(){_0x3b473f(_0x3f2fa5,this['eng']);},async 'retryAllFailed'(){const _0x38235a=_0x534aa7,_0x33436a=this[_0x38235a(0x8d)]?.[_0x38235a(0x81)]||this[_0x38235a(0x74)]?.['config']?.[_0x38235a(0x81)],_0x3c2a61=this[_0x38235a(0x8d)]?.[_0x38235a(0x6f)]||this['eng']?.['config']?.[_0x38235a(0x6f)];if(_0x33436a||_0x3c2a61){if(await _0x3f2fa5[_0x38235a(0x71)][_0x38235a(0x6b)][_0x38235a(0x8e)][_0x38235a(0x97)](_0x38235a(0x77)+_0x33436a+'</b>\x22?<br><br>This\x20will\x20also\x20re-enqueue\x20any\x20stuck\x20PENDING\x20docs\x20on\x20the\x20indexer.')){this[_0x38235a(0x7a)]=!0x0;try{const _0x139948=await fetch(__ENV__[_0x38235a(0x73)]+_0x38235a(0x8a),{'method':_0x38235a(0x9e),'headers':{'Content-Type':_0x38235a(0x83)},'body':JSON['stringify']({'type':_0x33436a,'limit':0x1388})}),_0x5dcf20=await _0x139948['json'](),_0xff5e43=_0x5dcf20?.[_0x38235a(0x7d)]?.['retried']??0x0;let _0x701c5a=0x0;if(_0x3c2a61){const _0x183aec=await fetch(__ENV__[_0x38235a(0x73)]+_0x38235a(0x90)+encodeURIComponent(_0x3c2a61)+_0x38235a(0x96),{'method':_0x38235a(0x9e),'headers':{'Content-Type':_0x38235a(0x83)},'body':JSON[_0x38235a(0x9f)]({'limit':0x1388,'includeStuckPending':!0x0})}),_0xaf2d7a=await _0x183aec[_0x38235a(0x79)]();_0x701c5a=_0xaf2d7a?.[_0x38235a(0x7d)]?.[_0x38235a(0x94)]??0x0;}_0x3f2fa5[_0x38235a(0x71)][_0x38235a(0x6b)]?.[_0x38235a(0x98)]?.[_0x38235a(0x82)]?.(_0x38235a(0x91)+_0xff5e43+'\x20queue\x20job(s)'+(_0x701c5a?_0x38235a(0x76)+_0x701c5a+'\x20doc(s)':'')),_0x3f2fa5[_0x38235a(0x7e)]('refresh'),await this[_0x38235a(0x7f)]();}catch(_0x17fd0e){_0x3f2fa5['$ok'][_0x38235a(0x6b)]?.[_0x38235a(0x98)]?.[_0x38235a(0x6c)]?.(_0x17fd0e?.[_0x38235a(0x99)]||_0x38235a(0x9a));}finally{this['retryBusy']=!0x1;}}}else _0x3f2fa5['$ok'][_0x38235a(0x6b)]?.[_0x38235a(0x98)]?.[_0x38235a(0x6c)]?.(_0x38235a(0x8b));}}),async 'init'(_0x6ce44e){const _0x555c11=_0x534aa7;_0x6ce44e[_0x555c11(0x9b)](()=>_0x6ce44e[_0x555c11(0x84)][_0x555c11(0x8c)],async()=>{const _0x19aa06=_0x555c11;this[_0x19aa06(0x8d)]=null,this['error']=null,await this[_0x19aa06(0x7f)]();}),await this['load']();},'template':'\x0a<engine-panel-shell\x0a\x20\x20:engine=\x22eng\x22\x0a\x20\x20:title=\x22name\x22\x0a\x20\x20type-label=\x22worker\x22\x0a\x20\x20type-color=\x22var(--okdb-warning)\x22\x0a\x20\x20show-refresh=\x22true\x22\x0a\x20\x20:refresh-busy=\x22busy\x20||\x20retryBusy\x22\x0a\x20\x20:on-refresh=\x22onRefresh\x22\x0a\x20\x20:on-pipeline=\x22viewPipeline\x22\x0a\x20\x20@engine-updated=\x22$dispatch(\x27engine-updated\x27,\x20$event.detail)\x22\x0a\x20\x20@refresh=\x22$dispatch(\x27refresh\x27)\x22\x0a\x20\x20@deleted=\x22$dispatch(\x27deleted\x27,\x20$event.detail)\x22\x0a>\x0a\x20\x20<div\x20class=\x22stack-compact\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:8px;min-width:0;flex:1;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22pill-row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Queue\x20job\x20type\x20consumed\x20by\x20this\x20worker.\x22>{{\x20jobType\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Indexer\x20this\x20worker\x20feeds.\x22>indexer:\x20{{\x20indexerName\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Embedder\x20used\x20for\x20vector\x20generation.\x22>embedder:\x20{{\x20embedderName\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Parallel\x20worker\x20lanes.\x22>concurrency:\x20{{\x20concurrencyValue\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22story-lead\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Consumes\x20queued\x20embedding\x20jobs\x20for\x20<strong>{{\x20indexerName\x20}}</strong>\x20and\x20pushes\x20text\x20through\x20<strong>{{\x20embedderName\x20}}</strong>.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22story-note\x22>Use\x20retry\x20when\x20queue\x20jobs\x20failed\x20or\x20docs\x20were\x20left\x20stuck\x20pending\x20after\x20a\x20queue\x20disruption.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-grid\x20metric-grid--compact\x22\x20style=\x22min-width:min(100%,\x20360px);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Processed</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20style=\x22color:var(--okdb-success);\x22>{{\x20processedCount\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Failed</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20:style=\x22\x27color:\x27\x20+\x20(failedCount\x20>\x200\x20?\x20\x27var(--okdb-danger)\x27\x20:\x20\x27var(--okdb-app-fg)\x27)\x22>{{\x20failedCount\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>In\x20flight</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20:style=\x22\x27color:\x27\x20+\x20(inflightCount\x20>\x200\x20?\x20\x27var(--okdb-warning)\x27\x20:\x20\x27var(--okdb-app-fg)\x27)\x22>{{\x20inflightCount\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:10px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22retryAllFailed()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22retryBusy\x20||\x20(!failedCount\x20&&\x20!jobType)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22color:var(--okdb-warning);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-warning)\x2027%,\x20transparent);\x20font-size:12px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Retry\x20all\x20failed\x20queue\x20jobs\x20for\x20this\x20worker\x27s\x20job_type\x20+\x20re-enqueue\x20stuck\x20docs\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20retryBusy\x20?\x20\x27Retrying…\x27\x20:\x20\x27↺\x20Retry\x20Failed\x20Jobs\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22story-note\x22>Retries\x20queue\x20failures\x20and\x20also\x20re-enqueues\x20stuck\x20pending\x20docs\x20on\x20the\x20linked\x20indexer.</span>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22alert\x20alert--error\x22>{{\x20error\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Worker\x20details</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22kv-grid\x20kv-grid--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>job\x20type</span><span\x20class=\x22kv-val\x22>{{\x20jobType\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>indexer</span><span\x20class=\x22kv-val\x22>{{\x20indexerName\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>embedder</span><span\x20class=\x22kv-val\x22>{{\x20embedderName\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>concurrency</span><span\x20class=\x22kv-val\x22>{{\x20concurrencyValue\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a</engine-panel-shell>\x0a','style':s};
|
|
1
|
+
function _0x5aeb(){const _0x453f6a=['$ok','busy','/retryFailed','API','job_type','/queue/retryFailed','779184iPGeEA','/embeddings/indexers/','refresh','\x20queue\x20job(s)','load','confirm','Retry\x20all\x20failed\x20queue\x20jobs\x20for\x20type\x20\x22<b>','1208drTTVR','embed-worker-panel','message','shared','6FcnYtu','5480796oiypUA','$watch','eng','stringify','Cannot\x20determine\x20job_type\x20or\x20indexer\x20name','6490510BfkhBO','failed','embedder','in_flight','name','error','engine','$dispatch',',\x20re-enqueued\x20','processed','concurrency','retryBusy','toast','44iMZLQx','POST','515FcvAPW','</b>\x22?<br><br>This\x20will\x20also\x20re-enqueue\x20any\x20stuck\x20PENDING\x20docs\x20on\x20the\x20indexer.','Retried\x20','application/json','\x20doc(s)','stats','14024iqWTys','45514ZDiUlj','/embeddings/workers/','data','json','\x0a<engine-panel-shell\x0a\x20\x20:engine=\x22eng\x22\x0a\x20\x20:title=\x22name\x22\x0a\x20\x20type-label=\x22worker\x22\x0a\x20\x20type-color=\x22var(--okdb-warning)\x22\x0a\x20\x20show-refresh=\x22true\x22\x0a\x20\x20:refresh-busy=\x22busy\x20||\x20retryBusy\x22\x0a\x20\x20:on-refresh=\x22onRefresh\x22\x0a\x20\x20:on-pipeline=\x22viewPipeline\x22\x0a\x20\x20@engine-updated=\x22$dispatch(\x27engine-updated\x27,\x20$event.detail)\x22\x0a\x20\x20@refresh=\x22$dispatch(\x27refresh\x27)\x22\x0a\x20\x20@deleted=\x22$dispatch(\x27deleted\x27,\x20$event.detail)\x22\x0a>\x0a\x20\x20<div\x20class=\x22stack-compact\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:8px;min-width:0;flex:1;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22pill-row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Queue\x20job\x20type\x20consumed\x20by\x20this\x20worker.\x22>{{\x20jobType\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Indexer\x20this\x20worker\x20feeds.\x22>indexer:\x20{{\x20indexerName\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Embedder\x20used\x20for\x20vector\x20generation.\x22>embedder:\x20{{\x20embedderName\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Parallel\x20worker\x20lanes.\x22>concurrency:\x20{{\x20concurrencyValue\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22story-lead\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Consumes\x20queued\x20embedding\x20jobs\x20for\x20<strong>{{\x20indexerName\x20}}</strong>\x20and\x20pushes\x20text\x20through\x20<strong>{{\x20embedderName\x20}}</strong>.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22story-note\x22>Use\x20retry\x20when\x20queue\x20jobs\x20failed\x20or\x20docs\x20were\x20left\x20stuck\x20pending\x20after\x20a\x20queue\x20disruption.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-grid\x20metric-grid--compact\x22\x20style=\x22min-width:min(100%,\x20360px);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Processed</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20style=\x22color:var(--okdb-success);\x22>{{\x20processedCount\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Failed</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20:style=\x22\x27color:\x27\x20+\x20(failedCount\x20>\x200\x20?\x20\x27var(--okdb-danger)\x27\x20:\x20\x27var(--okdb-app-fg)\x27)\x22>{{\x20failedCount\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>In\x20flight</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20:style=\x22\x27color:\x27\x20+\x20(inflightCount\x20>\x200\x20?\x20\x27var(--okdb-warning)\x27\x20:\x20\x27var(--okdb-app-fg)\x27)\x22>{{\x20inflightCount\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:10px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22retryAllFailed()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22retryBusy\x20||\x20(!failedCount\x20&&\x20!jobType)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22color:var(--okdb-warning);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-warning)\x2027%,\x20transparent);\x20font-size:12px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Retry\x20all\x20failed\x20queue\x20jobs\x20for\x20this\x20worker\x27s\x20job_type\x20+\x20re-enqueue\x20stuck\x20docs\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20retryBusy\x20?\x20\x27Retrying…\x27\x20:\x20\x27↺\x20Retry\x20Failed\x20Jobs\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22story-note\x22>Retries\x20queue\x20failures\x20and\x20also\x20re-enqueues\x20stuck\x20pending\x20docs\x20on\x20the\x20linked\x20indexer.</span>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22alert\x20alert--error\x22>{{\x20error\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Worker\x20details</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22kv-grid\x20kv-grid--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>job\x20type</span><span\x20class=\x22kv-val\x22>{{\x20jobType\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>indexer</span><span\x20class=\x22kv-val\x22>{{\x20indexerName\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>embedder</span><span\x20class=\x22kv-val\x22>{{\x20embedderName\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>concurrency</span><span\x20class=\x22kv-val\x22>{{\x20concurrencyValue\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a</engine-panel-shell>\x0a','indexer','config','$attr','101848oyJNqp','210645lmWPHB'];_0x5aeb=function(){return _0x453f6a;};return _0x5aeb();}function _0x2b20(_0xad2b78,_0x5a3626){_0xad2b78=_0xad2b78-0xef;const _0x5aeb44=_0x5aeb();let _0x2b205d=_0x5aeb44[_0xad2b78];return _0x2b205d;}const _0x2dc7ee=_0x2b20;(function(_0x3f1317,_0x4be1c2){const _0x4c5712=_0x2b20,_0x55f218=_0x3f1317();while(!![]){try{const _0x918ef9=-parseInt(_0x4c5712(0x10c))/0x1+-parseInt(_0x4c5712(0x11f))/0x2*(-parseInt(_0x4c5712(0x10d))/0x3)+parseInt(_0x4c5712(0x103))/0x4*(-parseInt(_0x4c5712(0xfd))/0x5)+-parseInt(_0x4c5712(0x120))/0x6+parseInt(_0x4c5712(0x104))/0x7*(-parseInt(_0x4c5712(0x11b))/0x8)+parseInt(_0x4c5712(0x114))/0x9+parseInt(_0x4c5712(0x125))/0xa*(parseInt(_0x4c5712(0xfb))/0xb);if(_0x918ef9===_0x4be1c2)break;else _0x55f218['push'](_0x55f218['shift']());}catch(_0x570a3f){_0x55f218['push'](_0x55f218['shift']());}}}(_0x5aeb,0x82a97));import _0x16d1b5 from'../../engines/parts/engine-panel-shell.ok.js';import{ENGINE_PANEL_SHARED_STYLE as _0x30ebe8}from'../../engines/engine-panel-shared-style.js';import{dispatchEnginePipelineSelection as _0x527968}from'../../engines/engine-ui-utils.js';const s=_0x30ebe8;export default{'tag':_0x2dc7ee(0x11c),'dependencies':[_0x16d1b5],'attr':{'name':{},'engine':{}},'context':_0x177abb=>({'busy':!0x1,'stats':null,'error':null,'retryBusy':!0x1,get 'eng'(){const _0x1799f2=_0x2dc7ee;return _0x177abb['$attr'][_0x1799f2(0xf4)]??{};},get 'name'(){const _0xead18b=_0x2dc7ee;return _0x177abb[_0xead18b(0x10b)][_0xead18b(0xf2)];},get 'jobType'(){const _0x3e522d=_0x2dc7ee;return this[_0x3e522d(0x102)]?.[_0x3e522d(0x112)]||this[_0x3e522d(0x122)]?.[_0x3e522d(0x10a)]?.[_0x3e522d(0x112)]||'—';},get 'indexerName'(){const _0x24c277=_0x2dc7ee;return this[_0x24c277(0x102)]?.[_0x24c277(0x109)]||this['eng']?.['config']?.[_0x24c277(0x109)]||'—';},get 'embedderName'(){const _0x16c911=_0x2dc7ee;return this[_0x16c911(0x102)]?.['embedder']||this[_0x16c911(0x122)]?.[_0x16c911(0x10a)]?.[_0x16c911(0xf0)]||'—';},get 'concurrencyValue'(){const _0x4b303a=_0x2dc7ee;return this[_0x4b303a(0x102)]?.[_0x4b303a(0xf8)]??this[_0x4b303a(0x122)]?.[_0x4b303a(0x10a)]?.[_0x4b303a(0xf8)]??'—';},get 'processedCount'(){const _0x2240e5=_0x2dc7ee;return this[_0x2240e5(0x102)]?.[_0x2240e5(0xf7)]??0x0;},get 'failedCount'(){const _0x3528fa=_0x2dc7ee;return this[_0x3528fa(0x102)]?.[_0x3528fa(0xef)]??0x0;},get 'inflightCount'(){const _0x5351a9=_0x2dc7ee;return this[_0x5351a9(0x102)]?.[_0x5351a9(0xf1)]??0x0;},async 'load'(){const _0x17f1ca=_0x2dc7ee;this[_0x17f1ca(0x10f)]=!0x0,this[_0x17f1ca(0xf3)]=null;try{const _0x5d78d0=await fetch(__ENV__[_0x17f1ca(0x111)]+_0x17f1ca(0x105)+encodeURIComponent(this[_0x17f1ca(0xf2)])+'/stats'),_0x20974a=await _0x5d78d0[_0x17f1ca(0x107)]();if(!_0x5d78d0['ok'])throw new Error(_0x20974a?.['error']?.['message']||'failed');this[_0x17f1ca(0x102)]=_0x20974a[_0x17f1ca(0x106)];}catch(_0x39e2cd){this[_0x17f1ca(0xf3)]=_0x39e2cd?.[_0x17f1ca(0x11d)]||String(_0x39e2cd),this[_0x17f1ca(0x102)]=null;}finally{this[_0x17f1ca(0x10f)]=!0x1;}},async 'onRefresh'(){const _0x445104=_0x2dc7ee;await this[_0x445104(0x118)]();},'viewPipeline'(){const _0x2b1d45=_0x2dc7ee;_0x527968(_0x177abb,this[_0x2b1d45(0x122)]);},async 'retryAllFailed'(){const _0x2127b6=_0x2dc7ee,_0x1fd85f=this[_0x2127b6(0x102)]?.['job_type']||this[_0x2127b6(0x122)]?.[_0x2127b6(0x10a)]?.[_0x2127b6(0x112)],_0xe2505b=this[_0x2127b6(0x102)]?.[_0x2127b6(0x109)]||this[_0x2127b6(0x122)]?.[_0x2127b6(0x10a)]?.[_0x2127b6(0x109)];if(_0x1fd85f||_0xe2505b){if(await _0x177abb[_0x2127b6(0x10e)][_0x2127b6(0x11e)]['modal'][_0x2127b6(0x119)](_0x2127b6(0x11a)+_0x1fd85f+_0x2127b6(0xfe))){this[_0x2127b6(0xf9)]=!0x0;try{const _0x40a70b=await fetch(__ENV__[_0x2127b6(0x111)]+_0x2127b6(0x113),{'method':_0x2127b6(0xfc),'headers':{'Content-Type':_0x2127b6(0x100)},'body':JSON[_0x2127b6(0x123)]({'type':_0x1fd85f,'limit':0x1388})}),_0x1099f2=await _0x40a70b[_0x2127b6(0x107)](),_0x43db7f=_0x1099f2?.['data']?.['retried']??0x0;let _0x25fb96=0x0;if(_0xe2505b){const _0x39f9ea=await fetch(__ENV__[_0x2127b6(0x111)]+_0x2127b6(0x115)+encodeURIComponent(_0xe2505b)+_0x2127b6(0x110),{'method':_0x2127b6(0xfc),'headers':{'Content-Type':_0x2127b6(0x100)},'body':JSON['stringify']({'limit':0x1388,'includeStuckPending':!0x0})}),_0x4a05bc=await _0x39f9ea[_0x2127b6(0x107)]();_0x25fb96=_0x4a05bc?.[_0x2127b6(0x106)]?.['retried']??0x0;}_0x177abb[_0x2127b6(0x10e)][_0x2127b6(0x11e)]?.[_0x2127b6(0xfa)]?.['success']?.(_0x2127b6(0xff)+_0x43db7f+_0x2127b6(0x117)+(_0x25fb96?_0x2127b6(0xf6)+_0x25fb96+_0x2127b6(0x101):'')),_0x177abb[_0x2127b6(0xf5)](_0x2127b6(0x116)),await this[_0x2127b6(0x118)]();}catch(_0x218fe6){_0x177abb[_0x2127b6(0x10e)][_0x2127b6(0x11e)]?.[_0x2127b6(0xfa)]?.[_0x2127b6(0xf3)]?.(_0x218fe6?.[_0x2127b6(0x11d)]||'Retry\x20failed');}finally{this['retryBusy']=!0x1;}}}else _0x177abb[_0x2127b6(0x10e)][_0x2127b6(0x11e)]?.[_0x2127b6(0xfa)]?.[_0x2127b6(0xf3)]?.(_0x2127b6(0x124));}}),async 'init'(_0x47e622){const _0x54b3ec=_0x2dc7ee;_0x47e622[_0x54b3ec(0x121)](()=>_0x47e622[_0x54b3ec(0x10b)][_0x54b3ec(0xf2)],async()=>{const _0x3b518e=_0x54b3ec;this[_0x3b518e(0x102)]=null,this[_0x3b518e(0xf3)]=null,await this[_0x3b518e(0x118)]();}),await this[_0x54b3ec(0x118)]();},'template':_0x2dc7ee(0x108),'style':s};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
function _0x4229(_0x4ebd3e,_0x448c34){_0x4ebd3e=_0x4ebd3e-0x143;var _0x2b5719=_0x2b57();var _0x4229bd=_0x2b5719[_0x4ebd3e];return _0x4229bd;}function _0x2b57(){var _0x29518e=['$attr','eng','168784higVLY','panelType','type','16IErBJs','914266YMTwmf','engine','9DzvSjn','10252790LioCSd','4657163JNqrMB','6lCTHzZ','detail','44767096UGgGNI','35qefRkN','628170XOREnF','1475970FtLyQW'];_0x2b57=function(){return _0x29518e;};return _0x2b57();}(function(_0x54af79,_0x48cd6c){var _0x4f60ac=_0x4229,_0x626ecb=_0x54af79();while(!![]){try{var _0x4fb9e4=-parseInt(_0x4f60ac(0x153))/0x1+parseInt(_0x4f60ac(0x149))/0x2*(parseInt(_0x4f60ac(0x14e))/0x3)+parseInt(_0x4f60ac(0x145))/0x4*(-parseInt(_0x4f60ac(0x151))/0x5)+-parseInt(_0x4f60ac(0x152))/0x6+-parseInt(_0x4f60ac(0x14d))/0x7*(parseInt(_0x4f60ac(0x148))/0x8)+parseInt(_0x4f60ac(0x14b))/0x9*(-parseInt(_0x4f60ac(0x14c))/0xa)+parseInt(_0x4f60ac(0x150))/0xb;if(_0x4fb9e4===_0x48cd6c)break;else _0x626ecb['push'](_0x626ecb['shift']());}catch(_0x4d9d55){_0x626ecb['push'](_0x626ecb['shift']());}}}(_0x2b57,0xb79c4));import _0xe0f432 from'./embed-embedder-panel.ok.js';import _0x3273c8 from'./embed-indexer-panel.ok.js';import _0x155205 from'./embed-search-panel.ok.js';import _0x3219c4 from'./embed-worker-panel.ok.js';import{isEmbeddingsEngineType as _0x3d1946}from'../../engines/engine-ui-utils.js';export default{'tag':'embeddings-engine-panel','dependencies':[_0xe0f432,_0x3273c8,_0x155205,_0x3219c4],'attr':{'engine':{}},'context':_0x570fe4=>({get 'eng'(){var _0x277a94=_0x4229;return _0x570fe4[_0x277a94(0x143)][_0x277a94(0x14a)]??{};},get 'panelType'(){var _0x3125a8=_0x4229;return this[_0x3125a8(0x144)][_0x3125a8(0x147)]??'';},get 'hasKnownPanel'(){var _0x453a00=_0x4229;return _0x3d1946(this[_0x453a00(0x146)]);},'forward'(_0xf8d73c){var _0x330dd5=_0x4229;_0xf8d73c?.['type']&&_0x570fe4['$dispatch'](_0xf8d73c['type'],_0xf8d73c[_0x330dd5(0x14f)]);}}),'template':'\x0a<div\x20style=\x22display:flex;flex-direction:column;gap:14px;min-width:0;\x22>\x0a\x20\x20<if\x20:=\x22panelType\x20===\x20\x27embedder\x27\x22>\x0a\x20\x20\x20\x20<embed-embedder-panel\x0a\x20\x20\x20\x20\x20\x20:name=\x22eng.name\x22\x0a\x20\x20\x20\x20\x20\x20:engine=\x22eng\x22\x0a\x20\x20\x20\x20\x20\x20@engine-updated=\x22forward($event)\x22\x0a\x20\x20\x20\x20\x20\x20@refresh=\x22forward($event)\x22\x0a\x20\x20\x20\x20\x20\x20@deleted=\x22forward($event)\x22\x0a\x20\x20\x20\x20/>\x0a\x20\x20</if>\x0a\x20\x20<if\x20:=\x22panelType\x20===\x20\x27indexer\x27\x22>\x0a\x20\x20\x20\x20<embed-indexer-panel\x0a\x20\x20\x20\x20\x20\x20:name=\x22eng.name\x22\x0a\x20\x20\x20\x20\x20\x20:engine=\x22eng\x22\x0a\x20\x20\x20\x20\x20\x20@engine-updated=\x22forward($event)\x22\x0a\x20\x20\x20\x20\x20\x20@refresh=\x22forward($event)\x22\x0a\x20\x20\x20\x20\x20\x20@deleted=\x22forward($event)\x22\x0a\x20\x20\x20\x20/>\x0a\x20\x20</if>\x0a\x20\x20<if\x20:=\x22panelType\x20===\x20\x27embed-worker\x27\x22>\x0a\x20\x20\x20\x20<embed-worker-panel\x0a\x20\x20\x20\x20\x20\x20:name=\x22eng.name\x22\x0a\x20\x20\x20\x20\x20\x20:engine=\x22eng\x22\x0a\x20\x20\x20\x20\x20\x20@engine-updated=\x22forward($event)\x22\x0a\x20\x20\x20\x20\x20\x20@refresh=\x22forward($event)\x22\x0a\x20\x20\x20\x20\x20\x20@deleted=\x22forward($event)\x22\x0a\x20\x20\x20\x20/>\x0a\x20\x20</if>\x0a\x20\x20<if\x20:=\x22panelType\x20===\x20\x27vector-search\x27\x22>\x0a\x20\x20\x20\x20<embed-search-panel\x0a\x20\x20\x20\x20\x20\x20:name=\x22eng.name\x22\x0a\x20\x20\x20\x20\x20\x20:engine=\x22eng\x22\x0a\x20\x20\x20\x20\x20\x20@engine-updated=\x22forward($event)\x22\x0a\x20\x20\x20\x20\x20\x20@refresh=\x22forward($event)\x22\x0a\x20\x20\x20\x20\x20\x20@deleted=\x22forward($event)\x22\x0a\x20\x20\x20\x20/>\x0a\x20\x20</if>\x0a\x20\x20<if\x20:=\x22!hasKnownPanel\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22padding:14px;border:1px\x20solid\x20var(--okdb-app-border);border-radius:12px;background:var(--okdb-app-bg-deep);color:var(--okdb-app-fg-muted);font-size:12px;line-height:1.6;\x22>\x0a\x20\x20\x20\x20\x20\x20No\x20embeddings\x20panel\x20is\x20registered\x20for\x20engine\x20type\x20<code>{{\x20panelType\x20||\x20\x27unknown\x27\x20}}</code>.\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a</div>\x0a'};
|