@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
- const _0x17afcb=_0xaa2d;function _0xaa2d(_0x2a7765,_0x305602){_0x2a7765=_0x2a7765-0xe7;const _0x43108a=_0x4310();let _0xaa2d25=_0x43108a[_0x2a7765];return _0xaa2d25;}(function(_0x2c268f,_0x6ad3f1){const _0xa422cd=_0xaa2d,_0x1e6af0=_0x2c268f();while(!![]){try{const _0x2fc1fc=-parseInt(_0xa422cd(0xf2))/0x1*(parseInt(_0xa422cd(0x115))/0x2)+-parseInt(_0xa422cd(0x103))/0x3+parseInt(_0xa422cd(0x113))/0x4*(parseInt(_0xa422cd(0x102))/0x5)+parseInt(_0xa422cd(0xfd))/0x6+parseInt(_0xa422cd(0x121))/0x7+-parseInt(_0xa422cd(0xec))/0x8*(parseInt(_0xa422cd(0x11a))/0x9)+parseInt(_0xa422cd(0x10c))/0xa;if(_0x2fc1fc===_0x6ad3f1)break;else _0x1e6af0['push'](_0x1e6af0['shift']());}catch(_0x58835e){_0x1e6af0['push'](_0x1e6af0['shift']());}}}(_0x4310,0x2796b));import _0x41269e from'@toolkit/elements/ok-icon.ok.js';import _0x494c8f from'@toolkit/core/ok-overlay.ok.js';import _0x15f0d3 from'../../../stores/events-store.js';import _0x1a92dc from'../../engines/parts/engine-row-item.ok.js';function _0x4310(){const _0x76cd84=['\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:10px;\x20height:100%;\x20min-height:0;\x22>\x0a\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-weight:600;\x22>Engines</div>\x0a\x20\x20\x20\x20<button\x20@click=\x22load\x22\x20:disabled=\x22busy\x22\x20style=\x22opacity:.8;\x22>↻</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<if\x20:=\x22busy\x22>\x0a\x20\x20\x20\x20<ok-overlay>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22loader-center\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22loader\x22\x20class=\x22spin\x22\x20style=\x22width:24px;height:24px;\x22></ok-icon>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</ok-overlay>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Top\x20nav:\x20Overview\x20+\x20Create\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:2px;\x20margin-bottom:4px;\x22>\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20:class=\x22selected\x20===\x20null\x20?\x20\x27eng-row\x20eng-row--on\x27\x20:\x20\x27eng-row\x27\x22\x0a\x20\x20\x20\x20\x20\x20@click=\x22selectNone\x22\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22width:14px;\x20text-align:center;\x20flex-shrink:0;\x22>⊞</span>\x0a\x20\x20\x20\x20\x20\x20<span>Overview</span>\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20:class=\x22selected\x20===\x20\x27__create__\x27\x20?\x20\x27eng-row\x20eng-row--on\x27\x20:\x20\x27eng-row\x27\x22\x0a\x20\x20\x20\x20\x20\x20@click=\x22openCreate\x22\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22width:14px;\x20text-align:center;\x20flex-shrink:0;\x20color:var(--okdb-accent);\x22>+</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-accent);\x22>Create\x20Engine</span>\x0a\x20\x20\x20\x20</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<div\x20style=\x22border-top:1px\x20solid\x20var(--okdb-app-border);\x20margin:0\x200\x204px;\x22></div>\x0a\x0a\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:12px;\x20overflow:auto;\x20min-height:0;\x20padding-right:4px;\x22>\x0a\x20\x20\x20\x20<each\x20:of=\x22typeOrder\x22\x20let:item=\x22t\x22>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22hasEngines(t)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20opacity:.5;\x20letter-spacing:.06em;\x20margin-bottom:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20typeLabel[t]\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:2px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22grouped[t]\x22\x20let:item=\x22eng\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<engine-row-item\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:engine=\x22eng\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:label=\x22itemLabel[t]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:label-color=\x22itemColor[t]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:subtitle=\x22eng.status\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20action-label=\x22\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:selected=\x22selected\x20===\x20eng.key\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@select=\x22select($event.detail)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pipeline(eng)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22pipeline-tag\x22\x20:title=\x22\x27pipeline:\x20\x27\x20+\x20pipeline(eng)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20pipeline(eng)\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</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</engine-row-item>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\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</if>\x0a\x20\x20\x20\x20</each>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22engines.length\x20===\x200\x20&&\x20!busy\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.5;\x20font-size:12px;\x22>No\x20engines\x20found.</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a\x0a</div>\x0a','var(--okdb-accent)','key','Embedder','Embedders','1911606qypJMq','engine:stopped','.eng-row{display:flex;align-items:center;gap:8px;padding:6px\x208px;border-radius:6px;border:1px\x20solid\x20transparent;background:0\x200;cursor:pointer;width:100%}.eng-row--on,.eng-row:hover{background:var(--okdb-app-surface);border-color:var(--okdb-app-border)}.eng-row--on{border-color:var(--okdb-accent)}.pipeline-tag{flex-shrink:0;max-width:72px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;padding:1px\x205px;border-radius:999px;border:1px\x20solid\x20color-mix(in\x20srgb,var(--okdb-indigo)\x2033%,transparent);color:var(--okdb-indigo);background:color-mix(in\x20srgb,var(--okdb-indigo)\x207%,transparent);letter-spacing:.02em}','$ok','fulfilled','1660WmFOmZ','407823mgtmJT','select','selectedEnv','loaded','length','var(--okdb-purple)','grouped','engines','/embeddings/embedders','1681690lRtowM','embeddings:pipeline:ready','then','push','var(--okdb-info)','vector-search','__create__','244wxstsY','API','2BQAjEt','meta','Search','json','load','24588OGfWzG','pipeline','embed-engine-list\x20load\x20error','/env/','value','engine:uninstalled','status','35175MqDszO','Worker','engine:started','$dispatch','type','selected','280ijPfjC','embeddings:indexer:flushed','okdb','stores','/engines','engine:installed','118331Vctjys','data','Workers','busy','var(--okdb-warning)','_unsubs'];_0x4310=function(){return _0x76cd84;};return _0x4310();}export default{'tag':'embed-engine-list','dependencies':[_0x494c8f,_0x41269e,_0x1a92dc],'context':_0x538fab=>({'busy':!0x1,'engines':[],'selected':null,'_unsubs':[],'typeOrder':['embedder','indexer','embed-worker',_0x17afcb(0x111)],'typeLabel':{'embedder':_0x17afcb(0xfc),'indexer':'Indexers','embed-worker':_0x17afcb(0xf4),'vector-search':_0x17afcb(0x117)},'itemLabel':{'embedder':_0x17afcb(0xfb),'indexer':'Indexer','embed-worker':_0x17afcb(0xe7),'vector-search':_0x17afcb(0x117)},'itemColor':{'embedder':_0x17afcb(0x110),'indexer':_0x17afcb(0x108),'embed-worker':_0x17afcb(0xf6),'vector-search':_0x17afcb(0xf9)},async 'load'(){const _0x210daf=_0x17afcb;this[_0x210daf(0xf5)]=!0x0;try{const _0x3a79de=_0x538fab[_0x210daf(0x100)]?.[_0x210daf(0xef)]?.[_0x210daf(0xee)]?.[_0x210daf(0x105)]||'default',[_0x280e74,_0x2c74ae]=await Promise['allSettled']([fetch(__ENV__[_0x210daf(0x114)]+_0x210daf(0x11d)+encodeURIComponent(_0x3a79de)+_0x210daf(0xf0))[_0x210daf(0x10e)](_0x9bf026=>_0x9bf026['json']()),fetch(__ENV__[_0x210daf(0x114)]+_0x210daf(0x10b))[_0x210daf(0x10e)](_0x59eb47=>_0x59eb47[_0x210daf(0x118)]())]),_0x1dc861='fulfilled'===_0x280e74['status']?_0x280e74[_0x210daf(0x11e)]?.[_0x210daf(0xf3)]??[]:[],_0x563c29=_0x210daf(0x101)===_0x2c74ae[_0x210daf(0x120)]?_0x2c74ae[_0x210daf(0x11e)]?.['data']??[]:[];this[_0x210daf(0x10a)]=[..._0x563c29,..._0x1dc861],_0x538fab['$dispatch'](_0x210daf(0x106),this['engines']);}catch(_0x5677df){console['error'](_0x210daf(0x11c),_0x5677df),this[_0x210daf(0x10a)]=[];}finally{this[_0x210daf(0xf5)]=!0x1;}},async 'refresh'(){const _0x24aed2=_0x17afcb;await this[_0x24aed2(0x119)]();},get 'grouped'(){const _0x12f82b=_0x17afcb,_0x3204b1={};for(const _0xd0466e of this['typeOrder'])_0x3204b1[_0xd0466e]=[];for(const _0x1093cd of this[_0x12f82b(0x10a)])_0x3204b1[_0x1093cd[_0x12f82b(0xea)]]&&_0x3204b1[_0x1093cd[_0x12f82b(0xea)]][_0x12f82b(0x10f)](_0x1093cd);return _0x3204b1;},'hasEngines'(_0x36a28d){const _0x2e2de=_0x17afcb;return(this[_0x2e2de(0x109)][_0x36a28d]||[])[_0x2e2de(0x107)]>0x0;},'selectNone'(){const _0x1a27eb=_0x17afcb;this[_0x1a27eb(0xeb)]=null,_0x538fab[_0x1a27eb(0xe9)](_0x1a27eb(0x104),null);},'openCreate'(){const _0x29d10b=_0x17afcb;this[_0x29d10b(0xeb)]=_0x29d10b(0x112),_0x538fab['$dispatch']('create',null);},'clearSelection'(){const _0x5c4963=_0x17afcb;this[_0x5c4963(0xeb)]=null;},'select'(_0x539410){const _0x96944d=_0x17afcb;this[_0x96944d(0xeb)]=_0x539410?.[_0x96944d(0xfa)]??null,_0x538fab['$dispatch'](_0x96944d(0x104),_0x539410);},'pipeline':_0x27b372=>_0x27b372[_0x17afcb(0x116)]?.[_0x17afcb(0x11b)]??null}),async 'mount'(){const _0x21d4db=_0x17afcb;await this[_0x21d4db(0x119)]();const _0xd34847=()=>this[_0x21d4db(0x119)]();this[_0x21d4db(0xf7)]=[_0x15f0d3['on'](_0x21d4db(0xe8),_0xd34847),_0x15f0d3['on'](_0x21d4db(0xfe),_0xd34847),_0x15f0d3['on']('engine:error',_0xd34847),_0x15f0d3['on'](_0x21d4db(0xf1),_0xd34847),_0x15f0d3['on'](_0x21d4db(0x11f),_0xd34847),_0x15f0d3['on'](_0x21d4db(0x10d),_0xd34847),_0x15f0d3['on']('embeddings:indexer:ready',_0xd34847),_0x15f0d3['on'](_0x21d4db(0xed),_0xd34847)];},'unmount'(){const _0x21a111=_0x17afcb;for(const _0x42bea7 of this[_0x21a111(0xf7)])_0x42bea7();this[_0x21a111(0xf7)]=[];},'template':_0x17afcb(0xf8),'style':_0x17afcb(0xff)};
1
+ const _0x1b6165=_0x23ac;function _0x23ac(_0x39bb16,_0x11d342){_0x39bb16=_0x39bb16-0x161;const _0x43491e=_0x4349();let _0x23ac80=_0x43491e[_0x39bb16];return _0x23ac80;}function _0x4349(){const _0x1e4e7c=['busy','key','typeOrder','selected','Embedders','embed-worker','API','pipeline','engine:installed','meta','var(--okdb-purple)','56494jwMrmU','select','json','117jFeWya','11nNFgLF','Indexers','_unsubs','18jKikRe','loaded','okdb','selectedEnv','1848976EGWpmd','/embeddings/embedders','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:10px;\x20height:100%;\x20min-height:0;\x22>\x0a\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-weight:600;\x22>Engines</div>\x0a\x20\x20\x20\x20<button\x20@click=\x22load\x22\x20:disabled=\x22busy\x22\x20style=\x22opacity:.8;\x22>↻</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<if\x20:=\x22busy\x22>\x0a\x20\x20\x20\x20<ok-overlay>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22loader-center\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22loader\x22\x20class=\x22spin\x22\x20style=\x22width:24px;height:24px;\x22></ok-icon>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</ok-overlay>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Top\x20nav:\x20Overview\x20+\x20Create\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:2px;\x20margin-bottom:4px;\x22>\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20:class=\x22selected\x20===\x20null\x20?\x20\x27eng-row\x20eng-row--on\x27\x20:\x20\x27eng-row\x27\x22\x0a\x20\x20\x20\x20\x20\x20@click=\x22selectNone\x22\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22width:14px;\x20text-align:center;\x20flex-shrink:0;\x22>⊞</span>\x0a\x20\x20\x20\x20\x20\x20<span>Overview</span>\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20:class=\x22selected\x20===\x20\x27__create__\x27\x20?\x20\x27eng-row\x20eng-row--on\x27\x20:\x20\x27eng-row\x27\x22\x0a\x20\x20\x20\x20\x20\x20@click=\x22openCreate\x22\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22width:14px;\x20text-align:center;\x20flex-shrink:0;\x20color:var(--okdb-accent);\x22>+</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-accent);\x22>Create\x20Engine</span>\x0a\x20\x20\x20\x20</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<div\x20style=\x22border-top:1px\x20solid\x20var(--okdb-app-border);\x20margin:0\x200\x204px;\x22></div>\x0a\x0a\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:12px;\x20overflow:auto;\x20min-height:0;\x20padding-right:4px;\x22>\x0a\x20\x20\x20\x20<each\x20:of=\x22typeOrder\x22\x20let:item=\x22t\x22>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22hasEngines(t)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20opacity:.5;\x20letter-spacing:.06em;\x20margin-bottom:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20typeLabel[t]\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:2px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22grouped[t]\x22\x20let:item=\x22eng\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<engine-row-item\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:engine=\x22eng\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:label=\x22itemLabel[t]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:label-color=\x22itemColor[t]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:subtitle=\x22eng.status\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20action-label=\x22\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:selected=\x22selected\x20===\x20eng.key\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@select=\x22select($event.detail)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pipeline(eng)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22pipeline-tag\x22\x20:title=\x22\x27pipeline:\x20\x27\x20+\x20pipeline(eng)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20pipeline(eng)\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</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</engine-row-item>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\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</if>\x0a\x20\x20\x20\x20</each>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22engines.length\x20===\x200\x20&&\x20!busy\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.5;\x20font-size:12px;\x22>No\x20engines\x20found.</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a\x0a</div>\x0a','2783320aZBJwa','default','7101731MriRFu','embeddings:pipeline:ready','fulfilled','embed-engine-list','$ok','.eng-row{display:flex;align-items:center;gap:8px;padding:6px\x208px;border-radius:6px;border:1px\x20solid\x20transparent;background:0\x200;cursor:pointer;width:100%}.eng-row--on,.eng-row:hover{background:var(--okdb-app-surface);border-color:var(--okdb-app-border)}.eng-row--on{border-color:var(--okdb-accent)}.pipeline-tag{flex-shrink:0;max-width:72px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;padding:1px\x205px;border-radius:999px;border:1px\x20solid\x20color-mix(in\x20srgb,var(--okdb-indigo)\x2033%,transparent);color:var(--okdb-indigo);background:color-mix(in\x20srgb,var(--okdb-indigo)\x207%,transparent);letter-spacing:.02em}','6ErRlrr','Search','7409950AlIvro','value','916868PgIZkx','embed-engine-list\x20load\x20error','data','725797hoTDOq','status','then','type','/engines','engines','$dispatch','length','engine:stopped','engine:uninstalled','allSettled','load','__create__','Embedder','indexer'];_0x4349=function(){return _0x1e4e7c;};return _0x4349();}(function(_0x4f80de,_0x59864b){const _0x1a6946=_0x23ac,_0x5ea500=_0x4f80de();while(!![]){try{const _0x2293e3=parseInt(_0x1a6946(0x185))/0x1+-parseInt(_0x1a6946(0x168))/0x2*(-parseInt(_0x1a6946(0x16b))/0x3)+parseInt(_0x1a6946(0x182))/0x4+-parseInt(_0x1a6946(0x176))/0x5+-parseInt(_0x1a6946(0x17e))/0x6*(parseInt(_0x1a6946(0x178))/0x7)+-parseInt(_0x1a6946(0x173))/0x8*(parseInt(_0x1a6946(0x16f))/0x9)+-parseInt(_0x1a6946(0x180))/0xa*(-parseInt(_0x1a6946(0x16c))/0xb);if(_0x2293e3===_0x59864b)break;else _0x5ea500['push'](_0x5ea500['shift']());}catch(_0x47fa97){_0x5ea500['push'](_0x5ea500['shift']());}}}(_0x4349,0xba929));import _0x222adc from'@toolkit/elements/ok-icon.ok.js';import _0x476df9 from'@toolkit/core/ok-overlay.ok.js';import _0x3f8c4d from'../../../stores/events-store.js';import _0x39d813 from'../../engines/parts/engine-row-item.ok.js';export default{'tag':_0x1b6165(0x17b),'dependencies':[_0x476df9,_0x222adc,_0x39d813],'context':_0x332b12=>({'busy':!0x1,'engines':[],'selected':null,'_unsubs':[],'typeOrder':['embedder',_0x1b6165(0x193),_0x1b6165(0x162),'vector-search'],'typeLabel':{'embedder':_0x1b6165(0x161),'indexer':_0x1b6165(0x16d),'embed-worker':'Workers','vector-search':_0x1b6165(0x17f)},'itemLabel':{'embedder':_0x1b6165(0x192),'indexer':'Indexer','embed-worker':'Worker','vector-search':_0x1b6165(0x17f)},'itemColor':{'embedder':'var(--okdb-info)','indexer':_0x1b6165(0x167),'embed-worker':'var(--okdb-warning)','vector-search':'var(--okdb-accent)'},async 'load'(){const _0x1d8a90=_0x1b6165;this['busy']=!0x0;try{const _0x2d4e8e=_0x332b12[_0x1d8a90(0x17c)]?.['stores']?.[_0x1d8a90(0x171)]?.[_0x1d8a90(0x172)]||_0x1d8a90(0x177),[_0x43c8e5,_0xb228f6]=await Promise[_0x1d8a90(0x18f)]([fetch(__ENV__[_0x1d8a90(0x163)]+'/env/'+encodeURIComponent(_0x2d4e8e)+_0x1d8a90(0x189))[_0x1d8a90(0x187)](_0x108bec=>_0x108bec['json']()),fetch(__ENV__[_0x1d8a90(0x163)]+_0x1d8a90(0x174))[_0x1d8a90(0x187)](_0x35cd6e=>_0x35cd6e[_0x1d8a90(0x16a)]())]),_0xab5e9=_0x1d8a90(0x17a)===_0x43c8e5[_0x1d8a90(0x186)]?_0x43c8e5[_0x1d8a90(0x181)]?.[_0x1d8a90(0x184)]??[]:[],_0x517e01=_0x1d8a90(0x17a)===_0xb228f6[_0x1d8a90(0x186)]?_0xb228f6[_0x1d8a90(0x181)]?.['data']??[]:[];this[_0x1d8a90(0x18a)]=[..._0x517e01,..._0xab5e9],_0x332b12[_0x1d8a90(0x18b)](_0x1d8a90(0x170),this[_0x1d8a90(0x18a)]);}catch(_0x248eb){console['error'](_0x1d8a90(0x183),_0x248eb),this['engines']=[];}finally{this[_0x1d8a90(0x194)]=!0x1;}},async 'refresh'(){const _0x473dd0=_0x1b6165;await this[_0x473dd0(0x190)]();},get 'grouped'(){const _0x76706c=_0x1b6165,_0x2f5e90={};for(const _0x13c7f3 of this[_0x76706c(0x196)])_0x2f5e90[_0x13c7f3]=[];for(const _0x282390 of this[_0x76706c(0x18a)])_0x2f5e90[_0x282390[_0x76706c(0x188)]]&&_0x2f5e90[_0x282390['type']]['push'](_0x282390);return _0x2f5e90;},'hasEngines'(_0x32e1fa){const _0x1ea65b=_0x1b6165;return(this['grouped'][_0x32e1fa]||[])[_0x1ea65b(0x18c)]>0x0;},'selectNone'(){const _0x38f99b=_0x1b6165;this[_0x38f99b(0x197)]=null,_0x332b12['$dispatch']('select',null);},'openCreate'(){const _0x5d05b1=_0x1b6165;this[_0x5d05b1(0x197)]=_0x5d05b1(0x191),_0x332b12['$dispatch']('create',null);},'clearSelection'(){const _0x432b7e=_0x1b6165;this[_0x432b7e(0x197)]=null;},'select'(_0x796d93){const _0x41414a=_0x1b6165;this[_0x41414a(0x197)]=_0x796d93?.[_0x41414a(0x195)]??null,_0x332b12['$dispatch'](_0x41414a(0x169),_0x796d93);},'pipeline':_0x3f4617=>_0x3f4617[_0x1b6165(0x166)]?.[_0x1b6165(0x164)]??null}),async 'mount'(){const _0x250b18=_0x1b6165;await this[_0x250b18(0x190)]();const _0x34f965=()=>this['load']();this[_0x250b18(0x16e)]=[_0x3f8c4d['on']('engine:started',_0x34f965),_0x3f8c4d['on'](_0x250b18(0x18d),_0x34f965),_0x3f8c4d['on']('engine:error',_0x34f965),_0x3f8c4d['on'](_0x250b18(0x165),_0x34f965),_0x3f8c4d['on'](_0x250b18(0x18e),_0x34f965),_0x3f8c4d['on'](_0x250b18(0x179),_0x34f965),_0x3f8c4d['on']('embeddings:indexer:ready',_0x34f965),_0x3f8c4d['on']('embeddings:indexer:flushed',_0x34f965)];},'unmount'(){const _0x36cfa5=_0x1b6165;for(const _0x53d925 of this[_0x36cfa5(0x16e)])_0x53d925();this['_unsubs']=[];},'template':_0x1b6165(0x175),'style':_0x1b6165(0x17d)};
@@ -1 +1 @@
1
- const _0x1404a6=_0x2714;(function(_0x354461,_0x396f65){const _0x4b09cb=_0x2714,_0x239f1e=_0x354461();while(!![]){try{const _0x362822=parseInt(_0x4b09cb(0xb9))/0x1*(-parseInt(_0x4b09cb(0xd6))/0x2)+parseInt(_0x4b09cb(0xa4))/0x3+-parseInt(_0x4b09cb(0x87))/0x4*(-parseInt(_0x4b09cb(0x85))/0x5)+parseInt(_0x4b09cb(0x7e))/0x6*(-parseInt(_0x4b09cb(0xe5))/0x7)+parseInt(_0x4b09cb(0x75))/0x8+-parseInt(_0x4b09cb(0x90))/0x9*(-parseInt(_0x4b09cb(0xc1))/0xa)+-parseInt(_0x4b09cb(0xd0))/0xb;if(_0x362822===_0x396f65)break;else _0x239f1e['push'](_0x239f1e['shift']());}catch(_0x517ffe){_0x239f1e['push'](_0x239f1e['shift']());}}}(_0x5ccd,0x697b4));import _0x433062 from'@toolkit/elements/ok-icon.ok.js';import _0x3d83d1 from'@toolkit/elements/ok-table.ok.js';function _0x5ccd(){const _0xf31a1f=['embeddings:indexer:doc:failed','search','_pipelineUrl','load','vector','indexer','source_key','mode','4137fGJBRN','default','embeddings:indexer:flushed','\x20more]','join','deleted','queueStats','/docs?','var(--okdb-info)','round','4729136VFzrYx','docCounts','now','engine:started','docsStatus','storage_key','embeddings:doc:status_change','m\x20ago','not\x20found','7692fqwmMt','engine',',\x20cleaned\x20up\x20','min','push','all','embedder','3392630ashcYA','partial','4oXKwlM','loadDocs','h\x20ago','\x20doc(s)','</b>\x22?<br><br>Use\x20this\x20when\x20jobs\x20were\x20purged\x20from\x20the\x20queue\x20but\x20docs\x20are\x20stuck\x20as\x20PENDING.','var(--okdb-danger)','modal','Retry\x20failed','var(--okdb-success)','153DGdPqo','Re-enqueue\x20ALL\x20failed\x20AND\x20stuck-pending\x20docs\x20for\x20\x22<b>','/stats','source_env','docsLoadMs','shared','API','retry\x20failed','last_seen_clock','flush\x20failed','success','config','\x20failed)','docs','eng','#9ca3af','Delete\x20\x22','length','\x0a\x20\x20.pill\x20{\x20border:1px\x20solid\x20var(--okdb-app-border);\x20background:var(--okdb-app-surface);\x20padding:3px\x2010px;\x20border-radius:999px;\x20font-size:12px;\x20cursor:pointer;\x20}\x0a\x20\x20.pill--on\x20{\x20border-color:var(--okdb-accent);\x20}\x0a','message','640992shEJJe','data','_busy','stringify','Re-enqueued\x20\x22','stats','queue','retried','$watch','_unsubs','Re-enqueued\x20','map','error','head_clock','total_chunks','embed-indexer-panel','failed','name','json','POST','vector_count','24754OWpkVz','var(--okdb-purple)','$ok','status','/flush','Re-enqueue\x20all\x20failed\x20docs\x20for\x20indexer\x20\x22','docsBusy','done','445910riBmfM','application/json','set','toast','\x0a<engine-panel-shell\x0a\x20\x20:engine=\x22eng\x22\x0a\x20\x20:title=\x22name\x22\x0a\x20\x20type-label=\x22indexer\x22\x0a\x20\x20type-color=\x22var(--okdb-purple)\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||\x20docsBusy\x20||\x20queueBusy\x20||\x20flushing\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<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:=\x22indexer\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22stack-compact\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\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\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\x20\x20<div\x20class=\x22pill-row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Source\x20type\x20being\x20indexed.\x22>{{\x20indexer.source_type\x20||\x20\x27—\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Source\x20environment.\x22>source\x20env:\x20{{\x20sourceEnvName\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Embedder\x20used\x20to\x20create\x20vectors.\x22>embedder:\x20{{\x20embedderName\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Storage\x20key\x20for\x20the\x20vector\x20store.\x22>store:\x20{{\x20storageKey\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20:style=\x22\x27border-color:\x27\x20+\x20(isCaughtUp\x20?\x20\x27color-mix(in\x20srgb,\x20var(--okdb-success)\x2033%,\x20transparent)\x27\x20:\x20\x27color-mix(in\x20srgb,\x20var(--okdb-warning)\x2033%,\x20transparent)\x27)\x20+\x20\x27;color:\x27\x20+\x20(isCaughtUp\x20?\x20\x27var(--okdb-success)\x27\x20:\x20\x27var(--okdb-warning)\x27)\x20+\x20\x27;background:\x27\x20+\x20(isCaughtUp\x20?\x20\x27color-mix(in\x20srgb,\x20var(--okdb-success)\x207%,\x20transparent)\x27\x20:\x20\x27color-mix(in\x20srgb,\x20var(--okdb-warning)\x207%,\x20transparent)\x27)\x20+\x20\x27;\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20isCaughtUp\x20?\x20\x27caught\x20up\x27\x20:\x20\x27processing\x27\x20}}\x0a\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</div>\x0a\x20\x20\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\x20\x20\x20Watches\x20<strong>{{\x20indexer.source_type\x20||\x20\x27—\x27\x20}}</strong>\x20and\x20keeps\x20vectors\x20current\x20in\x20<strong>{{\x20storageKey\x20}}</strong>.\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\x20\x20<div\x20class=\x22story-note\x22>Flush\x20to\x20force\x20pending\x20writes\x20through\x20now.\x20Use\x20the\x20document\x20table\x20below\x20to\x20inspect\x20failures,\x20retry\x20queue-backed\x20docs,\x20and\x20inspect\x20stored\x20vectors.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-grid\x20metric-grid--compact\x22\x20style=\x22min-width:min(100%,\x20420px);\x22>\x0a\x20\x20\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\x20\x20<div\x20class=\x22metric-title\x22>Vectors</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20style=\x22color:var(--okdb-success);\x22>{{\x20vectorCount.toLocaleString()\x20}}</div>\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\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Done</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20style=\x22color:var(--okdb-success);\x22>{{\x20doneDocs.toLocaleString()\x20}}</div>\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\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Pending</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20:style=\x22\x27color:\x27\x20+\x20(pendingDocs\x20>\x200\x20?\x20\x27var(--okdb-warning)\x27\x20:\x20\x27var(--okdb-app-fg)\x27)\x22>{{\x20pendingDocs.toLocaleString()\x20}}</div>\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\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\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\x20\x20<div\x20class=\x22metric-value\x22\x20:style=\x22\x27color:\x27\x20+\x20(failedDocs\x20>\x200\x20?\x20\x27var(--okdb-danger)\x27\x20:\x20\x27var(--okdb-app-fg)\x27)\x22>{{\x20failedDocs.toLocaleString()\x20}}</div>\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</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\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\x20\x20<button\x20@click=\x22flush\x22\x20:disabled=\x22flushing\x20||\x20!eng.isRunning\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20flushing\x20?\x20\x27Flushing…\x27\x20:\x20\x27Flush\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22story-note\x22>Changelog\x20{{\x20indexer.last_seen_clock\x20??\x20\x27—\x27\x20}}\x20/\x20{{\x20indexer.head_clock\x20??\x20\x27—\x27\x20}}\x20·\x20{{\x20clockPct\x20}}%</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22search\x20&&\x20search.count\x20!=\x20null\x20&&\x20search.count\x20!==\x20indexer.vector_count\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22story-note\x22\x20style=\x22color:var(--okdb-warning);\x22\x20title=\x22In-memory\x20index\x20differs\x20from\x20storage\x20—\x20rebuild\x20may\x20be\x20needed\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20search\x20index:\x20{{\x20search.count.toLocaleString()\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22background:var(--okdb-app-border);\x20border-radius:6px;\x20height:6px;\x20overflow:hidden;\x22\x20:title=\x22clockPct\x20+\x20\x27%\x20of\x20changelog\x20processed\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20:style=\x22\x27height:100%;\x20border-radius:6px;\x20transition:width\x20.3s;\x20background:\x27\x20+\x20(isCaughtUp\x20?\x20\x27var(--okdb-success)\x27\x20:\x20\x27var(--okdb-accent)\x27)\x20+\x20\x27;\x20width:\x27\x20+\x20clockPct\x20+\x20\x27%\x27\x22></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\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Indexer\x20settings</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22kv-grid\x20kv-grid--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>source\x20type</span><span\x20class=\x22kv-val\x22>{{\x20indexer.source_type\x20||\x20\x27—\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>source\x20env</span><span\x20class=\x22kv-val\x22>{{\x20sourceEnvName\x20}}</span>\x0a\x20\x20\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\x20\x20<span\x20class=\x22kv-key\x22>storage\x20key</span><span\x20class=\x22kv-val\x22>{{\x20storageKey\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>mode</span><span\x20class=\x22kv-val\x22>{{\x20indexer.mode\x20||\x20\x27inline\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22indexer.job_type\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>job\x20type</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-val\x22\x20style=\x22font-size:11px;font-family:monospace;\x22>{{\x20indexer.job_type\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\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<if\x20:=\x22queueMode\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:10px;\x20margin-bottom:10px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Queue</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.5;\x22>job\x20type:\x20<span\x20style=\x22font-family:monospace;\x22>{{\x20indexer.job_type\x20}}</span></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22loadQueueStats\x22\x20:disabled=\x22queueBusy\x22\x20style=\x22margin-left:auto;\x20font-size:11px;\x20padding:2px\x208px;\x20opacity:.7;\x22>↻</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22queueStats\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:grid;\x20grid-template-columns:repeat(4,1fr);\x20gap:8px;\x20text-align:center;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-box\x22\x20style=\x22background:var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px\x204px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:22px;\x20font-weight:600;\x20color:var(--okdb-warning);\x22>{{\x20queueStats.byStatus?.pending\x20??\x200\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:10px;\x20opacity:.6;\x20margin-top:2px;\x22>Pending</div>\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\x20\x20<div\x20class=\x22stat-box\x22\x20style=\x22background:var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px\x204px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:22px;\x20font-weight:600;\x20color:var(--okdb-info);\x22>{{\x20queueStats.byStatus?.running\x20??\x200\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:10px;\x20opacity:.6;\x20margin-top:2px;\x22>Running</div>\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\x20\x20<div\x20class=\x22stat-box\x22\x20style=\x22background:var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px\x204px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:22px;\x20font-weight:600;\x20color:var(--okdb-success);\x22>{{\x20queueStats.byStatus?.done\x20??\x200\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:10px;\x20opacity:.6;\x20margin-top:2px;\x22>Done</div>\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\x20\x20<div\x20class=\x22stat-box\x22\x20style=\x22background:var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px\x204px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:22px;\x20font-weight:600;\x20color:var(--okdb-danger);\x22>{{\x20queueStats.byStatus?.failed\x20??\x200\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:10px;\x20opacity:.6;\x20margin-top:2px;\x22>Failed</div>\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</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-top:8px;\x20font-size:11px;\x20opacity:.4;\x20font-style:italic;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Queue\x20tracks\x20individual\x20job\x20attempts.\x20Done\x20jobs\x20are\x20auto-pruned;\x20failed\x20jobs\x20persist\x20until\x20retried.\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\x20\x20<if\x20:=\x22!queueStats\x20&&\x20!queueBusy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.4;\x20font-style:italic;\x22>No\x20queue\x20stats\x20for\x20this\x20job\x20type\x20—\x20queue\x20may\x20be\x20idle\x20or\x20feature\x20inactive.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22queueBusy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.4;\x22>Loading…</div>\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</if>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Doc\x20status\x20table\x20-->\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;\x20align-items:center;\x20gap:8px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Documents</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:6px;\x20flex-wrap:wrap;\x20margin-left:auto;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setDocsStatus(null)\x22\x20\x20\x20\x20\x20\x20\x20:class=\x22docsStatus\x20==\x20null\x20\x20\x20\x20\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>All</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setDocsStatus(\x27pending\x27)\x22\x20\x20:class=\x22docsStatus\x20===\x20\x27pending\x27\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>Pending</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setDocsStatus(\x27done\x27)\x22\x20\x20\x20\x20\x20:class=\x22docsStatus\x20===\x20\x27done\x27\x20\x20\x20\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>Done</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setDocsStatus(\x27failed\x27)\x22\x20\x20\x20:class=\x22docsStatus\x20===\x20\x27failed\x27\x20\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>Failed</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setDocsStatus(\x27partial\x27)\x22\x20\x20:class=\x22docsStatus\x20===\x20\x27partial\x27\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>Partial</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setDocsStatus(\x27deleted\x27)\x22\x20\x20:class=\x22docsStatus\x20===\x20\x27deleted\x27\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>Deleted</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22loadDocs\x22\x20:disabled=\x22docsBusy\x22\x20style=\x22opacity:.8;\x22>↻</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22indexer?.mode\x20===\x20\x27queue\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22retryFailed()\x22\x20:disabled=\x22docsBusy\x22\x0a\x20\x20\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\x20\x20\x20title=\x22Re-enqueue\x20all\x20FAILED\x20docs\x20for\x20this\x20indexer\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20↺\x20Retry\x20Failed\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22retryStuckPending()\x22\x20:disabled=\x22docsBusy\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22color:var(--okdb-app-fg-muted);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-app-fg-muted)\x2027%,\x20transparent);\x20font-size:12px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Re-enqueue\x20FAILED\x20+\x20stuck\x20PENDING\x20docs\x20(use\x20when\x20queue\x20jobs\x20were\x20purged\x20externally)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20↺\x20Retry\x20Stuck\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\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\x0a\x20\x20\x20\x20<if\x20:=\x22docsError\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:13px;\x22>{{\x20docsError\x20}}</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<div\x20style=\x22position:relative;\x20flex:1;\x20min-height:0;\x20overflow:auto;\x22>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22docsBusy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ok-overlay>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22loader-center\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22loader\x22\x20class=\x22spin\x22\x20style=\x22width:28px;height:28px;\x22></ok-icon>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</ok-overlay>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20<ok-table\x20:data=\x22docs\x22\x20no-scroll\x20style=\x22width:100%;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<columns>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x22130px\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Status</header>\x0a\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<span\x20:style=\x22\x27color:\x27\x20+\x20statusColor(row.status)\x20+\x20\x27;\x20font-size:12px;\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20row.status\x20}}\x0a\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<if\x20:=\x22chunkProgress(row)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.7;\x20margin-left:4px;\x22>{{\x20chunkProgress(row)\x20}}</span>\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</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Source\x20Key</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>{{\x20row.source_key\x20}}</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x22110px\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Updated</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>{{\x20relTime(row.updated)\x20}}</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\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<header>Error</header>\x0a\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<if\x20:=\x22row.error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-danger);\x20font-size:11px;\x20opacity:.85;\x22\x20:title=\x22row.error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20row.error.slice(0,\x2060)\x20}}{{\x20row.error.length\x20>\x2060\x20?\x20\x27…\x27\x20:\x20\x27\x27\x20}}\x0a\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</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x22140px\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Actions</header>\x0a\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<div\x20style=\x22display:flex;\x20gap:4px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22(row.status\x20===\x20\x27failed\x27\x20||\x20row.status\x20===\x20\x27pending\x27)\x20&&\x20indexer?.mode\x20===\x20\x27queue\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22retryDoc(row)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22row._busy\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:3px\x208px;\x20color:var(--okdb-warning);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-warning)\x2027%,\x20transparent);\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Re-enqueue\x20this\x20document\x20for\x20embedding\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>↺\x20Retry</button>\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:=\x22row.status\x20!==\x20\x27deleted\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22markDeleteDoc(row)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22row._busy\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:3px\x208px;\x20color:var(--okdb-danger);\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>Delete</button>\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\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</columns>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<expanded\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22padding:10px;\x20font-size:12px;\x20display:flex;\x20flex-direction:column;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22kv-grid\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>source_key</span>\x20\x20<span\x20class=\x22kv-val\x22>{{\x20row.source_key\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>engine_key</span>\x20\x20<span\x20class=\x22kv-val\x22>{{\x20row.engine_key\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>mode</span>\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-val\x22>{{\x20row.mode\x20||\x20\x27—\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>clock</span>\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-val\x22>{{\x20row.clock\x20??\x20\x27—\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>created</span>\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-val\x22>{{\x20relTime(row.created)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>updated</span>\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-val\x22>{{\x20relTime(row.updated)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.total_chunks\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>chunks</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-val\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-success);\x22>{{\x20row.chunk_done\x20??\x200\x20}}\x20done</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.chunk_failed\x20>\x200\x22><span\x20style=\x22color:var(--okdb-danger);\x22>\x20·\x20{{\x20row.chunk_failed\x20}}\x20failed</span></if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22(row.chunk_pending\x20??\x200)\x20>\x200\x22><span\x20style=\x22color:var(--okdb-warning);\x22>\x20·\x20{{\x20row.chunk_pending\x20}}\x20pending</span></if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.5;\x22>\x20/\x20{{\x20row.total_chunks\x20}}\x20total</span>\x0a\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</if>\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\x20\x20<if\x20:=\x22row.error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20white-space:pre-wrap;\x22>{{\x20row.error\x20}}</div>\x0a\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<!--\x20Vector\x20viewer\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.status\x20===\x20\x27done\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:8px;\x20margin-top:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22toggleVector(row)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:3px\x2010px;\x20color:var(--okdb-purple);\x20border-color:var(--okdb-purple);\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22vectorCache[row.source_key]?.busy\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22vectorCache[row.source_key]?.busy\x22>…</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!vectorCache[row.source_key]?.busy\x20&&\x20!vectorCache[row.source_key]?.vector\x20&&\x20!vectorCache[row.source_key]?.error\x22>🔍\x20View\x20Vector</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22vectorCache[row.source_key]?.vector\x20||\x20vectorCache[row.source_key]?.error\x22>✕\x20Hide\x20Vector</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22vectorCache[row.source_key]?.dims\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.5;\x20font-size:11px;\x22>{{\x20vectorCache[row.source_key].dims\x20}}\x20dims</span>\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\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22vectorCache[row.source_key]?.error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:11px;\x22>{{\x20vectorCache[row.source_key].error\x20}}</div>\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<if\x20:=\x22vectorCache[row.source_key]?.vector\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px;\x20font-family:monospace;\x20font-size:11px;\x20word-break:break-all;\x20color:var(--okdb-purple);\x20max-height:80px;\x20overflow:auto;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20fmtVec(vectorCache[row.source_key].vector)\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</if>\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</expanded>\x0a\x20\x20\x20\x20\x20\x20</ok-table>\x0a\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22docs.length\x20===\x200\x20&&\x20!docsBusy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.5;\x20font-size:13px;\x20padding:12px\x200;\x22>No\x20documents\x20found.</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.6;\x20display:flex;\x20gap:12px;\x20align-items:center;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20<span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Showing\x20{{\x20docs.length\x20}}{{\x20docs.length\x20>=\x20docsLimit\x20?\x20\x27+\x27\x20:\x20\x27\x27\x20}}\x20{{\x20docsStatus\x20||\x20\x27\x27\x20}}\x20docs\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docsLoadMs\x20!==\x20null\x22>\x20in\x20{{\x20docsLoadMs\x20}}ms</if>\x0a\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22indexer?.doc_counts?.total\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.7;\x22>Total\x20tracked:\x20{{\x20indexer.doc_counts.total.toLocaleString()\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a</engine-panel-shell>\x0a','chunk_failed','markDelete\x20failed','dims','busy','Deleted',',\x20…\x20+','\x20deleted','Delete\x20failed','engine:stopped','flushing','2854907VAUAqy','/retry','embeddings:indexer:ready','Flush\x20failed','/embeddings/storage/','vectorCache','64qdRVvP','/docs/','s\x20ago','confirm','$attr','/retry-failed','loadQueueStats'];_0x5ccd=function(){return _0xf31a1f;};return _0x5ccd();}import _0x43bccd from'@toolkit/core/ok-overlay.ok.js';import _0x5d5548 from'../../../stores/events-store.js';import _0x85804 from'../../engines/parts/engine-panel-shell.ok.js';function _0x2714(_0x106794,_0x153ce9){_0x106794=_0x106794-0x74;const _0x5ccdfd=_0x5ccd();let _0x27142a=_0x5ccdfd[_0x106794];return _0x27142a;}import{ENGINE_PANEL_SHARED_STYLE as _0x4ef9d6}from'../../engines/engine-panel-shared-style.js';import{buildEmbeddingsPipelineUrl as _0x5d6c5d,dispatchEnginePipelineSelection as _0x446368}from'../../engines/engine-ui-utils.js';const d=_0x4ef9d6+_0x1404a6(0xa2);export default{'tag':_0x1404a6(0xb3),'dependencies':[_0x433062,_0x3d83d1,_0x43bccd,_0x85804],'attr':{'name':{},'engine':{}},'context':_0x5f05f2=>({'busy':!0x1,'flushing':!0x1,'stats':null,'error':null,'docsStatus':null,'docs':[],'docsBusy':!0x1,'docsError':null,'docsLimit':0x32,'docsLoadMs':null,'queueStats':null,'queueBusy':!0x1,get 'eng'(){const _0x38478c=_0x1404a6;return _0x5f05f2[_0x38478c(0xda)][_0x38478c(0x7f)]??{};},get 'name'(){const _0x1c8092=_0x1404a6;return _0x5f05f2[_0x1c8092(0xda)][_0x1c8092(0xb5)];},get '_pipelineUrl'(){const _0xef507a=_0x1404a6;return _0x5d6c5d(this[_0xef507a(0x9e)],this['name']);},get 'indexer'(){const _0x321b82=_0x1404a6;return this[_0x321b82(0xa9)]?.[_0x321b82(0xe2)]??null;},get 'search'(){const _0xe1b460=_0x1404a6;return this[_0xe1b460(0xa9)]?.[_0xe1b460(0xde)]??null;},get 'sourceEnvName'(){const _0x3f034e=_0x1404a6;return this[_0x3f034e(0x9e)]?.[_0x3f034e(0x9b)]?.[_0x3f034e(0x93)]??_0x3f034e(0xe6);},get 'embedderName'(){const _0x28bd6c=_0x1404a6;return this[_0x28bd6c(0xe2)]?.['embedder']||this[_0x28bd6c(0x9e)]?.['config']?.[_0x28bd6c(0x84)]||'—';},get 'storageKey'(){const _0x2ed0da=_0x1404a6;return this[_0x2ed0da(0xe2)]?.[_0x2ed0da(0x7a)]||this[_0x2ed0da(0x9e)]?.['config']?.[_0x2ed0da(0x7a)]||this[_0x2ed0da(0xb5)];},get 'docCounts'(){const _0x10c9e7=_0x1404a6;return this[_0x10c9e7(0xe2)]?.['doc_counts']??null;},get 'queueMode'(){const _0x4232be=_0x1404a6;return'queue'===(this[_0x4232be(0xe2)]?.[_0x4232be(0xe4)]||'inline');},get 'pendingDocs'(){const _0x22d8b8=_0x1404a6;return this[_0x22d8b8(0x76)]?.['pending']??0x0;},get 'failedDocs'(){const _0x40f92e=_0x1404a6;return this[_0x40f92e(0x76)]?.['failed']??0x0;},get 'doneDocs'(){const _0x3cdb76=_0x1404a6;return this[_0x3cdb76(0x76)]?.[_0x3cdb76(0xc0)]??0x0;},get 'vectorCount'(){const _0x184da6=_0x1404a6;return this[_0x184da6(0xe2)]?.[_0x184da6(0xb8)]??0x0;},get 'headerBadges'(){const _0x23123a=_0x1404a6,_0x12846b=[];return this[_0x23123a(0xe2)]?.[_0x23123a(0xe4)]&&_0x12846b[_0x23123a(0x82)]({'text':this['indexer'][_0x23123a(0xe4)],'color':_0x23123a(0xba)}),_0x12846b;},get 'clockPct'(){const _0x3a000a=_0x1404a6,_0x34acd8=this[_0x3a000a(0xe2)]?.[_0x3a000a(0x98)]??0x0,_0x8fb5f=this['indexer']?.['head_clock']??0x0;return _0x8fb5f?Math[_0x3a000a(0x81)](0x64,Math[_0x3a000a(0x74)](_0x34acd8/_0x8fb5f*0x64)):0x0;},get 'isCaughtUp'(){const _0x3ff3bc=_0x1404a6,_0x3196fe=this['indexer']?.[_0x3ff3bc(0x98)]??0x0,_0x2bf499=this[_0x3ff3bc(0xe2)]?.[_0x3ff3bc(0xb1)]??0x0;return _0x2bf499>0x0&&_0x3196fe>=_0x2bf499;},async 'load'(){const _0x1bdc1c=_0x1404a6;this[_0x1bdc1c(0xc9)]=!0x0,this[_0x1bdc1c(0xb0)]=null;try{const _0x4ceb11=await fetch(this['_pipelineUrl']+_0x1bdc1c(0x92)),_0x31171b=await _0x4ceb11[_0x1bdc1c(0xb6)]();if(!_0x4ceb11['ok'])throw new Error(_0x31171b?.[_0x1bdc1c(0xb0)]?.[_0x1bdc1c(0xa3)]||_0x1bdc1c(0xb4));this[_0x1bdc1c(0xa9)]=_0x31171b[_0x1bdc1c(0xa5)];}catch(_0x3efbd1){this['error']=_0x3efbd1?.[_0x1bdc1c(0xa3)]||String(_0x3efbd1),this[_0x1bdc1c(0xa9)]=null;}finally{this[_0x1bdc1c(0xc9)]=!0x1;}},async 'flush'(){const _0xcb50bf=_0x1404a6;this[_0xcb50bf(0xcf)]=!0x0;try{if(!(await fetch(this[_0xcb50bf(0xdf)]+_0xcb50bf(0xbd),{'method':_0xcb50bf(0xb7)}))['ok'])throw new Error(_0xcb50bf(0x99));_0x5f05f2[_0xcb50bf(0xbb)][_0xcb50bf(0x95)]?.[_0xcb50bf(0xc4)]?.[_0xcb50bf(0x9a)]?.('Flushed'),await this[_0xcb50bf(0xe0)](),await this[_0xcb50bf(0x88)]();}catch(_0x2dc75e){_0x5f05f2[_0xcb50bf(0xbb)][_0xcb50bf(0x95)]?.[_0xcb50bf(0xc4)]?.[_0xcb50bf(0xb0)]?.(_0x2dc75e?.['message']||_0xcb50bf(0xd3));}finally{this[_0xcb50bf(0xcf)]=!0x1;}},async 'setDocsStatus'(_0x8a3654){const _0xba593f=_0x1404a6;this[_0xba593f(0x79)]=_0x8a3654,await this[_0xba593f(0x88)]();},async 'onRefresh'(){const _0x30f952=_0x1404a6;await Promise[_0x30f952(0x83)]([this[_0x30f952(0xe0)](),this['loadDocs']()]),_0x30f952(0xaa)===this['indexer']?.[_0x30f952(0xe4)]&&await this[_0x30f952(0xdc)]();},async 'loadDocs'(){const _0x9a3577=_0x1404a6;this['docsBusy']=!0x0,this['docsError']=null;const _0x4fe19c=Date[_0x9a3577(0x77)]();try{const _0x20fc0e=new URLSearchParams({'limit':this['docsLimit']});this['docsStatus']&&_0x20fc0e[_0x9a3577(0xc3)](_0x9a3577(0xbc),this[_0x9a3577(0x79)]);const _0x1e8961=await fetch(this[_0x9a3577(0xdf)]+_0x9a3577(0xec)+_0x20fc0e),_0x237204=await _0x1e8961[_0x9a3577(0xb6)]();if(!_0x1e8961['ok'])throw new Error(_0x237204?.[_0x9a3577(0xb0)]?.[_0x9a3577(0xa3)]||_0x9a3577(0xb4));this[_0x9a3577(0x9d)]=_0x237204[_0x9a3577(0xa5)]||[],this[_0x9a3577(0x94)]=Date[_0x9a3577(0x77)]()-_0x4fe19c;}catch(_0x4810f4){this['docsError']=_0x4810f4?.['message']||String(_0x4810f4),this[_0x9a3577(0x9d)]=[],this[_0x9a3577(0x94)]=null;}finally{this[_0x9a3577(0xbf)]=!0x1;}},async 'loadQueueStats'(){const _0x51a0ab=_0x1404a6;_0x51a0ab(0xaa)===this['indexer']?.['mode']&&(this[_0x51a0ab(0xeb)]=this['stats']?.[_0x51a0ab(0xaa)]??null);},async 'markDeleteDoc'(_0x102226){const _0x275b2f=_0x1404a6;if(await _0x5f05f2[_0x275b2f(0xbb)][_0x275b2f(0x95)][_0x275b2f(0x8d)][_0x275b2f(0xd9)](_0x275b2f(0xa0)+_0x102226['source_key']+'\x22?')){_0x102226[_0x275b2f(0xa6)]=!0x0;try{if(!(await fetch(this[_0x275b2f(0xdf)]+_0x275b2f(0xd7)+encodeURIComponent(_0x102226['source_key'])+'/markDelete',{'method':_0x275b2f(0xb7),'headers':{'Content-Type':_0x275b2f(0xc2)},'body':JSON['stringify']({'clock':null})}))['ok'])throw new Error(_0x275b2f(0xc7));_0x5f05f2[_0x275b2f(0xbb)][_0x275b2f(0x95)]?.[_0x275b2f(0xc4)]?.['info']?.(_0x275b2f(0xca)),await this[_0x275b2f(0x88)]();}catch(_0x1fa194){_0x5f05f2[_0x275b2f(0xbb)][_0x275b2f(0x95)]?.[_0x275b2f(0xc4)]?.[_0x275b2f(0xb0)]?.(_0x1fa194?.[_0x275b2f(0xa3)]||_0x275b2f(0xcd));}finally{_0x102226[_0x275b2f(0xa6)]=!0x1;}}},async 'retryDoc'(_0x495067){const _0x274ed3=_0x1404a6;_0x495067['_busy']=!0x0;try{const _0x4eddfb=await fetch(this[_0x274ed3(0xdf)]+_0x274ed3(0xd7)+encodeURIComponent(_0x495067[_0x274ed3(0xe3)])+_0x274ed3(0xd1),{'method':_0x274ed3(0xb7)}),_0x58660c=await _0x4eddfb[_0x274ed3(0xb6)]();if(!_0x4eddfb['ok'])throw new Error(_0x58660c?.['error']?.['message']||_0x274ed3(0x97));_0x5f05f2[_0x274ed3(0xbb)][_0x274ed3(0x95)]?.[_0x274ed3(0xc4)]?.[_0x274ed3(0x9a)]?.(_0x274ed3(0xa8)+_0x495067[_0x274ed3(0xe3)]+'\x22'),await this[_0x274ed3(0x88)]();}catch(_0x1fb4c0){_0x5f05f2[_0x274ed3(0xbb)][_0x274ed3(0x95)]?.[_0x274ed3(0xc4)]?.[_0x274ed3(0xb0)]?.(_0x1fb4c0?.[_0x274ed3(0xa3)]||_0x274ed3(0x8e));}finally{_0x495067[_0x274ed3(0xa6)]=!0x1;}},async 'retryFailed'(){const _0x5b28cd=_0x1404a6;if(await _0x5f05f2[_0x5b28cd(0xbb)][_0x5b28cd(0x95)][_0x5b28cd(0x8d)]['confirm'](_0x5b28cd(0xbe)+this[_0x5b28cd(0xb5)]+'\x22?')){this[_0x5b28cd(0xbf)]=!0x0;try{const _0x340ede=await fetch(this[_0x5b28cd(0xdf)]+_0x5b28cd(0xdb),{'method':_0x5b28cd(0xb7),'headers':{'Content-Type':_0x5b28cd(0xc2)},'body':JSON[_0x5b28cd(0xa7)]({'limit':0x1388,'includeStuckPending':!0x1})}),_0x56d058=await _0x340ede[_0x5b28cd(0xb6)]();if(!_0x340ede['ok'])throw new Error(_0x56d058?.[_0x5b28cd(0xb0)]?.['message']||_0x5b28cd(0xb4));const _0x27a3e8=_0x56d058[_0x5b28cd(0xa5)];_0x5f05f2[_0x5b28cd(0xbb)][_0x5b28cd(0x95)]?.[_0x5b28cd(0xc4)]?.[_0x5b28cd(0x9a)]?.('Re-enqueued\x20'+_0x27a3e8[_0x5b28cd(0xab)]+_0x5b28cd(0x8a)+(_0x27a3e8[_0x5b28cd(0xea)]?_0x5b28cd(0x80)+_0x27a3e8['deleted']+_0x5b28cd(0xcc):'')),await Promise['all']([this['load'](),this[_0x5b28cd(0x88)]()]);}catch(_0x4747fa){_0x5f05f2[_0x5b28cd(0xbb)][_0x5b28cd(0x95)]?.[_0x5b28cd(0xc4)]?.[_0x5b28cd(0xb0)]?.(_0x4747fa?.[_0x5b28cd(0xa3)]||'Retry\x20failed');}finally{this[_0x5b28cd(0xbf)]=!0x1;}}},async 'retryStuckPending'(){const _0x5e7ac7=_0x1404a6;if(await _0x5f05f2['$ok'][_0x5e7ac7(0x95)][_0x5e7ac7(0x8d)]['confirm'](_0x5e7ac7(0x91)+this[_0x5e7ac7(0xb5)]+_0x5e7ac7(0x8b))){this[_0x5e7ac7(0xbf)]=!0x0;try{const _0x411222=await fetch(this[_0x5e7ac7(0xdf)]+_0x5e7ac7(0xdb),{'method':_0x5e7ac7(0xb7),'headers':{'Content-Type':_0x5e7ac7(0xc2)},'body':JSON[_0x5e7ac7(0xa7)]({'limit':0x1388,'includeStuckPending':!0x0})}),_0x4979f0=await _0x411222[_0x5e7ac7(0xb6)]();if(!_0x411222['ok'])throw new Error(_0x4979f0?.['error']?.[_0x5e7ac7(0xa3)]||_0x5e7ac7(0xb4));const _0x5f2790=_0x4979f0['data'];_0x5f05f2['$ok'][_0x5e7ac7(0x95)]?.[_0x5e7ac7(0xc4)]?.[_0x5e7ac7(0x9a)]?.(_0x5e7ac7(0xae)+_0x5f2790['retried']+'\x20doc(s)'+(_0x5f2790[_0x5e7ac7(0xea)]?_0x5e7ac7(0x80)+_0x5f2790[_0x5e7ac7(0xea)]+'\x20deleted':'')),await Promise['all']([this[_0x5e7ac7(0xe0)](),this[_0x5e7ac7(0x88)]()]);}catch(_0x9f0bac){_0x5f05f2[_0x5e7ac7(0xbb)]['shared']?.[_0x5e7ac7(0xc4)]?.[_0x5e7ac7(0xb0)]?.(_0x9f0bac?.[_0x5e7ac7(0xa3)]||'Retry\x20failed');}finally{this[_0x5e7ac7(0xbf)]=!0x1;}}},'statusColor':_0x203141=>({'done':_0x1404a6(0x8f),'failed':_0x1404a6(0x8c),'deleted':_0x1404a6(0x9f),'pending':'var(--okdb-warning)','running':_0x1404a6(0xed),'partial':'var(--okdb-orange)'}[_0x203141]||_0x1404a6(0x9f)),'chunkProgress'(_0x5289dd){const _0x35f766=_0x1404a6;if(!(_0x5289dd[_0x35f766(0xb2)]>0x0))return null;const _0x498600=_0x5289dd['chunk_done']??0x0,_0x272062=_0x5289dd[_0x35f766(0xb2)],_0xb655b7=_0x5289dd[_0x35f766(0xc6)]??0x0;return _0x35f766(0x86)===_0x5289dd[_0x35f766(0xbc)]&&_0xb655b7>0x0?_0x498600+'/'+_0x272062+'\x20('+_0xb655b7+_0x35f766(0x9c):_0x498600+'/'+_0x272062;},'relTime'(_0x5f3889){const _0x58ee41=_0x1404a6;if(!_0x5f3889)return'—';const _0x4dbe9b=Date['now']()-_0x5f3889;return _0x4dbe9b<0x1388?'just\x20now':_0x4dbe9b<0xea60?Math[_0x58ee41(0x74)](_0x4dbe9b/0x3e8)+_0x58ee41(0xd8):_0x4dbe9b<0x36ee80?Math[_0x58ee41(0x74)](_0x4dbe9b/0xea60)+_0x58ee41(0x7c):Math[_0x58ee41(0x74)](_0x4dbe9b/0x36ee80)+_0x58ee41(0x89);},'vectorCache':{},async 'fetchVector'(_0x55b4f1){const _0x366899=_0x1404a6,_0x11afc3=_0x55b4f1[_0x366899(0xe3)];if(!this[_0x366899(0xd5)][_0x11afc3]?.[_0x366899(0xe1)]&&!this[_0x366899(0xd5)][_0x11afc3]?.[_0x366899(0xc9)]){this[_0x366899(0xd5)][_0x11afc3]={'busy':!0x0,'error':null,'vector':null,'dims':null};try{const _0x41d1ff=this['indexer']?.[_0x366899(0x7a)]||this[_0x366899(0xb5)],_0x5d2b44=await fetch(__ENV__[_0x366899(0x96)]+_0x366899(0xd4)+encodeURIComponent(_0x41d1ff)+'/'+encodeURIComponent(_0x11afc3)),_0x54484b=await _0x5d2b44['json']();if(!_0x5d2b44['ok'])throw new Error(_0x54484b?.['error']?.[_0x366899(0xa3)]||_0x366899(0x7d));this[_0x366899(0xd5)][_0x11afc3]={'busy':!0x1,'error':null,'dims':_0x54484b[_0x366899(0xa5)][_0x366899(0xc8)],'vector':_0x54484b[_0x366899(0xa5)][_0x366899(0xe1)]};}catch(_0x4f0be6){this['vectorCache'][_0x11afc3]={'busy':!0x1,'error':_0x4f0be6?.['message']||String(_0x4f0be6),'vector':null,'dims':null};}}},'toggleVector'(_0x1781e2){const _0x4b8f2f=_0x1404a6,_0x5933b4=_0x1781e2[_0x4b8f2f(0xe3)];this['vectorCache'][_0x5933b4]?.[_0x4b8f2f(0xe1)]||this[_0x4b8f2f(0xd5)][_0x5933b4]?.[_0x4b8f2f(0xb0)]?delete this[_0x4b8f2f(0xd5)][_0x5933b4]:this['fetchVector'](_0x1781e2);},'fmtVec'(_0x4b0a5b){const _0x34fdf0=_0x1404a6;if(!_0x4b0a5b)return'';const _0xa4d72c=_0x4b0a5b['slice'](0x0,0xc)[_0x34fdf0(0xaf)](_0x4419a4=>_0x4419a4['toFixed'](0x4))[_0x34fdf0(0xe9)](',\x20');return _0x4b0a5b[_0x34fdf0(0xa1)]>0xc?'['+_0xa4d72c+_0x34fdf0(0xcb)+(_0x4b0a5b['length']-0xc)+_0x34fdf0(0xe8):'['+_0xa4d72c+']';},'viewPipeline'(){const _0x2479cb=_0x1404a6;_0x446368(_0x5f05f2,this[_0x2479cb(0x9e)]);},'_unsubs':[]}),async 'init'(_0x4133ca){const _0x42e25a=_0x1404a6;_0x4133ca[_0x42e25a(0xac)](()=>_0x4133ca[_0x42e25a(0xda)][_0x42e25a(0xb5)],async()=>{const _0x58a343=_0x42e25a;this[_0x58a343(0xa9)]=null,this[_0x58a343(0x9d)]=[],this[_0x58a343(0xeb)]=null,await Promise['all']([this[_0x58a343(0xe0)](),this['loadDocs']()]),_0x58a343(0xaa)===this['indexer']?.[_0x58a343(0xe4)]&&await this[_0x58a343(0xdc)]();}),await Promise[_0x42e25a(0x83)]([this['load'](),this[_0x42e25a(0x88)]()]),'queue'===this[_0x42e25a(0xe2)]?.[_0x42e25a(0xe4)]&&await this[_0x42e25a(0xdc)]();},'mount'(){const _0x1a404b=_0x1404a6,_0x5a7a1a=()=>this[_0x1a404b(0xb5)],_0x4e8ad9=_0x321c37=>{const _0x3d72bf=_0x1a404b;_0x321c37?.['engine']&&_0x321c37[_0x3d72bf(0x7f)]!==_0x5a7a1a()||this[_0x3d72bf(0xe0)]();},_0x52d2d7=_0x46af0e=>{const _0x28cea1=_0x1a404b;_0x46af0e?.[_0x28cea1(0x7f)]&&_0x46af0e[_0x28cea1(0x7f)]!==_0x5a7a1a()||this['loadDocs']();};this[_0x1a404b(0xad)]=[_0x5d5548['on'](_0x1a404b(0xd2),_0x4e8ad9),_0x5d5548['on'](_0x1a404b(0xe7),_0x4e8ad9),_0x5d5548['on'](_0x1a404b(0x78),_0x4e8ad9),_0x5d5548['on'](_0x1a404b(0xce),_0x4e8ad9),_0x5d5548['on']('engine:error',_0x4e8ad9),_0x5d5548['on']('embeddings:indexer:doc:done',_0x52d2d7),_0x5d5548['on'](_0x1a404b(0xdd),_0x52d2d7),_0x5d5548['on'](_0x1a404b(0x7b),_0x52d2d7)];},'unmount'(){const _0x2eda02=_0x1404a6;for(const _0x4ec963 of this[_0x2eda02(0xad)])_0x4ec963();this[_0x2eda02(0xad)]=[];},'template':_0x1404a6(0xc5),'style':d};
1
+ const _0x2794bc=_0x6079;function _0x974f(){const _0x2bbaf0=[',\x20cleaned\x20up\x20','engine:stopped','map','toast','Retry\x20failed','queueStats','6638992rBfwal','error','Re-enqueued\x20','partial','application/json','$watch','529758HEnhnL','/docs?','</b>\x22?<br><br>Use\x20this\x20when\x20jobs\x20were\x20purged\x20from\x20the\x20queue\x20but\x20docs\x20are\x20stuck\x20as\x20PENDING.','pending','stringify','docs','/embeddings/storage/','push','not\x20found','mode','\x20more]','var(--okdb-info)','min','/markDelete','Delete\x20\x22','default','shared','modal','json','queue','Flush\x20failed','engine:error','_unsubs','$ok','stats','head_clock','round','Re-enqueued\x20\x22','1065814pOzTRo','flushing','deleted','var(--okdb-danger)','busy','embeddings:indexer:doc:failed',',\x20…\x20+','join','all','_busy','indexer','vector','_pipelineUrl','docCounts','data','/stats','#9ca3af','load','now','done','Flushed','status','Delete\x20failed','var(--okdb-warning)','loadDocs','\x20failed)','success','embedder','/docs/','\x0a<engine-panel-shell\x0a\x20\x20:engine=\x22eng\x22\x0a\x20\x20:title=\x22name\x22\x0a\x20\x20type-label=\x22indexer\x22\x0a\x20\x20type-color=\x22var(--okdb-purple)\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||\x20docsBusy\x20||\x20queueBusy\x20||\x20flushing\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<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:=\x22indexer\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22stack-compact\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\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\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\x20\x20<div\x20class=\x22pill-row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Source\x20type\x20being\x20indexed.\x22>{{\x20indexer.source_type\x20||\x20\x27—\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Source\x20environment.\x22>source\x20env:\x20{{\x20sourceEnvName\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Embedder\x20used\x20to\x20create\x20vectors.\x22>embedder:\x20{{\x20embedderName\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Storage\x20key\x20for\x20the\x20vector\x20store.\x22>store:\x20{{\x20storageKey\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20:style=\x22\x27border-color:\x27\x20+\x20(isCaughtUp\x20?\x20\x27color-mix(in\x20srgb,\x20var(--okdb-success)\x2033%,\x20transparent)\x27\x20:\x20\x27color-mix(in\x20srgb,\x20var(--okdb-warning)\x2033%,\x20transparent)\x27)\x20+\x20\x27;color:\x27\x20+\x20(isCaughtUp\x20?\x20\x27var(--okdb-success)\x27\x20:\x20\x27var(--okdb-warning)\x27)\x20+\x20\x27;background:\x27\x20+\x20(isCaughtUp\x20?\x20\x27color-mix(in\x20srgb,\x20var(--okdb-success)\x207%,\x20transparent)\x27\x20:\x20\x27color-mix(in\x20srgb,\x20var(--okdb-warning)\x207%,\x20transparent)\x27)\x20+\x20\x27;\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20isCaughtUp\x20?\x20\x27caught\x20up\x27\x20:\x20\x27processing\x27\x20}}\x0a\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</div>\x0a\x20\x20\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\x20\x20\x20Watches\x20<strong>{{\x20indexer.source_type\x20||\x20\x27—\x27\x20}}</strong>\x20and\x20keeps\x20vectors\x20current\x20in\x20<strong>{{\x20storageKey\x20}}</strong>.\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\x20\x20<div\x20class=\x22story-note\x22>Flush\x20to\x20force\x20pending\x20writes\x20through\x20now.\x20Use\x20the\x20document\x20table\x20below\x20to\x20inspect\x20failures,\x20retry\x20queue-backed\x20docs,\x20and\x20inspect\x20stored\x20vectors.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-grid\x20metric-grid--compact\x22\x20style=\x22min-width:min(100%,\x20420px);\x22>\x0a\x20\x20\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\x20\x20<div\x20class=\x22metric-title\x22>Vectors</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20style=\x22color:var(--okdb-success);\x22>{{\x20vectorCount.toLocaleString()\x20}}</div>\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\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Done</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20style=\x22color:var(--okdb-success);\x22>{{\x20doneDocs.toLocaleString()\x20}}</div>\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\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Pending</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20:style=\x22\x27color:\x27\x20+\x20(pendingDocs\x20>\x200\x20?\x20\x27var(--okdb-warning)\x27\x20:\x20\x27var(--okdb-app-fg)\x27)\x22>{{\x20pendingDocs.toLocaleString()\x20}}</div>\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\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\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\x20\x20<div\x20class=\x22metric-value\x22\x20:style=\x22\x27color:\x27\x20+\x20(failedDocs\x20>\x200\x20?\x20\x27var(--okdb-danger)\x27\x20:\x20\x27var(--okdb-app-fg)\x27)\x22>{{\x20failedDocs.toLocaleString()\x20}}</div>\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</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\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\x20\x20<button\x20@click=\x22flush\x22\x20:disabled=\x22flushing\x20||\x20!eng.isRunning\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20flushing\x20?\x20\x27Flushing…\x27\x20:\x20\x27Flush\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22story-note\x22>Changelog\x20{{\x20indexer.last_seen_clock\x20??\x20\x27—\x27\x20}}\x20/\x20{{\x20indexer.head_clock\x20??\x20\x27—\x27\x20}}\x20·\x20{{\x20clockPct\x20}}%</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22search\x20&&\x20search.count\x20!=\x20null\x20&&\x20search.count\x20!==\x20indexer.vector_count\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22story-note\x22\x20style=\x22color:var(--okdb-warning);\x22\x20title=\x22In-memory\x20index\x20differs\x20from\x20storage\x20—\x20rebuild\x20may\x20be\x20needed\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20search\x20index:\x20{{\x20search.count.toLocaleString()\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22background:var(--okdb-app-border);\x20border-radius:6px;\x20height:6px;\x20overflow:hidden;\x22\x20:title=\x22clockPct\x20+\x20\x27%\x20of\x20changelog\x20processed\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20:style=\x22\x27height:100%;\x20border-radius:6px;\x20transition:width\x20.3s;\x20background:\x27\x20+\x20(isCaughtUp\x20?\x20\x27var(--okdb-success)\x27\x20:\x20\x27var(--okdb-accent)\x27)\x20+\x20\x27;\x20width:\x27\x20+\x20clockPct\x20+\x20\x27%\x27\x22></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\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Indexer\x20settings</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22kv-grid\x20kv-grid--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>source\x20type</span><span\x20class=\x22kv-val\x22>{{\x20indexer.source_type\x20||\x20\x27—\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>source\x20env</span><span\x20class=\x22kv-val\x22>{{\x20sourceEnvName\x20}}</span>\x0a\x20\x20\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\x20\x20<span\x20class=\x22kv-key\x22>storage\x20key</span><span\x20class=\x22kv-val\x22>{{\x20storageKey\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>mode</span><span\x20class=\x22kv-val\x22>{{\x20indexer.mode\x20||\x20\x27inline\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22indexer.job_type\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>job\x20type</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-val\x22\x20style=\x22font-size:11px;font-family:monospace;\x22>{{\x20indexer.job_type\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\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<if\x20:=\x22queueMode\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:10px;\x20margin-bottom:10px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Queue</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.5;\x22>job\x20type:\x20<span\x20style=\x22font-family:monospace;\x22>{{\x20indexer.job_type\x20}}</span></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22loadQueueStats\x22\x20:disabled=\x22queueBusy\x22\x20style=\x22margin-left:auto;\x20font-size:11px;\x20padding:2px\x208px;\x20opacity:.7;\x22>↻</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22queueStats\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:grid;\x20grid-template-columns:repeat(4,1fr);\x20gap:8px;\x20text-align:center;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-box\x22\x20style=\x22background:var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px\x204px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:22px;\x20font-weight:600;\x20color:var(--okdb-warning);\x22>{{\x20queueStats.byStatus?.pending\x20??\x200\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:10px;\x20opacity:.6;\x20margin-top:2px;\x22>Pending</div>\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\x20\x20<div\x20class=\x22stat-box\x22\x20style=\x22background:var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px\x204px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:22px;\x20font-weight:600;\x20color:var(--okdb-info);\x22>{{\x20queueStats.byStatus?.running\x20??\x200\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:10px;\x20opacity:.6;\x20margin-top:2px;\x22>Running</div>\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\x20\x20<div\x20class=\x22stat-box\x22\x20style=\x22background:var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px\x204px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:22px;\x20font-weight:600;\x20color:var(--okdb-success);\x22>{{\x20queueStats.byStatus?.done\x20??\x200\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:10px;\x20opacity:.6;\x20margin-top:2px;\x22>Done</div>\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\x20\x20<div\x20class=\x22stat-box\x22\x20style=\x22background:var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px\x204px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:22px;\x20font-weight:600;\x20color:var(--okdb-danger);\x22>{{\x20queueStats.byStatus?.failed\x20??\x200\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:10px;\x20opacity:.6;\x20margin-top:2px;\x22>Failed</div>\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</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-top:8px;\x20font-size:11px;\x20opacity:.4;\x20font-style:italic;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Queue\x20tracks\x20individual\x20job\x20attempts.\x20Done\x20jobs\x20are\x20auto-pruned;\x20failed\x20jobs\x20persist\x20until\x20retried.\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\x20\x20<if\x20:=\x22!queueStats\x20&&\x20!queueBusy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.4;\x20font-style:italic;\x22>No\x20queue\x20stats\x20for\x20this\x20job\x20type\x20—\x20queue\x20may\x20be\x20idle\x20or\x20feature\x20inactive.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22queueBusy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.4;\x22>Loading…</div>\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</if>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Doc\x20status\x20table\x20-->\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;\x20align-items:center;\x20gap:8px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Documents</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:6px;\x20flex-wrap:wrap;\x20margin-left:auto;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setDocsStatus(null)\x22\x20\x20\x20\x20\x20\x20\x20:class=\x22docsStatus\x20==\x20null\x20\x20\x20\x20\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>All</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setDocsStatus(\x27pending\x27)\x22\x20\x20:class=\x22docsStatus\x20===\x20\x27pending\x27\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>Pending</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setDocsStatus(\x27done\x27)\x22\x20\x20\x20\x20\x20:class=\x22docsStatus\x20===\x20\x27done\x27\x20\x20\x20\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>Done</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setDocsStatus(\x27failed\x27)\x22\x20\x20\x20:class=\x22docsStatus\x20===\x20\x27failed\x27\x20\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>Failed</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setDocsStatus(\x27partial\x27)\x22\x20\x20:class=\x22docsStatus\x20===\x20\x27partial\x27\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>Partial</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setDocsStatus(\x27deleted\x27)\x22\x20\x20:class=\x22docsStatus\x20===\x20\x27deleted\x27\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>Deleted</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22loadDocs\x22\x20:disabled=\x22docsBusy\x22\x20style=\x22opacity:.8;\x22>↻</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22indexer?.mode\x20===\x20\x27queue\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22retryFailed()\x22\x20:disabled=\x22docsBusy\x22\x0a\x20\x20\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\x20\x20\x20title=\x22Re-enqueue\x20all\x20FAILED\x20docs\x20for\x20this\x20indexer\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20↺\x20Retry\x20Failed\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22retryStuckPending()\x22\x20:disabled=\x22docsBusy\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22color:var(--okdb-app-fg-muted);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-app-fg-muted)\x2027%,\x20transparent);\x20font-size:12px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Re-enqueue\x20FAILED\x20+\x20stuck\x20PENDING\x20docs\x20(use\x20when\x20queue\x20jobs\x20were\x20purged\x20externally)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20↺\x20Retry\x20Stuck\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\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\x0a\x20\x20\x20\x20<if\x20:=\x22docsError\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:13px;\x22>{{\x20docsError\x20}}</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<div\x20style=\x22position:relative;\x20flex:1;\x20min-height:0;\x20overflow:auto;\x22>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22docsBusy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ok-overlay>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22loader-center\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22loader\x22\x20class=\x22spin\x22\x20style=\x22width:28px;height:28px;\x22></ok-icon>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</ok-overlay>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20<ok-table\x20:data=\x22docs\x22\x20no-scroll\x20style=\x22width:100%;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<columns>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x22130px\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Status</header>\x0a\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<span\x20:style=\x22\x27color:\x27\x20+\x20statusColor(row.status)\x20+\x20\x27;\x20font-size:12px;\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20row.status\x20}}\x0a\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<if\x20:=\x22chunkProgress(row)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.7;\x20margin-left:4px;\x22>{{\x20chunkProgress(row)\x20}}</span>\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</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Source\x20Key</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>{{\x20row.source_key\x20}}</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x22110px\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Updated</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>{{\x20relTime(row.updated)\x20}}</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\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<header>Error</header>\x0a\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<if\x20:=\x22row.error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-danger);\x20font-size:11px;\x20opacity:.85;\x22\x20:title=\x22row.error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20row.error.slice(0,\x2060)\x20}}{{\x20row.error.length\x20>\x2060\x20?\x20\x27…\x27\x20:\x20\x27\x27\x20}}\x0a\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</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x22140px\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Actions</header>\x0a\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<div\x20style=\x22display:flex;\x20gap:4px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22(row.status\x20===\x20\x27failed\x27\x20||\x20row.status\x20===\x20\x27pending\x27)\x20&&\x20indexer?.mode\x20===\x20\x27queue\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22retryDoc(row)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22row._busy\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:3px\x208px;\x20color:var(--okdb-warning);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-warning)\x2027%,\x20transparent);\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Re-enqueue\x20this\x20document\x20for\x20embedding\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>↺\x20Retry</button>\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:=\x22row.status\x20!==\x20\x27deleted\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22markDeleteDoc(row)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22row._busy\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:3px\x208px;\x20color:var(--okdb-danger);\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>Delete</button>\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\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</columns>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<expanded\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22padding:10px;\x20font-size:12px;\x20display:flex;\x20flex-direction:column;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22kv-grid\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>source_key</span>\x20\x20<span\x20class=\x22kv-val\x22>{{\x20row.source_key\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>engine_key</span>\x20\x20<span\x20class=\x22kv-val\x22>{{\x20row.engine_key\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>mode</span>\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-val\x22>{{\x20row.mode\x20||\x20\x27—\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>clock</span>\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-val\x22>{{\x20row.clock\x20??\x20\x27—\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>created</span>\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-val\x22>{{\x20relTime(row.created)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>updated</span>\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-val\x22>{{\x20relTime(row.updated)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.total_chunks\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>chunks</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-val\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-success);\x22>{{\x20row.chunk_done\x20??\x200\x20}}\x20done</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.chunk_failed\x20>\x200\x22><span\x20style=\x22color:var(--okdb-danger);\x22>\x20·\x20{{\x20row.chunk_failed\x20}}\x20failed</span></if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22(row.chunk_pending\x20??\x200)\x20>\x200\x22><span\x20style=\x22color:var(--okdb-warning);\x22>\x20·\x20{{\x20row.chunk_pending\x20}}\x20pending</span></if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.5;\x22>\x20/\x20{{\x20row.total_chunks\x20}}\x20total</span>\x0a\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</if>\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\x20\x20<if\x20:=\x22row.error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20white-space:pre-wrap;\x22>{{\x20row.error\x20}}</div>\x0a\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<!--\x20Vector\x20viewer\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.status\x20===\x20\x27done\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:8px;\x20margin-top:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22toggleVector(row)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:3px\x2010px;\x20color:var(--okdb-purple);\x20border-color:var(--okdb-purple);\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22vectorCache[row.source_key]?.busy\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22vectorCache[row.source_key]?.busy\x22>…</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!vectorCache[row.source_key]?.busy\x20&&\x20!vectorCache[row.source_key]?.vector\x20&&\x20!vectorCache[row.source_key]?.error\x22>🔍\x20View\x20Vector</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22vectorCache[row.source_key]?.vector\x20||\x20vectorCache[row.source_key]?.error\x22>✕\x20Hide\x20Vector</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22vectorCache[row.source_key]?.dims\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.5;\x20font-size:11px;\x22>{{\x20vectorCache[row.source_key].dims\x20}}\x20dims</span>\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\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22vectorCache[row.source_key]?.error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:11px;\x22>{{\x20vectorCache[row.source_key].error\x20}}</div>\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<if\x20:=\x22vectorCache[row.source_key]?.vector\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px;\x20font-family:monospace;\x20font-size:11px;\x20word-break:break-all;\x20color:var(--okdb-purple);\x20max-height:80px;\x20overflow:auto;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20fmtVec(vectorCache[row.source_key].vector)\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</if>\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</expanded>\x0a\x20\x20\x20\x20\x20\x20</ok-table>\x0a\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22docs.length\x20===\x200\x20&&\x20!docsBusy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.5;\x20font-size:13px;\x20padding:12px\x200;\x22>No\x20documents\x20found.</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.6;\x20display:flex;\x20gap:12px;\x20align-items:center;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20<span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Showing\x20{{\x20docs.length\x20}}{{\x20docs.length\x20>=\x20docsLimit\x20?\x20\x27+\x27\x20:\x20\x27\x27\x20}}\x20{{\x20docsStatus\x20||\x20\x27\x27\x20}}\x20docs\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docsLoadMs\x20!==\x20null\x22>\x20in\x20{{\x20docsLoadMs\x20}}ms</if>\x0a\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22indexer?.doc_counts?.total\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.7;\x22>Total\x20tracked:\x20{{\x20indexer.doc_counts.total.toLocaleString()\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a</engine-panel-shell>\x0a','$attr','inline','storage_key','config','source_key','vectorCache','Re-enqueue\x20all\x20failed\x20docs\x20for\x20indexer\x20\x22','failed','docsBusy','m\x20ago','length','source_env','chunk_failed','slice','embeddings:indexer:doc:done','1885988Zmkswa','name','docsStatus','/retry-failed','confirm','set','embeddings:doc:status_change','doc_counts','last_seen_clock','875osWDfN','retried','Re-enqueue\x20ALL\x20failed\x20AND\x20stuck-pending\x20docs\x20for\x20\x22<b>','docsError','flush\x20failed','h\x20ago','search','toFixed','message','info','engine','eng','docsLoadMs','var(--okdb-orange)','/flush','retry\x20failed','loadQueueStats','just\x20now','POST','\x20deleted','1017078qctATT','vector_count','engine:started','7138130ZAatnH','103624jZvWFq'];_0x974f=function(){return _0x2bbaf0;};return _0x974f();}(function(_0x3df245,_0x36752c){const _0xb9bb94=_0x6079,_0x4bb650=_0x3df245();while(!![]){try{const _0x3bffe2=parseInt(_0xb9bb94(0x139))/0x1+parseInt(_0xb9bb94(0x10c))/0x2+parseInt(_0xb9bb94(0xf0))/0x3+-parseInt(_0xb9bb94(0xea))/0x4+-parseInt(_0xb9bb94(0x159))/0x5+-parseInt(_0xb9bb94(0x156))/0x6+parseInt(_0xb9bb94(0x142))/0x7*(parseInt(_0xb9bb94(0x15a))/0x8);if(_0x3bffe2===_0x36752c)break;else _0x4bb650['push'](_0x4bb650['shift']());}catch(_0xbbe343){_0x4bb650['push'](_0x4bb650['shift']());}}}(_0x974f,0xe9d17));import _0x3680dd from'@toolkit/elements/ok-icon.ok.js';import _0xcede74 from'@toolkit/elements/ok-table.ok.js';import _0x9da453 from'@toolkit/core/ok-overlay.ok.js';import _0x181d0c from'../../../stores/events-store.js';function _0x6079(_0x16ad6d,_0x271aee){_0x16ad6d=_0x16ad6d-0xe9;const _0x974fe6=_0x974f();let _0x6079b=_0x974fe6[_0x16ad6d];return _0x6079b;}import _0x4e588c from'../../engines/parts/engine-panel-shell.ok.js';import{ENGINE_PANEL_SHARED_STYLE as _0x1c1dab}from'../../engines/engine-panel-shared-style.js';import{buildEmbeddingsPipelineUrl as _0x485eab,dispatchEnginePipelineSelection as _0x9cad1c}from'../../engines/engine-ui-utils.js';const d=_0x1c1dab+'\x0a\x20\x20.pill\x20{\x20border:1px\x20solid\x20var(--okdb-app-border);\x20background:var(--okdb-app-surface);\x20padding:3px\x2010px;\x20border-radius:999px;\x20font-size:12px;\x20cursor:pointer;\x20}\x0a\x20\x20.pill--on\x20{\x20border-color:var(--okdb-accent);\x20}\x0a';export default{'tag':'embed-indexer-panel','dependencies':[_0x3680dd,_0xcede74,_0x9da453,_0x4e588c],'attr':{'name':{},'engine':{}},'context':_0x34bd48=>({'busy':!0x1,'flushing':!0x1,'stats':null,'error':null,'docsStatus':null,'docs':[],'docsBusy':!0x1,'docsError':null,'docsLimit':0x32,'docsLoadMs':null,'queueStats':null,'queueBusy':!0x1,get 'eng'(){const _0x5f11c9=_0x6079;return _0x34bd48[_0x5f11c9(0x12a)]['engine']??{};},get 'name'(){const _0x231e40=_0x6079;return _0x34bd48[_0x231e40(0x12a)]['name'];},get '_pipelineUrl'(){const _0x59e96d=_0x6079;return _0x485eab(this[_0x59e96d(0x14d)],this[_0x59e96d(0x13a)]);},get 'indexer'(){const _0x3159c4=_0x6079;return this[_0x3159c4(0x108)]?.[_0x3159c4(0x116)]??null;},get 'search'(){const _0x1c30de=_0x6079;return this['stats']?.[_0x1c30de(0x148)]??null;},get 'sourceEnvName'(){const _0x55c59c=_0x6079;return this[_0x55c59c(0x14d)]?.[_0x55c59c(0x12d)]?.[_0x55c59c(0x135)]??_0x55c59c(0xff);},get 'embedderName'(){const _0x5457f2=_0x6079;return this[_0x5457f2(0x116)]?.[_0x5457f2(0x127)]||this['eng']?.['config']?.['embedder']||'—';},get 'storageKey'(){const _0x30e388=_0x6079;return this[_0x30e388(0x116)]?.[_0x30e388(0x12c)]||this[_0x30e388(0x14d)]?.[_0x30e388(0x12d)]?.[_0x30e388(0x12c)]||this[_0x30e388(0x13a)];},get 'docCounts'(){const _0x1d6a0e=_0x6079;return this[_0x1d6a0e(0x116)]?.[_0x1d6a0e(0x140)]??null;},get 'queueMode'(){const _0x2fd8c2=_0x6079;return _0x2fd8c2(0x103)===(this[_0x2fd8c2(0x116)]?.['mode']||_0x2fd8c2(0x12b));},get 'pendingDocs'(){const _0x2e976d=_0x6079;return this[_0x2e976d(0x119)]?.[_0x2e976d(0xf3)]??0x0;},get 'failedDocs'(){const _0x229ced=_0x6079;return this[_0x229ced(0x119)]?.[_0x229ced(0x131)]??0x0;},get 'doneDocs'(){const _0x434a3c=_0x6079;return this['docCounts']?.[_0x434a3c(0x11f)]??0x0;},get 'vectorCount'(){const _0x52d0f7=_0x6079;return this[_0x52d0f7(0x116)]?.[_0x52d0f7(0x157)]??0x0;},get 'headerBadges'(){const _0x5a1dbc=_0x6079,_0x3cf9b8=[];return this['indexer']?.[_0x5a1dbc(0xf9)]&&_0x3cf9b8[_0x5a1dbc(0xf7)]({'text':this['indexer'][_0x5a1dbc(0xf9)],'color':'var(--okdb-purple)'}),_0x3cf9b8;},get 'clockPct'(){const _0x425917=_0x6079,_0x55045b=this[_0x425917(0x116)]?.[_0x425917(0x141)]??0x0,_0x502d7d=this[_0x425917(0x116)]?.[_0x425917(0x109)]??0x0;return _0x502d7d?Math[_0x425917(0xfc)](0x64,Math[_0x425917(0x10a)](_0x55045b/_0x502d7d*0x64)):0x0;},get 'isCaughtUp'(){const _0x454c8a=_0x6079,_0x1bed29=this[_0x454c8a(0x116)]?.[_0x454c8a(0x141)]??0x0,_0x29ae2c=this[_0x454c8a(0x116)]?.['head_clock']??0x0;return _0x29ae2c>0x0&&_0x1bed29>=_0x29ae2c;},async 'load'(){const _0x25411d=_0x6079;this['busy']=!0x0,this[_0x25411d(0xeb)]=null;try{const _0x38e37c=await fetch(this[_0x25411d(0x118)]+_0x25411d(0x11b)),_0x22a444=await _0x38e37c['json']();if(!_0x38e37c['ok'])throw new Error(_0x22a444?.[_0x25411d(0xeb)]?.[_0x25411d(0x14a)]||_0x25411d(0x131));this[_0x25411d(0x108)]=_0x22a444[_0x25411d(0x11a)];}catch(_0x3da023){this['error']=_0x3da023?.[_0x25411d(0x14a)]||String(_0x3da023),this[_0x25411d(0x108)]=null;}finally{this['busy']=!0x1;}},async 'flush'(){const _0x2bda24=_0x6079;this[_0x2bda24(0x10d)]=!0x0;try{if(!(await fetch(this[_0x2bda24(0x118)]+_0x2bda24(0x150),{'method':'POST'}))['ok'])throw new Error(_0x2bda24(0x146));_0x34bd48[_0x2bda24(0x107)][_0x2bda24(0x100)]?.['toast']?.['success']?.(_0x2bda24(0x120)),await this[_0x2bda24(0x11d)](),await this[_0x2bda24(0x124)]();}catch(_0x47b666){_0x34bd48[_0x2bda24(0x107)][_0x2bda24(0x100)]?.[_0x2bda24(0x15e)]?.[_0x2bda24(0xeb)]?.(_0x47b666?.['message']||_0x2bda24(0x104));}finally{this[_0x2bda24(0x10d)]=!0x1;}},async 'setDocsStatus'(_0x1aad82){const _0xa8bd44=_0x6079;this[_0xa8bd44(0x13b)]=_0x1aad82,await this[_0xa8bd44(0x124)]();},async 'onRefresh'(){const _0x2d6502=_0x6079;await Promise['all']([this[_0x2d6502(0x11d)](),this['loadDocs']()]),_0x2d6502(0x103)===this[_0x2d6502(0x116)]?.['mode']&&await this[_0x2d6502(0x152)]();},async 'loadDocs'(){const _0x10a25e=_0x6079;this['docsBusy']=!0x0,this[_0x10a25e(0x145)]=null;const _0x184039=Date[_0x10a25e(0x11e)]();try{const _0x27a14d=new URLSearchParams({'limit':this['docsLimit']});this[_0x10a25e(0x13b)]&&_0x27a14d[_0x10a25e(0x13e)](_0x10a25e(0x121),this[_0x10a25e(0x13b)]);const _0x15ad86=await fetch(this[_0x10a25e(0x118)]+_0x10a25e(0xf1)+_0x27a14d),_0x2b8768=await _0x15ad86['json']();if(!_0x15ad86['ok'])throw new Error(_0x2b8768?.[_0x10a25e(0xeb)]?.['message']||'failed');this[_0x10a25e(0xf5)]=_0x2b8768[_0x10a25e(0x11a)]||[],this[_0x10a25e(0x14e)]=Date['now']()-_0x184039;}catch(_0x1031de){this[_0x10a25e(0x145)]=_0x1031de?.['message']||String(_0x1031de),this['docs']=[],this[_0x10a25e(0x14e)]=null;}finally{this['docsBusy']=!0x1;}},async 'loadQueueStats'(){const _0x5bea7a=_0x6079;_0x5bea7a(0x103)===this[_0x5bea7a(0x116)]?.[_0x5bea7a(0xf9)]&&(this[_0x5bea7a(0xe9)]=this[_0x5bea7a(0x108)]?.[_0x5bea7a(0x103)]??null);},async 'markDeleteDoc'(_0x3c92c6){const _0x2e08b5=_0x6079;if(await _0x34bd48[_0x2e08b5(0x107)][_0x2e08b5(0x100)][_0x2e08b5(0x101)][_0x2e08b5(0x13d)](_0x2e08b5(0xfe)+_0x3c92c6[_0x2e08b5(0x12e)]+'\x22?')){_0x3c92c6[_0x2e08b5(0x115)]=!0x0;try{if(!(await fetch(this[_0x2e08b5(0x118)]+_0x2e08b5(0x128)+encodeURIComponent(_0x3c92c6[_0x2e08b5(0x12e)])+_0x2e08b5(0xfd),{'method':_0x2e08b5(0x154),'headers':{'Content-Type':_0x2e08b5(0xee)},'body':JSON[_0x2e08b5(0xf4)]({'clock':null})}))['ok'])throw new Error('markDelete\x20failed');_0x34bd48[_0x2e08b5(0x107)]['shared']?.[_0x2e08b5(0x15e)]?.[_0x2e08b5(0x14b)]?.('Deleted'),await this[_0x2e08b5(0x124)]();}catch(_0x4842cb){_0x34bd48[_0x2e08b5(0x107)][_0x2e08b5(0x100)]?.[_0x2e08b5(0x15e)]?.[_0x2e08b5(0xeb)]?.(_0x4842cb?.['message']||_0x2e08b5(0x122));}finally{_0x3c92c6[_0x2e08b5(0x115)]=!0x1;}}},async 'retryDoc'(_0x3530e3){const _0x307432=_0x6079;_0x3530e3[_0x307432(0x115)]=!0x0;try{const _0x28c264=await fetch(this[_0x307432(0x118)]+_0x307432(0x128)+encodeURIComponent(_0x3530e3[_0x307432(0x12e)])+'/retry',{'method':'POST'}),_0x523762=await _0x28c264[_0x307432(0x102)]();if(!_0x28c264['ok'])throw new Error(_0x523762?.[_0x307432(0xeb)]?.[_0x307432(0x14a)]||_0x307432(0x151));_0x34bd48[_0x307432(0x107)][_0x307432(0x100)]?.[_0x307432(0x15e)]?.[_0x307432(0x126)]?.(_0x307432(0x10b)+_0x3530e3[_0x307432(0x12e)]+'\x22'),await this[_0x307432(0x124)]();}catch(_0x55555c){_0x34bd48[_0x307432(0x107)]['shared']?.['toast']?.[_0x307432(0xeb)]?.(_0x55555c?.['message']||'Retry\x20failed');}finally{_0x3530e3[_0x307432(0x115)]=!0x1;}},async 'retryFailed'(){const _0x265e50=_0x6079;if(await _0x34bd48[_0x265e50(0x107)]['shared'][_0x265e50(0x101)][_0x265e50(0x13d)](_0x265e50(0x130)+this[_0x265e50(0x13a)]+'\x22?')){this[_0x265e50(0x132)]=!0x0;try{const _0x1f5a53=await fetch(this[_0x265e50(0x118)]+_0x265e50(0x13c),{'method':_0x265e50(0x154),'headers':{'Content-Type':_0x265e50(0xee)},'body':JSON['stringify']({'limit':0x1388,'includeStuckPending':!0x1})}),_0x552899=await _0x1f5a53[_0x265e50(0x102)]();if(!_0x1f5a53['ok'])throw new Error(_0x552899?.[_0x265e50(0xeb)]?.[_0x265e50(0x14a)]||_0x265e50(0x131));const _0x329bb6=_0x552899[_0x265e50(0x11a)];_0x34bd48[_0x265e50(0x107)][_0x265e50(0x100)]?.['toast']?.['success']?.('Re-enqueued\x20'+_0x329bb6['retried']+'\x20doc(s)'+(_0x329bb6[_0x265e50(0x10e)]?_0x265e50(0x15b)+_0x329bb6['deleted']+'\x20deleted':'')),await Promise['all']([this['load'](),this[_0x265e50(0x124)]()]);}catch(_0x2d7009){_0x34bd48[_0x265e50(0x107)][_0x265e50(0x100)]?.[_0x265e50(0x15e)]?.[_0x265e50(0xeb)]?.(_0x2d7009?.['message']||'Retry\x20failed');}finally{this[_0x265e50(0x132)]=!0x1;}}},async 'retryStuckPending'(){const _0x5635c4=_0x6079;if(await _0x34bd48['$ok']['shared']['modal'][_0x5635c4(0x13d)](_0x5635c4(0x144)+this[_0x5635c4(0x13a)]+_0x5635c4(0xf2))){this[_0x5635c4(0x132)]=!0x0;try{const _0x482278=await fetch(this[_0x5635c4(0x118)]+_0x5635c4(0x13c),{'method':_0x5635c4(0x154),'headers':{'Content-Type':_0x5635c4(0xee)},'body':JSON['stringify']({'limit':0x1388,'includeStuckPending':!0x0})}),_0x12ee49=await _0x482278[_0x5635c4(0x102)]();if(!_0x482278['ok'])throw new Error(_0x12ee49?.[_0x5635c4(0xeb)]?.[_0x5635c4(0x14a)]||_0x5635c4(0x131));const _0x393c3e=_0x12ee49[_0x5635c4(0x11a)];_0x34bd48['$ok'][_0x5635c4(0x100)]?.[_0x5635c4(0x15e)]?.[_0x5635c4(0x126)]?.(_0x5635c4(0xec)+_0x393c3e[_0x5635c4(0x143)]+'\x20doc(s)'+(_0x393c3e[_0x5635c4(0x10e)]?_0x5635c4(0x15b)+_0x393c3e['deleted']+_0x5635c4(0x155):'')),await Promise[_0x5635c4(0x114)]([this[_0x5635c4(0x11d)](),this[_0x5635c4(0x124)]()]);}catch(_0x7a7dff){_0x34bd48[_0x5635c4(0x107)]['shared']?.['toast']?.['error']?.(_0x7a7dff?.[_0x5635c4(0x14a)]||_0x5635c4(0x15f));}finally{this[_0x5635c4(0x132)]=!0x1;}}},'statusColor':_0xff906d=>({'done':'var(--okdb-success)','failed':_0x2794bc(0x10f),'deleted':_0x2794bc(0x11c),'pending':_0x2794bc(0x123),'running':_0x2794bc(0xfb),'partial':_0x2794bc(0x14f)}[_0xff906d]||_0x2794bc(0x11c)),'chunkProgress'(_0x41dd15){const _0x11e828=_0x2794bc;if(!(_0x41dd15['total_chunks']>0x0))return null;const _0x322d9f=_0x41dd15['chunk_done']??0x0,_0x43c46d=_0x41dd15['total_chunks'],_0x2aecad=_0x41dd15[_0x11e828(0x136)]??0x0;return _0x11e828(0xed)===_0x41dd15[_0x11e828(0x121)]&&_0x2aecad>0x0?_0x322d9f+'/'+_0x43c46d+'\x20('+_0x2aecad+_0x11e828(0x125):_0x322d9f+'/'+_0x43c46d;},'relTime'(_0x3d268e){const _0x45ca20=_0x2794bc;if(!_0x3d268e)return'—';const _0x92bd99=Date[_0x45ca20(0x11e)]()-_0x3d268e;return _0x92bd99<0x1388?_0x45ca20(0x153):_0x92bd99<0xea60?Math[_0x45ca20(0x10a)](_0x92bd99/0x3e8)+'s\x20ago':_0x92bd99<0x36ee80?Math['round'](_0x92bd99/0xea60)+_0x45ca20(0x133):Math[_0x45ca20(0x10a)](_0x92bd99/0x36ee80)+_0x45ca20(0x147);},'vectorCache':{},async 'fetchVector'(_0x514fb9){const _0x14164f=_0x2794bc,_0x5af6b1=_0x514fb9['source_key'];if(!this[_0x14164f(0x12f)][_0x5af6b1]?.[_0x14164f(0x117)]&&!this['vectorCache'][_0x5af6b1]?.[_0x14164f(0x110)]){this['vectorCache'][_0x5af6b1]={'busy':!0x0,'error':null,'vector':null,'dims':null};try{const _0x13ec81=this[_0x14164f(0x116)]?.['storage_key']||this[_0x14164f(0x13a)],_0x249b4d=await fetch(__ENV__['API']+_0x14164f(0xf6)+encodeURIComponent(_0x13ec81)+'/'+encodeURIComponent(_0x5af6b1)),_0x112049=await _0x249b4d[_0x14164f(0x102)]();if(!_0x249b4d['ok'])throw new Error(_0x112049?.[_0x14164f(0xeb)]?.[_0x14164f(0x14a)]||_0x14164f(0xf8));this[_0x14164f(0x12f)][_0x5af6b1]={'busy':!0x1,'error':null,'dims':_0x112049[_0x14164f(0x11a)]['dims'],'vector':_0x112049[_0x14164f(0x11a)][_0x14164f(0x117)]};}catch(_0x52a164){this[_0x14164f(0x12f)][_0x5af6b1]={'busy':!0x1,'error':_0x52a164?.['message']||String(_0x52a164),'vector':null,'dims':null};}}},'toggleVector'(_0x4d2cd6){const _0x3e1f5e=_0x2794bc,_0x3ce5eb=_0x4d2cd6[_0x3e1f5e(0x12e)];this['vectorCache'][_0x3ce5eb]?.[_0x3e1f5e(0x117)]||this[_0x3e1f5e(0x12f)][_0x3ce5eb]?.[_0x3e1f5e(0xeb)]?delete this[_0x3e1f5e(0x12f)][_0x3ce5eb]:this['fetchVector'](_0x4d2cd6);},'fmtVec'(_0x37a4f7){const _0x555fe7=_0x2794bc;if(!_0x37a4f7)return'';const _0x4c6e4e=_0x37a4f7[_0x555fe7(0x137)](0x0,0xc)[_0x555fe7(0x15d)](_0xae23d6=>_0xae23d6[_0x555fe7(0x149)](0x4))[_0x555fe7(0x113)](',\x20');return _0x37a4f7[_0x555fe7(0x134)]>0xc?'['+_0x4c6e4e+_0x555fe7(0x112)+(_0x37a4f7['length']-0xc)+_0x555fe7(0xfa):'['+_0x4c6e4e+']';},'viewPipeline'(){_0x9cad1c(_0x34bd48,this['eng']);},'_unsubs':[]}),async 'init'(_0x699330){const _0x1d26c7=_0x2794bc;_0x699330[_0x1d26c7(0xef)](()=>_0x699330[_0x1d26c7(0x12a)]['name'],async()=>{const _0x4f24eb=_0x1d26c7;this['stats']=null,this[_0x4f24eb(0xf5)]=[],this['queueStats']=null,await Promise[_0x4f24eb(0x114)]([this[_0x4f24eb(0x11d)](),this['loadDocs']()]),'queue'===this['indexer']?.[_0x4f24eb(0xf9)]&&await this[_0x4f24eb(0x152)]();}),await Promise[_0x1d26c7(0x114)]([this[_0x1d26c7(0x11d)](),this['loadDocs']()]),_0x1d26c7(0x103)===this[_0x1d26c7(0x116)]?.[_0x1d26c7(0xf9)]&&await this[_0x1d26c7(0x152)]();},'mount'(){const _0x5f5455=_0x2794bc,_0x89bec2=()=>this[_0x5f5455(0x13a)],_0x214a2e=_0x495f16=>{const _0x22ee63=_0x5f5455;_0x495f16?.[_0x22ee63(0x14c)]&&_0x495f16['engine']!==_0x89bec2()||this[_0x22ee63(0x11d)]();},_0x2a6569=_0x27f8f0=>{const _0x3206e6=_0x5f5455;_0x27f8f0?.['engine']&&_0x27f8f0[_0x3206e6(0x14c)]!==_0x89bec2()||this[_0x3206e6(0x124)]();};this[_0x5f5455(0x106)]=[_0x181d0c['on']('embeddings:indexer:ready',_0x214a2e),_0x181d0c['on']('embeddings:indexer:flushed',_0x214a2e),_0x181d0c['on'](_0x5f5455(0x158),_0x214a2e),_0x181d0c['on'](_0x5f5455(0x15c),_0x214a2e),_0x181d0c['on'](_0x5f5455(0x105),_0x214a2e),_0x181d0c['on'](_0x5f5455(0x138),_0x2a6569),_0x181d0c['on'](_0x5f5455(0x111),_0x2a6569),_0x181d0c['on'](_0x5f5455(0x13f),_0x2a6569)];},'unmount'(){const _0x438ae0=_0x2794bc;for(const _0x2c8422 of this[_0x438ae0(0x106)])_0x2c8422();this[_0x438ae0(0x106)]=[];},'template':_0x2794bc(0x129),'style':d};
@@ -1 +1 @@
1
- (function(_0x5d45a8,_0x588405){var _0x4611ba=_0x524b,_0x133f28=_0x5d45a8();while(!![]){try{var _0x3c011=parseInt(_0x4611ba(0xf3))/0x1+parseInt(_0x4611ba(0xed))/0x2*(-parseInt(_0x4611ba(0xea))/0x3)+-parseInt(_0x4611ba(0xec))/0x4+-parseInt(_0x4611ba(0xef))/0x5*(parseInt(_0x4611ba(0xee))/0x6)+-parseInt(_0x4611ba(0xf4))/0x7*(parseInt(_0x4611ba(0xeb))/0x8)+parseInt(_0x4611ba(0xf2))/0x9+-parseInt(_0x4611ba(0xf0))/0xa*(-parseInt(_0x4611ba(0xf1))/0xb);if(_0x3c011===_0x588405)break;else _0x133f28['push'](_0x133f28['shift']());}catch(_0x59f8e3){_0x133f28['push'](_0x133f28['shift']());}}}(_0x55dc,0xcbebc));import _0x17f9b4 from'../../engines/parts/engine-lifecycle-actions.ok.js';export default{..._0x17f9b4,'tag':'embed-lifecycle-bar'};function _0x524b(_0x3afada,_0xb885fc){_0x3afada=_0x3afada-0xea;var _0x55dc81=_0x55dc();var _0x524b62=_0x55dc81[_0x3afada];return _0x524b62;}function _0x55dc(){var _0x5f19aa=['2124TlzIWk','2430mqbhwS','1090eiuhvL','110011kAlGjP','14143455ocpNpt','1012445vHenjK','9926DfBTAC','1685763sMvtPR','4024EKkEUG','5566280YzGJdC','2VULUvq'];_0x55dc=function(){return _0x5f19aa;};return _0x55dc();}
1
+ function _0x335c(_0xe7b612,_0x2a0656){_0xe7b612=_0xe7b612-0x7e;var _0x3e247c=_0x3e24();var _0x335cc5=_0x3e247c[_0xe7b612];return _0x335cc5;}var _0x33ed42=_0x335c;(function(_0x386701,_0x11d449){var _0x2575db=_0x335c,_0x352349=_0x386701();while(!![]){try{var _0x236616=parseInt(_0x2575db(0x82))/0x1*(parseInt(_0x2575db(0x87))/0x2)+parseInt(_0x2575db(0x85))/0x3+parseInt(_0x2575db(0x89))/0x4*(parseInt(_0x2575db(0x86))/0x5)+-parseInt(_0x2575db(0x80))/0x6*(-parseInt(_0x2575db(0x84))/0x7)+parseInt(_0x2575db(0x83))/0x8*(parseInt(_0x2575db(0x7e))/0x9)+-parseInt(_0x2575db(0x7f))/0xa+parseInt(_0x2575db(0x8a))/0xb*(-parseInt(_0x2575db(0x88))/0xc);if(_0x236616===_0x11d449)break;else _0x352349['push'](_0x352349['shift']());}catch(_0x5b9af3){_0x352349['push'](_0x352349['shift']());}}}(_0x3e24,0x99483));import _0x51784b from'../../engines/parts/engine-lifecycle-actions.ok.js';export default{..._0x51784b,'tag':_0x33ed42(0x81)};function _0x3e24(){var _0x593116=['20OQQJOY','3883fwfAtn','1575vCICLV','12195640hzWpYr','54myMCkk','embed-lifecycle-bar','302EAzgrJ','32336SqzzGx','591962rOdEzE','280338FBMEGt','145930jmyYAP','3704JBdyvK','14268nuvAaN'];_0x3e24=function(){return _0x593116;};return _0x3e24();}
@@ -1 +1 @@
1
- const _0x26c4b1=_0x35b4;function _0x35b4(_0x3b430f,_0x1403e4){_0x3b430f=_0x3b430f-0x1e3;const _0x1a919f=_0x1a91();let _0x35b449=_0x1a919f[_0x3b430f];return _0x35b449;}(function(_0x1c48be,_0x5b94db){const _0x46f754=_0x35b4,_0x1dd83c=_0x1c48be();while(!![]){try{const _0x37dc3d=-parseInt(_0x46f754(0x1f3))/0x1+-parseInt(_0x46f754(0x1ff))/0x2*(parseInt(_0x46f754(0x1e4))/0x3)+-parseInt(_0x46f754(0x1fc))/0x4+-parseInt(_0x46f754(0x1e6))/0x5*(parseInt(_0x46f754(0x1fb))/0x6)+-parseInt(_0x46f754(0x1f0))/0x7*(parseInt(_0x46f754(0x1fa))/0x8)+-parseInt(_0x46f754(0x1ec))/0x9+-parseInt(_0x46f754(0x1e5))/0xa*(-parseInt(_0x46f754(0x1f6))/0xb);if(_0x37dc3d===_0x5b94db)break;else _0x1dd83c['push'](_0x1dd83c['shift']());}catch(_0x3754f1){_0x1dd83c['push'](_0x1dd83c['shift']());}}}(_0x1a91,0x6904e));import _0x4adafc from'../modals/register-model-modal.ok.js';function _0x1a91(){const _0x1ed4ea=['filterProvider','provider','\x0a<div\x20:style=\x22compactMode\x0a\x20\x20?\x20\x27display:flex;\x20flex-direction:column;\x20gap:14px;\x20width:min(900px,\x2078vw);\x20max-width:900px;\x27\x0a\x20\x20:\x20\x27display:flex;\x20flex-direction:column;\x20gap:16px;\x20max-width:860px;\x27\x22>\x0a\x0a\x20\x20<!--\x20Header\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:10px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20<div\x20:style=\x22compactMode\x20?\x20\x27font-weight:600;\x20font-size:16px;\x27\x20:\x20\x27font-weight:600;\x20font-size:18px;\x27\x22>Model\x20Catalog</div>\x0a\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x20opacity:.55;\x22>{{totalCount}}\x20models</span>\x0a\x20\x20\x20\x20<div\x20style=\x22margin-left:auto;\x20display:flex;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22load()\x22\x20:disabled=\x22busy\x22\x20style=\x22opacity:.8;\x22>↻</button>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openAdd()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20style=\x22background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2013%,\x20transparent);\x20border-color:var(--okdb-accent);\x20color:var(--okdb-accent);\x20font-weight:600;\x20padding:5px\x2014px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20+\x20Register\x20Model\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:13px;\x20padding:10px;\x20border:1px\x20solid\x20var(--okdb-danger);\x20border-radius:8px;\x22>{{error}}</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Provider\x20filter\x20pills\x20-->\x0a\x20\x20<if\x20:=\x22providers.length\x20>\x201\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-wrap:wrap;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22filterProvider\x20=\x20null\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22filterProvider\x20==\x20null\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20All\x20({{totalCount}})\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20<for\x20:=\x22providers\x22\x20let:p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22filterProvider\x20=\x20p\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22filterProvider\x20===\x20p\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{p}}\x20({{(models[p]\x20||\x20[]).length}})\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20</for>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Table\x20-->\x0a\x20\x20<if\x20:=\x22filteredEntries.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22background:var(--okdb-app-surface);\x20border-radius:12px;\x20overflow:hidden;\x22>\x0a\x20\x20\x20\x20\x20\x20<table\x20style=\x22width:100%;\x20border-collapse:collapse;\x20font-size:13px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr\x20style=\x22border-bottom:1px\x20solid\x20var(--okdb-app-border);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20class=\x22th\x22>Provider</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20class=\x22th\x22>Model</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20class=\x22th\x22\x20style=\x22text-align:right;\x22>Dims</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20class=\x22th\x22>Description</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20class=\x22th\x22\x20style=\x22text-align:right;\x20width:80px;\x22></th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr\x20as=\x22repeat\x22\x20:of=\x22filteredEntries\x22\x20let:item=\x22m\x22\x20class=\x22tr\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20class=\x22td\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22padding:2px\x208px;\x20border-radius:999px;\x20font-size:11px;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent);\x20color:var(--okdb-accent);\x20background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x207%,\x20transparent);\x22>{{m.provider}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20class=\x22td\x22\x20style=\x22font-family:monospace;\x22>{{m.model}}</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20class=\x22td\x22\x20style=\x22text-align:right;\x20font-family:monospace;\x20color:var(--okdb-warning);\x22>{{m.dims}}</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20class=\x22td\x22\x20style=\x22opacity:.6;\x20font-size:12px;\x22>{{m.description\x20||\x20\x27—\x27}}</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20class=\x22td\x22\x20style=\x22text-align:right;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!m.builtin\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22remove(m)\x22\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x20color:var(--okdb-danger);\x20opacity:.8;\x22>✕</button>\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<if\x20:=\x22m.builtin\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20opacity:.4;\x20font-style:italic;\x22>built-in</span>\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</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</tbody>\x0a\x20\x20\x20\x20\x20\x20</table>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22!busy\x20&&\x20filteredEntries.length\x20===\x200\x20&&\x20!error\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22opacity:.55;\x20font-size:13px;\x20line-height:1.8;\x22>\x0a\x20\x20\x20\x20\x20\x20No\x20models\x20in\x20catalog\x20for\x20the\x20selected\x20filter.<br>\x0a\x20\x20\x20\x20\x20\x20Register\x20a\x20custom\x20model\x20to\x20auto-resolve\x20its\x20dimensions\x20when\x20creating\x20engines.\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a</div>\x0a','onchanged','model','218526LSQBzn','20sChWjA','1715PbnWYF','initialprovider','json','/embeddings/models/','values','message','3565890vPEilM','modal','data','sort','7fkgvDt','error','Removed\x20\x22','617560tloIMQ','compact','$attr','20948631LCTKUp','map','push','shared','6273032ZAemQI','11412XcWKxd','1674020KcdKsN','DELETE','Failed\x20to\x20load\x20models','14fyrXba','info','reduce','<register-model-modal\x20:modal=\x22modal\x22\x20:initial-provider=\x22initialProvider\x22\x20:on-done=\x22onDone\x22\x20/>','/embeddings/models','$ok','</b>\x22\x20from\x20catalog?','models','builtin','open','load','busy','embed-model-catalog','keys','providers','includes','confirm'];_0x1a91=function(){return _0x1ed4ea;};return _0x1a91();}export default{'tag':_0x26c4b1(0x20b),'attr':{'initialprovider':{},'compact':{},'onchanged':{}},'dependencies':[_0x4adafc],'context':_0x2ac376=>({'busy':!0x1,'models':{},'error':null,'filterProvider':null,get 'initialProvider'(){const _0x722afd=_0x26c4b1;return _0x2ac376[_0x722afd(0x1f5)][_0x722afd(0x1e7)]||null;},get 'compactMode'(){const _0x4d3aac=_0x26c4b1;return!0x0===_0x2ac376['$attr'][_0x4d3aac(0x1f4)]||'true'===_0x2ac376[_0x4d3aac(0x1f5)][_0x4d3aac(0x1f4)];},async 'load'(){const _0x37775c=_0x26c4b1;this[_0x37775c(0x20a)]=!0x0,this[_0x37775c(0x1f1)]=null;try{const _0x10db35=await fetch(__ENV__['API']+_0x37775c(0x203)),_0x10d5db=await _0x10db35['json']();if(!_0x10db35['ok'])throw new Error(_0x10d5db?.[_0x37775c(0x1f1)]?.[_0x37775c(0x1eb)]||_0x37775c(0x1fe));this[_0x37775c(0x206)]=_0x10d5db[_0x37775c(0x1ee)]??{};}catch(_0x505633){this[_0x37775c(0x1f1)]=_0x505633?.[_0x37775c(0x1eb)]||String(_0x505633),this[_0x37775c(0x206)]={};}finally{this[_0x37775c(0x20a)]=!0x1;}},get 'providers'(){const _0x40efc4=_0x26c4b1;return Object[_0x40efc4(0x20c)](this[_0x40efc4(0x206)])[_0x40efc4(0x1ef)]();},get 'filteredEntries'(){const _0x8b65ca=_0x26c4b1,_0x5b9428=this[_0x8b65ca(0x210)];if(!_0x5b9428){const _0x217f67=[];for(const _0x5610fd of this[_0x8b65ca(0x20d)])for(const _0x2c8b8d of this[_0x8b65ca(0x206)][_0x5610fd]||[])_0x217f67[_0x8b65ca(0x1f8)]({..._0x2c8b8d,'provider':_0x2c8b8d[_0x8b65ca(0x211)]??_0x5610fd});return _0x217f67;}return(this[_0x8b65ca(0x206)][_0x5b9428]||[])[_0x8b65ca(0x1f7)](_0x2255ca=>({..._0x2255ca,'provider':_0x2255ca['provider']??_0x5b9428}));},get 'totalCount'(){const _0x1f80ca=_0x26c4b1;return Object[_0x1f80ca(0x1ea)](this[_0x1f80ca(0x206)])[_0x1f80ca(0x201)]((_0x170402,_0x13218d)=>_0x170402+_0x13218d['length'],0x0);},async 'openAdd'(){const _0x23b760=_0x26c4b1;await _0x2ac376[_0x23b760(0x204)][_0x23b760(0x1f9)][_0x23b760(0x1ed)][_0x23b760(0x208)]({'owner':_0x2ac376,'title':'Register\x20Model','content':_0x23b760(0x202),'context':_0x714c84=>({'modal':_0x714c84,'initialProvider':this[_0x23b760(0x210)]||'','onDone':async()=>{const _0x35444e=_0x23b760;await this[_0x35444e(0x209)](),await _0x2ac376['$attr']['onchanged']?.();}})});},async 'remove'(_0xbc9e9f){const _0x5bc408=_0x26c4b1;if(_0xbc9e9f[_0x5bc408(0x207)])return void _0x2ac376[_0x5bc408(0x204)][_0x5bc408(0x1f9)]?.['toast']?.[_0x5bc408(0x1f1)]?.('Built-in\x20models\x20cannot\x20be\x20deleted');const _0x170703=_0xbc9e9f[_0x5bc408(0x211)]+':'+_0xbc9e9f[_0x5bc408(0x1e3)];if(await _0x2ac376[_0x5bc408(0x204)][_0x5bc408(0x1f9)][_0x5bc408(0x1ed)][_0x5bc408(0x20f)]('Remove\x20model\x20\x22<b>'+_0x170703+_0x5bc408(0x205)))try{const _0xa4a3e3=await fetch(__ENV__['API']+_0x5bc408(0x1e9)+encodeURIComponent(_0x170703),{'method':_0x5bc408(0x1fd)});if(!_0xa4a3e3['ok']){const _0x3e4ff0=await _0xa4a3e3[_0x5bc408(0x1e8)]();throw new Error(_0x3e4ff0?.[_0x5bc408(0x1f1)]?.[_0x5bc408(0x1eb)]||'Delete\x20failed');}_0x2ac376[_0x5bc408(0x204)][_0x5bc408(0x1f9)]?.['toast']?.[_0x5bc408(0x200)]?.(_0x5bc408(0x1f2)+_0x170703+'\x22'),await this['load'](),await _0x2ac376[_0x5bc408(0x1f5)][_0x5bc408(0x213)]?.();}catch(_0x9639dc){_0x2ac376['$ok'][_0x5bc408(0x1f9)]?.['toast']?.[_0x5bc408(0x1f1)]?.(_0x9639dc?.['message']||'Delete\x20failed');}}}),async 'mount'(_0x5ac346){const _0x5446b7=_0x26c4b1;await this['load']();const _0x56f561=_0x5ac346[_0x5446b7(0x1f5)][_0x5446b7(0x1e7)]||null;_0x56f561&&this[_0x5446b7(0x20d)][_0x5446b7(0x20e)](_0x56f561)&&(this[_0x5446b7(0x210)]=_0x56f561);},'template':_0x26c4b1(0x212),'style':'.pill{border:1px\x20solid\x20var(--okdb-app-border);background:var(--okdb-app-surface);padding:4px\x2010px;border-radius:999px;font-size:12px;cursor:pointer}.pill--on{border-color:var(--okdb-accent)}.td,.th{padding:8px\x2012px}.th{text-align:left;font-weight:500;font-size:11px;text-transform:uppercase;letter-spacing:.04em;opacity:.55}.td{border-top:1px\x20solid\x20#1e2932}.tr:hover\x20.td{background:#ffffff06}'};
1
+ const _0x432469=_0x391f;function _0x3f96(){const _0x5bb9e1=['models','Built-in\x20models\x20cannot\x20be\x20deleted','API','modal','reduce','initialprovider','4937028acpLpE','true','7671279GUmqgP','embed-model-catalog','toast','provider','error','includes','onchanged','11626BjrBoJ','/embeddings/models','push','load','sort','length','filterProvider','9149568mVZlrx','Register\x20Model','json','map','message','confirm','$ok','33inmJao','36rpeqwQ','builtin','700655zmeTZJ','2489680UleiXU','Failed\x20to\x20load\x20models','providers','264gBPxrQ','.pill{border:1px\x20solid\x20var(--okdb-app-border);background:var(--okdb-app-surface);padding:4px\x2010px;border-radius:999px;font-size:12px;cursor:pointer}.pill--on{border-color:var(--okdb-accent)}.td,.th{padding:8px\x2012px}.th{text-align:left;font-weight:500;font-size:11px;text-transform:uppercase;letter-spacing:.04em;opacity:.55}.td{border-top:1px\x20solid\x20#1e2932}.tr:hover\x20.td{background:#ffffff06}','Removed\x20\x22','$attr','shared','data','63JxLuwj','</b>\x22\x20from\x20catalog?','compact','Delete\x20failed','keys','/embeddings/models/','667816LsIhai'];_0x3f96=function(){return _0x5bb9e1;};return _0x3f96();}function _0x391f(_0x4bc107,_0x385433){_0x4bc107=_0x4bc107-0xe1;const _0x3f969e=_0x3f96();let _0x391f0d=_0x3f969e[_0x4bc107];return _0x391f0d;}(function(_0x445a53,_0x473ebe){const _0x18f3ee=_0x391f,_0x5d2b62=_0x445a53();while(!![]){try{const _0x3f8cc2=-parseInt(_0x18f3ee(0xf6))/0x1*(parseInt(_0x18f3ee(0x10b))/0x2)+-parseInt(_0x18f3ee(0xed))/0x3+-parseInt(_0x18f3ee(0x105))/0x4*(-parseInt(_0x18f3ee(0x107))/0x5)+parseInt(_0x18f3ee(0xfd))/0x6+parseInt(_0x18f3ee(0xef))/0x7+-parseInt(_0x18f3ee(0xe6))/0x8*(parseInt(_0x18f3ee(0x111))/0x9)+-parseInt(_0x18f3ee(0x108))/0xa*(-parseInt(_0x18f3ee(0x104))/0xb);if(_0x3f8cc2===_0x473ebe)break;else _0x5d2b62['push'](_0x5d2b62['shift']());}catch(_0x61d4d5){_0x5d2b62['push'](_0x5d2b62['shift']());}}}(_0x3f96,0xd3005));import _0x15f721 from'../modals/register-model-modal.ok.js';export default{'tag':_0x432469(0xf0),'attr':{'initialprovider':{},'compact':{},'onchanged':{}},'dependencies':[_0x15f721],'context':_0x1db324=>({'busy':!0x1,'models':{},'error':null,'filterProvider':null,get 'initialProvider'(){const _0x3a79d5=_0x432469;return _0x1db324['$attr'][_0x3a79d5(0xec)]||null;},get 'compactMode'(){const _0x24ceaf=_0x432469;return!0x0===_0x1db324[_0x24ceaf(0x10e)][_0x24ceaf(0xe2)]||_0x24ceaf(0xee)===_0x1db324[_0x24ceaf(0x10e)][_0x24ceaf(0xe2)];},async 'load'(){const _0x12d3aa=_0x432469;this['busy']=!0x0,this[_0x12d3aa(0xf3)]=null;try{const _0x3346e7=await fetch(__ENV__['API']+_0x12d3aa(0xf7)),_0x49c088=await _0x3346e7[_0x12d3aa(0xff)]();if(!_0x3346e7['ok'])throw new Error(_0x49c088?.[_0x12d3aa(0xf3)]?.[_0x12d3aa(0x101)]||_0x12d3aa(0x109));this['models']=_0x49c088[_0x12d3aa(0x110)]??{};}catch(_0x38f691){this[_0x12d3aa(0xf3)]=_0x38f691?.[_0x12d3aa(0x101)]||String(_0x38f691),this[_0x12d3aa(0xe7)]={};}finally{this['busy']=!0x1;}},get 'providers'(){const _0x57cda8=_0x432469;return Object[_0x57cda8(0xe4)](this[_0x57cda8(0xe7)])[_0x57cda8(0xfa)]();},get 'filteredEntries'(){const _0x427048=_0x432469,_0x551029=this[_0x427048(0xfc)];if(!_0x551029){const _0x39f6fe=[];for(const _0x14bf97 of this[_0x427048(0x10a)])for(const _0x508151 of this[_0x427048(0xe7)][_0x14bf97]||[])_0x39f6fe[_0x427048(0xf8)]({..._0x508151,'provider':_0x508151['provider']??_0x14bf97});return _0x39f6fe;}return(this[_0x427048(0xe7)][_0x551029]||[])[_0x427048(0x100)](_0x5e051c=>({..._0x5e051c,'provider':_0x5e051c['provider']??_0x551029}));},get 'totalCount'(){const _0x2f7968=_0x432469;return Object['values'](this[_0x2f7968(0xe7)])[_0x2f7968(0xeb)]((_0x572151,_0x304aff)=>_0x572151+_0x304aff[_0x2f7968(0xfb)],0x0);},async 'openAdd'(){const _0x51eb16=_0x432469;await _0x1db324['$ok'][_0x51eb16(0x10f)][_0x51eb16(0xea)]['open']({'owner':_0x1db324,'title':_0x51eb16(0xfe),'content':'<register-model-modal\x20:modal=\x22modal\x22\x20:initial-provider=\x22initialProvider\x22\x20:on-done=\x22onDone\x22\x20/>','context':_0x227d46=>({'modal':_0x227d46,'initialProvider':this[_0x51eb16(0xfc)]||'','onDone':async()=>{const _0x476a05=_0x51eb16;await this[_0x476a05(0xf9)](),await _0x1db324[_0x476a05(0x10e)][_0x476a05(0xf5)]?.();}})});},async 'remove'(_0x384410){const _0x1ad6cc=_0x432469;if(_0x384410[_0x1ad6cc(0x106)])return void _0x1db324['$ok'][_0x1ad6cc(0x10f)]?.[_0x1ad6cc(0xf1)]?.['error']?.(_0x1ad6cc(0xe8));const _0x4db30c=_0x384410[_0x1ad6cc(0xf2)]+':'+_0x384410['model'];if(await _0x1db324[_0x1ad6cc(0x103)][_0x1ad6cc(0x10f)][_0x1ad6cc(0xea)][_0x1ad6cc(0x102)]('Remove\x20model\x20\x22<b>'+_0x4db30c+_0x1ad6cc(0xe1)))try{const _0x244224=await fetch(__ENV__[_0x1ad6cc(0xe9)]+_0x1ad6cc(0xe5)+encodeURIComponent(_0x4db30c),{'method':'DELETE'});if(!_0x244224['ok']){const _0x518e9e=await _0x244224['json']();throw new Error(_0x518e9e?.[_0x1ad6cc(0xf3)]?.['message']||_0x1ad6cc(0xe3));}_0x1db324['$ok'][_0x1ad6cc(0x10f)]?.[_0x1ad6cc(0xf1)]?.['info']?.(_0x1ad6cc(0x10d)+_0x4db30c+'\x22'),await this[_0x1ad6cc(0xf9)](),await _0x1db324[_0x1ad6cc(0x10e)][_0x1ad6cc(0xf5)]?.();}catch(_0x18c3e0){_0x1db324['$ok'][_0x1ad6cc(0x10f)]?.[_0x1ad6cc(0xf1)]?.[_0x1ad6cc(0xf3)]?.(_0x18c3e0?.[_0x1ad6cc(0x101)]||'Delete\x20failed');}}}),async 'mount'(_0x48a087){const _0x3f7e17=_0x432469;await this[_0x3f7e17(0xf9)]();const _0x449147=_0x48a087[_0x3f7e17(0x10e)][_0x3f7e17(0xec)]||null;_0x449147&&this['providers'][_0x3f7e17(0xf4)](_0x449147)&&(this[_0x3f7e17(0xfc)]=_0x449147);},'template':'\x0a<div\x20:style=\x22compactMode\x0a\x20\x20?\x20\x27display:flex;\x20flex-direction:column;\x20gap:14px;\x20width:min(900px,\x2078vw);\x20max-width:900px;\x27\x0a\x20\x20:\x20\x27display:flex;\x20flex-direction:column;\x20gap:16px;\x20max-width:860px;\x27\x22>\x0a\x0a\x20\x20<!--\x20Header\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:10px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20<div\x20:style=\x22compactMode\x20?\x20\x27font-weight:600;\x20font-size:16px;\x27\x20:\x20\x27font-weight:600;\x20font-size:18px;\x27\x22>Model\x20Catalog</div>\x0a\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x20opacity:.55;\x22>{{totalCount}}\x20models</span>\x0a\x20\x20\x20\x20<div\x20style=\x22margin-left:auto;\x20display:flex;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22load()\x22\x20:disabled=\x22busy\x22\x20style=\x22opacity:.8;\x22>↻</button>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openAdd()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20style=\x22background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2013%,\x20transparent);\x20border-color:var(--okdb-accent);\x20color:var(--okdb-accent);\x20font-weight:600;\x20padding:5px\x2014px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20+\x20Register\x20Model\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:13px;\x20padding:10px;\x20border:1px\x20solid\x20var(--okdb-danger);\x20border-radius:8px;\x22>{{error}}</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Provider\x20filter\x20pills\x20-->\x0a\x20\x20<if\x20:=\x22providers.length\x20>\x201\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-wrap:wrap;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22filterProvider\x20=\x20null\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22filterProvider\x20==\x20null\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20All\x20({{totalCount}})\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20<for\x20:=\x22providers\x22\x20let:p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22filterProvider\x20=\x20p\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22filterProvider\x20===\x20p\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{p}}\x20({{(models[p]\x20||\x20[]).length}})\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20</for>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Table\x20-->\x0a\x20\x20<if\x20:=\x22filteredEntries.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22background:var(--okdb-app-surface);\x20border-radius:12px;\x20overflow:hidden;\x22>\x0a\x20\x20\x20\x20\x20\x20<table\x20style=\x22width:100%;\x20border-collapse:collapse;\x20font-size:13px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr\x20style=\x22border-bottom:1px\x20solid\x20var(--okdb-app-border);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20class=\x22th\x22>Provider</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20class=\x22th\x22>Model</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20class=\x22th\x22\x20style=\x22text-align:right;\x22>Dims</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20class=\x22th\x22>Description</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20class=\x22th\x22\x20style=\x22text-align:right;\x20width:80px;\x22></th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr\x20as=\x22repeat\x22\x20:of=\x22filteredEntries\x22\x20let:item=\x22m\x22\x20class=\x22tr\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20class=\x22td\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22padding:2px\x208px;\x20border-radius:999px;\x20font-size:11px;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent);\x20color:var(--okdb-accent);\x20background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x207%,\x20transparent);\x22>{{m.provider}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20class=\x22td\x22\x20style=\x22font-family:monospace;\x22>{{m.model}}</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20class=\x22td\x22\x20style=\x22text-align:right;\x20font-family:monospace;\x20color:var(--okdb-warning);\x22>{{m.dims}}</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20class=\x22td\x22\x20style=\x22opacity:.6;\x20font-size:12px;\x22>{{m.description\x20||\x20\x27—\x27}}</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20class=\x22td\x22\x20style=\x22text-align:right;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!m.builtin\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22remove(m)\x22\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x20color:var(--okdb-danger);\x20opacity:.8;\x22>✕</button>\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<if\x20:=\x22m.builtin\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20opacity:.4;\x20font-style:italic;\x22>built-in</span>\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</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</tbody>\x0a\x20\x20\x20\x20\x20\x20</table>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22!busy\x20&&\x20filteredEntries.length\x20===\x200\x20&&\x20!error\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22opacity:.55;\x20font-size:13px;\x20line-height:1.8;\x22>\x0a\x20\x20\x20\x20\x20\x20No\x20models\x20in\x20catalog\x20for\x20the\x20selected\x20filter.<br>\x0a\x20\x20\x20\x20\x20\x20Register\x20a\x20custom\x20model\x20to\x20auto-resolve\x20its\x20dimensions\x20when\x20creating\x20engines.\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a</div>\x0a','style':_0x432469(0x10c)};
@@ -1 +1 @@
1
- function _0x16d7(){const _0x5215d5=['toast','Indexer','key','every','modal','var(--okdb-app-fg-muted)','<br>','pipelineBusy','join','length','sort','embed-worker','filter','replace','15657UPXNfa','_pipelineUrl','Search','/type/','875367xUHGsR','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:20px;\x20max-width:860px;\x22>\x0a\x0a\x20\x20<!--\x20Header\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:12px;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-weight:600;\x20font-size:18px;\x22>Embeddings\x20Overview</div>\x0a\x20\x20\x20\x20<div\x20style=\x22margin-left:auto;\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22openCreate()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20style=\x22background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2013%,\x20transparent);\x20border-color:var(--okdb-accent);\x20color:var(--okdb-accent);\x20font-weight:600;\x20padding:6px\x2016px;\x22\x0a\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20+\x20Create\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a\x0a\x20\x20<!--\x20No\x20engines\x20at\x20all\x20-->\x0a\x20\x20<if\x20:=\x22allEngines.length\x20===\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22opacity:.55;\x20font-size:14px;\x20line-height:1.8;\x22>\x0a\x20\x20\x20\x20\x20\x20No\x20engines\x20created\x20yet.<br>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Use\x20<b>+\x20Create</b>\x20to\x20set\x20up\x20a\x20pipeline\x20or\x20individual\x20engine.<br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<b>Embedder</b>\x20—\x20connection\x20to\x20an\x20ML\x20service\x20(Ollama,\x20OpenAI\x20…)<br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<b>Indexer</b>\x20—\x20watches\x20a\x20OKDB\x20type\x27s\x20change\x20log\x20and\x20creates\x20embeddings<br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<b>Worker</b>\x20—\x20queue\x20consumer\x20for\x20queue-mode\x20indexing<br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<b>Search</b>\x20—\x20nearest-neighbour\x20index\x20over\x20a\x20storage\x20key\x0a\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Pipeline\x20groups\x20-->\x0a\x20\x20<if\x20:=\x22groups.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20opacity:.45;\x20letter-spacing:.06em;\x20margin-bottom:8px;\x22>Pipelines</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:10px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22groups\x22\x20let:item=\x22g\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22\x27background:var(--okdb-app-surface);\x20border-radius:10px;\x20padding:14px\x2016px;\x20box-shadow:\x27\x20+\x20(focusPipeline\x20===\x20g.name\x20?\x20\x270\x200\x200\x202px\x20var(--okdb-accent),\x200\x200\x2012px\x20color-mix(in\x20srgb,\x20var(--okdb-accent)\x2020%,\x20transparent)\x27\x20:\x20\x270\x200\x205px\x20#ffffff1a\x27)\x20+\x20\x27;\x20transition:box-shadow\x20.3s;\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Group\x20header\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:10px;\x20margin-bottom:10px;\x22>\x0a\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:style=\x22\x27width:8px;height:8px;border-radius:50%;flex-shrink:0;background:\x27\x20+\x20healthDot(g)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22healthTitle(g)\x22\x0a\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<span\x20style=\x22font-weight:600;\x20font-size:14px;\x22>{{\x20g.name\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Vector\x20store\x20summary:\x20storage_key\x20+\x20persisted\x20count\x20from\x20indexer\x20stats\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22g.indexer?.meta?.pipeline\x22>\x0a\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\x20\x20style=\x22font-size:11px;\x20opacity:.6;\x20font-family:monospace;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22LMDB\x20vector\x20store\x20for\x20this\x20pipeline\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20~emb:vec:{{\x20g.indexer.config?.storage_key\x20??\x20g.name\x20}}\x0a\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</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Pipeline-level\x20actions\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-left:auto;\x20display:flex;\x20gap:6px;\x20align-items:center;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22[g.embedder,\x20g.indexer,\x20g.search,\x20g.worker].filter(Boolean).some(e\x20=>\x20e.isRunning)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22stopPipeline(g)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22pipelineBusy[g.name]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:3px\x2010px;\x20color:var(--okdb-warning);\x20border-color:var(--okdb-warning);\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Stop\x20all\x20engines\x20in\x20this\x20pipeline\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20pipelineBusy[g.name]\x20?\x20\x27…\x27\x20:\x20\x27⏹\x20Stop\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\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<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22deletePipeline(g)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22pipelineBusy[g.name]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:3px\x2010px;\x20color:var(--okdb-danger);\x20border-color:var(--okdb-danger);\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Stop\x20and\x20permanently\x20delete\x20all\x20engines\x20in\x20this\x20pipeline\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20pipelineBusy[g.name]\x20?\x20\x27…\x27\x20:\x20\x27✕\x20Delete\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\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</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Engine\x20rows\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:5px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22[g.embedder,\x20g.indexer,\x20g.search,\x20g.worker].filter(Boolean)\x22\x20let:item=\x22eng\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<engine-row-item\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:engine=\x22eng\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:label=\x22typeLabel[eng.type]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:label-color=\x22typeColor[eng.type]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:subtitle=\x22eng.status\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20action-label=\x22Open\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@select=\x22select($event.detail)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22eng.status\x20===\x20\x27error\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20color:var(--okdb-danger);\x20flex-shrink:0;\x22\x20:title=\x22eng.error\x20||\x20\x27error\x27\x22>⚠\x20error</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</engine-row-item>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Missing\x20role\x20indicators\x20for\x20pipeline\x20completeness\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!g.worker\x20&&\x20g.indexer?.config?.mode\x20===\x20\x27queue\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.5;\x20padding:3px\x208px;\x20color:var(--okdb-warning);\x22>⚠\x20queue\x20mode\x20—\x20no\x20worker\x20configured</div>\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<if\x20:=\x22!g.search\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.5;\x20padding:3px\x208px;\x20color:var(--okdb-warning);\x22>⚠\x20no\x20vector-search\x20engine</div>\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</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Standalone\x20engines\x20(don\x27t\x20form\x20a\x20group)\x20-->\x0a\x20\x20<if\x20:=\x22allEngines.length\x20>\x200\x20&&\x20(groups.length\x20>\x200\x20?\x20orphans.length\x20>\x200\x20:\x20true)\x22>\x0a\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20opacity:.45;\x20letter-spacing:.06em;\x20margin-bottom:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20{{\x20groups.length\x20>\x200\x20?\x20\x27Standalone\x20Engines\x27\x20:\x20\x27Engines\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22groups.length\x20>\x200\x20?\x20orphans\x20:\x20allEngines\x22\x20let:item=\x22eng\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<engine-row-item\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:engine=\x22eng\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:label=\x22typeLabel[eng.type]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:label-color=\x22typeColor[eng.type]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:subtitle=\x22eng.status\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20action-label=\x22Open\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@select=\x22select($event.detail)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22eng.status\x20===\x20\x27error\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20color:var(--okdb-danger);\x20flex-shrink:0;\x22\x20:title=\x22eng.error\x20||\x20\x27error\x27\x22>⚠\x20error</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</engine-row-item>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Summary\x20counts\x20-->\x0a\x20\x20<if\x20:=\x22allEngines.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:16px;\x20font-size:12px;\x20opacity:.5;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20<span>{{\x20allEngines.filter(e\x20=>\x20e.isRunning).length\x20}}\x20/\x20{{\x20allEngines.length\x20}}\x20running</span>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22allEngines.filter(e\x20=>\x20e.status\x20===\x20\x27error\x27).length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-danger);\x22>{{\x20allEngines.filter(e\x20=>\x20e.status\x20===\x20\x27error\x27).length\x20}}\x20error(s)</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a</div>\x0a','</b>\x22?<br><br>','error','all\x20running','set','/pipelines/','some','2542160EtZakY','171SpbAFn','DELETE','worker','show-create','add','embedder','var(--okdb-success)','vector-search','push','meta','embed-overview','pipeline','var(--okdb-accent)','Delete\x20the\x20entire\x20pipeline\x20\x22<b>','info','confirm','3106635hTWgdw','default','Pipeline\x20\x22','/env/','18332UKQnDc','API','engines','focusPipeline','$ok','storage_key','map','Stop\x20all\x20engines\x20in\x20pipeline\x20\x22','source_type','shared','_enginesOf','name','383510tiQzGo','66HPDaro','status','6599272LUSrad','search','var(--okdb-danger)','values','\x22\x20stopped','config','12EUmhqX','message','has\x20errors','indexer','created','<br><br>This\x20cannot\x20be\x20undone.','/stop','Worker','success','var(--okdb-purple)','select','isRunning','type','var(--okdb-warning)','$dispatch','pipelines','allEngines','Embedder'];_0x16d7=function(){return _0x5215d5;};return _0x16d7();}const _0x2f3408=_0x1c55;function _0x1c55(_0x58c317,_0x956c59){_0x58c317=_0x58c317-0xf1;const _0x16d726=_0x16d7();let _0x1c55b2=_0x16d726[_0x58c317];return _0x1c55b2;}(function(_0x2c83d2,_0x4a8f45){const _0x28bf90=_0x1c55,_0x269e74=_0x2c83d2();while(!![]){try{const _0x2199ac=-parseInt(_0x28bf90(0x125))/0x1*(parseInt(_0x28bf90(0xfd))/0x2)+-parseInt(_0x28bf90(0x129))/0x3+-parseInt(_0x28bf90(0x146))/0x4+parseInt(_0x28bf90(0x131))/0x5*(parseInt(_0x28bf90(0x105))/0x6)+parseInt(_0x28bf90(0x142))/0x7+-parseInt(_0x28bf90(0xff))/0x8+-parseInt(_0x28bf90(0x132))/0x9*(-parseInt(_0x28bf90(0xfc))/0xa);if(_0x2199ac===_0x4a8f45)break;else _0x269e74['push'](_0x269e74['shift']());}catch(_0x37d29b){_0x269e74['push'](_0x269e74['shift']());}}}(_0x16d7,0x869d0));import _0x4aae9c from'../../engines/parts/engine-row-item.ok.js';export default{'tag':_0x2f3408(0x13c),'dependencies':[_0x4aae9c],'attr':{'engines':{},'focusPipeline':{}},'context':_0x2a7cae=>({'pipelineBusy':{},get 'allEngines'(){const _0x323f3b=_0x2f3408;return _0x2a7cae['$attr'][_0x323f3b(0xf2)]??[];},get 'focusPipeline'(){const _0x161272=_0x2f3408;return _0x2a7cae['$attr'][_0x161272(0xf3)]??null;},get 'pipelines'(){const _0x21d827=_0x2f3408,_0xac2aac=new Map();for(const _0x3e672f of this[_0x21d827(0x115)]){const _0x3fba8d=_0x3e672f[_0x21d827(0x13b)]?.[_0x21d827(0x13d)]??_0x3e672f[_0x21d827(0xfb)][_0x21d827(0x124)](/-worker$/,'');_0xac2aac['has'](_0x3fba8d)||_0xac2aac[_0x21d827(0x12e)](_0x3fba8d,{'name':_0x3fba8d,'embedder':null,'indexer':null,'search':null,'worker':null});const _0x3e0795=_0xac2aac['get'](_0x3fba8d);_0x21d827(0x137)===_0x3e672f['type']?_0x3e0795[_0x21d827(0x137)]=_0x3e672f:'indexer'===_0x3e672f[_0x21d827(0x111)]?_0x3e0795['indexer']=_0x3e672f:_0x21d827(0x139)===_0x3e672f[_0x21d827(0x111)]?_0x3e0795[_0x21d827(0x100)]=_0x3e672f:_0x21d827(0x122)===_0x3e672f[_0x21d827(0x111)]&&(_0x3e0795['worker']=_0x3e672f);}return[..._0xac2aac[_0x21d827(0x102)]()][_0x21d827(0x121)]((_0x1b7151,_0x5b5144)=>_0x1b7151['name']['localeCompare'](_0x5b5144['name']));},get 'orphans'(){const _0x5e40d5=_0x2f3408,_0x1138c8=new Set();for(const _0x1221ef of this['pipelines'])for(const _0x5d89a3 of[_0x1221ef['embedder'],_0x1221ef[_0x5e40d5(0x108)],_0x1221ef[_0x5e40d5(0x100)],_0x1221ef['worker']])_0x5d89a3&&_0x1138c8[_0x5e40d5(0x136)](_0x5d89a3[_0x5e40d5(0x119)]);const _0x2a21cd=this['pipelines'][_0x5e40d5(0x123)](_0x2c045f=>0x1===[_0x2c045f[_0x5e40d5(0x137)],_0x2c045f[_0x5e40d5(0x108)],_0x2c045f[_0x5e40d5(0x100)],_0x2c045f[_0x5e40d5(0x134)]]['filter'](Boolean)[_0x5e40d5(0x120)]),_0x4e1ca1=[];for(const _0x188839 of _0x2a21cd){const _0x454631=_0x188839[_0x5e40d5(0x137)]??_0x188839['indexer']??_0x188839[_0x5e40d5(0x100)]??_0x188839['worker'];_0x454631&&_0x4e1ca1[_0x5e40d5(0x13a)](_0x454631);}return _0x4e1ca1;},get 'groups'(){const _0x41515d=_0x2f3408;return this[_0x41515d(0x114)]['filter'](_0xe526e=>[_0xe526e['embedder'],_0xe526e[_0x41515d(0x108)],_0xe526e[_0x41515d(0x100)],_0xe526e[_0x41515d(0x134)]][_0x41515d(0x123)](Boolean)[_0x41515d(0x120)]>0x1);},'healthDot'(_0x28e994){const _0x32ed21=_0x2f3408,_0x178160=[_0x28e994[_0x32ed21(0x137)],_0x28e994['indexer'],_0x28e994['search'],_0x28e994[_0x32ed21(0x134)]]['filter'](Boolean);return _0x178160[_0x32ed21(0x11a)](_0x1f15da=>_0x1f15da[_0x32ed21(0x110)])?_0x32ed21(0x138):_0x178160[_0x32ed21(0x130)](_0x76caaa=>_0x32ed21(0x12c)===_0x76caaa[_0x32ed21(0xfe)])?_0x32ed21(0x101):_0x32ed21(0x112);},'healthTitle'(_0x1f4fb9){const _0x1c3392=_0x2f3408,_0x56516a=[_0x1f4fb9[_0x1c3392(0x137)],_0x1f4fb9[_0x1c3392(0x108)],_0x1f4fb9[_0x1c3392(0x100)],_0x1f4fb9[_0x1c3392(0x134)]][_0x1c3392(0x123)](Boolean);return _0x56516a[_0x1c3392(0x11a)](_0x2fd9a3=>_0x2fd9a3[_0x1c3392(0x110)])?_0x1c3392(0x12d):_0x56516a[_0x1c3392(0x130)](_0x2d4613=>_0x1c3392(0x12c)===_0x2d4613[_0x1c3392(0xfe)])?_0x1c3392(0x107):'partially\x20running';},'typeColor':{'embedder':'var(--okdb-info)','indexer':_0x2f3408(0x10e),'vector-search':_0x2f3408(0x13e),'embed-worker':'var(--okdb-warning)'},'typeLabel':{'embedder':_0x2f3408(0x116),'indexer':_0x2f3408(0x118),'vector-search':_0x2f3408(0x127),'embed-worker':_0x2f3408(0x10c)},'statusDot':_0x495996=>_0x495996['isRunning']?'var(--okdb-success)':'error'===_0x495996['status']?'var(--okdb-danger)':_0x2f3408(0x11c),'select'(_0x282965){const _0x170c39=_0x2f3408;_0x2a7cae['$dispatch'](_0x170c39(0x10f),_0x282965);},'openCreate'(){const _0x1c1dea=_0x2f3408;_0x2a7cae[_0x1c1dea(0x113)](_0x1c1dea(0x135),null);},'_enginesOf':_0x341a3b=>[_0x341a3b[_0x2f3408(0x137)],_0x341a3b['indexer'],_0x341a3b[_0x2f3408(0x100)],_0x341a3b[_0x2f3408(0x134)]][_0x2f3408(0x123)](Boolean),'_pipelineUrl'(_0x36c436){const _0x43be15=_0x2f3408,_0x33a979=_0x36c436[_0x43be15(0x108)]??_0x36c436[_0x43be15(0x100)]??_0x36c436['worker'];if(!_0x33a979)return null;const _0x540b4a=_0x33a979[_0x43be15(0x104)]??{},_0x3331d1=encodeURIComponent(_0x540b4a['source_env']??_0x43be15(0x143)),_0x1b9e89=encodeURIComponent(_0x540b4a[_0x43be15(0xf8)]??''),_0x232679=encodeURIComponent(_0x540b4a[_0x43be15(0xf5)]??_0x36c436[_0x43be15(0xfb)]);return __ENV__[_0x43be15(0xf1)]+_0x43be15(0x145)+_0x3331d1+_0x43be15(0x128)+_0x1b9e89+_0x43be15(0x12f)+_0x232679;},async 'stopPipeline'(_0x53e06b){const _0x394b5e=_0x2f3408;if(await _0x2a7cae[_0x394b5e(0xf4)]['shared']['modal'][_0x394b5e(0x141)](_0x394b5e(0xf7)+_0x53e06b[_0x394b5e(0xfb)]+'\x22?')){this[_0x394b5e(0x11e)]={...this[_0x394b5e(0x11e)],[_0x53e06b[_0x394b5e(0xfb)]]:!0x0};try{const _0x4846cc=this[_0x394b5e(0x126)](_0x53e06b);_0x4846cc&&await fetch(_0x4846cc+_0x394b5e(0x10b),{'method':'POST'}),_0x2a7cae[_0x394b5e(0xf4)][_0x394b5e(0xf9)]?.[_0x394b5e(0x117)]?.[_0x394b5e(0x140)]?.(_0x394b5e(0x144)+_0x53e06b[_0x394b5e(0xfb)]+_0x394b5e(0x103)),_0x2a7cae['$dispatch'](_0x394b5e(0x109),null);}catch(_0x4c7b1c){_0x2a7cae['$ok'][_0x394b5e(0xf9)]?.['toast']?.[_0x394b5e(0x12c)]?.(_0x4c7b1c?.[_0x394b5e(0x106)]||'Stop\x20failed');}finally{this['pipelineBusy']={...this[_0x394b5e(0x11e)],[_0x53e06b['name']]:!0x1};}}},async 'deletePipeline'(_0x163ae9){const _0xc08691=_0x2f3408,_0x13fbd6=this[_0xc08691(0xfa)](_0x163ae9)[_0xc08691(0xf6)](_0x1d5e78=>'•\x20'+_0x1d5e78[_0xc08691(0x111)]+':\x20'+_0x1d5e78[_0xc08691(0xfb)])[_0xc08691(0x11f)](_0xc08691(0x11d));if(await _0x2a7cae['$ok'][_0xc08691(0xf9)][_0xc08691(0x11b)]['confirm'](_0xc08691(0x13f)+_0x163ae9[_0xc08691(0xfb)]+_0xc08691(0x12b)+_0x13fbd6+_0xc08691(0x10a))){this['pipelineBusy']={...this['pipelineBusy'],[_0x163ae9[_0xc08691(0xfb)]]:!0x0};try{const _0x543cac=this['_pipelineUrl'](_0x163ae9);_0x543cac&&await fetch(_0x543cac,{'method':_0xc08691(0x133)}),_0x2a7cae[_0xc08691(0xf4)][_0xc08691(0xf9)]?.[_0xc08691(0x117)]?.[_0xc08691(0x10d)]?.(_0xc08691(0x144)+_0x163ae9[_0xc08691(0xfb)]+'\x22\x20deleted'),_0x2a7cae[_0xc08691(0x113)](_0xc08691(0x109),null);}catch(_0x5d1983){_0x2a7cae[_0xc08691(0xf4)][_0xc08691(0xf9)]?.[_0xc08691(0x117)]?.[_0xc08691(0x12c)]?.(_0x5d1983?.[_0xc08691(0x106)]||'Delete\x20failed');}finally{this[_0xc08691(0x11e)]={...this[_0xc08691(0x11e)],[_0x163ae9[_0xc08691(0xfb)]]:!0x1};}}}}),'template':_0x2f3408(0x12a),'style':''};
1
+ function _0x4142(){const _0x245c56=['pipelines','Pipeline\x20\x22','status','toast','Search','partially\x20running','push','/stop','every','replace','join','name','allEngines','15210210jrLvbC','default','4825772oIKvIE','var(--okdb-info)','length','embed-overview','add','DELETE','/pipelines/','embedder','isRunning','10204136deMgwT','shared','get','meta','created','type','some','var(--okdb-danger)','3RXfHaj','message','_pipelineUrl','$ok','Delete\x20failed','select','Indexer','var(--okdb-success)','search','pipelineBusy','info','pipeline','<br>','confirm','\x22\x20deleted','worker','focusPipeline','config','3ewgXMX','Stop\x20failed','error','POST','indexer','has\x20errors','</b>\x22?<br><br>','4945944mHvBdc','success','9FPtSAr','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:20px;\x20max-width:860px;\x22>\x0a\x0a\x20\x20<!--\x20Header\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:12px;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-weight:600;\x20font-size:18px;\x22>Embeddings\x20Overview</div>\x0a\x20\x20\x20\x20<div\x20style=\x22margin-left:auto;\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22openCreate()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20style=\x22background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2013%,\x20transparent);\x20border-color:var(--okdb-accent);\x20color:var(--okdb-accent);\x20font-weight:600;\x20padding:6px\x2016px;\x22\x0a\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20+\x20Create\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a\x0a\x20\x20<!--\x20No\x20engines\x20at\x20all\x20-->\x0a\x20\x20<if\x20:=\x22allEngines.length\x20===\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22opacity:.55;\x20font-size:14px;\x20line-height:1.8;\x22>\x0a\x20\x20\x20\x20\x20\x20No\x20engines\x20created\x20yet.<br>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Use\x20<b>+\x20Create</b>\x20to\x20set\x20up\x20a\x20pipeline\x20or\x20individual\x20engine.<br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<b>Embedder</b>\x20—\x20connection\x20to\x20an\x20ML\x20service\x20(Ollama,\x20OpenAI\x20…)<br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<b>Indexer</b>\x20—\x20watches\x20a\x20OKDB\x20type\x27s\x20change\x20log\x20and\x20creates\x20embeddings<br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<b>Worker</b>\x20—\x20queue\x20consumer\x20for\x20queue-mode\x20indexing<br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<b>Search</b>\x20—\x20nearest-neighbour\x20index\x20over\x20a\x20storage\x20key\x0a\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Pipeline\x20groups\x20-->\x0a\x20\x20<if\x20:=\x22groups.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20opacity:.45;\x20letter-spacing:.06em;\x20margin-bottom:8px;\x22>Pipelines</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:10px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22groups\x22\x20let:item=\x22g\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22\x27background:var(--okdb-app-surface);\x20border-radius:10px;\x20padding:14px\x2016px;\x20box-shadow:\x27\x20+\x20(focusPipeline\x20===\x20g.name\x20?\x20\x270\x200\x200\x202px\x20var(--okdb-accent),\x200\x200\x2012px\x20color-mix(in\x20srgb,\x20var(--okdb-accent)\x2020%,\x20transparent)\x27\x20:\x20\x270\x200\x205px\x20#ffffff1a\x27)\x20+\x20\x27;\x20transition:box-shadow\x20.3s;\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Group\x20header\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:10px;\x20margin-bottom:10px;\x22>\x0a\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:style=\x22\x27width:8px;height:8px;border-radius:50%;flex-shrink:0;background:\x27\x20+\x20healthDot(g)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22healthTitle(g)\x22\x0a\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<span\x20style=\x22font-weight:600;\x20font-size:14px;\x22>{{\x20g.name\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Vector\x20store\x20summary:\x20storage_key\x20+\x20persisted\x20count\x20from\x20indexer\x20stats\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22g.indexer?.meta?.pipeline\x22>\x0a\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\x20\x20style=\x22font-size:11px;\x20opacity:.6;\x20font-family:monospace;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22LMDB\x20vector\x20store\x20for\x20this\x20pipeline\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20~emb:vec:{{\x20g.indexer.config?.storage_key\x20??\x20g.name\x20}}\x0a\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</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Pipeline-level\x20actions\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-left:auto;\x20display:flex;\x20gap:6px;\x20align-items:center;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22[g.embedder,\x20g.indexer,\x20g.search,\x20g.worker].filter(Boolean).some(e\x20=>\x20e.isRunning)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22stopPipeline(g)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22pipelineBusy[g.name]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:3px\x2010px;\x20color:var(--okdb-warning);\x20border-color:var(--okdb-warning);\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Stop\x20all\x20engines\x20in\x20this\x20pipeline\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20pipelineBusy[g.name]\x20?\x20\x27…\x27\x20:\x20\x27⏹\x20Stop\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\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<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22deletePipeline(g)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22pipelineBusy[g.name]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:3px\x2010px;\x20color:var(--okdb-danger);\x20border-color:var(--okdb-danger);\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Stop\x20and\x20permanently\x20delete\x20all\x20engines\x20in\x20this\x20pipeline\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20pipelineBusy[g.name]\x20?\x20\x27…\x27\x20:\x20\x27✕\x20Delete\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\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</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Engine\x20rows\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:5px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22[g.embedder,\x20g.indexer,\x20g.search,\x20g.worker].filter(Boolean)\x22\x20let:item=\x22eng\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<engine-row-item\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:engine=\x22eng\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:label=\x22typeLabel[eng.type]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:label-color=\x22typeColor[eng.type]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:subtitle=\x22eng.status\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20action-label=\x22Open\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@select=\x22select($event.detail)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22eng.status\x20===\x20\x27error\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20color:var(--okdb-danger);\x20flex-shrink:0;\x22\x20:title=\x22eng.error\x20||\x20\x27error\x27\x22>⚠\x20error</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</engine-row-item>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Missing\x20role\x20indicators\x20for\x20pipeline\x20completeness\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!g.worker\x20&&\x20g.indexer?.config?.mode\x20===\x20\x27queue\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.5;\x20padding:3px\x208px;\x20color:var(--okdb-warning);\x22>⚠\x20queue\x20mode\x20—\x20no\x20worker\x20configured</div>\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<if\x20:=\x22!g.search\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.5;\x20padding:3px\x208px;\x20color:var(--okdb-warning);\x22>⚠\x20no\x20vector-search\x20engine</div>\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</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Standalone\x20engines\x20(don\x27t\x20form\x20a\x20group)\x20-->\x0a\x20\x20<if\x20:=\x22allEngines.length\x20>\x200\x20&&\x20(groups.length\x20>\x200\x20?\x20orphans.length\x20>\x200\x20:\x20true)\x22>\x0a\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20opacity:.45;\x20letter-spacing:.06em;\x20margin-bottom:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20{{\x20groups.length\x20>\x200\x20?\x20\x27Standalone\x20Engines\x27\x20:\x20\x27Engines\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22groups.length\x20>\x200\x20?\x20orphans\x20:\x20allEngines\x22\x20let:item=\x22eng\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<engine-row-item\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:engine=\x22eng\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:label=\x22typeLabel[eng.type]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:label-color=\x22typeColor[eng.type]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:subtitle=\x22eng.status\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20action-label=\x22Open\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@select=\x22select($event.detail)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22eng.status\x20===\x20\x27error\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20color:var(--okdb-danger);\x20flex-shrink:0;\x22\x20:title=\x22eng.error\x20||\x20\x27error\x27\x22>⚠\x20error</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</engine-row-item>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Summary\x20counts\x20-->\x0a\x20\x20<if\x20:=\x22allEngines.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:16px;\x20font-size:12px;\x20opacity:.5;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20<span>{{\x20allEngines.filter(e\x20=>\x20e.isRunning).length\x20}}\x20/\x20{{\x20allEngines.length\x20}}\x20running</span>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22allEngines.filter(e\x20=>\x20e.status\x20===\x20\x27error\x27).length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-danger);\x22>{{\x20allEngines.filter(e\x20=>\x20e.status\x20===\x20\x27error\x27).length\x20}}\x20error(s)</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a</div>\x0a','var(--okdb-warning)','/env/','3532774dhiwRD','show-create','filter','$dispatch','modal','localeCompare','771384lNXcBa','sort','embed-worker','storage_key','vector-search','493775RJcnhC','source_type'];_0x4142=function(){return _0x245c56;};return _0x4142();}function _0x2e71(_0x1403df,_0x2ad909){_0x1403df=_0x1403df-0x1b9;const _0x41425b=_0x4142();let _0x2e71a4=_0x41425b[_0x1403df];return _0x2e71a4;}const _0x89536a=_0x2e71;(function(_0x350d14,_0x449a44){const _0x290e56=_0x2e71,_0x582ed2=_0x350d14();while(!![]){try{const _0x1612c8=-parseInt(_0x290e56(0x1be))/0x1*(parseInt(_0x290e56(0x1d1))/0x2)+-parseInt(_0x290e56(0x1f8))/0x3*(-parseInt(_0x290e56(0x1e7))/0x4)+parseInt(_0x290e56(0x1d6))/0x5+parseInt(_0x290e56(0x1c5))/0x6+-parseInt(_0x290e56(0x1cb))/0x7+-parseInt(_0x290e56(0x1f0))/0x8*(parseInt(_0x290e56(0x1c7))/0x9)+parseInt(_0x290e56(0x1e5))/0xa;if(_0x1612c8===_0x449a44)break;else _0x582ed2['push'](_0x582ed2['shift']());}catch(_0x1f5409){_0x582ed2['push'](_0x582ed2['shift']());}}}(_0x4142,0xae234));import _0x2547a9 from'../../engines/parts/engine-row-item.ok.js';export default{'tag':_0x89536a(0x1ea),'dependencies':[_0x2547a9],'attr':{'engines':{},'focusPipeline':{}},'context':_0x14ba04=>({'pipelineBusy':{},get 'allEngines'(){return _0x14ba04['$attr']['engines']??[];},get 'focusPipeline'(){const _0x5b2e27=_0x89536a;return _0x14ba04['$attr'][_0x5b2e27(0x1bc)]??null;},get 'pipelines'(){const _0x579862=_0x89536a,_0x167576=new Map();for(const _0x267adf of this[_0x579862(0x1e4)]){const _0x443a72=_0x267adf[_0x579862(0x1f3)]?.[_0x579862(0x203)]??_0x267adf[_0x579862(0x1e3)][_0x579862(0x1e1)](/-worker$/,'');_0x167576['has'](_0x443a72)||_0x167576['set'](_0x443a72,{'name':_0x443a72,'embedder':null,'indexer':null,'search':null,'worker':null});const _0x12c703=_0x167576[_0x579862(0x1f2)](_0x443a72);_0x579862(0x1ee)===_0x267adf[_0x579862(0x1f5)]?_0x12c703[_0x579862(0x1ee)]=_0x267adf:_0x579862(0x1c2)===_0x267adf[_0x579862(0x1f5)]?_0x12c703[_0x579862(0x1c2)]=_0x267adf:_0x579862(0x1d5)===_0x267adf['type']?_0x12c703[_0x579862(0x200)]=_0x267adf:_0x579862(0x1d3)===_0x267adf[_0x579862(0x1f5)]&&(_0x12c703['worker']=_0x267adf);}return[..._0x167576['values']()][_0x579862(0x1d2)]((_0xd42195,_0xf7589c)=>_0xd42195['name'][_0x579862(0x1d0)](_0xf7589c[_0x579862(0x1e3)]));},get 'orphans'(){const _0x442070=_0x89536a,_0x52a1c1=new Set();for(const _0x1d5141 of this[_0x442070(0x1d8)])for(const _0xff5d1f of[_0x1d5141['embedder'],_0x1d5141[_0x442070(0x1c2)],_0x1d5141[_0x442070(0x200)],_0x1d5141[_0x442070(0x1bb)]])_0xff5d1f&&_0x52a1c1[_0x442070(0x1eb)](_0xff5d1f['key']);const _0x1616ca=this['pipelines'][_0x442070(0x1cd)](_0x5954ba=>0x1===[_0x5954ba[_0x442070(0x1ee)],_0x5954ba[_0x442070(0x1c2)],_0x5954ba[_0x442070(0x200)],_0x5954ba[_0x442070(0x1bb)]]['filter'](Boolean)[_0x442070(0x1e9)]),_0x2ef7ac=[];for(const _0x3a82cd of _0x1616ca){const _0x45cdb9=_0x3a82cd['embedder']??_0x3a82cd[_0x442070(0x1c2)]??_0x3a82cd['search']??_0x3a82cd[_0x442070(0x1bb)];_0x45cdb9&&_0x2ef7ac[_0x442070(0x1de)](_0x45cdb9);}return _0x2ef7ac;},get 'groups'(){const _0x16d9f1=_0x89536a;return this[_0x16d9f1(0x1d8)][_0x16d9f1(0x1cd)](_0xef8ad8=>[_0xef8ad8['embedder'],_0xef8ad8[_0x16d9f1(0x1c2)],_0xef8ad8[_0x16d9f1(0x200)],_0xef8ad8[_0x16d9f1(0x1bb)]][_0x16d9f1(0x1cd)](Boolean)['length']>0x1);},'healthDot'(_0x5db5f2){const _0x39825e=_0x89536a,_0x571690=[_0x5db5f2[_0x39825e(0x1ee)],_0x5db5f2[_0x39825e(0x1c2)],_0x5db5f2[_0x39825e(0x200)],_0x5db5f2['worker']][_0x39825e(0x1cd)](Boolean);return _0x571690[_0x39825e(0x1e0)](_0x378f98=>_0x378f98[_0x39825e(0x1ef)])?_0x39825e(0x1ff):_0x571690[_0x39825e(0x1f6)](_0x4934fa=>_0x39825e(0x1c0)===_0x4934fa[_0x39825e(0x1da)])?_0x39825e(0x1f7):_0x39825e(0x1c9);},'healthTitle'(_0x168460){const _0x21cf38=_0x89536a,_0x5f2d6d=[_0x168460['embedder'],_0x168460[_0x21cf38(0x1c2)],_0x168460[_0x21cf38(0x200)],_0x168460['worker']]['filter'](Boolean);return _0x5f2d6d['every'](_0x4b75bb=>_0x4b75bb[_0x21cf38(0x1ef)])?'all\x20running':_0x5f2d6d[_0x21cf38(0x1f6)](_0x59be28=>_0x21cf38(0x1c0)===_0x59be28[_0x21cf38(0x1da)])?_0x21cf38(0x1c3):_0x21cf38(0x1dd);},'typeColor':{'embedder':_0x89536a(0x1e8),'indexer':'var(--okdb-purple)','vector-search':'var(--okdb-accent)','embed-worker':'var(--okdb-warning)'},'typeLabel':{'embedder':'Embedder','indexer':_0x89536a(0x1fe),'vector-search':_0x89536a(0x1dc),'embed-worker':'Worker'},'statusDot':_0xa4fbe2=>_0xa4fbe2[_0x89536a(0x1ef)]?'var(--okdb-success)':'error'===_0xa4fbe2[_0x89536a(0x1da)]?_0x89536a(0x1f7):'var(--okdb-app-fg-muted)','select'(_0x2fd0f4){const _0x249943=_0x89536a;_0x14ba04[_0x249943(0x1ce)](_0x249943(0x1fd),_0x2fd0f4);},'openCreate'(){const _0x59c97a=_0x89536a;_0x14ba04[_0x59c97a(0x1ce)](_0x59c97a(0x1cc),null);},'_enginesOf':_0x535d14=>[_0x535d14['embedder'],_0x535d14[_0x89536a(0x1c2)],_0x535d14[_0x89536a(0x200)],_0x535d14['worker']][_0x89536a(0x1cd)](Boolean),'_pipelineUrl'(_0x16a55f){const _0x33aa67=_0x89536a,_0x18c56f=_0x16a55f[_0x33aa67(0x1c2)]??_0x16a55f[_0x33aa67(0x200)]??_0x16a55f[_0x33aa67(0x1bb)];if(!_0x18c56f)return null;const _0x2b5d37=_0x18c56f[_0x33aa67(0x1bd)]??{},_0xa6c386=encodeURIComponent(_0x2b5d37['source_env']??_0x33aa67(0x1e6)),_0x2693f6=encodeURIComponent(_0x2b5d37[_0x33aa67(0x1d7)]??''),_0x36a00b=encodeURIComponent(_0x2b5d37[_0x33aa67(0x1d4)]??_0x16a55f[_0x33aa67(0x1e3)]);return __ENV__['API']+_0x33aa67(0x1ca)+_0xa6c386+'/type/'+_0x2693f6+_0x33aa67(0x1ed)+_0x36a00b;},async 'stopPipeline'(_0x392670){const _0x634688=_0x89536a;if(await _0x14ba04[_0x634688(0x1fb)][_0x634688(0x1f1)][_0x634688(0x1cf)][_0x634688(0x1b9)]('Stop\x20all\x20engines\x20in\x20pipeline\x20\x22'+_0x392670[_0x634688(0x1e3)]+'\x22?')){this[_0x634688(0x201)]={...this[_0x634688(0x201)],[_0x392670[_0x634688(0x1e3)]]:!0x0};try{const _0x31431d=this[_0x634688(0x1fa)](_0x392670);_0x31431d&&await fetch(_0x31431d+_0x634688(0x1df),{'method':_0x634688(0x1c1)}),_0x14ba04[_0x634688(0x1fb)][_0x634688(0x1f1)]?.[_0x634688(0x1db)]?.[_0x634688(0x202)]?.(_0x634688(0x1d9)+_0x392670[_0x634688(0x1e3)]+'\x22\x20stopped'),_0x14ba04[_0x634688(0x1ce)](_0x634688(0x1f4),null);}catch(_0x48beb6){_0x14ba04['$ok'][_0x634688(0x1f1)]?.['toast']?.['error']?.(_0x48beb6?.[_0x634688(0x1f9)]||_0x634688(0x1bf));}finally{this['pipelineBusy']={...this['pipelineBusy'],[_0x392670[_0x634688(0x1e3)]]:!0x1};}}},async 'deletePipeline'(_0x4cc3bb){const _0x2835e7=_0x89536a,_0x4e94a5=this['_enginesOf'](_0x4cc3bb)['map'](_0x2d6f65=>'•\x20'+_0x2d6f65[_0x2835e7(0x1f5)]+':\x20'+_0x2d6f65[_0x2835e7(0x1e3)])[_0x2835e7(0x1e2)](_0x2835e7(0x204));if(await _0x14ba04[_0x2835e7(0x1fb)][_0x2835e7(0x1f1)][_0x2835e7(0x1cf)]['confirm']('Delete\x20the\x20entire\x20pipeline\x20\x22<b>'+_0x4cc3bb['name']+_0x2835e7(0x1c4)+_0x4e94a5+'<br><br>This\x20cannot\x20be\x20undone.')){this[_0x2835e7(0x201)]={...this['pipelineBusy'],[_0x4cc3bb[_0x2835e7(0x1e3)]]:!0x0};try{const _0x36fa9f=this[_0x2835e7(0x1fa)](_0x4cc3bb);_0x36fa9f&&await fetch(_0x36fa9f,{'method':_0x2835e7(0x1ec)}),_0x14ba04[_0x2835e7(0x1fb)][_0x2835e7(0x1f1)]?.[_0x2835e7(0x1db)]?.[_0x2835e7(0x1c6)]?.(_0x2835e7(0x1d9)+_0x4cc3bb[_0x2835e7(0x1e3)]+_0x2835e7(0x1ba)),_0x14ba04['$dispatch'](_0x2835e7(0x1f4),null);}catch(_0x54ad27){_0x14ba04[_0x2835e7(0x1fb)][_0x2835e7(0x1f1)]?.[_0x2835e7(0x1db)]?.['error']?.(_0x54ad27?.['message']||_0x2835e7(0x1fc));}finally{this[_0x2835e7(0x201)]={...this['pipelineBusy'],[_0x4cc3bb['name']]:!0x1};}}}}),'template':_0x89536a(0x1c8),'style':''};