@kedem/okdb 1.0.0 → 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.
Files changed (188) hide show
  1. package/README.md +1 -1
  2. package/bin/okdb.js +1 -1
  3. package/keys/public.pem +3 -0
  4. package/okdb.js +1 -1
  5. package/package.json +2 -2
  6. package/public/admin-app.js +1 -1
  7. package/public/components/admin-route-host.ok.js +1 -1
  8. package/public/components/env-picker.ok.js +1 -1
  9. package/public/components/field-path-input.ok.js +1 -1
  10. package/public/components/geo-map.ok.js +1 -1
  11. package/public/components/ok-cron-input.ok.js +1 -1
  12. package/public/components/ok-dropzone.ok.js +1 -1
  13. package/public/components/ok-js-input.ok.js +1 -1
  14. package/public/components/ok-json-input.ok.js +1 -1
  15. package/public/components/ok-text-monaco-input.ok.js +1 -1
  16. package/public/components/theme-toggle.ok.js +1 -1
  17. package/public/login-app.js +1 -1
  18. package/public/modules/ok.js +1 -1
  19. package/public/sections/api/parts/api-endpoint.ok.js +1 -1
  20. package/public/sections/auth/modals/create-token-modal.ok.js +1 -1
  21. package/public/sections/auth/modals/edit-token-modal.ok.js +1 -1
  22. package/public/sections/auth/modals/perm-info-popover.ok.js +1 -1
  23. package/public/sections/auth/parts/token-detail.ok.js +1 -1
  24. package/public/sections/auth/parts/token-list.ok.js +1 -1
  25. package/public/sections/db/modals/add-item-modal.ok.js +1 -1
  26. package/public/sections/db/modals/create-env-modal.ok.js +1 -1
  27. package/public/sections/db/modals/create-fts-modal.ok.js +1 -1
  28. package/public/sections/db/modals/create-index-modal.ok.js +1 -1
  29. package/public/sections/db/modals/create-pipeline-modal.ok.js +1 -1
  30. package/public/sections/db/modals/demo-env-modal.ok.js +1 -1
  31. package/public/sections/db/modals/remove-env-modal.ok.js +1 -1
  32. package/public/sections/db/modals/schema-edit-modal.ok.js +1 -1
  33. package/public/sections/db/parts/db-overview.ok.js +1 -1
  34. package/public/sections/db/parts/db-pipelines-panel.ok.js +1 -1
  35. package/public/sections/db/parts/edit-row.ok.js +1 -1
  36. package/public/sections/db/parts/tm-timeline.ok.js +1 -1
  37. package/public/sections/db/parts/type-changelog.ok.js +1 -1
  38. package/public/sections/db/parts/type-list.ok.js +1 -1
  39. package/public/sections/db/parts/type-pipelines-tab.ok.js +1 -1
  40. package/public/sections/db/parts/type-schema-tab.ok.js +1 -1
  41. package/public/sections/db/parts/type-viewer.ok.js +1 -1
  42. package/public/sections/db/parts/type-violations-tab.ok.js +1 -1
  43. package/public/sections/embeddings/modals/register-model-modal.ok.js +1 -1
  44. package/public/sections/embeddings/parts/embed-create-panel.ok.js +1 -1
  45. package/public/sections/embeddings/parts/embed-embedder-panel.ok.js +1 -1
  46. package/public/sections/embeddings/parts/embed-engine-declaration-editor.ok.js +1 -1
  47. package/public/sections/embeddings/parts/embed-engine-list.ok.js +1 -1
  48. package/public/sections/embeddings/parts/embed-indexer-panel.ok.js +1 -1
  49. package/public/sections/embeddings/parts/embed-lifecycle-bar.ok.js +1 -1
  50. package/public/sections/embeddings/parts/embed-model-catalog.ok.js +1 -1
  51. package/public/sections/embeddings/parts/embed-overview.ok.js +1 -1
  52. package/public/sections/embeddings/parts/embed-search-panel.ok.js +1 -1
  53. package/public/sections/embeddings/parts/embed-worker-panel.ok.js +1 -1
  54. package/public/sections/embeddings/parts/embeddings-engine-panel.ok.js +1 -1
  55. package/public/sections/embeddings/parts/engines-overview.ok.js +1 -1
  56. package/public/sections/embeddings/parts/pipeline-create-panel.ok.js +1 -1
  57. package/public/sections/engines/engine-panel-shared-style.js +1 -1
  58. package/public/sections/engines/engine-ui-utils.js +1 -1
  59. package/public/sections/engines/modals/engine-modal.ok.js +1 -1
  60. package/public/sections/engines/parts/engine-declaration-editor.ok.js +1 -1
  61. package/public/sections/engines/parts/engine-lifecycle-actions.ok.js +1 -1
  62. package/public/sections/engines/parts/engine-panel-shell.ok.js +1 -1
  63. package/public/sections/engines/parts/engine-resource-card.ok.js +1 -1
  64. package/public/sections/engines/parts/engine-row-item.ok.js +1 -1
  65. package/public/sections/engines/parts/generic-engine-panel.ok.js +1 -1
  66. package/public/sections/files/parts/files-blob-status.ok.js +1 -1
  67. package/public/sections/files/parts/files-collection-list.ok.js +1 -1
  68. package/public/sections/files/parts/files-collection-panel.ok.js +1 -1
  69. package/public/sections/files/parts/files-file-list.ok.js +1 -1
  70. package/public/sections/files/parts/files-overview.ok.js +1 -1
  71. package/public/sections/files/parts/files-path-browser.ok.js +1 -1
  72. package/public/sections/files/parts/files-upload-panel.ok.js +1 -1
  73. package/public/sections/functions/modals/function-modal.ok.js +1 -1
  74. package/public/sections/functions/parts/function-detail.ok.js +1 -1
  75. package/public/sections/functions/parts/function-logs.ok.js +1 -1
  76. package/public/sections/functions/parts/function-runner.ok.js +1 -1
  77. package/public/sections/functions/parts/functions-list.ok.js +1 -1
  78. package/public/sections/license/parts/license-panel.ok.js +1 -1
  79. package/public/sections/queue/modals/create-bucket-modal.ok.js +1 -1
  80. package/public/sections/queue/modals/edit-bucket-modal.ok.js +1 -1
  81. package/public/sections/queue/modals/edit-job-modal.ok.js +1 -1
  82. package/public/sections/queue/modals/enqueue-job-modal.ok.js +1 -1
  83. package/public/sections/queue/modals/job-type-modal.ok.js +1 -1
  84. package/public/sections/queue/parts/ok-job-form.ok.js +1 -1
  85. package/public/sections/queue/parts/queue-buckets.ok.js +1 -1
  86. package/public/sections/queue/parts/queue-job-types.ok.js +1 -1
  87. package/public/sections/queue/parts/queue-jobs.ok.js +1 -1
  88. package/public/sections/queue/parts/queue-types.ok.js +1 -1
  89. package/public/sections/queue/parts/queue-workers.ok.js +1 -1
  90. package/public/sections/sync/parts/sync-node-detail.ok.js +1 -1
  91. package/public/sections/sync/parts/sync-retention.ok.js +1 -1
  92. package/public/sections/sync/parts/sync-topology.ok.js +1 -1
  93. package/public/sections/system/modals/data-ops-modal.ok.js +1 -1
  94. package/public/sections/system/parts/system-api-panel.ok.js +1 -1
  95. package/public/sections/system/parts/system-auth-panel.ok.js +1 -1
  96. package/public/sections/system/parts/system-log-history.ok.js +1 -1
  97. package/public/sections/system/parts/system-log.ok.js +1 -1
  98. package/public/sections/system/parts/system-status.ok.js +1 -1
  99. package/public/sections/system/parts/system-sync-panel.ok.js +1 -1
  100. package/public/sections/views/modals/create-view-modal.ok.js +1 -1
  101. package/public/sections/views/parts/view-detail.ok.js +1 -1
  102. package/public/sections/views/parts/views-list.ok.js +1 -1
  103. package/public/sections/views/parts/views-overview.ok.js +1 -1
  104. package/public/setup-app.js +1 -1
  105. package/public/stores/auth-store.js +1 -1
  106. package/public/stores/events-store.js +1 -1
  107. package/public/stores/functions-store.js +1 -1
  108. package/public/stores/okdb-store.js +1 -1
  109. package/public/stores/theme-store.js +1 -1
  110. package/public/util/permissions.js +1 -1
  111. package/public/util/sift-schema.js +1 -1
  112. package/public/vendor/okjs/ok.esm.min.js +1 -2
  113. package/public/vendor/okjs/toolkit/behavior/async.ok.js +1 -1
  114. package/public/vendor/okjs/toolkit/components/ok-chart.ok.js +1 -1
  115. package/public/vendor/okjs/toolkit/components/ok-doc-viewer.ok.js +1 -1
  116. package/public/vendor/okjs/toolkit/components/ok-marked.ok.js +1 -1
  117. package/public/vendor/okjs/toolkit/components/ok-monaco.ok.js +1 -1
  118. package/public/vendor/okjs/toolkit/core/ok-layer-service.ok.js +1 -1
  119. package/public/vendor/okjs/toolkit/core/ok-layer.ok.js +1 -1
  120. package/public/vendor/okjs/toolkit/core/ok-overlay.ok.js +1 -1
  121. package/public/vendor/okjs/toolkit/core/ok-sandbox.ok.js +1 -1
  122. package/public/vendor/okjs/toolkit/core/transition.ok.js +1 -1
  123. package/public/vendor/okjs/toolkit/core/virtualized.ok.js +1 -1
  124. package/public/vendor/okjs/toolkit/devtools/ok-console-service.ok.js +1 -1
  125. package/public/vendor/okjs/toolkit/devtools/ok-console.ok.js +1 -1
  126. package/public/vendor/okjs/toolkit/devtools/ok-fps-monitor-service.ok.js +1 -1
  127. package/public/vendor/okjs/toolkit/devtools/ok-fps-monitor.ok.js +1 -1
  128. package/public/vendor/okjs/toolkit/devtools/ok-inspector-service.ok.js +1 -1
  129. package/public/vendor/okjs/toolkit/devtools/ok-inspector.ok.js +1 -1
  130. package/public/vendor/okjs/toolkit/devtools/ok-js-tree.ok.js +1 -1
  131. package/public/vendor/okjs/toolkit/devtools/ok-timeline-service.ok.js +1 -1
  132. package/public/vendor/okjs/toolkit/devtools/ok-timeline.ok.js +1 -1
  133. package/public/vendor/okjs/toolkit/docs/doc-viewer.ok.js +1 -1
  134. package/public/vendor/okjs/toolkit/editor/ok-live-component.ok.js +1 -1
  135. package/public/vendor/okjs/toolkit/editor/ok-live-example.ok.js +1 -1
  136. package/public/vendor/okjs/toolkit/editor/ok-live-shell.ok.js +1 -1
  137. package/public/vendor/okjs/toolkit/elements/ok-dropdown.ok.js +1 -1
  138. package/public/vendor/okjs/toolkit/elements/ok-icon.ok.js +1 -1
  139. package/public/vendor/okjs/toolkit/elements/ok-select.ok.js +1 -1
  140. package/public/vendor/okjs/toolkit/elements/ok-table.ok.js +1 -1
  141. package/public/vendor/okjs/toolkit/errors/ok-crash-boundary.ok.js +1 -1
  142. package/public/vendor/okjs/toolkit/errors/ok-crash-info.ok.js +1 -1
  143. package/public/vendor/okjs/toolkit/i18n/i18n-editor-examples.ok.js +1 -1
  144. package/public/vendor/okjs/toolkit/i18n/i18n-editor.ok.js +1 -1
  145. package/public/vendor/okjs/toolkit/i18n/i18n-key-editor-tips.ok.js +1 -1
  146. package/public/vendor/okjs/toolkit/i18n/i18n-key-editor.ok.js +1 -1
  147. package/public/vendor/okjs/toolkit/i18n/i18n-service.ok.js +1 -1
  148. package/public/vendor/okjs/toolkit/i18n/ok-i18n.js +1 -1
  149. package/public/vendor/okjs/toolkit/interaction/ok-contextmenu.ok.js +1 -1
  150. package/public/vendor/okjs/toolkit/interaction/ok-dismiss-service.ok.js +1 -1
  151. package/public/vendor/okjs/toolkit/interaction/ok-draggable.ok.js +1 -1
  152. package/public/vendor/okjs/toolkit/interaction/ok-flyover-panel.ok.js +1 -1
  153. package/public/vendor/okjs/toolkit/interaction/ok-flyover.ok.js +1 -1
  154. package/public/vendor/okjs/toolkit/interaction/ok-highlight-service.ok.js +1 -1
  155. package/public/vendor/okjs/toolkit/interaction/ok-highlight.ok.js +1 -1
  156. package/public/vendor/okjs/toolkit/interaction/ok-hotkeys-service.ok.js +1 -1
  157. package/public/vendor/okjs/toolkit/interaction/ok-picker-service.ok.js +1 -1
  158. package/public/vendor/okjs/toolkit/interaction/ok-popout-service.ok.js +1 -1
  159. package/public/vendor/okjs/toolkit/interaction/ok-popout.ok.js +1 -1
  160. package/public/vendor/okjs/toolkit/interaction/ok-portal-service.ok.js +1 -1
  161. package/public/vendor/okjs/toolkit/interaction/ok-submenu.ok.js +1 -1
  162. package/public/vendor/okjs/toolkit/layout/ok-resizer.ok.js +1 -1
  163. package/public/vendor/okjs/toolkit/manifest.js +1 -1
  164. package/public/vendor/okjs/toolkit/modals/ok-modal-service.ok.js +1 -1
  165. package/public/vendor/okjs/toolkit/modals/ok-modal.ok.js +1 -1
  166. package/public/vendor/okjs/toolkit/modals/ok-toast-service.ok.js +1 -1
  167. package/public/vendor/okjs/toolkit/modals/ok-window.ok.js +1 -1
  168. package/public/vendor/okjs/toolkit/navigation/hash-router.ok.js +1 -1
  169. package/public/vendor/okjs/toolkit/navigation/history-router.ok.js +1 -1
  170. package/public/vendor/okjs/toolkit/navigation/router.ok.js +1 -1
  171. package/public/vendor/okjs/toolkit/sync/reactive-sync-service.ok.js +1 -1
  172. package/public/vendor/okjs/toolkit/sync/reactive-sync.js +1 -1
  173. package/public/vendor/okjs/toolkit/theming/blocks/ok-design-button.css.js +1 -1
  174. package/public/vendor/okjs/toolkit/theming/blocks/ok-design-input.css.js +1 -1
  175. package/public/vendor/okjs/toolkit/theming/ok-design-style.js +1 -1
  176. package/public/vendor/okjs/toolkit/theming/ok-design-vars.js +1 -1
  177. package/public/vendor/okjs/toolkit/theming/ok-design.ok.js +1 -1
  178. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-input.ok.js +1 -1
  179. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-service.ok.js +1 -1
  180. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-style.js +1 -1
  181. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-utils.js +1 -1
  182. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-variable.ok.js +1 -1
  183. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-vm.js +1 -1
  184. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor.ok.js +1 -1
  185. package/public/vendor/okjs/toolkit/theming/ok-theme.ok.js +1 -1
  186. package/public/view-models/type-query-vm.js +1 -1
  187. package/public/images/logo.png +0 -0
  188. package/public/images/logo.svg +0 -333
@@ -1 +1 @@
1
- function _0x1a71(_0x398a79,_0x48196c){_0x398a79=_0x398a79-0x14f;const _0x192006=_0x1920();let _0x1a71ac=_0x192006[_0x398a79];return _0x1a71ac;}const _0x4079a7=_0x1a71;(function(_0x3afe0b,_0x2c60e9){const _0x477617=_0x1a71,_0x42137d=_0x3afe0b();while(!![]){try{const _0x426a6a=-parseInt(_0x477617(0x19b))/0x1+parseInt(_0x477617(0x1c4))/0x2*(parseInt(_0x477617(0x184))/0x3)+parseInt(_0x477617(0x170))/0x4+-parseInt(_0x477617(0x175))/0x5*(-parseInt(_0x477617(0x1a4))/0x6)+parseInt(_0x477617(0x198))/0x7*(-parseInt(_0x477617(0x1b4))/0x8)+parseInt(_0x477617(0x18e))/0x9+-parseInt(_0x477617(0x188))/0xa;if(_0x426a6a===_0x2c60e9)break;else _0x42137d['push'](_0x42137d['shift']());}catch(_0x4f516f){_0x42137d['push'](_0x42137d['shift']());}}}(_0x1920,0x5956d));import _0x3d7af1 from'@toolkit/elements/ok-table.ok.js';import _0x453d6c from'../../engines/parts/engine-panel-shell.ok.js';import{ENGINE_PANEL_SHARED_STYLE as _0x30aa06}from'../../engines/engine-panel-shared-style.js';import{buildEmbeddingsPipelineUrl as _0x43cc58,dispatchEnginePipelineSelection as _0x7f3faa}from'../../engines/engine-ui-utils.js';function _0x1920(){const _0x35f856=['_pipelineUrl','min','$dispatch','editError','json','_buildEditAlgConfig','length','editBusy','result','305358ncQcqD','confirm','API','slice','9704720qDmaby','eng','config','/item/','start','application/json','4229199XFFBHH','type','/embeddings/engines/','chars\x20','$ok','max','/stats','not\x20found','algorithm_config','POST','350798HhKMgm','\x20KB','dims','400159skSNXs','data','actionResult','busy','$host','metric','shared','Rebuild\x20the\x20full\x20index\x20from\x20storage?\x20This\x20may\x20take\x20a\x20while.','storage_key','4184670sjUcWX','var(--okdb-danger)','filter','engine-updated','editAlgorithm','workerMetrics','docExpanded','editAlgorithmMap','Snapshot\x20published.','No\x20snapshot\x20needed\x20(up\x20to\x20date).','/snapshot','indexer','\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','modal','Rebuild\x20complete.','queryBusy','8zspxSB','number','toFixed','embedder','var(--okdb-purple)','editAlgConfig','engine','queryError','load','maxElements','text','_seedEditAlgConfig','$watch','queryResults','actionError','chunk','2PnLMLS','keys','var(--okdb-warning)','\x20MB','$el','isArray','save\x20failed','push','docCache','strategy','isConnected','name','actionBusy','some','/env/','note','rebuild\x20failed','none','string','error','source_type','failed','key','editAlgorithmFields','editMode','<1ms','$attr','algorithm','fields','/query','editAlgorithms','default','var(--okdb-orange)','snapped','message','count','2070144TEtsdk','stats','fetchDoc','snapshot\x20failed','stringify','5GNhHVv','queryLimit','prepare','value','fromEntries','embed-search-panel'];_0x1920=function(){return _0x35f856;};return _0x1920();}const a=_0x30aa06+'\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';export default{'tag':_0x4079a7(0x17a),'dependencies':[_0x3d7af1,_0x453d6c],'attr':{'name':{},'engine':{}},'context':_0x135885=>({'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 _0x196253=_0x4079a7;return _0x135885[_0x196253(0x166)][_0x196253(0x1ba)]??{};},get 'name'(){const _0x234b12=_0x4079a7;return _0x135885[_0x234b12(0x166)][_0x234b12(0x157)];},get '_pipelineUrl'(){const _0x4aad08=_0x4079a7;return _0x43cc58(this[_0x4aad08(0x189)],this[_0x4aad08(0x157)]);},get 's'(){const _0x238490=_0x4079a7;return this[_0x238490(0x171)]?.['search']??this[_0x238490(0x171)]??{};},get 'hasEmbedder'(){const _0x449231=_0x4079a7;return!!this[_0x449231(0x189)][_0x449231(0x18a)]?.[_0x449231(0x1b7)];},get 'sourceType'(){const _0x431d1a=_0x4079a7;return this[_0x431d1a(0x171)]?.[_0x431d1a(0x18f)]??this['s']?.[_0x431d1a(0x160)]??this['eng'][_0x431d1a(0x18a)]?.[_0x431d1a(0x160)]??null;},get 'vectorCount'(){const _0x12d68c=_0x4079a7;return this['s'][_0x12d68c(0x16f)]??0x0;},get 'capacityValue'(){const _0x437ea0=_0x4079a7;return this['s'][_0x437ea0(0x1bd)]??'∞';},get 'dimsValue'(){const _0xe1b6aa=_0x4079a7;return this['s'][_0xe1b6aa(0x19a)]??'—';},get 'metricValue'(){const _0x3fce72=_0x4079a7;return this['s'][_0x3fce72(0x1a0)]||'—';},get 'storageKeyValue'(){const _0x2cb844=_0x4079a7;return this['s'][_0x2cb844(0x1a3)]||'—';},get 'chunkStrategy'(){const _0x19bc64=_0x4079a7;return this['s'][_0x19bc64(0x1c3)]?.[_0x19bc64(0x155)]||null;},get 'wm'(){const _0x2c4e27=_0x4079a7;return this['s'][_0x2c4e27(0x1a9)]??null;},get 'headerBadges'(){const _0x5739eb=_0x4079a7,_0x4caa09=[];return this['s'][_0x5739eb(0x167)]&&_0x4caa09[_0x5739eb(0x153)]({'text':this['s'][_0x5739eb(0x167)],'color':_0x5739eb(0x1b8)}),this['s'][_0x5739eb(0x1c3)]&&_0x4caa09[_0x5739eb(0x153)]({'text':'chunked\x20·\x20'+this['s'][_0x5739eb(0x1c3)][_0x5739eb(0x155)],'color':_0x5739eb(0x16c)}),_0x4caa09;},get 'usesNonTrivialPrepare'(){const _0x36858e=_0x4079a7,_0x2881fe=this[_0x36858e(0x171)]?.[_0x36858e(0x1af)]?.[_0x36858e(0x177)];return!!_0x2881fe&&_0x36858e(0x15d)!==_0x2881fe;},'fmtBytes':_0x26e84a=>null==_0x26e84a?'—':_0x26e84a>=0x40000000?(_0x26e84a/0x40000000)['toFixed'](0x1)+'\x20GB':_0x26e84a>=0x100000?(_0x26e84a/0x100000)[_0x4079a7(0x1b6)](0x1)+_0x4079a7(0x14f):_0x26e84a>=0x400?(_0x26e84a/0x400)[_0x4079a7(0x1b6)](0x0)+_0x4079a7(0x199):_0x26e84a+'\x20B','fmtMs':_0x2b1ef3=>null==_0x2b1ef3?'—':_0x2b1ef3<0x1?_0x4079a7(0x165):_0x2b1ef3+'ms',async 'loadEditAlgorithms'(){const _0x627e7f=_0x4079a7;if(!this['editAlgorithms'][_0x627e7f(0x181)])try{const _0xce6aa6=await fetch(__ENV__[_0x627e7f(0x186)]+'/embeddings/algorithms'),_0x58bf6f=await _0xce6aa6['json']();this['editAlgorithms']=_0x58bf6f[_0x627e7f(0x19c)]||[],this[_0x627e7f(0x1ab)]=Object[_0x627e7f(0x179)](this[_0x627e7f(0x16a)]['map'](_0x22b55d=>[_0x22b55d[_0x627e7f(0x162)],_0x22b55d]));}catch{this[_0x627e7f(0x16a)]=[];}},get 'editAlgorithmFields'(){const _0x2951c2=_0x4079a7;return this['editAlgorithmMap'][this[_0x2951c2(0x1a8)]]?.[_0x2951c2(0x168)]??[];},get 'editAlgorithmNote'(){const _0x183fa6=_0x4079a7;return this[_0x183fa6(0x1ab)][this[_0x183fa6(0x1a8)]]?.[_0x183fa6(0x15b)]??null;},async 'openEditConfig'(){const _0xf56d51=_0x4079a7;await this['loadEditAlgorithms']();const _0x495066=this[_0xf56d51(0x189)][_0xf56d51(0x18a)]??{};this[_0xf56d51(0x1a8)]=_0x495066[_0xf56d51(0x167)]??'flat',this[_0xf56d51(0x1bf)](this[_0xf56d51(0x1a8)],_0x495066[_0xf56d51(0x196)]??{}),this[_0xf56d51(0x164)]=!0x0,this[_0xf56d51(0x17e)]=null;},'closeEditConfig'(){const _0x409ed8=_0x4079a7;this[_0x409ed8(0x164)]=!0x1,this[_0x409ed8(0x17e)]=null;},'_seedEditAlgConfig'(_0x547cc8,_0x880183={}){const _0x364f52=_0x4079a7,_0x5afb6f=this[_0x364f52(0x1ab)][_0x547cc8]?.[_0x364f52(0x168)]??[],_0x2da209={};for(const _0xb5311 of _0x5afb6f)_0x2da209[_0xb5311[_0x364f52(0x162)]]=_0x880183[_0xb5311[_0x364f52(0x162)]]??_0xb5311['default']??'';this[_0x364f52(0x1b9)]=_0x2da209;},'onEditAlgorithmChange'(_0x43611e){const _0x1b4129=_0x4079a7;this['editAlgorithm']=_0x43611e;const _0x4c58af=this[_0x1b4129(0x189)][_0x1b4129(0x18a)]?.[_0x1b4129(0x167)]===_0x43611e?this['eng']['config']?.[_0x1b4129(0x196)]??{}:{};this[_0x1b4129(0x1bf)](_0x43611e,_0x4c58af);},'_buildEditAlgConfig'(){const _0x1fb63a=_0x4079a7,_0xc8299f={};for(const _0x1a7055 of this[_0x1fb63a(0x163)]){const _0x275beb=this[_0x1fb63a(0x1b9)][_0x1a7055[_0x1fb63a(0x162)]];''!==_0x275beb&&null!=_0x275beb&&(_0xc8299f[_0x1a7055['key']]='number'===_0x1a7055[_0x1fb63a(0x18f)]?Number(_0x275beb):_0x275beb);}return Object[_0x1fb63a(0x1c5)](_0xc8299f)[_0x1fb63a(0x181)]>0x0?_0xc8299f:void 0x0;},async 'saveConfig'(){const _0x38fa5=_0x4079a7;this[_0x38fa5(0x182)]=!0x0,this[_0x38fa5(0x17e)]=null;try{const _0x3c3d1b=this[_0x38fa5(0x180)](),_0x3bd9d5={'algorithm':this[_0x38fa5(0x1a8)]};_0x3c3d1b?_0x3bd9d5[_0x38fa5(0x196)]=_0x3c3d1b:delete _0x3bd9d5[_0x38fa5(0x196)];const _0x36e678=await fetch(__ENV__[_0x38fa5(0x186)]+_0x38fa5(0x190)+encodeURIComponent(this['eng'][_0x38fa5(0x162)]),{'method':'PATCH','headers':{'Content-Type':'application/json'},'body':JSON['stringify']({'config':_0x3bd9d5})}),_0x296f0d=await _0x36e678[_0x38fa5(0x17f)]();if(!_0x36e678['ok'])throw new Error(_0x296f0d?.[_0x38fa5(0x15f)]?.[_0x38fa5(0x16e)]||_0x38fa5(0x152));this[_0x38fa5(0x164)]=!0x1,_0x135885[_0x38fa5(0x17d)](_0x38fa5(0x1a7),_0x296f0d[_0x38fa5(0x183)]??_0x296f0d[_0x38fa5(0x19c)]),await this[_0x38fa5(0x1bc)]();}catch(_0x24c308){this[_0x38fa5(0x17e)]=_0x24c308?.[_0x38fa5(0x16e)]||String(_0x24c308);}finally{this[_0x38fa5(0x182)]=!0x1;}},async 'load'(){const _0x26c8ff=_0x4079a7;this[_0x26c8ff(0x19e)]=!0x0,this[_0x26c8ff(0x15f)]=null;try{const _0x1338a2=await fetch(this[_0x26c8ff(0x17b)]+_0x26c8ff(0x194)),_0xf00c77=await _0x1338a2[_0x26c8ff(0x17f)]();if(!_0x1338a2['ok'])throw new Error(_0xf00c77?.[_0x26c8ff(0x15f)]?.[_0x26c8ff(0x16e)]||_0x26c8ff(0x161));this[_0x26c8ff(0x171)]=_0xf00c77[_0x26c8ff(0x19c)];}catch(_0x2b4ac6){this[_0x26c8ff(0x15f)]=_0x2b4ac6?.[_0x26c8ff(0x16e)]||String(_0x2b4ac6),this[_0x26c8ff(0x171)]=null;}finally{this[_0x26c8ff(0x19e)]=!0x1;}},async 'snapshot'(){const _0x5d3fe1=_0x4079a7;if(await _0x135885[_0x5d3fe1(0x192)][_0x5d3fe1(0x1a1)][_0x5d3fe1(0x1b1)]['confirm']('Take\x20a\x20snapshot\x20now?')){this[_0x5d3fe1(0x158)]=!0x0,this[_0x5d3fe1(0x19d)]=null,this[_0x5d3fe1(0x1c2)]=null;try{const _0x34b9c3=await fetch(this[_0x5d3fe1(0x17b)]+_0x5d3fe1(0x1ae),{'method':_0x5d3fe1(0x197)}),_0x3c0f11=await _0x34b9c3[_0x5d3fe1(0x17f)]();if(!_0x34b9c3['ok'])throw new Error(_0x3c0f11?.[_0x5d3fe1(0x15f)]?.[_0x5d3fe1(0x16e)]||_0x5d3fe1(0x173));this[_0x5d3fe1(0x19d)]=_0x3c0f11[_0x5d3fe1(0x19c)]?.[_0x5d3fe1(0x16d)]?_0x5d3fe1(0x1ac):_0x5d3fe1(0x1ad),await this[_0x5d3fe1(0x1bc)]();}catch(_0xb204b7){this[_0x5d3fe1(0x1c2)]=_0xb204b7?.[_0x5d3fe1(0x16e)]||String(_0xb204b7);}finally{this[_0x5d3fe1(0x158)]=!0x1;}}},async 'rebuild'(){const _0x1a2056=_0x4079a7;if(await _0x135885['$ok']['shared'][_0x1a2056(0x1b1)][_0x1a2056(0x185)](_0x1a2056(0x1a2))){this[_0x1a2056(0x158)]=!0x0,this[_0x1a2056(0x19d)]=null,this[_0x1a2056(0x1c2)]=null;try{const _0x366c80=await fetch(this[_0x1a2056(0x17b)]+'/rebuild',{'method':_0x1a2056(0x197)}),_0x7353e6=await _0x366c80[_0x1a2056(0x17f)]();if(!_0x366c80['ok'])throw new Error(_0x7353e6?.[_0x1a2056(0x15f)]?.[_0x1a2056(0x16e)]||_0x1a2056(0x15c));this[_0x1a2056(0x19d)]=_0x1a2056(0x1b2),await this['load']();}catch(_0x2be225){this['actionError']=_0x2be225?.[_0x1a2056(0x16e)]||String(_0x2be225);}finally{this[_0x1a2056(0x158)]=!0x1;}}},async 'runQuery'(){const _0x3d972a=_0x4079a7,_0x2fcc87=String(this['queryText']||'')['trim']();if(_0x2fcc87){this[_0x3d972a(0x1b3)]=!0x0,this[_0x3d972a(0x1bb)]=null,this[_0x3d972a(0x1c1)]=null,this[_0x3d972a(0x154)]={},this[_0x3d972a(0x1aa)]={};try{const _0x3801b2=await fetch(this[_0x3d972a(0x17b)]+_0x3d972a(0x169),{'method':_0x3d972a(0x197),'headers':{'Content-Type':_0x3d972a(0x18d)},'body':JSON[_0x3d972a(0x174)]({'query':_0x2fcc87,'limit':Number(this[_0x3d972a(0x176)])||0xa})}),_0x2e1847=await _0x3801b2['json']();if(!_0x3801b2['ok'])throw new Error(_0x2e1847?.[_0x3d972a(0x15f)]?.[_0x3d972a(0x16e)]||'query\x20failed');this[_0x3d972a(0x1c1)]=_0x2e1847['data']||[];}catch(_0x1fa9e3){this['queryError']=_0x1fa9e3?.[_0x3d972a(0x16e)]||String(_0x1fa9e3);}finally{this[_0x3d972a(0x1b3)]=!0x1;}}},'scoreBar':_0x4122ff=>Math['round'](0x64*Math[_0x4079a7(0x17c)](0x1,Math[_0x4079a7(0x193)](0x0,_0x4122ff))),'scoreColor':_0x1b24b0=>_0x1b24b0>=0.8?'var(--okdb-success)':_0x1b24b0>=0.5?_0x4079a7(0x1c6):_0x4079a7(0x1a5),get 'isChunked'(){const _0x3ab457=_0x4079a7;return Array[_0x3ab457(0x151)](this[_0x3ab457(0x1c1)])&&this['queryResults'][_0x3ab457(0x159)](_0x2ec1cf=>_0x2ec1cf[_0x3ab457(0x1c3)]);},'fmtRange':_0x378c55=>_0x378c55?_0x4079a7(0x191)+_0x378c55[_0x4079a7(0x18c)]+'–'+_0x378c55['end']:'','autoFetch'(_0x285e40){const _0x364a25=_0x4079a7;return!this['sourceType']||this[_0x364a25(0x154)][_0x285e40['key']]||!!_0x285e40[_0x364a25(0x1c3)]?.[_0x364a25(0x1be)]||this[_0x364a25(0x172)](_0x285e40),null;},async 'fetchDoc'(_0x473c23){const _0x473754=_0x4079a7,_0x20deb8=this['sourceType'];if(!_0x20deb8)return;const _0x1bae33=_0x473c23[_0x473754(0x162)];this[_0x473754(0x154)][_0x1bae33]={'busy':!0x0,'value':void 0x0,'error':null};try{const _0xef7e33=this[_0x473754(0x189)][_0x473754(0x18a)]?.['source_env']??_0x473754(0x16b),_0x1a6d21=__ENV__['API']+_0x473754(0x15a)+encodeURIComponent(_0xef7e33),_0xd89c7a=await fetch(_0x1a6d21+'/type/'+encodeURIComponent(_0x20deb8)+_0x473754(0x18b)+encodeURIComponent(_0x1bae33)),_0x50cac5=await _0xd89c7a[_0x473754(0x17f)]();if(!_0xd89c7a['ok'])throw new Error(_0x50cac5?.['error']?.[_0x473754(0x16e)]||_0x473754(0x195));this[_0x473754(0x154)][_0x1bae33]={'busy':!0x1,'value':_0x50cac5[_0x473754(0x19c)]?.['value']??null,'error':null};}catch(_0x608ae7){this['docCache'][_0x1bae33]={'busy':!0x1,'value':void 0x0,'error':_0x608ae7?.[_0x473754(0x16e)]||String(_0x608ae7)};}},'toggleDocExpand'(_0x585a67){const _0x4bfe03=_0x4079a7,_0x13b02d=_0x585a67[_0x4bfe03(0x162)];this[_0x4bfe03(0x1aa)][_0x13b02d]=!this[_0x4bfe03(0x1aa)][_0x13b02d],this['docExpanded'][_0x13b02d]&&!this[_0x4bfe03(0x154)][_0x13b02d]&&this[_0x4bfe03(0x172)](_0x585a67);},'fmtDoc'(_0x5e3405){const _0x33228f=_0x4079a7;try{return JSON[_0x33228f(0x174)](_0x5e3405,null,0x2);}catch{return String(_0x5e3405);}},'getChunkText'(_0x3ea500){const _0x3deb24=_0x4079a7;if(_0x3ea500[_0x3deb24(0x1c3)]?.[_0x3deb24(0x1be)])return _0x3ea500['chunk']['text'];const _0x26e882=this[_0x3deb24(0x189)][_0x3deb24(0x18a)]?.['field'],_0x6fbb8a=this['docCache'][_0x3ea500[_0x3deb24(0x162)]];if(!_0x26e882||!_0x6fbb8a?.[_0x3deb24(0x178)]||!_0x3ea500[_0x3deb24(0x1c3)])return null;const _0xd6b4a1=_0x6fbb8a[_0x3deb24(0x178)][_0x26e882];return _0x3deb24(0x15e)!=typeof _0xd6b4a1?null:_0xd6b4a1[_0x3deb24(0x187)](_0x3ea500[_0x3deb24(0x1c3)][_0x3deb24(0x18c)],_0x3ea500['chunk']['end'])||null;},'splitHighlight'(_0xb834c3,_0x43675d){const _0x476edf=_0x4079a7;if(!_0x43675d||!_0xb834c3||_0x476edf(0x15e)!=typeof _0xb834c3)return null;const {start:_0xd018aa,end:_0x554692}=_0x43675d;if(_0x476edf(0x1b5)!=typeof _0xd018aa||_0x476edf(0x1b5)!=typeof _0x554692)return null;const _0x11d085=Math[_0x476edf(0x193)](0x0,_0xd018aa),_0x53c798=Math[_0x476edf(0x17c)](_0xb834c3[_0x476edf(0x181)],Math[_0x476edf(0x193)](_0x11d085,_0x554692));return _0x11d085>=_0x53c798?[{'text':_0xb834c3,'highlight':!0x1}]:[{'text':_0xb834c3['slice'](0x0,_0x11d085),'highlight':!0x1},{'text':_0xb834c3['slice'](_0x11d085,_0x53c798),'highlight':!0x0},{'text':_0xb834c3[_0x476edf(0x187)](_0x53c798),'highlight':!0x1}][_0x476edf(0x1a6)](_0x2a71df=>_0x2a71df[_0x476edf(0x1be)][_0x476edf(0x181)]>0x0);},async 'onRefresh'(){const _0x29fd5a=_0x4079a7;this[_0x29fd5a(0x1c1)]=null,this[_0x29fd5a(0x1aa)]={},await this[_0x29fd5a(0x1bc)]();},'viewPipeline'(){const _0x46887f=_0x4079a7;_0x7f3faa(_0x135885,this[_0x46887f(0x189)]);}}),async 'init'(_0x3713ce){const _0x15bf98=_0x4079a7;_0x3713ce[_0x15bf98(0x1c0)](()=>_0x3713ce[_0x15bf98(0x166)][_0x15bf98(0x157)],async()=>{const _0x3ae6ec=_0x15bf98;this[_0x3ae6ec(0x171)]=null,this[_0x3ae6ec(0x1c1)]=null,this[_0x3ae6ec(0x1aa)]={},await this[_0x3ae6ec(0x1bc)]();}),await this[_0x15bf98(0x1bc)]();const _0xe098b4=_0x3713ce[_0x15bf98(0x150)]??_0x3713ce[_0x15bf98(0x19f)]??null,_0x4694ce=setInterval(async()=>{const _0x45d953=_0x15bf98;if(!_0xe098b4||_0xe098b4[_0x45d953(0x156)]){if(!this[_0x45d953(0x19e)]&&!this['editBusy']&&!this['editMode'])try{await this[_0x45d953(0x1bc)]();}catch{}}else clearInterval(_0x4694ce);},0x1388);},'template':_0x4079a7(0x1b0),'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 _0x12ea1d=_0x325a;(function(_0x537a0d,_0x55d051){const _0x26bc79=_0x325a,_0x540986=_0x537a0d();while(!![]){try{const _0x54bdad=-parseInt(_0x26bc79(0x14e))/0x1*(parseInt(_0x26bc79(0x154))/0x2)+-parseInt(_0x26bc79(0x144))/0x3*(parseInt(_0x26bc79(0x12b))/0x4)+parseInt(_0x26bc79(0x137))/0x5+parseInt(_0x26bc79(0x145))/0x6+parseInt(_0x26bc79(0x13b))/0x7+parseInt(_0x26bc79(0x14f))/0x8*(-parseInt(_0x26bc79(0x152))/0x9)+parseInt(_0x26bc79(0x143))/0xa;if(_0x54bdad===_0x55d051)break;else _0x540986['push'](_0x540986['shift']());}catch(_0x1236ca){_0x540986['push'](_0x540986['shift']());}}}(_0x88e9,0x2959c));import _0x5672f0 from'../../engines/parts/engine-panel-shell.ok.js';import{ENGINE_PANEL_SHARED_STYLE as _0xd6727a}from'../../engines/engine-panel-shared-style.js';function _0x325a(_0x2e1862,_0x16d620){_0x2e1862=_0x2e1862-0x125;const _0x88e90a=_0x88e9();let _0x325ac8=_0x88e90a[_0x2e1862];return _0x325ac8;}import{dispatchEnginePipelineSelection as _0x4495c5}from'../../engines/engine-ui-utils.js';const s=_0xd6727a;function _0x88e9(){const _0x241471=['engine','application/json','/embeddings/indexers/','processed','330007XVvgYF','24kVjTfT','Cannot\x20determine\x20job_type\x20or\x20indexer\x20name','json','593091zOEXIv','/embeddings/workers/','2dmysvy','concurrency','data','embedder','Retry\x20all\x20failed\x20queue\x20jobs\x20for\x20type\x20\x22<b>','stats','$ok','/stats','88CgYxMy','\x20queue\x20job(s)','message','retryBusy','failed','indexer','shared','embed-worker-panel','/retryFailed','load','job_type','Retried\x20','1249035GChVcK','API','error','config','103817KopuBU','$attr','eng','toast','\x20doc(s)','\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','stringify','success','3136270mXcLGt','26931jKNPBd','1897830tzTYwr',',\x20re-enqueued\x20','busy','modal','name'];_0x88e9=function(){return _0x241471;};return _0x88e9();}export default{'tag':_0x12ea1d(0x132),'dependencies':[_0x5672f0],'attr':{'name':{},'engine':{}},'context':_0x5eae40=>({'busy':!0x1,'stats':null,'error':null,'retryBusy':!0x1,get 'eng'(){const _0x1ce0ac=_0x12ea1d;return _0x5eae40['$attr'][_0x1ce0ac(0x14a)]??{};},get 'name'(){const _0x14ff44=_0x12ea1d;return _0x5eae40[_0x14ff44(0x13c)]['name'];},get 'jobType'(){const _0x33d9ed=_0x12ea1d;return this['stats']?.['job_type']||this[_0x33d9ed(0x13d)]?.[_0x33d9ed(0x13a)]?.[_0x33d9ed(0x135)]||'—';},get 'indexerName'(){const _0x456e58=_0x12ea1d;return this[_0x456e58(0x128)]?.[_0x456e58(0x130)]||this[_0x456e58(0x13d)]?.['config']?.['indexer']||'—';},get 'embedderName'(){const _0x1d3753=_0x12ea1d;return this[_0x1d3753(0x128)]?.[_0x1d3753(0x126)]||this[_0x1d3753(0x13d)]?.[_0x1d3753(0x13a)]?.[_0x1d3753(0x126)]||'—';},get 'concurrencyValue'(){const _0x3a4ff3=_0x12ea1d;return this['stats']?.[_0x3a4ff3(0x155)]??this['eng']?.[_0x3a4ff3(0x13a)]?.[_0x3a4ff3(0x155)]??'—';},get 'processedCount'(){const _0x4fc597=_0x12ea1d;return this[_0x4fc597(0x128)]?.[_0x4fc597(0x14d)]??0x0;},get 'failedCount'(){const _0x312f7d=_0x12ea1d;return this[_0x312f7d(0x128)]?.[_0x312f7d(0x12f)]??0x0;},get 'inflightCount'(){const _0x2c464d=_0x12ea1d;return this[_0x2c464d(0x128)]?.['in_flight']??0x0;},async 'load'(){const _0x4f2d2c=_0x12ea1d;this[_0x4f2d2c(0x147)]=!0x0,this[_0x4f2d2c(0x139)]=null;try{const _0x4d39bb=await fetch(__ENV__[_0x4f2d2c(0x138)]+_0x4f2d2c(0x153)+encodeURIComponent(this[_0x4f2d2c(0x149)])+_0x4f2d2c(0x12a)),_0xc3b5af=await _0x4d39bb[_0x4f2d2c(0x151)]();if(!_0x4d39bb['ok'])throw new Error(_0xc3b5af?.[_0x4f2d2c(0x139)]?.['message']||_0x4f2d2c(0x12f));this[_0x4f2d2c(0x128)]=_0xc3b5af[_0x4f2d2c(0x125)];}catch(_0x3a2875){this[_0x4f2d2c(0x139)]=_0x3a2875?.['message']||String(_0x3a2875),this[_0x4f2d2c(0x128)]=null;}finally{this[_0x4f2d2c(0x147)]=!0x1;}},async 'onRefresh'(){await this['load']();},'viewPipeline'(){_0x4495c5(_0x5eae40,this['eng']);},async 'retryAllFailed'(){const _0x1e4e75=_0x12ea1d,_0x1564cd=this[_0x1e4e75(0x128)]?.[_0x1e4e75(0x135)]||this[_0x1e4e75(0x13d)]?.[_0x1e4e75(0x13a)]?.[_0x1e4e75(0x135)],_0x1f4fa1=this[_0x1e4e75(0x128)]?.[_0x1e4e75(0x130)]||this['eng']?.[_0x1e4e75(0x13a)]?.[_0x1e4e75(0x130)];if(_0x1564cd||_0x1f4fa1){if(await _0x5eae40[_0x1e4e75(0x129)][_0x1e4e75(0x131)][_0x1e4e75(0x148)]['confirm'](_0x1e4e75(0x127)+_0x1564cd+'</b>\x22?<br><br>This\x20will\x20also\x20re-enqueue\x20any\x20stuck\x20PENDING\x20docs\x20on\x20the\x20indexer.')){this[_0x1e4e75(0x12e)]=!0x0;try{const _0x1c9427=await fetch(__ENV__[_0x1e4e75(0x138)]+'/queue/retryFailed',{'method':'POST','headers':{'Content-Type':_0x1e4e75(0x14b)},'body':JSON[_0x1e4e75(0x141)]({'type':_0x1564cd,'limit':0x1388})}),_0x3c5ebe=await _0x1c9427[_0x1e4e75(0x151)](),_0x21a41e=_0x3c5ebe?.[_0x1e4e75(0x125)]?.['retried']??0x0;let _0x2839d7=0x0;if(_0x1f4fa1){const _0x549b0e=await fetch(__ENV__['API']+_0x1e4e75(0x14c)+encodeURIComponent(_0x1f4fa1)+_0x1e4e75(0x133),{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify']({'limit':0x1388,'includeStuckPending':!0x0})}),_0x51aca3=await _0x549b0e[_0x1e4e75(0x151)]();_0x2839d7=_0x51aca3?.[_0x1e4e75(0x125)]?.['retried']??0x0;}_0x5eae40[_0x1e4e75(0x129)]['shared']?.[_0x1e4e75(0x13e)]?.[_0x1e4e75(0x142)]?.(_0x1e4e75(0x136)+_0x21a41e+_0x1e4e75(0x12c)+(_0x2839d7?_0x1e4e75(0x146)+_0x2839d7+_0x1e4e75(0x13f):'')),_0x5eae40['$dispatch']('refresh'),await this[_0x1e4e75(0x134)]();}catch(_0x44583e){_0x5eae40[_0x1e4e75(0x129)][_0x1e4e75(0x131)]?.[_0x1e4e75(0x13e)]?.[_0x1e4e75(0x139)]?.(_0x44583e?.[_0x1e4e75(0x12d)]||'Retry\x20failed');}finally{this['retryBusy']=!0x1;}}}else _0x5eae40['$ok'][_0x1e4e75(0x131)]?.[_0x1e4e75(0x13e)]?.[_0x1e4e75(0x139)]?.(_0x1e4e75(0x150));}}),async 'init'(_0x38b60c){const _0x499c9e=_0x12ea1d;_0x38b60c['$watch'](()=>_0x38b60c[_0x499c9e(0x13c)][_0x499c9e(0x149)],async()=>{const _0x525e7d=_0x499c9e;this[_0x525e7d(0x128)]=null,this[_0x525e7d(0x139)]=null,await this[_0x525e7d(0x134)]();}),await this[_0x499c9e(0x134)]();},'template':_0x12ea1d(0x140),'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 _0x2e51(_0x2822c9,_0x224caa){_0x2822c9=_0x2822c9-0x1be;var _0x30e7f5=_0x30e7();var _0x2e51e9=_0x30e7f5[_0x2822c9];return _0x2e51e9;}var _0x27a0e0=_0x2e51;(function(_0x1775ed,_0x11ef58){var _0x4c8bc4=_0x2e51,_0x25fa9d=_0x1775ed();while(!![]){try{var _0x4027b7=-parseInt(_0x4c8bc4(0x1c2))/0x1+-parseInt(_0x4c8bc4(0x1d0))/0x2+parseInt(_0x4c8bc4(0x1ce))/0x3*(-parseInt(_0x4c8bc4(0x1c8))/0x4)+-parseInt(_0x4c8bc4(0x1cb))/0x5*(parseInt(_0x4c8bc4(0x1cd))/0x6)+parseInt(_0x4c8bc4(0x1c3))/0x7*(-parseInt(_0x4c8bc4(0x1cc))/0x8)+parseInt(_0x4c8bc4(0x1be))/0x9+parseInt(_0x4c8bc4(0x1c6))/0xa;if(_0x4027b7===_0x11ef58)break;else _0x25fa9d['push'](_0x25fa9d['shift']());}catch(_0x52d51d){_0x25fa9d['push'](_0x25fa9d['shift']());}}}(_0x30e7,0x551b9));import _0x18fb0f from'./embed-embedder-panel.ok.js';import _0x2c4a7e from'./embed-indexer-panel.ok.js';function _0x30e7(){var _0x8edb4b=['14813860vkWsrg','detail','56PgAyem','embeddings-engine-panel','$attr','60VSACbl','672576hrkDGd','262356xawuvO','83292eHqvlu','\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','831148AjSrOQ','6273828VCKOem','engine','type','panelType','80535JqOdra','35GfJTDG','$dispatch','eng'];_0x30e7=function(){return _0x8edb4b;};return _0x30e7();}import _0x82fe33 from'./embed-search-panel.ok.js';import _0x1ff234 from'./embed-worker-panel.ok.js';import{isEmbeddingsEngineType as _0x29f116}from'../../engines/engine-ui-utils.js';export default{'tag':_0x27a0e0(0x1c9),'dependencies':[_0x18fb0f,_0x2c4a7e,_0x82fe33,_0x1ff234],'attr':{'engine':{}},'context':_0x34ec5a=>({get 'eng'(){var _0x1126b3=_0x27a0e0;return _0x34ec5a[_0x1126b3(0x1ca)][_0x1126b3(0x1bf)]??{};},get 'panelType'(){var _0x467e38=_0x27a0e0;return this[_0x467e38(0x1c5)][_0x467e38(0x1c0)]??'';},get 'hasKnownPanel'(){var _0x1fdf7f=_0x27a0e0;return _0x29f116(this[_0x1fdf7f(0x1c1)]);},'forward'(_0x430b30){var _0x112b3d=_0x27a0e0;_0x430b30?.[_0x112b3d(0x1c0)]&&_0x34ec5a[_0x112b3d(0x1c4)](_0x430b30[_0x112b3d(0x1c0)],_0x430b30[_0x112b3d(0x1c7)]);}}),'template':_0x27a0e0(0x1cf)};
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'};