@kedem/okdb 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/bin/okdb.js +1 -1
  2. package/keys/public.pem +3 -0
  3. package/okdb.js +1 -1
  4. package/package.json +2 -2
  5. package/public/admin-app.js +1 -1
  6. package/public/components/admin-route-host.ok.js +1 -1
  7. package/public/components/env-picker.ok.js +1 -1
  8. package/public/components/field-path-input.ok.js +1 -1
  9. package/public/components/geo-map.ok.js +1 -1
  10. package/public/components/ok-cron-input.ok.js +1 -1
  11. package/public/components/ok-dropzone.ok.js +1 -1
  12. package/public/components/ok-js-input.ok.js +1 -1
  13. package/public/components/ok-json-input.ok.js +1 -1
  14. package/public/components/ok-text-monaco-input.ok.js +1 -1
  15. package/public/components/theme-toggle.ok.js +1 -1
  16. package/public/login-app.js +1 -1
  17. package/public/modules/ok.js +1 -1
  18. package/public/sections/api/parts/api-endpoint.ok.js +1 -1
  19. package/public/sections/auth/modals/create-token-modal.ok.js +1 -1
  20. package/public/sections/auth/modals/edit-token-modal.ok.js +1 -1
  21. package/public/sections/auth/modals/perm-info-popover.ok.js +1 -1
  22. package/public/sections/auth/parts/token-detail.ok.js +1 -1
  23. package/public/sections/auth/parts/token-list.ok.js +1 -1
  24. package/public/sections/db/modals/add-item-modal.ok.js +1 -1
  25. package/public/sections/db/modals/create-env-modal.ok.js +1 -1
  26. package/public/sections/db/modals/create-fts-modal.ok.js +1 -1
  27. package/public/sections/db/modals/create-index-modal.ok.js +1 -1
  28. package/public/sections/db/modals/create-pipeline-modal.ok.js +1 -1
  29. package/public/sections/db/modals/demo-env-modal.ok.js +1 -1
  30. package/public/sections/db/modals/remove-env-modal.ok.js +1 -1
  31. package/public/sections/db/modals/schema-edit-modal.ok.js +1 -1
  32. package/public/sections/db/parts/db-overview.ok.js +1 -1
  33. package/public/sections/db/parts/db-pipelines-panel.ok.js +1 -1
  34. package/public/sections/db/parts/edit-row.ok.js +1 -1
  35. package/public/sections/db/parts/tm-timeline.ok.js +1 -1
  36. package/public/sections/db/parts/type-changelog.ok.js +1 -1
  37. package/public/sections/db/parts/type-list.ok.js +1 -1
  38. package/public/sections/db/parts/type-pipelines-tab.ok.js +1 -1
  39. package/public/sections/db/parts/type-schema-tab.ok.js +1 -1
  40. package/public/sections/db/parts/type-viewer.ok.js +1 -1
  41. package/public/sections/db/parts/type-violations-tab.ok.js +1 -1
  42. package/public/sections/embeddings/modals/register-model-modal.ok.js +1 -1
  43. package/public/sections/embeddings/parts/embed-create-panel.ok.js +1 -1
  44. package/public/sections/embeddings/parts/embed-embedder-panel.ok.js +1 -1
  45. package/public/sections/embeddings/parts/embed-engine-declaration-editor.ok.js +1 -1
  46. package/public/sections/embeddings/parts/embed-engine-list.ok.js +1 -1
  47. package/public/sections/embeddings/parts/embed-indexer-panel.ok.js +1 -1
  48. package/public/sections/embeddings/parts/embed-lifecycle-bar.ok.js +1 -1
  49. package/public/sections/embeddings/parts/embed-model-catalog.ok.js +1 -1
  50. package/public/sections/embeddings/parts/embed-overview.ok.js +1 -1
  51. package/public/sections/embeddings/parts/embed-search-panel.ok.js +1 -1
  52. package/public/sections/embeddings/parts/embed-worker-panel.ok.js +1 -1
  53. package/public/sections/embeddings/parts/embeddings-engine-panel.ok.js +1 -1
  54. package/public/sections/embeddings/parts/engines-overview.ok.js +1 -1
  55. package/public/sections/embeddings/parts/pipeline-create-panel.ok.js +1 -1
  56. package/public/sections/engines/engine-panel-shared-style.js +1 -1
  57. package/public/sections/engines/engine-ui-utils.js +1 -1
  58. package/public/sections/engines/modals/engine-modal.ok.js +1 -1
  59. package/public/sections/engines/parts/engine-declaration-editor.ok.js +1 -1
  60. package/public/sections/engines/parts/engine-lifecycle-actions.ok.js +1 -1
  61. package/public/sections/engines/parts/engine-panel-shell.ok.js +1 -1
  62. package/public/sections/engines/parts/engine-resource-card.ok.js +1 -1
  63. package/public/sections/engines/parts/engine-row-item.ok.js +1 -1
  64. package/public/sections/engines/parts/generic-engine-panel.ok.js +1 -1
  65. package/public/sections/files/parts/files-blob-status.ok.js +1 -1
  66. package/public/sections/files/parts/files-collection-list.ok.js +1 -1
  67. package/public/sections/files/parts/files-collection-panel.ok.js +1 -1
  68. package/public/sections/files/parts/files-file-list.ok.js +1 -1
  69. package/public/sections/files/parts/files-overview.ok.js +1 -1
  70. package/public/sections/files/parts/files-path-browser.ok.js +1 -1
  71. package/public/sections/files/parts/files-upload-panel.ok.js +1 -1
  72. package/public/sections/functions/modals/function-modal.ok.js +1 -1
  73. package/public/sections/functions/parts/function-detail.ok.js +1 -1
  74. package/public/sections/functions/parts/function-logs.ok.js +1 -1
  75. package/public/sections/functions/parts/function-runner.ok.js +1 -1
  76. package/public/sections/functions/parts/functions-list.ok.js +1 -1
  77. package/public/sections/license/parts/license-panel.ok.js +1 -1
  78. package/public/sections/queue/modals/create-bucket-modal.ok.js +1 -1
  79. package/public/sections/queue/modals/edit-bucket-modal.ok.js +1 -1
  80. package/public/sections/queue/modals/edit-job-modal.ok.js +1 -1
  81. package/public/sections/queue/modals/enqueue-job-modal.ok.js +1 -1
  82. package/public/sections/queue/modals/job-type-modal.ok.js +1 -1
  83. package/public/sections/queue/parts/ok-job-form.ok.js +1 -1
  84. package/public/sections/queue/parts/queue-buckets.ok.js +1 -1
  85. package/public/sections/queue/parts/queue-job-types.ok.js +1 -1
  86. package/public/sections/queue/parts/queue-jobs.ok.js +1 -1
  87. package/public/sections/queue/parts/queue-types.ok.js +1 -1
  88. package/public/sections/queue/parts/queue-workers.ok.js +1 -1
  89. package/public/sections/sync/parts/sync-node-detail.ok.js +1 -1
  90. package/public/sections/sync/parts/sync-retention.ok.js +1 -1
  91. package/public/sections/sync/parts/sync-topology.ok.js +1 -1
  92. package/public/sections/system/modals/data-ops-modal.ok.js +1 -1
  93. package/public/sections/system/parts/system-api-panel.ok.js +1 -1
  94. package/public/sections/system/parts/system-auth-panel.ok.js +1 -1
  95. package/public/sections/system/parts/system-log-history.ok.js +1 -1
  96. package/public/sections/system/parts/system-log.ok.js +1 -1
  97. package/public/sections/system/parts/system-status.ok.js +1 -1
  98. package/public/sections/system/parts/system-sync-panel.ok.js +1 -1
  99. package/public/sections/views/modals/create-view-modal.ok.js +1 -1
  100. package/public/sections/views/parts/view-detail.ok.js +1 -1
  101. package/public/sections/views/parts/views-list.ok.js +1 -1
  102. package/public/sections/views/parts/views-overview.ok.js +1 -1
  103. package/public/setup-app.js +1 -1
  104. package/public/stores/auth-store.js +1 -1
  105. package/public/stores/events-store.js +1 -1
  106. package/public/stores/functions-store.js +1 -1
  107. package/public/stores/okdb-store.js +1 -1
  108. package/public/stores/theme-store.js +1 -1
  109. package/public/util/permissions.js +1 -1
  110. package/public/util/sift-schema.js +1 -1
  111. package/public/vendor/okjs/ok.esm.min.js +1 -2
  112. package/public/vendor/okjs/toolkit/behavior/async.ok.js +1 -1
  113. package/public/vendor/okjs/toolkit/components/ok-chart.ok.js +1 -1
  114. package/public/vendor/okjs/toolkit/components/ok-doc-viewer.ok.js +1 -1
  115. package/public/vendor/okjs/toolkit/components/ok-marked.ok.js +1 -1
  116. package/public/vendor/okjs/toolkit/components/ok-monaco.ok.js +1 -1
  117. package/public/vendor/okjs/toolkit/core/ok-layer-service.ok.js +1 -1
  118. package/public/vendor/okjs/toolkit/core/ok-layer.ok.js +1 -1
  119. package/public/vendor/okjs/toolkit/core/ok-overlay.ok.js +1 -1
  120. package/public/vendor/okjs/toolkit/core/ok-sandbox.ok.js +1 -1
  121. package/public/vendor/okjs/toolkit/core/transition.ok.js +1 -1
  122. package/public/vendor/okjs/toolkit/core/virtualized.ok.js +1 -1
  123. package/public/vendor/okjs/toolkit/devtools/ok-console-service.ok.js +1 -1
  124. package/public/vendor/okjs/toolkit/devtools/ok-console.ok.js +1 -1
  125. package/public/vendor/okjs/toolkit/devtools/ok-fps-monitor-service.ok.js +1 -1
  126. package/public/vendor/okjs/toolkit/devtools/ok-fps-monitor.ok.js +1 -1
  127. package/public/vendor/okjs/toolkit/devtools/ok-inspector-service.ok.js +1 -1
  128. package/public/vendor/okjs/toolkit/devtools/ok-inspector.ok.js +1 -1
  129. package/public/vendor/okjs/toolkit/devtools/ok-js-tree.ok.js +1 -1
  130. package/public/vendor/okjs/toolkit/devtools/ok-timeline-service.ok.js +1 -1
  131. package/public/vendor/okjs/toolkit/devtools/ok-timeline.ok.js +1 -1
  132. package/public/vendor/okjs/toolkit/docs/doc-viewer.ok.js +1 -1
  133. package/public/vendor/okjs/toolkit/editor/ok-live-component.ok.js +1 -1
  134. package/public/vendor/okjs/toolkit/editor/ok-live-example.ok.js +1 -1
  135. package/public/vendor/okjs/toolkit/editor/ok-live-shell.ok.js +1 -1
  136. package/public/vendor/okjs/toolkit/elements/ok-dropdown.ok.js +1 -1
  137. package/public/vendor/okjs/toolkit/elements/ok-icon.ok.js +1 -1
  138. package/public/vendor/okjs/toolkit/elements/ok-select.ok.js +1 -1
  139. package/public/vendor/okjs/toolkit/elements/ok-table.ok.js +1 -1
  140. package/public/vendor/okjs/toolkit/errors/ok-crash-boundary.ok.js +1 -1
  141. package/public/vendor/okjs/toolkit/errors/ok-crash-info.ok.js +1 -1
  142. package/public/vendor/okjs/toolkit/i18n/i18n-editor-examples.ok.js +1 -1
  143. package/public/vendor/okjs/toolkit/i18n/i18n-editor.ok.js +1 -1
  144. package/public/vendor/okjs/toolkit/i18n/i18n-key-editor-tips.ok.js +1 -1
  145. package/public/vendor/okjs/toolkit/i18n/i18n-key-editor.ok.js +1 -1
  146. package/public/vendor/okjs/toolkit/i18n/i18n-service.ok.js +1 -1
  147. package/public/vendor/okjs/toolkit/i18n/ok-i18n.js +1 -1
  148. package/public/vendor/okjs/toolkit/interaction/ok-contextmenu.ok.js +1 -1
  149. package/public/vendor/okjs/toolkit/interaction/ok-dismiss-service.ok.js +1 -1
  150. package/public/vendor/okjs/toolkit/interaction/ok-draggable.ok.js +1 -1
  151. package/public/vendor/okjs/toolkit/interaction/ok-flyover-panel.ok.js +1 -1
  152. package/public/vendor/okjs/toolkit/interaction/ok-flyover.ok.js +1 -1
  153. package/public/vendor/okjs/toolkit/interaction/ok-highlight-service.ok.js +1 -1
  154. package/public/vendor/okjs/toolkit/interaction/ok-highlight.ok.js +1 -1
  155. package/public/vendor/okjs/toolkit/interaction/ok-hotkeys-service.ok.js +1 -1
  156. package/public/vendor/okjs/toolkit/interaction/ok-picker-service.ok.js +1 -1
  157. package/public/vendor/okjs/toolkit/interaction/ok-popout-service.ok.js +1 -1
  158. package/public/vendor/okjs/toolkit/interaction/ok-popout.ok.js +1 -1
  159. package/public/vendor/okjs/toolkit/interaction/ok-portal-service.ok.js +1 -1
  160. package/public/vendor/okjs/toolkit/interaction/ok-submenu.ok.js +1 -1
  161. package/public/vendor/okjs/toolkit/layout/ok-resizer.ok.js +1 -1
  162. package/public/vendor/okjs/toolkit/manifest.js +1 -1
  163. package/public/vendor/okjs/toolkit/modals/ok-modal-service.ok.js +1 -1
  164. package/public/vendor/okjs/toolkit/modals/ok-modal.ok.js +1 -1
  165. package/public/vendor/okjs/toolkit/modals/ok-toast-service.ok.js +1 -1
  166. package/public/vendor/okjs/toolkit/modals/ok-window.ok.js +1 -1
  167. package/public/vendor/okjs/toolkit/navigation/hash-router.ok.js +1 -1
  168. package/public/vendor/okjs/toolkit/navigation/history-router.ok.js +1 -1
  169. package/public/vendor/okjs/toolkit/navigation/router.ok.js +1 -1
  170. package/public/vendor/okjs/toolkit/sync/reactive-sync-service.ok.js +1 -1
  171. package/public/vendor/okjs/toolkit/sync/reactive-sync.js +1 -1
  172. package/public/vendor/okjs/toolkit/theming/blocks/ok-design-button.css.js +1 -1
  173. package/public/vendor/okjs/toolkit/theming/blocks/ok-design-input.css.js +1 -1
  174. package/public/vendor/okjs/toolkit/theming/ok-design-style.js +1 -1
  175. package/public/vendor/okjs/toolkit/theming/ok-design-vars.js +1 -1
  176. package/public/vendor/okjs/toolkit/theming/ok-design.ok.js +1 -1
  177. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-input.ok.js +1 -1
  178. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-service.ok.js +1 -1
  179. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-style.js +1 -1
  180. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-utils.js +1 -1
  181. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-variable.ok.js +1 -1
  182. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-vm.js +1 -1
  183. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor.ok.js +1 -1
  184. package/public/vendor/okjs/toolkit/theming/ok-theme.ok.js +1 -1
  185. package/public/view-models/type-query-vm.js +1 -1
  186. package/okdb-data/default/data.mdb +0 -0
  187. package/okdb-data/default/lock.mdb +0 -0
  188. package/okdb-data/~log/data.mdb +0 -0
  189. package/okdb-data/~log/lock.mdb +0 -0
  190. package/okdb-data/~system/data.mdb +0 -0
  191. package/okdb-data/~system/lock.mdb +0 -0
  192. package/public/images/logo.png +0 -0
  193. package/public/images/logo.svg +0 -333
@@ -1 +1 @@
1
- const _0x145ee7=_0x5ad3;function _0x3def(){const _0x5398e3=['label','type-context','hidetype','Error','/restart','var(--okdb-info)','hidepipeline','filter','member','Engine\x20rebuild\x20started','delete','Restart','Chunk','match','materializer','compact','$ok','join','/stop',';\x20color:','rebuild','12LQspQp','runtime','Concurrency','8220820zcTyPe','height:100%;width:','Delete','envName','showdelete','danger','/pause','Engine\x20resumed','2575779ipAeMC','1637165HVOrER','color-mix(in\x20srgb,\x20','busy','success','Collection','\x20complete','$dispatch','var(--okdb-orange)','pillStyle','edit','metricPercent','Retry','Rebuild\x20engine\x20\x22','DELETE','split','\x0a<div\x20:class=\x22isMember\x20?\x20\x27engine-resource-card\x20erc\x20erc--member\x27\x20:\x20\x27engine-resource-card\x20erc\x20erc--card\x27\x22>\x0a\x0a\x20\x20<!--\x20──\x20Name\x20+\x20type\x20+\x20status\x20+\x20actions\x20row\x20──\x20-->\x0a\x20\x20<div\x20class=\x22erc-header\x22>\x0a\x20\x20\x20\x20<span\x20class=\x22erc-dot\x22\x20:style=\x22\x27background:\x27\x20+\x20statusMeta.color\x20+\x20\x27;box-shadow:0\x200\x200\x203px\x20color-mix(in\x20srgb,\x20\x27\x20+\x20statusMeta.color\x20+\x20\x27\x2013%,\x20transparent);\x27\x22\x20:title=\x22statusMeta.title\x22></span>\x0a\x20\x20\x20\x20<div\x20class=\x22erc-name-group\x22>\x0a\x20\x20\x20\x20\x20\x20<code\x20class=\x22erc-name\x22\x20:title=\x22title\x22>{{\x20displayTitle\x20}}</code>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22titleNamespace\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-ns\x22>{{\x20titleNamespace\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<span\x20class=\x22erc-pill\x22\x20:style=\x22typeBadgeStyle()\x22>{{\x20typeName(eng.role\x20||\x20eng.type)\x20}}</span>\x0a\x20\x20\x20\x20<if\x20:=\x22!running\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-pill\x22\x20:style=\x22statusPillStyle()\x22>{{\x20statusMeta.label\x20}}</span>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20<if\x20:=\x22pipelineLabel\x20&&\x20!hidePipeline\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-pill\x22\x20:style=\x22pipelineBadgeStyle()\x22\x20:title=\x22\x27pipeline:\x20\x27\x20+\x20pipelineName\x22>{{\x20pipelineLabel\x20}}</span>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20<if\x20:=\x22envName\x20&&\x20!isMember\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-pill\x22\x20:style=\x22envBadgeStyle()\x22\x20:title=\x22\x27env:\x20\x27\x20+\x20envName\x22>{{\x20envName\x20}}</span>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20<each\x20:of=\x22healthBadges\x22\x20let:item=\x22badge\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-pill\x22\x20:style=\x22healthBadgeStyle(badge)\x22\x20:title=\x22badge.title\x22>{{\x20badge.text\x20}}</span>\x0a\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20<span\x20class=\x22erc-spacer\x22></span>\x0a\x20\x20\x20\x20<each\x20:of=\x22overflowActions\x22\x20let:item=\x22action\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22runAction(action)\x22\x20:disabled=\x22busy\x22\x20:title=\x22action.title\x20||\x20action.label\x22\x20class=\x22erc-btn\x20erc-btn--muted\x22\x20:style=\x22\x27color:\x27\x20+\x20action.color\x20+\x20\x27;\x27\x22>{{\x20glyph(action.label)\x20}}\x20{{\x20action.label\x20}}</button>\x0a\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20<if\x20:=\x22overflowActions.length\x20>\x200\x20&&\x20primaryAction\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-sep\x22></span>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20<if\x20:=\x22primaryAction\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22runAction(primaryAction)\x22\x20:disabled=\x22busy\x22\x20class=\x22erc-btn\x20erc-btn--primary\x22\x20:style=\x22pillStyle(primaryAction.color)\x22>{{\x20busy\x20?\x20\x27…\x27\x20:\x20(glyph(primaryAction.label)\x20+\x20\x27\x20\x27\x20+\x20primaryAction.label)\x20}}</button>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20──\x20Summary\x20(card\x20mode\x20only)\x20──\x20-->\x0a\x20\x20<if\x20:=\x22description\x20&&\x20!isMember\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22erc-summary\x22>{{\x20description\x20}}</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20──\x20Config\x20metadata\x20──\x20-->\x0a\x20\x20<if\x20:=\x22metadata.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22erc-kv-row\x22>\x0a\x20\x20\x20\x20\x20\x20<each\x20:of=\x22metadata\x22\x20let:item=\x22metric\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-kv\x22\x20:title=\x22metric.title\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-kv__label\x22>{{\x20metric.label\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-kv__val\x22>{{\x20metric.value\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20──\x20Runtime\x20metrics\x20──\x20-->\x0a\x20\x20<if\x20:=\x22metrics.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22erc-kv-row\x20erc-kv-row--metrics\x22>\x0a\x20\x20\x20\x20\x20\x20<each\x20:of=\x22metrics\x22\x20let:item=\x22metric\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-kv\x22\x20:title=\x22metric.title\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-kv__label\x22>{{\x20metric.label\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-kv__val\x22\x20:style=\x22\x27color:\x27\x20+\x20metricToneColor(metric)\x22>{{\x20metric.value\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20──\x20Progress\x20bar\x20──\x20-->\x0a\x20\x20<if\x20:=\x22showProgressBar()\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22erc-progress\x22\x20:title=\x22progressMetric()?.title\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20:style=\x22progressFillStyle()\x22></div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20──\x20Error\x20──\x20-->\x0a\x20\x20<if\x20:=\x22inlineError\x20||\x20error\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22erc-error\x22>⚠\x20{{\x20inlineError\x20||\x20error\x20}}</div>\x0a\x20\x20</if>\x0a\x0a</div>\x0a','#fb7185','border-color:color-mix(in\x20srgb,\x20var(--okdb-app-border)\x2040%,\x20transparent);\x20color:#7a93a8;\x20background:transparent;','6528690TeYwvc','TTL','env','statusMeta','var(--okdb-warning)','2ocDaiW','pop','Engine\x20deleted','canRunLifecycle','eng','Pause','pipeline','_uiEnv','Provider','hideType','/start','View\x20Type\x20Context','Search','Edit','push','showDelete','get','collectionEngine','Engine\x20started','Engine\x20paused','Reset','Model','Prepare','Algorithm','key','false','running','/resume','/rebuild','\x2033%,\x20transparent)','Rebuild','8OTwnLg','hideEnv','Reset\x20Cursor','Embedder','slice','typeBadgeStyle','refresh','var(--okdb-sky)','Progress','reset','Poll','var(--okdb-danger)','config','true','embeddingsMode','restart','healthy','target_type','values','699639xrkMhE','isFinite','tone','7051919OrOxhY','Worker','Reset\x20cursor\x20for\x20engine\x20\x22','Restart\x20engine\x20\x22','toast','indexer','text','status','modal','title','1127493tWdsZE','border-color:','Engine\x20retry\x20started','Extractor','var(--okdb-app-fg-muted)','name','includes','Field','Indexer','color','suffix','/reset-cursor','type','method','POST','paused','Delete\x20engine\x20\x22','Type','stats','min','Engine','isMember','pipelineName','$attr','%;border-radius:999px;background:','progressMetric','storeEnv','Resume','var(--okdb-success)','Stop\x20engine\x20\x22','Dims','basePath','warning','source_type','variant','Stop','\x20failed','error','\x207%,\x20transparent)','isRunning','var(--okdb-accent)','Mode','source_env','Storage','local','sourceType','/retry','confirm','shared','Engine\x20stopped','message','\x0aengine-resource-card\x20{\x20display:\x20block;\x20}\x0a\x0a/*\x20──\x20Top-level\x20hover\x20(applies\x20when\x20component\x20root\x20carries\x20.engine-resource-card\x20class)\x20──\x20*/\x0a.engine-resource-card:hover\x20{\x20border-color:\x20var(--okdb-app-border-strong);\x20}\x0a\x0a/*\x20──\x20Card\x20variant\x20(standalone)\x20───────────────────────\x20*/\x0aengine-resource-card\x20.erc--card\x20{\x0a\x20\x20background:\x20var(--okdb-app-surface);\x0a\x20\x20border:\x201px\x20solid\x20var(--okdb-app-border);\x0a\x20\x20border-radius:\x2010px;\x0a\x20\x20padding:\x2012px\x2014px;\x0a\x20\x20display:\x20flex;\x0a\x20\x20flex-direction:\x20column;\x0a\x20\x20gap:\x208px;\x0a\x20\x20box-shadow:\x200\x200\x204px\x20rgba(255,255,255,0.03);\x0a\x20\x20transition:\x20border-color\x20.14s;\x0a}\x0aengine-resource-card\x20.erc--card:hover\x20{\x20border-color:\x20var(--okdb-app-border-strong);\x20}\x0a\x0a/*\x20──\x20Member\x20variant\x20(inside\x20pipeline)\x20────────────────\x20*/\x0aengine-resource-card\x20.erc--member\x20{\x0a\x20\x20background:\x20var(--okdb-app-surface);\x0a\x20\x20border:\x201px\x20solid\x20var(--okdb-app-surface-2);\x0a\x20\x20border-radius:\x208px;\x0a\x20\x20padding:\x209px\x2012px;\x0a\x20\x20display:\x20flex;\x0a\x20\x20flex-direction:\x20column;\x0a\x20\x20gap:\x206px;\x0a\x20\x20transition:\x20border-color\x20.12s,\x20background\x20.12s;\x0a}\x0aengine-resource-card\x20.erc--member:hover\x20{\x20border-color:\x20var(--okdb-app-border-strong);\x20background:\x20var(--okdb-app-surface);\x20}\x0a\x0a/*\x20──\x20Header\x20row\x20─────────────────────────────────────\x20*/\x0aengine-resource-card\x20.erc-header\x20{\x20display:\x20flex;\x20align-items:\x20center;\x20gap:\x205px;\x20flex-wrap:\x20wrap;\x20min-width:\x200;\x20}\x0aengine-resource-card\x20.erc-dot\x20{\x20width:\x207px;\x20height:\x207px;\x20border-radius:\x2050%;\x20flex-shrink:\x200;\x20}\x0aengine-resource-card\x20.erc-name-group\x20{\x20display:\x20flex;\x20align-items:\x20baseline;\x20gap:\x205px;\x20min-width:\x200;\x20}\x0aengine-resource-card\x20.erc-name\x20{\x20font-size:\x2013px;\x20font-weight:\x20600;\x20color:\x20var(--okdb-app-fg-strong);\x20overflow:\x20hidden;\x20text-overflow:\x20ellipsis;\x20white-space:\x20nowrap;\x20letter-spacing:\x20-.01em;\x20}\x0aengine-resource-card\x20.erc-ns\x20{\x20font-size:\x2010.5px;\x20color:\x20var(--okdb-app-fg-subtle);\x20white-space:\x20nowrap;\x20}\x0aengine-resource-card\x20.erc-spacer\x20{\x20flex:\x201;\x20min-width:\x200;\x20}\x0aengine-resource-card\x20.erc-sep\x20{\x20width:\x201px;\x20height:\x2012px;\x20background:\x20var(--okdb-app-border);\x20flex-shrink:\x200;\x20}\x0a\x0a/*\x20──\x20Pills\x20──────────────────────────────────────────\x20*/\x0aengine-resource-card\x20.erc-pill\x20{\x20font-size:\x2010.5px;\x20padding:\x201px\x208px;\x20border-radius:\x20999px;\x20border:\x201px\x20solid\x20var(--okdb-app-border);\x20color:\x20var(--okdb-app-fg-muted);\x20background:\x20transparent;\x20display:\x20inline-flex;\x20align-items:\x20center;\x20white-space:\x20nowrap;\x20flex-shrink:\x200;\x20letter-spacing:\x20.01em;\x20}\x0aengine-resource-card\x20.erc-pill--pipeline\x20{\x20border-color:\x20#6366f144;\x20color:\x20#a5b4fc;\x20background:\x20#6366f110;\x20}\x0aengine-resource-card\x20.erc-pill--env\x20{\x20border-color:\x20color-mix(in\x20srgb,\x20var(--okdb-app-border)\x2040%,\x20transparent);\x20color:\x20#7a93a8;\x20}\x0a\x0a/*\x20──\x20Buttons\x20────────────────────────────────────────\x20*/\x0aengine-resource-card\x20.erc-btn\x20{\x20font-size:\x2011px;\x20padding:\x202px\x2010px;\x20border-radius:\x20999px;\x20border:\x201px\x20solid;\x20cursor:\x20pointer;\x20line-height:\x201.5;\x20flex-shrink:\x200;\x20white-space:\x20nowrap;\x20transition:\x20filter\x20.12s;\x20}\x0aengine-resource-card\x20.erc-btn--primary\x20{\x20font-weight:\x20600;\x20}\x0aengine-resource-card\x20.erc-btn--muted\x20{\x20background:\x20var(--okdb-app-bg-deep);\x20border-color:\x20var(--okdb-app-border);\x20}\x0aengine-resource-card\x20.erc-btn:hover:not(:disabled)\x20{\x20filter:\x20brightness(1.3);\x20}\x0aengine-resource-card\x20.erc-btn:disabled\x20{\x20opacity:\x20.4;\x20cursor:\x20not-allowed;\x20}\x0a\x0a/*\x20──\x20Content\x20rows\x20───────────────────────────────────\x20*/\x0aengine-resource-card\x20.erc-summary\x20{\x20font-size:\x2011.5px;\x20line-height:\x201.55;\x20color:\x20#6d8899;\x20padding-left:\x2012px;\x20}\x0aengine-resource-card\x20.erc-kv-row\x20{\x20display:\x20grid;\x20grid-template-columns:repeat(auto-fit,\x20minmax(180px,\x201fr));\x20gap:\x202px\x2012px;\x20padding-left:\x2012px;\x20}\x0aengine-resource-card\x20.erc--member\x20.erc-kv-row\x20{\x20grid-template-columns:\x20repeat(3,\x201fr);\x20gap:\x202px\x2010px;\x20}\x0aengine-resource-card\x20.erc-kv-row--metrics\x20{\x20border-top:\x201px\x20solid\x20var(--okdb-app-border);\x20padding-top:\x206px;\x20}\x0aengine-resource-card\x20.erc-kv\x20{\x20display:\x20inline-flex;\x20gap:\x204px;\x20align-items:\x20baseline;\x20font-size:\x2011px;\x20line-height:\x201.35;\x20}\x0aengine-resource-card\x20.erc-kv__label\x20{\x20font-size:\x209.5px;\x20text-transform:\x20uppercase;\x20letter-spacing:\x20.04em;\x20color:\x20var(--okdb-app-fg-subtle);\x20flex-shrink:\x200;\x20}\x0aengine-resource-card\x20.erc-kv__val\x20{\x20color:\x20#a8c4d9;\x20overflow:\x20hidden;\x20text-overflow:\x20ellipsis;\x20white-space:\x20nowrap;\x20}\x0aengine-resource-card\x20.erc-progress\x20{\x20height:\x203px;\x20width:\x20100%;\x20border-radius:\x20999px;\x20background:\x20var(--okdb-app-bg-deep);\x20overflow:\x20hidden;\x20}\x0aengine-resource-card\x20.erc-error\x20{\x20font-size:\x2011px;\x20line-height:\x201.5;\x20color:\x20var(--okdb-danger);\x20border-top:\x201px\x20solid\x20var(--okdb-app-border);\x20padding-top:\x206px;\x20padding-left:\x2012px;\x20}\x0a','typeColor','Materializer','json','max','var(--okdb-accent-2)'];_0x3def=function(){return _0x5398e3;};return _0x3def();}(function(_0x480cc8,_0x50623f){const _0x404de9=_0x5ad3,_0x180ede=_0x480cc8();while(!![]){try{const _0x5d01b7=-parseInt(_0x404de9(0x136))/0x1+-parseInt(_0x404de9(0x104))/0x2*(-parseInt(_0x404de9(0xec))/0x3)+-parseInt(_0x404de9(0xe1))/0x4*(parseInt(_0x404de9(0xed))/0x5)+parseInt(_0x404de9(0xff))/0x6+parseInt(_0x404de9(0x139))/0x7*(parseInt(_0x404de9(0x123))/0x8)+parseInt(_0x404de9(0x143))/0x9+-parseInt(_0x404de9(0xe4))/0xa;if(_0x5d01b7===_0x50623f)break;else _0x180ede['push'](_0x180ede['shift']());}catch(_0x3bc357){_0x180ede['push'](_0x180ede['shift']());}}}(_0x3def,0x8c796));import{buildEngineBasePath as _0x402e8f,compactEngineConfigMetrics as _0x14b5e1,compactEngineErrorText as _0x1adcde,compactEngineRowMetrics as _0x4b1cde,compactEngineRowStatusBadges as _0x4af50d,compactEngineRowSummary as _0x32a20c,compactEngineStatusMeta as _0x55eade,isEmbeddingsEngine as _0x420bf1}from'../engine-ui-utils.js';function l(_0xd0016d,_0x12c5b4=!0x1){const _0x2923ac=_0x5ad3;return null==_0xd0016d?_0x12c5b4:!0x0===_0xd0016d||_0x2923ac(0x130)===_0xd0016d||!0x1!==_0xd0016d&&_0x2923ac(0x11d)!==_0xd0016d&&Boolean(_0xd0016d);}function _0x5ad3(_0x1188b3,_0x5c9669){_0x1188b3=_0x1188b3-0xdc;const _0x3defd8=_0x3def();let _0x5ad361=_0x3defd8[_0x1188b3];return _0x5ad361;}const c={'Start':'▶','Stop':'■','Pause':'❚❚','Resume':'▶','Restart':'↻','Retry':'↻','Reset':'⟲','Rebuild':'⚒','Edit':'✎','Type':'↗','Delete':'🗑'};export default{'tag':'engine-resource-card','attr':{'engine':{},'env':{},'pipeline':{},'hidepipeline':{},'hidetype':{},'hideenv':{},'variant':{},'compact':{},'showdelete':{}},'context':_0x5738fc=>({'busy':!0x1,'error':null,'typeLabel':{'embedder':'Embedder','indexer':_0x145ee7(0x14b),'search':'Search','worker':'Worker','vector-search':_0x145ee7(0x110),'embed-worker':_0x145ee7(0x13a),'materializer':_0x145ee7(0x178),'file-extractor':_0x145ee7(0x146),'file-collection':_0x145ee7(0xf1),'file-extractor-worker':_0x145ee7(0x13a),'processor':'Processor','queue-worker':'Queue\x20Worker'},'typeColor':{'embedder':_0x145ee7(0x181),'indexer':_0x145ee7(0x17b),'vector-search':_0x145ee7(0x16b),'embed-worker':_0x145ee7(0x103),'materializer':_0x145ee7(0xfd),'file-extractor':_0x145ee7(0x15f),'file-collection':_0x145ee7(0x12a),'file-extractor-worker':_0x145ee7(0x103),'processor':_0x145ee7(0xf4),'queue-worker':_0x145ee7(0x17b)},get 'eng'(){const _0x4fe014=_0x145ee7;return _0x5738fc[_0x4fe014(0x15a)]['engine']??{};},get 'envName'(){const _0x555459=_0x145ee7;return _0x5738fc[_0x555459(0x15a)]['env']??this['eng']?.[_0x555459(0x101)]??this['eng']?.[_0x555459(0x10b)]??this[_0x555459(0x108)]?.[_0x555459(0x15d)]??this['eng']?.[_0x555459(0x12f)]?.[_0x555459(0x16d)]??null;},get 'isMember'(){const _0x3672fc=_0x145ee7;return _0x3672fc(0x184)===_0x5738fc[_0x3672fc(0x15a)][_0x3672fc(0x165)]||'card'!==_0x5738fc[_0x3672fc(0x15a)]['variant']&&l(_0x5738fc['$attr'][_0x3672fc(0x18b)],!0x1);},get 'hidePipeline'(){const _0x54f4af=_0x145ee7;return l(_0x5738fc['$attr'][_0x54f4af(0x182)],!0x1);},get 'hideType'(){const _0x120348=_0x145ee7;return l(_0x5738fc[_0x120348(0x15a)][_0x120348(0x17e)],!0x1);},get 'hideEnv'(){const _0x10fdd0=_0x145ee7;return l(_0x5738fc[_0x10fdd0(0x15a)]['hideenv'],!0x1);},get 'showDelete'(){const _0x309848=_0x145ee7;return l(_0x5738fc['$attr'][_0x309848(0xe8)],!0x1);},get 'basePath'(){const _0x590d01=_0x145ee7;return _0x402e8f(this[_0x590d01(0x108)],this['envName']);},get 'embeddingsMode'(){return _0x420bf1(this['eng']);},get 'running'(){const _0x2e7600=_0x145ee7;return!!this[_0x2e7600(0x108)]?.[_0x2e7600(0x16a)];},get 'statusMeta'(){return _0x55eade(this['eng']);},get 'paused'(){const _0x3b3c7e=_0x145ee7;return!0x0===this[_0x3b3c7e(0x108)]?.['stats']?.[_0x3b3c7e(0x152)]||!0x0===this['eng']?.[_0x3b3c7e(0xe2)]?.[_0x3b3c7e(0x152)]||!0x0===this[_0x3b3c7e(0x108)]?.['paused'];},get 'pipelineName'(){const _0x3fbae7=_0x145ee7;return _0x5738fc[_0x3fbae7(0x15a)]['pipeline']??this[_0x3fbae7(0x108)]?.['meta']?.[_0x3fbae7(0x10a)]??this[_0x3fbae7(0x108)]?.[_0x3fbae7(0x12f)]?.[_0x3fbae7(0x10a)]??this[_0x3fbae7(0x108)]?.[_0x3fbae7(0x12f)]?.[_0x3fbae7(0x115)]??null;},get 'pipelineLabel'(){const _0x1f74ab=_0x145ee7;return this['pipelineName']?String(this[_0x1f74ab(0x159)])[_0x1f74ab(0xfb)](':')[_0x1f74ab(0x105)]():null;},get 'sourceType'(){const _0x5aec23=_0x145ee7;return this[_0x5aec23(0x108)]?.[_0x5aec23(0x12f)]?.[_0x5aec23(0x164)]??this['eng']?.[_0x5aec23(0xe2)]?.[_0x5aec23(0x164)]??this['eng']?.[_0x5aec23(0x155)]?.[_0x5aec23(0x164)]??this['eng']?.['stats']?.[_0x5aec23(0x13e)]?.['source_type']??this[_0x5aec23(0x108)]?.[_0x5aec23(0x12f)]?.[_0x5aec23(0x134)]??null;},get 'canRunLifecycle'(){const _0x2740d4=_0x145ee7;return!!this[_0x2740d4(0x162)];},get 'title'(){const _0x1a0cf6=_0x145ee7;return this[_0x1a0cf6(0x108)]?.[_0x1a0cf6(0x148)]??this['eng']?.[_0x1a0cf6(0x11c)]??_0x1a0cf6(0x157);},get 'displayTitle'(){const _0x2d158b=_0x145ee7,_0x40e554=String(this[_0x2d158b(0x142)]??'');return _0x40e554[_0x2d158b(0x149)](':')?_0x40e554[_0x2d158b(0xfb)](':')[_0x2d158b(0x105)]():_0x40e554;},get 'titleNamespace'(){const _0x4ba2eb=_0x145ee7,_0x1e02d3=String(this[_0x4ba2eb(0x142)]??'');return _0x1e02d3[_0x4ba2eb(0x149)](':')?_0x1e02d3[_0x4ba2eb(0xfb)](':')[_0x4ba2eb(0x127)](0x0,-0x1)[_0x4ba2eb(0xdd)](':'):null;},get 'description'(){const _0x22c98e=_0x145ee7;return _0x32a20c(this[_0x22c98e(0x108)]);},get 'inlineError'(){const _0x2f7e32=_0x145ee7;return _0x1adcde(this[_0x2f7e32(0x108)]);},get 'metadata'(){const _0x4dac54=_0x145ee7,_0x4e8c1c=['Source',_0x4dac54(0x14a),_0x4dac54(0x16e),_0x4dac54(0x126),_0x4dac54(0x161),_0x4dac54(0x11b),_0x4dac54(0x10c),_0x4dac54(0x119),_0x4dac54(0xe3),_0x4dac54(0x12d),_0x4dac54(0x100),_0x4dac54(0x16c),_0x4dac54(0x11a),_0x4dac54(0x188)],_0x5ced03=new Map(_0x14b5e1(this[_0x4dac54(0x108)])['map'](_0x2d009d=>[_0x2d009d[_0x4dac54(0x17c)],_0x2d009d])),_0x54eade=[];for(const _0x8fbe7e of _0x4e8c1c){if(this[_0x4dac54(0x158)]&&'Embedder'===_0x8fbe7e)continue;const _0x1ffd73=_0x5ced03[_0x4dac54(0x114)](_0x8fbe7e);_0x1ffd73&&(_0x54eade[_0x4dac54(0x112)](_0x1ffd73),_0x5ced03[_0x4dac54(0x186)](_0x8fbe7e));}for(const _0x5043d0 of _0x5ced03[_0x4dac54(0x135)]())(this['isMember']||this[_0x4dac54(0x124)])&&'Source\x20env'===_0x5043d0[_0x4dac54(0x17c)]||_0x54eade[_0x4dac54(0x112)](_0x5043d0);return _0x54eade[_0x4dac54(0x127)](0x0,this['isMember']?0x6:0xa);},get 'metrics'(){const _0x4d24b0=_0x145ee7,_0xe77f2c=[_0x4d24b0(0x14a),'Mode',_0x4d24b0(0x11a),_0x4d24b0(0x188),'Embedder','Provider',_0x4d24b0(0x119),'Algorithm'];return _0x4b1cde(this[_0x4d24b0(0x108)])[_0x4d24b0(0x183)](_0x11fcbd=>!_0xe77f2c[_0x4d24b0(0x149)](_0x11fcbd[_0x4d24b0(0x17c)]))[_0x4d24b0(0x127)](0x0,this[_0x4d24b0(0x158)]?0x5:0x8);},get 'healthBadges'(){const _0x43480b=_0x145ee7,_0x3f1d98=this['statusMeta'][_0x43480b(0x17c)];return _0x4af50d(this[_0x43480b(0x108)])[_0x43480b(0x183)](_0x5a5199=>_0x5a5199?.['text']&&_0x5a5199[_0x43480b(0x13f)]!==_0x3f1d98)['filter'](_0x30e87e=>!(this[_0x43480b(0x11e)]&&_0x43480b(0x133)===_0x30e87e[_0x43480b(0x13f)]))[_0x43480b(0x127)](0x0,0x2);},get 'primaryAction'(){const _0x30726d=_0x145ee7;return this[_0x30726d(0x107)]?this[_0x30726d(0x131)]?this[_0x30726d(0x11e)]?{'label':_0x30726d(0x166),'method':_0x30726d(0x151),'suffix':_0x30726d(0xde),'color':_0x30726d(0x103),'confirm':_0x30726d(0x160)+this[_0x30726d(0x142)]+'\x22?','toast':_0x30726d(0x174)}:_0x30726d(0x168)===this[_0x30726d(0x108)]?.[_0x30726d(0x140)]?{'label':_0x30726d(0x187),'method':_0x30726d(0x151),'suffix':_0x30726d(0x180),'color':_0x30726d(0xf4),'confirm':'Restart\x20engine\x20\x22'+this[_0x30726d(0x142)]+'\x22?','toast':'Engine\x20restarted'}:{'label':'Start','method':'POST','suffix':_0x30726d(0x10e),'color':_0x30726d(0x15f),'confirm':null,'toast':_0x30726d(0x116)}:_0x30726d(0x168)===this[_0x30726d(0x108)]?.[_0x30726d(0x140)]?{'label':_0x30726d(0xf8),'method':_0x30726d(0x151),'suffix':_0x30726d(0x171),'color':'var(--okdb-orange)','confirm':null,'toast':_0x30726d(0x145)}:this[_0x30726d(0x152)]?{'label':_0x30726d(0x15e),'method':_0x30726d(0x151),'suffix':_0x30726d(0x11f),'color':_0x30726d(0x15f),'confirm':null,'toast':_0x30726d(0xeb)}:{'label':'Pause','method':_0x30726d(0x151),'suffix':'/pause','color':_0x30726d(0x103),'confirm':null,'toast':_0x30726d(0x117)}:null;},get 'overflowActions'(){const _0x3cce0a=_0x145ee7,_0x599833=[];return this[_0x3cce0a(0x107)]&&(_0x599833[_0x3cce0a(0x112)]({'key':_0x3cce0a(0x132),'label':_0x3cce0a(0x187),'method':_0x3cce0a(0x151),'suffix':_0x3cce0a(0x180),'color':_0x3cce0a(0x147),'confirm':this[_0x3cce0a(0x131)]?_0x3cce0a(0x13c)+this[_0x3cce0a(0x142)]+'\x22?':null,'toast':'Engine\x20restarted'}),this[_0x3cce0a(0x131)]||_0x599833[_0x3cce0a(0x112)]({'key':'pause','label':this['paused']?_0x3cce0a(0x15e):_0x3cce0a(0x109),'method':'POST','suffix':this[_0x3cce0a(0x152)]?_0x3cce0a(0x11f):_0x3cce0a(0xea),'color':this[_0x3cce0a(0x152)]?'var(--okdb-success)':_0x3cce0a(0x103),'toast':this['paused']?_0x3cce0a(0xeb):_0x3cce0a(0x117)}),_0x3cce0a(0x18a)===this[_0x3cce0a(0x108)]?.['type']&&(_0x599833[_0x3cce0a(0x112)]({'key':_0x3cce0a(0x12c),'label':_0x3cce0a(0x118),'title':_0x3cce0a(0x125),'method':'POST','suffix':_0x3cce0a(0x14e),'color':_0x3cce0a(0x181),'confirm':_0x3cce0a(0x13b)+this[_0x3cce0a(0x142)]+'\x22?','toast':'Engine\x20cursor\x20reset'}),_0x599833[_0x3cce0a(0x112)]({'key':_0x3cce0a(0xe0),'label':_0x3cce0a(0x122),'method':'POST','suffix':_0x3cce0a(0x120),'color':'var(--okdb-success)','confirm':_0x3cce0a(0xf9)+this[_0x3cce0a(0x142)]+'\x22?','toast':_0x3cce0a(0x185)}))),_0x599833['push']({'key':_0x3cce0a(0xf6),'label':_0x3cce0a(0x111),'color':_0x3cce0a(0x16b),'local':'edit'}),this[_0x3cce0a(0x170)]&&!this[_0x3cce0a(0x10d)]&&_0x599833[_0x3cce0a(0x112)]({'key':_0x3cce0a(0x14f),'label':_0x3cce0a(0x154),'title':_0x3cce0a(0x10f),'color':_0x3cce0a(0x17b),'local':'type'}),this[_0x3cce0a(0x113)]&&this[_0x3cce0a(0x107)]&&_0x599833[_0x3cce0a(0x112)]({'key':_0x3cce0a(0x186),'label':_0x3cce0a(0xe6),'method':_0x3cce0a(0xfa),'suffix':'','color':'var(--okdb-danger)','confirm':_0x3cce0a(0x153)+this[_0x3cce0a(0x142)]+'\x22?','toast':_0x3cce0a(0x106),'destructive':!0x0}),_0x599833;},'typeName'(_0x4f53b3){return this['typeLabel'][_0x4f53b3]||_0x4f53b3||'Engine';},'glyph':_0x518e15=>c[_0x518e15]??'','pillStyle'(_0x4fd406){const _0x290f46=_0x145ee7,_0x536fbd=_0x4fd406['startsWith']('var(');return _0x290f46(0x144)+(_0x536fbd?'color-mix(in\x20srgb,\x20'+_0x4fd406+_0x290f46(0x121):_0x4fd406+'55')+_0x290f46(0xdf)+_0x4fd406+';\x20background:'+(_0x536fbd?_0x290f46(0xee)+_0x4fd406+_0x290f46(0x169):_0x4fd406+'12')+';';},'typeBadgeStyle'(){const _0x359abb=_0x145ee7;return this[_0x359abb(0xf5)](this[_0x359abb(0x177)][this[_0x359abb(0x108)]?.[_0x359abb(0x14f)]]??_0x359abb(0x147));},'pipelineBadgeStyle':()=>'border-color:#6366f144;\x20color:#a5b4fc;\x20background:#6366f110;','envBadgeStyle':()=>_0x145ee7(0xfe),'healthBadgeStyle'(_0x1940f7){const _0x8d5a89=_0x145ee7;return this[_0x8d5a89(0xf5)](_0x1940f7?.[_0x8d5a89(0x14c)]??_0x8d5a89(0x147));},'typePillStyle'(){const _0x2c3090=_0x145ee7;return this[_0x2c3090(0x128)]();},'statusPillStyle'(){const _0xff8467=_0x145ee7;return this[_0xff8467(0xf5)](this[_0xff8467(0x102)][_0xff8467(0x14c)]??'var(--okdb-app-fg-muted)');},'metricToneColor'(_0x1cf62d=null){const _0x57bc06=_0x145ee7;if(_0x57bc06(0x17f)===_0x1cf62d?.[_0x57bc06(0x17c)]&&Number(String(_0x1cf62d['value'])['replace'](/,/g,''))<=0x0)return _0x57bc06(0x147);switch(_0x1cf62d?.[_0x57bc06(0x138)]){case _0x57bc06(0xe9):return _0x57bc06(0x12e);case _0x57bc06(0x163):return _0x57bc06(0x103);default:return'var(--okdb-app-fg)';}},'metricPercent'(_0x349181=null){const _0x90ee0a=_0x145ee7,_0x487fa0=String(_0x349181?.['value']??'')[_0x90ee0a(0x189)](/(?:\(|\b)(\d{1,3})%/);if(!_0x487fa0)return null;const _0x3657f2=Number(_0x487fa0[0x1]);return Number[_0x90ee0a(0x137)](_0x3657f2)?Math[_0x90ee0a(0x17a)](0x0,Math[_0x90ee0a(0x156)](0x64,_0x3657f2)):null;},'progressMetric'(){const _0x2d60fe=_0x145ee7;return _0x4b1cde(this[_0x2d60fe(0x108)])['find'](_0x5182af=>_0x2d60fe(0x12b)===_0x5182af?.[_0x2d60fe(0x17c)])??null;},'progressFillStyle'(){const _0x6a8fad=_0x145ee7,_0x58fcfe=this[_0x6a8fad(0x15c)]();return _0x6a8fad(0xe5)+(this[_0x6a8fad(0xf7)](_0x58fcfe)??0x0)+_0x6a8fad(0x15b)+(_0x6a8fad(0xe9)===_0x58fcfe?.[_0x6a8fad(0x138)]?_0x6a8fad(0x12e):'warning'===_0x58fcfe?.[_0x6a8fad(0x138)]?'var(--okdb-warning)':'var(--okdb-success)')+';';},'showProgressBar'(){const _0x3f27c2=_0x145ee7,_0x5bbef2=this['metricPercent'](this[_0x3f27c2(0x15c)]());return null!=_0x5bbef2&&_0x5bbef2<0x64;},async 'runAction'(_0x2d15d4){const _0x3058f4=_0x145ee7;if(_0x2d15d4){if(_0x3058f4(0xf6)!==_0x2d15d4[_0x3058f4(0x16f)]){if('type'!==_0x2d15d4[_0x3058f4(0x16f)]){if(this[_0x3058f4(0x162)]&&(!_0x2d15d4[_0x3058f4(0x172)]||await _0x5738fc[_0x3058f4(0xdc)][_0x3058f4(0x173)][_0x3058f4(0x141)][_0x3058f4(0x172)](_0x2d15d4[_0x3058f4(0x172)]))){this[_0x3058f4(0xef)]=!0x0,this[_0x3058f4(0x168)]=null;try{const _0x58c9ef=await fetch(''+this['basePath']+(_0x2d15d4[_0x3058f4(0x14d)]??''),{'method':_0x2d15d4[_0x3058f4(0x150)]??_0x3058f4(0x151)}),_0x342d6d=await _0x58c9ef[_0x3058f4(0x179)]()['catch'](()=>({}));if(!_0x58c9ef['ok'])throw new Error(_0x342d6d?.[_0x3058f4(0x168)]?.[_0x3058f4(0x175)]||_0x2d15d4[_0x3058f4(0x17c)]+_0x3058f4(0x167));_0x5738fc[_0x3058f4(0xdc)]['shared']?.[_0x3058f4(0x13d)]?.[_0x3058f4(0xf0)]?.(_0x2d15d4[_0x3058f4(0x13d)]??_0x2d15d4[_0x3058f4(0x17c)]+_0x3058f4(0xf2)),_0x5738fc[_0x3058f4(0xf3)]('action',_0x2d15d4[_0x3058f4(0x11c)]??_0x2d15d4[_0x3058f4(0x17c)]),_0x5738fc[_0x3058f4(0xf3)](_0x3058f4(0x129));}catch(_0x145526){this[_0x3058f4(0x168)]=_0x145526?.['message']||String(_0x145526),_0x5738fc[_0x3058f4(0xdc)]['shared']?.[_0x3058f4(0x13d)]?.[_0x3058f4(0x168)]?.(this['error']);}finally{this['busy']=!0x1;}}}else _0x5738fc['$dispatch'](_0x3058f4(0x17d),{'engine':this[_0x3058f4(0x108)],'type':this[_0x3058f4(0x170)],'env':this[_0x3058f4(0xe7)]});}else _0x5738fc[_0x3058f4(0xf3)](_0x3058f4(0xf6),this[_0x3058f4(0x108)]);}}}),'template':_0x145ee7(0xfc),'style':_0x145ee7(0x176)};
1
+ function _0x593b(_0x58b086,_0x5eb81d){_0x58b086=_0x58b086-0x182;const _0x5840d8=_0x5840();let _0x593b61=_0x5840d8[_0x58b086];return _0x593b61;}const _0x155102=_0x593b;(function(_0x3efb9f,_0x57106f){const _0x3559fa=_0x593b,_0x137735=_0x3efb9f();while(!![]){try{const _0x5b0266=parseInt(_0x3559fa(0x195))/0x1+-parseInt(_0x3559fa(0x229))/0x2*(parseInt(_0x3559fa(0x207))/0x3)+parseInt(_0x3559fa(0x1d0))/0x4*(-parseInt(_0x3559fa(0x19f))/0x5)+-parseInt(_0x3559fa(0x22d))/0x6+-parseInt(_0x3559fa(0x214))/0x7*(parseInt(_0x3559fa(0x1ab))/0x8)+-parseInt(_0x3559fa(0x222))/0x9*(-parseInt(_0x3559fa(0x1c6))/0xa)+parseInt(_0x3559fa(0x1fd))/0xb*(parseInt(_0x3559fa(0x1e9))/0xc);if(_0x5b0266===_0x57106f)break;else _0x137735['push'](_0x137735['shift']());}catch(_0x33604e){_0x137735['push'](_0x137735['shift']());}}}(_0x5840,0x7a419));function _0x5840(){const _0x515e42=['compact','var(--okdb-accent-2)','includes','rebuild','action','busy','Restart\x20engine\x20\x22','Engine\x20resumed','canRunLifecycle','danger','statusMeta','isFinite','running','/resume','sourceType','color','modal','json','showDelete','12EMbjuM','\x207%,\x20transparent)','var(--okdb-orange)','label','var(--okdb-danger)','config','/start','type','Engine\x20paused','var(--okdb-app-fg-muted)','min','shared','progressMetric','pipeline','paused','Retry','source_type','showdelete','Field','eng','12190706vXWlPi','DELETE','hideenv','pop','reset','Worker','Concurrency','card','var(--okdb-success)','TTL','1429842gGgsvR','warning','hidepipeline',';\x20color:','$ok','toast','basePath','Engine\x20deleted','Engine\x20stopped','startsWith','Start','storeEnv','isRunning','5278cDiyWn','local','var(--okdb-sky)','error','Embedder','hideEnv','typeLabel','status','catch','false','values','\x0aengine-resource-card\x20{\x20display:\x20block;\x20}\x0a\x0a/*\x20──\x20Top-level\x20hover\x20(applies\x20when\x20component\x20root\x20carries\x20.engine-resource-card\x20class)\x20──\x20*/\x0a.engine-resource-card:hover\x20{\x20border-color:\x20var(--okdb-app-border-strong);\x20}\x0a\x0a/*\x20──\x20Card\x20variant\x20(standalone)\x20───────────────────────\x20*/\x0aengine-resource-card\x20.erc--card\x20{\x0a\x20\x20background:\x20var(--okdb-app-surface);\x0a\x20\x20border:\x201px\x20solid\x20var(--okdb-app-border);\x0a\x20\x20border-radius:\x2010px;\x0a\x20\x20padding:\x2012px\x2014px;\x0a\x20\x20display:\x20flex;\x0a\x20\x20flex-direction:\x20column;\x0a\x20\x20gap:\x208px;\x0a\x20\x20box-shadow:\x200\x200\x204px\x20rgba(255,255,255,0.03);\x0a\x20\x20transition:\x20border-color\x20.14s;\x0a}\x0aengine-resource-card\x20.erc--card:hover\x20{\x20border-color:\x20var(--okdb-app-border-strong);\x20}\x0a\x0a/*\x20──\x20Member\x20variant\x20(inside\x20pipeline)\x20────────────────\x20*/\x0aengine-resource-card\x20.erc--member\x20{\x0a\x20\x20background:\x20var(--okdb-app-surface);\x0a\x20\x20border:\x201px\x20solid\x20var(--okdb-app-surface-2);\x0a\x20\x20border-radius:\x208px;\x0a\x20\x20padding:\x209px\x2012px;\x0a\x20\x20display:\x20flex;\x0a\x20\x20flex-direction:\x20column;\x0a\x20\x20gap:\x206px;\x0a\x20\x20transition:\x20border-color\x20.12s,\x20background\x20.12s;\x0a}\x0aengine-resource-card\x20.erc--member:hover\x20{\x20border-color:\x20var(--okdb-app-border-strong);\x20background:\x20var(--okdb-app-surface);\x20}\x0a\x0a/*\x20──\x20Header\x20row\x20─────────────────────────────────────\x20*/\x0aengine-resource-card\x20.erc-header\x20{\x20display:\x20flex;\x20align-items:\x20center;\x20gap:\x205px;\x20flex-wrap:\x20wrap;\x20min-width:\x200;\x20}\x0aengine-resource-card\x20.erc-dot\x20{\x20width:\x207px;\x20height:\x207px;\x20border-radius:\x2050%;\x20flex-shrink:\x200;\x20}\x0aengine-resource-card\x20.erc-name-group\x20{\x20display:\x20flex;\x20align-items:\x20baseline;\x20gap:\x205px;\x20min-width:\x200;\x20}\x0aengine-resource-card\x20.erc-name\x20{\x20font-size:\x2013px;\x20font-weight:\x20600;\x20color:\x20var(--okdb-app-fg-strong);\x20overflow:\x20hidden;\x20text-overflow:\x20ellipsis;\x20white-space:\x20nowrap;\x20letter-spacing:\x20-.01em;\x20}\x0aengine-resource-card\x20.erc-ns\x20{\x20font-size:\x2010.5px;\x20color:\x20var(--okdb-app-fg-subtle);\x20white-space:\x20nowrap;\x20}\x0aengine-resource-card\x20.erc-spacer\x20{\x20flex:\x201;\x20min-width:\x200;\x20}\x0aengine-resource-card\x20.erc-sep\x20{\x20width:\x201px;\x20height:\x2012px;\x20background:\x20var(--okdb-app-border);\x20flex-shrink:\x200;\x20}\x0a\x0a/*\x20──\x20Pills\x20──────────────────────────────────────────\x20*/\x0aengine-resource-card\x20.erc-pill\x20{\x20font-size:\x2010.5px;\x20padding:\x201px\x208px;\x20border-radius:\x20999px;\x20border:\x201px\x20solid\x20var(--okdb-app-border);\x20color:\x20var(--okdb-app-fg-muted);\x20background:\x20transparent;\x20display:\x20inline-flex;\x20align-items:\x20center;\x20white-space:\x20nowrap;\x20flex-shrink:\x200;\x20letter-spacing:\x20.01em;\x20}\x0aengine-resource-card\x20.erc-pill--pipeline\x20{\x20border-color:\x20#6366f144;\x20color:\x20#a5b4fc;\x20background:\x20#6366f110;\x20}\x0aengine-resource-card\x20.erc-pill--env\x20{\x20border-color:\x20color-mix(in\x20srgb,\x20var(--okdb-app-border)\x2040%,\x20transparent);\x20color:\x20#7a93a8;\x20}\x0a\x0a/*\x20──\x20Buttons\x20────────────────────────────────────────\x20*/\x0aengine-resource-card\x20.erc-btn\x20{\x20font-size:\x2011px;\x20padding:\x202px\x2010px;\x20border-radius:\x20999px;\x20border:\x201px\x20solid;\x20cursor:\x20pointer;\x20line-height:\x201.5;\x20flex-shrink:\x200;\x20white-space:\x20nowrap;\x20transition:\x20filter\x20.12s;\x20}\x0aengine-resource-card\x20.erc-btn--primary\x20{\x20font-weight:\x20600;\x20}\x0aengine-resource-card\x20.erc-btn--muted\x20{\x20background:\x20var(--okdb-app-bg-deep);\x20border-color:\x20var(--okdb-app-border);\x20}\x0aengine-resource-card\x20.erc-btn:hover:not(:disabled)\x20{\x20filter:\x20brightness(1.3);\x20}\x0aengine-resource-card\x20.erc-btn:disabled\x20{\x20opacity:\x20.4;\x20cursor:\x20not-allowed;\x20}\x0a\x0a/*\x20──\x20Content\x20rows\x20───────────────────────────────────\x20*/\x0aengine-resource-card\x20.erc-summary\x20{\x20font-size:\x2011.5px;\x20line-height:\x201.55;\x20color:\x20#6d8899;\x20padding-left:\x2012px;\x20}\x0aengine-resource-card\x20.erc-kv-row\x20{\x20display:\x20grid;\x20grid-template-columns:repeat(auto-fit,\x20minmax(180px,\x201fr));\x20gap:\x202px\x2012px;\x20padding-left:\x2012px;\x20}\x0aengine-resource-card\x20.erc--member\x20.erc-kv-row\x20{\x20grid-template-columns:\x20repeat(3,\x201fr);\x20gap:\x202px\x2010px;\x20}\x0aengine-resource-card\x20.erc-kv-row--metrics\x20{\x20border-top:\x201px\x20solid\x20var(--okdb-app-border);\x20padding-top:\x206px;\x20}\x0aengine-resource-card\x20.erc-kv\x20{\x20display:\x20inline-flex;\x20gap:\x204px;\x20align-items:\x20baseline;\x20font-size:\x2011px;\x20line-height:\x201.35;\x20}\x0aengine-resource-card\x20.erc-kv__label\x20{\x20font-size:\x209.5px;\x20text-transform:\x20uppercase;\x20letter-spacing:\x20.04em;\x20color:\x20var(--okdb-app-fg-subtle);\x20flex-shrink:\x200;\x20}\x0aengine-resource-card\x20.erc-kv__val\x20{\x20color:\x20#a8c4d9;\x20overflow:\x20hidden;\x20text-overflow:\x20ellipsis;\x20white-space:\x20nowrap;\x20}\x0aengine-resource-card\x20.erc-progress\x20{\x20height:\x203px;\x20width:\x20100%;\x20border-radius:\x20999px;\x20background:\x20var(--okdb-app-bg-deep);\x20overflow:\x20hidden;\x20}\x0aengine-resource-card\x20.erc-error\x20{\x20font-size:\x2011px;\x20line-height:\x201.5;\x20color:\x20var(--okdb-danger);\x20border-top:\x201px\x20solid\x20var(--okdb-app-border);\x20padding-top:\x206px;\x20padding-left:\x2012px;\x20}\x0a','Engine\x20rebuild\x20started','Restart','5102730shNJev','%;border-radius:999px;background:','Source\x20env','meta','border-color:color-mix(in\x20srgb,\x20var(--okdb-app-border)\x2040%,\x20transparent);\x20color:#7a93a8;\x20background:transparent;','value','$dispatch','2MXliDF','Resume','var(--okdb-accent)','Delete\x20engine\x20\x22','2353914HAQuBl','target_type','Engine\x20restarted','\x20complete','/reset-cursor','member','find','hidetype','push','Queue\x20Worker','Progress','tone','var(--okdb-warning)','key','$attr','typeColor','method','collectionEngine','Mode','Delete','314099tbhkTO','/retry','Engine','Prepare','Rebuild\x20engine\x20\x22','delete','\x0a<div\x20:class=\x22isMember\x20?\x20\x27engine-resource-card\x20erc\x20erc--member\x27\x20:\x20\x27engine-resource-card\x20erc\x20erc--card\x27\x22>\x0a\x0a\x20\x20<!--\x20──\x20Name\x20+\x20type\x20+\x20status\x20+\x20actions\x20row\x20──\x20-->\x0a\x20\x20<div\x20class=\x22erc-header\x22>\x0a\x20\x20\x20\x20<span\x20class=\x22erc-dot\x22\x20:style=\x22\x27background:\x27\x20+\x20statusMeta.color\x20+\x20\x27;box-shadow:0\x200\x200\x203px\x20color-mix(in\x20srgb,\x20\x27\x20+\x20statusMeta.color\x20+\x20\x27\x2013%,\x20transparent);\x27\x22\x20:title=\x22statusMeta.title\x22></span>\x0a\x20\x20\x20\x20<div\x20class=\x22erc-name-group\x22>\x0a\x20\x20\x20\x20\x20\x20<code\x20class=\x22erc-name\x22\x20:title=\x22title\x22>{{\x20displayTitle\x20}}</code>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22titleNamespace\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-ns\x22>{{\x20titleNamespace\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<span\x20class=\x22erc-pill\x22\x20:style=\x22typeBadgeStyle()\x22>{{\x20typeName(eng.role\x20||\x20eng.type)\x20}}</span>\x0a\x20\x20\x20\x20<if\x20:=\x22!running\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-pill\x22\x20:style=\x22statusPillStyle()\x22>{{\x20statusMeta.label\x20}}</span>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20<if\x20:=\x22pipelineLabel\x20&&\x20!hidePipeline\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-pill\x22\x20:style=\x22pipelineBadgeStyle()\x22\x20:title=\x22\x27pipeline:\x20\x27\x20+\x20pipelineName\x22>{{\x20pipelineLabel\x20}}</span>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20<if\x20:=\x22envName\x20&&\x20!isMember\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-pill\x22\x20:style=\x22envBadgeStyle()\x22\x20:title=\x22\x27env:\x20\x27\x20+\x20envName\x22>{{\x20envName\x20}}</span>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20<each\x20:of=\x22healthBadges\x22\x20let:item=\x22badge\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-pill\x22\x20:style=\x22healthBadgeStyle(badge)\x22\x20:title=\x22badge.title\x22>{{\x20badge.text\x20}}</span>\x0a\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20<span\x20class=\x22erc-spacer\x22></span>\x0a\x20\x20\x20\x20<each\x20:of=\x22overflowActions\x22\x20let:item=\x22action\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22runAction(action)\x22\x20:disabled=\x22busy\x22\x20:title=\x22action.title\x20||\x20action.label\x22\x20class=\x22erc-btn\x20erc-btn--muted\x22\x20:style=\x22\x27color:\x27\x20+\x20action.color\x20+\x20\x27;\x27\x22>{{\x20glyph(action.label)\x20}}\x20{{\x20action.label\x20}}</button>\x0a\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20<if\x20:=\x22overflowActions.length\x20>\x200\x20&&\x20primaryAction\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-sep\x22></span>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20<if\x20:=\x22primaryAction\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22runAction(primaryAction)\x22\x20:disabled=\x22busy\x22\x20class=\x22erc-btn\x20erc-btn--primary\x22\x20:style=\x22pillStyle(primaryAction.color)\x22>{{\x20busy\x20?\x20\x27…\x27\x20:\x20(glyph(primaryAction.label)\x20+\x20\x27\x20\x27\x20+\x20primaryAction.label)\x20}}</button>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20──\x20Summary\x20(card\x20mode\x20only)\x20──\x20-->\x0a\x20\x20<if\x20:=\x22description\x20&&\x20!isMember\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22erc-summary\x22>{{\x20description\x20}}</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20──\x20Config\x20metadata\x20──\x20-->\x0a\x20\x20<if\x20:=\x22metadata.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22erc-kv-row\x22>\x0a\x20\x20\x20\x20\x20\x20<each\x20:of=\x22metadata\x22\x20let:item=\x22metric\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-kv\x22\x20:title=\x22metric.title\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-kv__label\x22>{{\x20metric.label\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-kv__val\x22>{{\x20metric.value\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20──\x20Runtime\x20metrics\x20──\x20-->\x0a\x20\x20<if\x20:=\x22metrics.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22erc-kv-row\x20erc-kv-row--metrics\x22>\x0a\x20\x20\x20\x20\x20\x20<each\x20:of=\x22metrics\x22\x20let:item=\x22metric\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-kv\x22\x20:title=\x22metric.title\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-kv__label\x22>{{\x20metric.label\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-kv__val\x22\x20:style=\x22\x27color:\x27\x20+\x20metricToneColor(metric)\x22>{{\x20metric.value\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20──\x20Progress\x20bar\x20──\x20-->\x0a\x20\x20<if\x20:=\x22showProgressBar()\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22erc-progress\x22\x20:title=\x22progressMetric()?.title\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20:style=\x22progressFillStyle()\x22></div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20──\x20Error\x20──\x20-->\x0a\x20\x20<if\x20:=\x22inlineError\x20||\x20error\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22erc-error\x22>⚠\x20{{\x20inlineError\x20||\x20error\x20}}</div>\x0a\x20\x20</if>\x0a\x0a</div>\x0a','\x2033%,\x20transparent)','Engine\x20retry\x20started','Provider','1685gbTFkX','success','stats','confirm','pillStyle','\x20failed','envName','POST','/restart','Stop\x20engine\x20\x22','Indexer','replace','6256ujpwCw','#fb7185','slice','Processor','Type','name','type-context','Error','edit','var(--okdb-info)','Chunk','source_env','Extractor','Search','join','engine-resource-card','suffix','env','Algorithm','Storage','isMember','border-color:','split','var(--okdb-app-fg)','Reset\x20Cursor','hideType','embeddingsMode','10gKzyDE','color-mix(in\x20srgb,\x20','title','Poll','text','true','message','Source','filter',';\x20background:','356hsFixI','Dims','typeBadgeStyle','materializer','Pause','runtime'];_0x5840=function(){return _0x515e42;};return _0x5840();}import{buildEngineBasePath as _0xf72430,compactEngineConfigMetrics as _0x24dc89,compactEngineErrorText as _0x273523,compactEngineRowMetrics as _0x13090e,compactEngineRowStatusBadges as _0x354d4b,compactEngineRowSummary as _0x42b9a1,compactEngineStatusMeta as _0x40050d,isEmbeddingsEngine as _0x372c19}from'../engine-ui-utils.js';function l(_0x1b0d14,_0x2a47c9=!0x1){const _0x4622a7=_0x593b;return null==_0x1b0d14?_0x2a47c9:!0x0===_0x1b0d14||_0x4622a7(0x1cb)===_0x1b0d14||!0x1!==_0x1b0d14&&_0x4622a7(0x21d)!==_0x1b0d14&&Boolean(_0x1b0d14);}const c={'Start':'▶','Stop':'■','Pause':'❚❚','Resume':'▶','Restart':'↻','Retry':'↻','Reset':'⟲','Rebuild':'⚒','Edit':'✎','Type':'↗','Delete':'🗑'};export default{'tag':_0x155102(0x1ba),'attr':{'engine':{},'env':{},'pipeline':{},'hidepipeline':{},'hidetype':{},'hideenv':{},'variant':{},'compact':{},'showdelete':{}},'context':_0x137afe=>({'busy':!0x1,'error':null,'typeLabel':{'embedder':_0x155102(0x218),'indexer':_0x155102(0x1a9),'search':_0x155102(0x1b8),'worker':_0x155102(0x202),'vector-search':'Search','embed-worker':_0x155102(0x202),'materializer':'Materializer','file-extractor':_0x155102(0x1b7),'file-collection':'Collection','file-extractor-worker':'Worker','processor':_0x155102(0x1ae),'queue-worker':_0x155102(0x18a)},'typeColor':{'embedder':_0x155102(0x1b4),'indexer':_0x155102(0x1d7),'vector-search':_0x155102(0x22b),'embed-worker':'var(--okdb-warning)','materializer':_0x155102(0x1ac),'file-extractor':_0x155102(0x205),'file-collection':_0x155102(0x216),'file-extractor-worker':_0x155102(0x18d),'processor':_0x155102(0x1eb),'queue-worker':_0x155102(0x1d7)},get 'eng'(){return _0x137afe['$attr']['engine']??{};},get 'envName'(){const _0x1879ac=_0x155102;return _0x137afe[_0x1879ac(0x18f)][_0x1879ac(0x1bc)]??this[_0x1879ac(0x1fc)]?.['env']??this['eng']?.['_uiEnv']??this[_0x1879ac(0x1fc)]?.[_0x1879ac(0x212)]??this['eng']?.['config']?.[_0x1879ac(0x1b6)]??null;},get 'isMember'(){const _0x48b063=_0x155102;return _0x48b063(0x186)===_0x137afe[_0x48b063(0x18f)]['variant']||_0x48b063(0x204)!==_0x137afe[_0x48b063(0x18f)]['variant']&&l(_0x137afe[_0x48b063(0x18f)][_0x48b063(0x1d6)],!0x1);},get 'hidePipeline'(){const _0x204098=_0x155102;return l(_0x137afe['$attr'][_0x204098(0x209)],!0x1);},get 'hideType'(){const _0x43a079=_0x155102;return l(_0x137afe['$attr'][_0x43a079(0x188)],!0x1);},get 'hideEnv'(){const _0x3b6cc2=_0x155102;return l(_0x137afe['$attr'][_0x3b6cc2(0x1ff)],!0x1);},get 'showDelete'(){const _0x1c2a62=_0x155102;return l(_0x137afe[_0x1c2a62(0x18f)][_0x1c2a62(0x1fa)],!0x1);},get 'basePath'(){const _0xdd4274=_0x155102;return _0xf72430(this[_0xdd4274(0x1fc)],this['envName']);},get 'embeddingsMode'(){const _0x3db7e9=_0x155102;return _0x372c19(this[_0x3db7e9(0x1fc)]);},get 'running'(){const _0x2d6a05=_0x155102;return!!this[_0x2d6a05(0x1fc)]?.[_0x2d6a05(0x213)];},get 'statusMeta'(){const _0x2c72f3=_0x155102;return _0x40050d(this[_0x2c72f3(0x1fc)]);},get 'paused'(){const _0x1dbcbc=_0x155102;return!0x0===this[_0x1dbcbc(0x1fc)]?.[_0x1dbcbc(0x1a1)]?.['paused']||!0x0===this['eng']?.[_0x1dbcbc(0x1d5)]?.['paused']||!0x0===this[_0x1dbcbc(0x1fc)]?.[_0x1dbcbc(0x1f7)];},get 'pipelineName'(){const _0x1f5dec=_0x155102;return _0x137afe[_0x1f5dec(0x18f)][_0x1f5dec(0x1f6)]??this[_0x1f5dec(0x1fc)]?.[_0x1f5dec(0x225)]?.['pipeline']??this[_0x1f5dec(0x1fc)]?.[_0x1f5dec(0x1ee)]?.[_0x1f5dec(0x1f6)]??this[_0x1f5dec(0x1fc)]?.[_0x1f5dec(0x1ee)]?.[_0x1f5dec(0x192)]??null;},get 'pipelineLabel'(){const _0x2087d3=_0x155102;return this['pipelineName']?String(this['pipelineName'])['split'](':')[_0x2087d3(0x200)]():null;},get 'sourceType'(){const _0x45912b=_0x155102;return this['eng']?.[_0x45912b(0x1ee)]?.[_0x45912b(0x1f9)]??this[_0x45912b(0x1fc)]?.[_0x45912b(0x1d5)]?.['source_type']??this[_0x45912b(0x1fc)]?.[_0x45912b(0x1a1)]?.[_0x45912b(0x1f9)]??this[_0x45912b(0x1fc)]?.['stats']?.['indexer']?.[_0x45912b(0x1f9)]??this[_0x45912b(0x1fc)]?.[_0x45912b(0x1ee)]?.[_0x45912b(0x182)]??null;},get 'canRunLifecycle'(){const _0x12827a=_0x155102;return!!this[_0x12827a(0x20d)];},get 'title'(){const _0x17fd02=_0x155102;return this[_0x17fd02(0x1fc)]?.[_0x17fd02(0x1b0)]??this['eng']?.[_0x17fd02(0x18e)]??_0x17fd02(0x197);},get 'displayTitle'(){const _0x1cda47=_0x155102,_0x2ad27c=String(this[_0x1cda47(0x1c8)]??'');return _0x2ad27c[_0x1cda47(0x1d8)](':')?_0x2ad27c['split'](':')[_0x1cda47(0x200)]():_0x2ad27c;},get 'titleNamespace'(){const _0x432054=_0x155102,_0x1a9556=String(this[_0x432054(0x1c8)]??'');return _0x1a9556['includes'](':')?_0x1a9556[_0x432054(0x1c1)](':')[_0x432054(0x1ad)](0x0,-0x1)[_0x432054(0x1b9)](':'):null;},get 'description'(){const _0x308f95=_0x155102;return _0x42b9a1(this[_0x308f95(0x1fc)]);},get 'inlineError'(){const _0x59160b=_0x155102;return _0x273523(this[_0x59160b(0x1fc)]);},get 'metadata'(){const _0x1eed32=_0x155102,_0x5df5a0=[_0x1eed32(0x1cd),_0x1eed32(0x1fb),_0x1eed32(0x1be),'Embedder',_0x1eed32(0x1d1),_0x1eed32(0x1bd),_0x1eed32(0x19e),'Model',_0x1eed32(0x203),_0x1eed32(0x1c9),_0x1eed32(0x206),_0x1eed32(0x193),_0x1eed32(0x198),_0x1eed32(0x1b5)],_0x32fd0b=new Map(_0x24dc89(this[_0x1eed32(0x1fc)])['map'](_0x5905ec=>[_0x5905ec['label'],_0x5905ec])),_0x557dfc=[];for(const _0x177062 of _0x5df5a0){if(this[_0x1eed32(0x1bf)]&&_0x1eed32(0x218)===_0x177062)continue;const _0x130ff3=_0x32fd0b['get'](_0x177062);_0x130ff3&&(_0x557dfc[_0x1eed32(0x189)](_0x130ff3),_0x32fd0b[_0x1eed32(0x19a)](_0x177062));}for(const _0x2f58d0 of _0x32fd0b[_0x1eed32(0x21e)]())(this[_0x1eed32(0x1bf)]||this[_0x1eed32(0x219)])&&_0x1eed32(0x224)===_0x2f58d0[_0x1eed32(0x1ec)]||_0x557dfc[_0x1eed32(0x189)](_0x2f58d0);return _0x557dfc[_0x1eed32(0x1ad)](0x0,this[_0x1eed32(0x1bf)]?0x6:0xa);},get 'metrics'(){const _0x464635=_0x155102,_0x2d0876=['Field','Mode',_0x464635(0x198),_0x464635(0x1b5),'Embedder',_0x464635(0x19e),'Model',_0x464635(0x1bd)];return _0x13090e(this['eng'])[_0x464635(0x1ce)](_0x34783f=>!_0x2d0876['includes'](_0x34783f[_0x464635(0x1ec)]))[_0x464635(0x1ad)](0x0,this[_0x464635(0x1bf)]?0x5:0x8);},get 'healthBadges'(){const _0x254926=_0x155102,_0x280f80=this['statusMeta']['label'];return _0x354d4b(this[_0x254926(0x1fc)])[_0x254926(0x1ce)](_0x40c479=>_0x40c479?.['text']&&_0x40c479[_0x254926(0x1ca)]!==_0x280f80)[_0x254926(0x1ce)](_0x5c3bae=>!(this[_0x254926(0x1e2)]&&'healthy'===_0x5c3bae[_0x254926(0x1ca)]))[_0x254926(0x1ad)](0x0,0x2);},get 'primaryAction'(){const _0x79cc8e=_0x155102;return this[_0x79cc8e(0x1de)]?this[_0x79cc8e(0x1c5)]?this[_0x79cc8e(0x1e2)]?{'label':'Stop','method':_0x79cc8e(0x1a6),'suffix':'/stop','color':_0x79cc8e(0x18d),'confirm':_0x79cc8e(0x1a8)+this[_0x79cc8e(0x1c8)]+'\x22?','toast':_0x79cc8e(0x20f)}:_0x79cc8e(0x217)===this[_0x79cc8e(0x1fc)]?.[_0x79cc8e(0x21b)]?{'label':_0x79cc8e(0x221),'method':'POST','suffix':_0x79cc8e(0x1a7),'color':_0x79cc8e(0x1eb),'confirm':_0x79cc8e(0x1dc)+this[_0x79cc8e(0x1c8)]+'\x22?','toast':_0x79cc8e(0x183)}:{'label':_0x79cc8e(0x211),'method':_0x79cc8e(0x1a6),'suffix':_0x79cc8e(0x1ef),'color':_0x79cc8e(0x205),'confirm':null,'toast':'Engine\x20started'}:'error'===this[_0x79cc8e(0x1fc)]?.[_0x79cc8e(0x21b)]?{'label':_0x79cc8e(0x1f8),'method':_0x79cc8e(0x1a6),'suffix':_0x79cc8e(0x196),'color':_0x79cc8e(0x1eb),'confirm':null,'toast':_0x79cc8e(0x19d)}:this['paused']?{'label':_0x79cc8e(0x22a),'method':_0x79cc8e(0x1a6),'suffix':_0x79cc8e(0x1e3),'color':_0x79cc8e(0x205),'confirm':null,'toast':_0x79cc8e(0x1dd)}:{'label':_0x79cc8e(0x1d4),'method':_0x79cc8e(0x1a6),'suffix':'/pause','color':'var(--okdb-warning)','confirm':null,'toast':_0x79cc8e(0x1f1)}:null;},get 'overflowActions'(){const _0x4a18f7=_0x155102,_0xbf30ac=[];return this[_0x4a18f7(0x1de)]&&(_0xbf30ac[_0x4a18f7(0x189)]({'key':'restart','label':_0x4a18f7(0x221),'method':'POST','suffix':'/restart','color':_0x4a18f7(0x1f2),'confirm':this[_0x4a18f7(0x1c5)]?_0x4a18f7(0x1dc)+this[_0x4a18f7(0x1c8)]+'\x22?':null,'toast':_0x4a18f7(0x183)}),this[_0x4a18f7(0x1c5)]||_0xbf30ac[_0x4a18f7(0x189)]({'key':'pause','label':this[_0x4a18f7(0x1f7)]?_0x4a18f7(0x22a):_0x4a18f7(0x1d4),'method':'POST','suffix':this[_0x4a18f7(0x1f7)]?_0x4a18f7(0x1e3):'/pause','color':this['paused']?_0x4a18f7(0x205):_0x4a18f7(0x18d),'toast':this[_0x4a18f7(0x1f7)]?_0x4a18f7(0x1dd):_0x4a18f7(0x1f1)}),_0x4a18f7(0x1d3)===this[_0x4a18f7(0x1fc)]?.['type']&&(_0xbf30ac[_0x4a18f7(0x189)]({'key':_0x4a18f7(0x201),'label':'Reset','title':_0x4a18f7(0x1c3),'method':_0x4a18f7(0x1a6),'suffix':_0x4a18f7(0x185),'color':_0x4a18f7(0x1b4),'confirm':'Reset\x20cursor\x20for\x20engine\x20\x22'+this[_0x4a18f7(0x1c8)]+'\x22?','toast':'Engine\x20cursor\x20reset'}),_0xbf30ac[_0x4a18f7(0x189)]({'key':_0x4a18f7(0x1d9),'label':'Rebuild','method':_0x4a18f7(0x1a6),'suffix':'/rebuild','color':_0x4a18f7(0x205),'confirm':_0x4a18f7(0x199)+this[_0x4a18f7(0x1c8)]+'\x22?','toast':_0x4a18f7(0x220)}))),_0xbf30ac[_0x4a18f7(0x189)]({'key':_0x4a18f7(0x1b3),'label':'Edit','color':_0x4a18f7(0x22b),'local':_0x4a18f7(0x1b3)}),this[_0x4a18f7(0x1e4)]&&!this[_0x4a18f7(0x1c4)]&&_0xbf30ac['push']({'key':_0x4a18f7(0x1f0),'label':_0x4a18f7(0x1af),'title':'View\x20Type\x20Context','color':_0x4a18f7(0x1d7),'local':_0x4a18f7(0x1f0)}),this[_0x4a18f7(0x1e8)]&&this[_0x4a18f7(0x1de)]&&_0xbf30ac[_0x4a18f7(0x189)]({'key':_0x4a18f7(0x19a),'label':_0x4a18f7(0x194),'method':_0x4a18f7(0x1fe),'suffix':'','color':'var(--okdb-danger)','confirm':_0x4a18f7(0x22c)+this['title']+'\x22?','toast':_0x4a18f7(0x20e),'destructive':!0x0}),_0xbf30ac;},'typeName'(_0x295018){const _0x29a606=_0x155102;return this[_0x29a606(0x21a)][_0x295018]||_0x295018||_0x29a606(0x197);},'glyph':_0x44f070=>c[_0x44f070]??'','pillStyle'(_0x4c0e1f){const _0x1dc4e9=_0x155102,_0x3bf764=_0x4c0e1f[_0x1dc4e9(0x210)]('var(');return _0x1dc4e9(0x1c0)+(_0x3bf764?_0x1dc4e9(0x1c7)+_0x4c0e1f+_0x1dc4e9(0x19c):_0x4c0e1f+'55')+_0x1dc4e9(0x20a)+_0x4c0e1f+_0x1dc4e9(0x1cf)+(_0x3bf764?_0x1dc4e9(0x1c7)+_0x4c0e1f+_0x1dc4e9(0x1ea):_0x4c0e1f+'12')+';';},'typeBadgeStyle'(){const _0x55d2d7=_0x155102;return this[_0x55d2d7(0x1a3)](this[_0x55d2d7(0x190)][this[_0x55d2d7(0x1fc)]?.[_0x55d2d7(0x1f0)]]??'var(--okdb-app-fg-muted)');},'pipelineBadgeStyle':()=>'border-color:#6366f144;\x20color:#a5b4fc;\x20background:#6366f110;','envBadgeStyle':()=>_0x155102(0x226),'healthBadgeStyle'(_0x5467cb){const _0xbaa491=_0x155102;return this['pillStyle'](_0x5467cb?.[_0xbaa491(0x1e5)]??'var(--okdb-app-fg-muted)');},'typePillStyle'(){const _0x48596a=_0x155102;return this[_0x48596a(0x1d2)]();},'statusPillStyle'(){const _0x175a75=_0x155102;return this[_0x175a75(0x1a3)](this[_0x175a75(0x1e0)][_0x175a75(0x1e5)]??_0x175a75(0x1f2));},'metricToneColor'(_0x2e0e22=null){const _0x80e2a3=_0x155102;if(_0x80e2a3(0x1b2)===_0x2e0e22?.[_0x80e2a3(0x1ec)]&&Number(String(_0x2e0e22[_0x80e2a3(0x227)])[_0x80e2a3(0x1aa)](/,/g,''))<=0x0)return _0x80e2a3(0x1f2);switch(_0x2e0e22?.[_0x80e2a3(0x18c)]){case _0x80e2a3(0x1df):return _0x80e2a3(0x1ed);case _0x80e2a3(0x208):return'var(--okdb-warning)';default:return _0x80e2a3(0x1c2);}},'metricPercent'(_0x6def76=null){const _0x25f64e=_0x155102,_0x26313a=String(_0x6def76?.[_0x25f64e(0x227)]??'')['match'](/(?:\(|\b)(\d{1,3})%/);if(!_0x26313a)return null;const _0x23f9ef=Number(_0x26313a[0x1]);return Number[_0x25f64e(0x1e1)](_0x23f9ef)?Math['max'](0x0,Math[_0x25f64e(0x1f3)](0x64,_0x23f9ef)):null;},'progressMetric'(){const _0x42044b=_0x155102;return _0x13090e(this[_0x42044b(0x1fc)])[_0x42044b(0x187)](_0x2db8e4=>_0x42044b(0x18b)===_0x2db8e4?.[_0x42044b(0x1ec)])??null;},'progressFillStyle'(){const _0x39c657=_0x155102,_0x493907=this[_0x39c657(0x1f5)]();return'height:100%;width:'+(this['metricPercent'](_0x493907)??0x0)+_0x39c657(0x223)+(_0x39c657(0x1df)===_0x493907?.[_0x39c657(0x18c)]?'var(--okdb-danger)':'warning'===_0x493907?.[_0x39c657(0x18c)]?_0x39c657(0x18d):_0x39c657(0x205))+';';},'showProgressBar'(){const _0x53696f=_0x155102,_0x3b5bc2=this['metricPercent'](this[_0x53696f(0x1f5)]());return null!=_0x3b5bc2&&_0x3b5bc2<0x64;},async 'runAction'(_0x69b1bb){const _0x47b089=_0x155102;if(_0x69b1bb){if('edit'!==_0x69b1bb[_0x47b089(0x215)]){if(_0x47b089(0x1f0)!==_0x69b1bb['local']){if(this[_0x47b089(0x20d)]&&(!_0x69b1bb['confirm']||await _0x137afe[_0x47b089(0x20b)][_0x47b089(0x1f4)][_0x47b089(0x1e6)][_0x47b089(0x1a2)](_0x69b1bb[_0x47b089(0x1a2)]))){this[_0x47b089(0x1db)]=!0x0,this['error']=null;try{const _0xd40e04=await fetch(''+this[_0x47b089(0x20d)]+(_0x69b1bb[_0x47b089(0x1bb)]??''),{'method':_0x69b1bb[_0x47b089(0x191)]??_0x47b089(0x1a6)}),_0x136ff6=await _0xd40e04[_0x47b089(0x1e7)]()[_0x47b089(0x21c)](()=>({}));if(!_0xd40e04['ok'])throw new Error(_0x136ff6?.[_0x47b089(0x217)]?.[_0x47b089(0x1cc)]||_0x69b1bb[_0x47b089(0x1ec)]+_0x47b089(0x1a4));_0x137afe[_0x47b089(0x20b)][_0x47b089(0x1f4)]?.[_0x47b089(0x20c)]?.[_0x47b089(0x1a0)]?.(_0x69b1bb['toast']??_0x69b1bb[_0x47b089(0x1ec)]+_0x47b089(0x184)),_0x137afe[_0x47b089(0x228)](_0x47b089(0x1da),_0x69b1bb[_0x47b089(0x18e)]??_0x69b1bb[_0x47b089(0x1ec)]),_0x137afe[_0x47b089(0x228)]('refresh');}catch(_0x3d0904){this['error']=_0x3d0904?.[_0x47b089(0x1cc)]||String(_0x3d0904),_0x137afe[_0x47b089(0x20b)][_0x47b089(0x1f4)]?.[_0x47b089(0x20c)]?.[_0x47b089(0x217)]?.(this['error']);}finally{this['busy']=!0x1;}}}else _0x137afe[_0x47b089(0x228)](_0x47b089(0x1b1),{'engine':this[_0x47b089(0x1fc)],'type':this[_0x47b089(0x1e4)],'env':this[_0x47b089(0x1a5)]});}else _0x137afe[_0x47b089(0x228)](_0x47b089(0x1b3),this[_0x47b089(0x1fc)]);}}}),'template':_0x155102(0x19b),'style':_0x155102(0x21f)};
@@ -1 +1 @@
1
- function _0x3e33(_0x1e3bfe,_0x593c80){_0x1e3bfe=_0x1e3bfe-0xa6;var _0x570c7c=_0x570c();var _0x3e33d8=_0x570c7c[_0x1e3bfe];return _0x3e33d8;}var _0xfb5671=_0x3e33;(function(_0x336ed8,_0x38582c){var _0x5e4a7b=_0x3e33,_0x48455e=_0x336ed8();while(!![]){try{var _0x43ac80=parseInt(_0x5e4a7b(0xbb))/0x1*(-parseInt(_0x5e4a7b(0xac))/0x2)+parseInt(_0x5e4a7b(0xc3))/0x3*(-parseInt(_0x5e4a7b(0xaf))/0x4)+parseInt(_0x5e4a7b(0xb7))/0x5*(parseInt(_0x5e4a7b(0xbc))/0x6)+parseInt(_0x5e4a7b(0xb6))/0x7+parseInt(_0x5e4a7b(0xc6))/0x8+-parseInt(_0x5e4a7b(0xb4))/0x9*(-parseInt(_0x5e4a7b(0xb3))/0xa)+-parseInt(_0x5e4a7b(0xa8))/0xb;if(_0x43ac80===_0x38582c)break;else _0x48455e['push'](_0x48455e['shift']());}catch(_0x7d96eb){_0x48455e['push'](_0x48455e['shift']());}}}(_0x570c,0x360c9));function _0x570c(){var _0xe6082=['Edit','2060120ESwfav',';background:','var(--okdb-app-border)','var(--okdb-app-surface)','6092691YIHzOi','\x0a<button\x0a\x20\x20@click=\x22select()\x22\x0a\x20\x20:style=\x22rootStyle\x22\x0a>\x0a\x20\x20<span\x20:style=\x22\x27width:6px;height:6px;border-radius:50%;flex-shrink:0;background:\x27\x20+\x20tone\x22></span>\x0a\x20\x20<span\x20:style=\x22\x27font-size:10px;padding:1px\x206px;border-radius:4px;border:1px\x20solid\x20\x27\x20+\x20labelAlpha(rowLabelColor)\x20+\x20\x27;color:\x27\x20+\x20rowLabelColor\x20+\x20\x27;min-width:54px;text-align:center;flex-shrink:0;\x27\x22>{{\x20rowLabel\x20}}</span>\x0a\x20\x20<span\x20style=\x22flex:1;font-size:12px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\x22>{{\x20rowTitle\x20}}</span>\x0a\x20\x20<if\x20:=\x22rowSubtitle\x22>\x0a\x20\x20\x20\x20<span\x20style=\x22font-size:11px;opacity:.4;font-style:italic;flex-shrink:0;\x22>{{\x20rowSubtitle\x20}}</span>\x0a\x20\x20</if>\x0a\x20\x20<slot\x20/>\x0a\x20\x20<if\x20:=\x22hasActionLabel\x22>\x0a\x20\x20\x20\x20<span\x20style=\x22font-size:11px;padding:2px\x208px;border-radius:999px;border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-accent)\x2027%,\x20transparent);color:var(--okdb-accent);flex-shrink:0;\x22>{{\x20rowActionLabel\x20}}</span>\x0a\x20\x20</if>\x0a</button>\x0a','startsWith','labelColor','22OWSfZf','selected','color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent)','1904PCFzeB','engine','$dispatch','rowActionLabel','183570wSvxFG','171lHtyAE','true','1392006jgqDIt','30pkasyR','actionLabel','name','engine-row-item','20778EGbuQs','353844uiHPPd','isSelected','type',';cursor:pointer;width:100%;text-align:left;color:inherit;min-width:0;','display:flex;align-items:center;gap:7px;padding:7px\x209px;border-radius:6px;border:1px\x20solid\x20','$attr','var(--okdb-app-bg-deep)','978wEdVpi','eng'];_0x570c=function(){return _0xe6082;};return _0x570c();}import{statusTone as _0x44feca}from'../engine-ui-utils.js';export default{'tag':_0xfb5671(0xba),'attr':{'engine':{},'label':{},'labelColor':{},'subtitle':{},'title':{},'actionLabel':{},'selected':{}},'context':_0x2b7408=>({get 'eng'(){var _0x26d761=_0xfb5671;return _0x2b7408[_0x26d761(0xc1)][_0x26d761(0xb0)]??{};},get 'tone'(){var _0x4fd6b2=_0xfb5671;return _0x44feca(this[_0x4fd6b2(0xc4)]);},get 'rowTitle'(){var _0x4e9562=_0xfb5671;return _0x2b7408[_0x4e9562(0xc1)]['title']??this[_0x4e9562(0xc4)][_0x4e9562(0xb9)]??'engine';},get 'rowLabel'(){var _0x40abd9=_0xfb5671;return _0x2b7408[_0x40abd9(0xc1)]['label']??this[_0x40abd9(0xc4)][_0x40abd9(0xbe)]??'engine';},get 'rowLabelColor'(){var _0x230108=_0xfb5671;return _0x2b7408[_0x230108(0xc1)][_0x230108(0xab)]??'var(--okdb-accent)';},'labelAlpha':(_0x2e8b45,_0x56cc78=0x1b)=>_0x2e8b45[_0xfb5671(0xaa)]('var(')?'color-mix(in\x20srgb,\x20'+_0x2e8b45+'\x20'+_0x56cc78+'%,\x20transparent)':_0x2e8b45+'44',get 'rowSubtitle'(){return _0x2b7408['$attr']['subtitle']??'';},get 'rowActionLabel'(){var _0x20229a=_0xfb5671;return _0x2b7408[_0x20229a(0xc1)][_0x20229a(0xb8)]??_0x20229a(0xc5);},get 'hasActionLabel'(){var _0x200dc8=_0xfb5671;return!!(this[_0x200dc8(0xb2)]||'')['trim']();},get 'isSelected'(){var _0x5e13a1=_0xfb5671;return!0x0===_0x2b7408[_0x5e13a1(0xc1)]['selected']||_0x5e13a1(0xb5)===_0x2b7408[_0x5e13a1(0xc1)][_0x5e13a1(0xad)];},get 'rootStyle'(){var _0x547654=_0xfb5671;return _0x547654(0xc0)+(this[_0x547654(0xbd)]?_0x547654(0xae):_0x547654(0xa6))+_0x547654(0xc7)+(this['isSelected']?_0x547654(0xa7):_0x547654(0xc2))+_0x547654(0xbf);},'select'(){var _0x4bd00c=_0xfb5671;_0x2b7408[_0x4bd00c(0xb1)]('select',this[_0x4bd00c(0xc4)]);}}),'template':_0xfb5671(0xa9)};
1
+ var _0x14d3f5=_0x25d9;(function(_0x30f85c,_0x3280bc){var _0x4c364a=_0x25d9,_0x6418f=_0x30f85c();while(!![]){try{var _0x5a2863=-parseInt(_0x4c364a(0xd0))/0x1*(parseInt(_0x4c364a(0xcb))/0x2)+parseInt(_0x4c364a(0xd4))/0x3*(parseInt(_0x4c364a(0xd9))/0x4)+parseInt(_0x4c364a(0xca))/0x5*(parseInt(_0x4c364a(0xd2))/0x6)+-parseInt(_0x4c364a(0xe1))/0x7+-parseInt(_0x4c364a(0xd7))/0x8*(parseInt(_0x4c364a(0xec))/0x9)+parseInt(_0x4c364a(0xcd))/0xa+parseInt(_0x4c364a(0xe6))/0xb*(-parseInt(_0x4c364a(0xde))/0xc);if(_0x5a2863===_0x3280bc)break;else _0x6418f['push'](_0x6418f['shift']());}catch(_0x452dcc){_0x6418f['push'](_0x6418f['shift']());}}}(_0x5738,0xad1e8));function _0x5738(){var _0x17d9f1=['$dispatch','Edit','3636591ShaGuy','title','actionLabel','subtitle','trim','516923UTrtYX','label','true','select','rowActionLabel','$attr','9LOpGVy','startsWith','var(--okdb-app-border)','%,\x20transparent)','5RaSVrK','2FQqkEU','color-mix(in\x20srgb,\x20','7396580cWfNYp','var(--okdb-app-bg-deep)','engine','485552YoDIKz','\x0a<button\x0a\x20\x20@click=\x22select()\x22\x0a\x20\x20:style=\x22rootStyle\x22\x0a>\x0a\x20\x20<span\x20:style=\x22\x27width:6px;height:6px;border-radius:50%;flex-shrink:0;background:\x27\x20+\x20tone\x22></span>\x0a\x20\x20<span\x20:style=\x22\x27font-size:10px;padding:1px\x206px;border-radius:4px;border:1px\x20solid\x20\x27\x20+\x20labelAlpha(rowLabelColor)\x20+\x20\x27;color:\x27\x20+\x20rowLabelColor\x20+\x20\x27;min-width:54px;text-align:center;flex-shrink:0;\x27\x22>{{\x20rowLabel\x20}}</span>\x0a\x20\x20<span\x20style=\x22flex:1;font-size:12px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\x22>{{\x20rowTitle\x20}}</span>\x0a\x20\x20<if\x20:=\x22rowSubtitle\x22>\x0a\x20\x20\x20\x20<span\x20style=\x22font-size:11px;opacity:.4;font-style:italic;flex-shrink:0;\x22>{{\x20rowSubtitle\x20}}</span>\x0a\x20\x20</if>\x0a\x20\x20<slot\x20/>\x0a\x20\x20<if\x20:=\x22hasActionLabel\x22>\x0a\x20\x20\x20\x20<span\x20style=\x22font-size:11px;padding:2px\x208px;border-radius:999px;border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-accent)\x2027%,\x20transparent);color:var(--okdb-accent);flex-shrink:0;\x22>{{\x20rowActionLabel\x20}}</span>\x0a\x20\x20</if>\x0a</button>\x0a','4563096lcFsoh','name','9159NdXXCZ','eng','display:flex;align-items:center;gap:7px;padding:7px\x209px;border-radius:6px;border:1px\x20solid\x20','3083248BmOwkq','selected','1832kDKKRr','var(','var(--okdb-accent)','engine-row-item','var(--okdb-app-surface)','204zDZkDz'];_0x5738=function(){return _0x17d9f1;};return _0x5738();}function _0x25d9(_0x38982b,_0x494eb0){_0x38982b=_0x38982b-0xc7;var _0x5738e9=_0x5738();var _0x25d9ea=_0x5738e9[_0x38982b];return _0x25d9ea;}import{statusTone as _0x1676dd}from'../engine-ui-utils.js';export default{'tag':_0x14d3f5(0xdc),'attr':{'engine':{},'label':{},'labelColor':{},'subtitle':{},'title':{},'actionLabel':{},'selected':{}},'context':_0x195fb8=>({get 'eng'(){var _0x3582e8=_0x14d3f5;return _0x195fb8[_0x3582e8(0xeb)][_0x3582e8(0xcf)]??{};},get 'tone'(){return _0x1676dd(this['eng']);},get 'rowTitle'(){var _0x16502b=_0x14d3f5;return _0x195fb8[_0x16502b(0xeb)][_0x16502b(0xe2)]??this[_0x16502b(0xd5)][_0x16502b(0xd3)]??_0x16502b(0xcf);},get 'rowLabel'(){var _0x493269=_0x14d3f5;return _0x195fb8[_0x493269(0xeb)][_0x493269(0xe7)]??this[_0x493269(0xd5)]['type']??_0x493269(0xcf);},get 'rowLabelColor'(){var _0xb7e09d=_0x14d3f5;return _0x195fb8[_0xb7e09d(0xeb)]['labelColor']??_0xb7e09d(0xdb);},'labelAlpha':(_0xd56577,_0xa06e39=0x1b)=>_0xd56577[_0x14d3f5(0xc7)](_0x14d3f5(0xda))?_0x14d3f5(0xcc)+_0xd56577+'\x20'+_0xa06e39+_0x14d3f5(0xc9):_0xd56577+'44',get 'rowSubtitle'(){var _0x29e198=_0x14d3f5;return _0x195fb8[_0x29e198(0xeb)][_0x29e198(0xe4)]??'';},get 'rowActionLabel'(){var _0x516b36=_0x14d3f5;return _0x195fb8['$attr'][_0x516b36(0xe3)]??_0x516b36(0xe0);},get 'hasActionLabel'(){var _0x2b241e=_0x14d3f5;return!!(this[_0x2b241e(0xea)]||'')[_0x2b241e(0xe5)]();},get 'isSelected'(){var _0x2d06c6=_0x14d3f5;return!0x0===_0x195fb8['$attr']['selected']||_0x2d06c6(0xe8)===_0x195fb8[_0x2d06c6(0xeb)][_0x2d06c6(0xd8)];},get 'rootStyle'(){var _0x53f648=_0x14d3f5;return _0x53f648(0xd6)+(this['isSelected']?'color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent)':_0x53f648(0xc8))+';background:'+(this['isSelected']?_0x53f648(0xdd):_0x53f648(0xce))+';cursor:pointer;width:100%;text-align:left;color:inherit;min-width:0;';},'select'(){var _0x404ab6=_0x14d3f5;_0x195fb8[_0x404ab6(0xdf)](_0x404ab6(0xe9),this[_0x404ab6(0xd5)]);}}),'template':_0x14d3f5(0xd1)};
@@ -1 +1 @@
1
- const _0x224a85=_0x493d;function _0x493d(_0x1c3754,_0x312219){_0x1c3754=_0x1c3754-0x118;const _0x33bbd2=_0x33bb();let _0x493d77=_0x33bbd2[_0x1c3754];return _0x493d77;}(function(_0x58ed1f,_0x412710){const _0x4ef6e8=_0x493d,_0x1e05b6=_0x58ed1f();while(!![]){try{const _0xeb7887=-parseInt(_0x4ef6e8(0x16f))/0x1+parseInt(_0x4ef6e8(0x166))/0x2*(parseInt(_0x4ef6e8(0x196))/0x3)+parseInt(_0x4ef6e8(0x140))/0x4+parseInt(_0x4ef6e8(0x126))/0x5*(parseInt(_0x4ef6e8(0x170))/0x6)+parseInt(_0x4ef6e8(0x154))/0x7*(-parseInt(_0x4ef6e8(0x195))/0x8)+-parseInt(_0x4ef6e8(0x1b2))/0x9+parseInt(_0x4ef6e8(0x13a))/0xa;if(_0xeb7887===_0x412710)break;else _0x1e05b6['push'](_0x1e05b6['shift']());}catch(_0x342deb){_0x1e05b6['push'](_0x1e05b6['shift']());}}}(_0x33bb,0x4f995));import _0x1b8cfb from'./engine-panel-shell.ok.js';import _0x418dcd from'../../functions/modals/function-modal.ok.js';import{ENGINE_PANEL_SHARED_STYLE as _0x2b5256}from'../engine-panel-shared-style.js';import{buildEngineBasePath as _0x2a72f3,formatJsonValue as _0x3d4a0d,getApiErrorMessage as _0x2a7ee6,openFunctionRoute as _0x3096d,resolveEngineEnvName as _0x2c2102}from'../engine-ui-utils.js';function o(_0x2c0f08,_0x4911e3='—'){const _0x529e6f=_0x493d;return null==_0x2c0f08||''===_0x2c0f08?_0x4911e3:Array[_0x529e6f(0x153)](_0x2c0f08)?_0x2c0f08[_0x529e6f(0x118)]?_0x2c0f08[_0x529e6f(0x173)](',\x20'):_0x4911e3:'boolean'==typeof _0x2c0f08?_0x2c0f08?'yes':'no':String(_0x2c0f08);}function c(_0x57f7d4,_0x60b0b8=[]){const _0x1315ed=_0x493d;return function(_0x48c93b){const _0x686103=_0x493d;return!!_0x48c93b&&_0x686103(0x199)==typeof _0x48c93b&&!Array['isArray'](_0x48c93b);}(_0x57f7d4)?Object[_0x1315ed(0x11a)](_0x57f7d4)[_0x1315ed(0x194)](([_0x62fbac,_0x42cae8])=>!_0x60b0b8['includes'](_0x62fbac)&&(null==_0x42cae8||['string',_0x1315ed(0x128),_0x1315ed(0x188)][_0x1315ed(0x162)](typeof _0x42cae8))):[];}function d(_0x2ae7fd,_0x594e76){const _0x498e48=_0x493d;if(''===_0x2ae7fd||null==_0x2ae7fd)return null;const _0x2ed44b=Math[_0x498e48(0x144)](Number(_0x2ae7fd));if(!Number[_0x498e48(0x11e)](_0x2ed44b)||_0x2ed44b<0x1)throw new Error(_0x594e76+_0x498e48(0x192));return _0x2ed44b;}function p(_0x3742c4){const _0xf7173f=_0x493d;if(null==_0x3742c4||''===_0x3742c4)return'—';const _0x24e54b=Number(_0x3742c4);if(!Number[_0xf7173f(0x11e)](_0x24e54b))return String(_0x3742c4);const _0x1e50b1=_0x24e54b<=0x1?0x64*_0x24e54b:_0x24e54b;return Math['round'](_0x1e50b1)+'%';}export default{'tag':_0x224a85(0x156),'dependencies':[_0x1b8cfb,_0x418dcd],'attr':{'engine':{},'env':{},'modal':{}},'context':_0xe5eb0c=>({'saveConfigBusy':!0x1,'saveConfigError':null,'materializerRepairBusy':!0x1,'materializerRepairError':null,'showRawRuntime':!0x1,'showRawStats':!0x1,'showRawConfig':!0x1,'workerConfigDraft':{'concurrency':'','pollInterval':'','ttl':''},get 'eng'(){const _0x3235de=_0x224a85;return _0xe5eb0c[_0x3235de(0x1aa)][_0x3235de(0x186)]??{};},get 'envName'(){const _0x3a6c5f=_0x224a85;return _0x2c2102(this['eng'],_0xe5eb0c[_0x3a6c5f(0x1aa)]['env']??null);},get 'basePath'(){const _0x22467a=_0x224a85;return _0x2a72f3(this[_0x22467a(0x18b)],this['envName']);},get 'isQueueWorker'(){const _0x2d6965=_0x224a85;return _0x2d6965(0x179)===this['eng'][_0x2d6965(0x177)];},get 'isProcessor'(){const _0x5826c6=_0x224a85;return'processor'===this['eng'][_0x5826c6(0x177)];},get 'isMaterializer'(){const _0x6a2756=_0x224a85;return _0x6a2756(0x16a)===this['eng'][_0x6a2756(0x177)];},get 'hasSpecializedPipelineView'(){return this['isQueueWorker']||this['isProcessor']||this['isMaterializer'];},get 'stateText'(){const _0x1788db=_0x224a85;return _0x1788db(0x17f)===this[_0x1788db(0x18b)]['status']?_0x1788db(0x17f):_0x1788db(0x120)===this[_0x1788db(0x18b)][_0x1788db(0x1a7)]?_0x1788db(0x120):this[_0x1788db(0x18b)]['isRunning']||'online'===this[_0x1788db(0x18b)]['status']?_0x1788db(0x174):this['eng']['status']||_0x1788db(0x14f);},get 'reasonText'(){const _0x3d6580=_0x224a85,_0x8c3823=this['eng']['reason']??null;return _0x8c3823&&_0x8c3823!==this[_0x3d6580(0x17d)]?String(_0x8c3823)[_0x3d6580(0x1a4)](/_/g,'\x20'):'—';},get 'affinityText'(){const _0xf05ff4=_0x224a85;return o(this[_0xf05ff4(0x18b)][_0xf05ff4(0x18e)],_0xf05ff4(0x1ac));},get 'updatedText'(){const _0x4bc91c=_0x224a85;return function(_0x461030){const _0x1c34d5=_0x493d;if(!_0x461030)return'—';try{return new Date(_0x461030)[_0x1c34d5(0x1a6)]();}catch{return String(_0x461030);}}(this['eng']['runtime']?.[_0x4bc91c(0x150)]);},get 'runtimePreviewEntries'(){const _0xbcab80=_0x224a85;return c(this['eng']['runtime'],[_0xbcab80(0x16d),_0xbcab80(0x131),_0xbcab80(0x17f),_0xbcab80(0x174),_0xbcab80(0x150)]);},get 'statsPreviewEntries'(){const _0x371f9e=_0x224a85;return c(this['eng'][_0x371f9e(0x14d)],[_0x371f9e(0x1a3),_0x371f9e(0x14b),_0x371f9e(0x19e),'handler',_0x371f9e(0x137),_0x371f9e(0x19f),_0x371f9e(0x13c),'running']);},get 'configPreviewEntries'(){const _0x13bc74=_0x224a85;return c(this[_0x13bc74(0x18b)][_0x13bc74(0x11b)],['job_type',_0x13bc74(0x19e),_0x13bc74(0x183),_0x13bc74(0x137),_0x13bc74(0x160),'ttl']);},get 'workerStats'(){const _0x51a7b3=_0x224a85;return this[_0x51a7b3(0x18b)][_0x51a7b3(0x14d)]??{};},get 'pipelineStats'(){const _0x36931e=_0x224a85;return this[_0x36931e(0x18b)][_0x36931e(0x14d)]??{};},get 'workerHandler'(){const _0x339165=_0x224a85;return this[_0x339165(0x18f)][_0x339165(0x183)]??this[_0x339165(0x18b)]['config']?.[_0x339165(0x183)]??null;},get 'pipelineHandler'(){const _0x1999ff=_0x224a85;return this[_0x1999ff(0x13f)][_0x1999ff(0x183)]??this[_0x1999ff(0x18b)][_0x1999ff(0x11b)]?.[_0x1999ff(0x183)]??null;},get 'handlerName'(){const _0xfe0eef=_0x224a85;return this[_0xfe0eef(0x14e)]?.[_0xfe0eef(0x159)]??null;},get 'handlerEnv'(){const _0x398bd5=_0x224a85;return this[_0x398bd5(0x14e)]?.[_0x398bd5(0x16b)]??this[_0x398bd5(0x13b)]??'—';},get 'canOpenHandlerFunction'(){const _0x55f74e=_0x224a85;return!!this[_0x55f74e(0x1a9)];},get 'workerJobType'(){const _0x1a7e01=_0x224a85;return this[_0x1a7e01(0x18f)]['job_type']??this[_0x1a7e01(0x18b)]['config']?.['job_type']??'—';},get 'workerQueueEnv'(){const _0x5c87be=_0x224a85;return this[_0x5c87be(0x18f)]['queue_env']??this[_0x5c87be(0x18b)][_0x5c87be(0x11b)]?.['queue_env']??this['envName']??'—';},get 'workerFunctionEnv'(){const _0x19e91e=_0x224a85;return this[_0x19e91e(0x1a1)]?.[_0x19e91e(0x16b)]??this[_0x19e91e(0x13b)]??'—';},get 'workerRecordRuns'(){const _0xe12ae2=_0x224a85;return this[_0xe12ae2(0x18b)][_0xe12ae2(0x11b)]?.[_0xe12ae2(0x183)]?.[_0xe12ae2(0x16c)]??'all';},get 'workerProcessed'(){const _0x40572d=_0x224a85;return this['workerStats'][_0x40572d(0x19f)]??0x0;},get 'workerFailed'(){const _0x491068=_0x224a85;return this[_0x491068(0x18f)][_0x491068(0x13c)]??0x0;},get 'workerRunning'(){const _0x206675=_0x224a85;return this['workerStats'][_0x206675(0x174)]??0x0;},get 'workerConcurrency'(){const _0x1eedc0=_0x224a85;return this['workerStats'][_0x1eedc0(0x137)]??this[_0x1eedc0(0x18b)][_0x1eedc0(0x11b)]?.[_0x1eedc0(0x137)]??0x1;},get 'workerPollInterval'(){const _0x1a0b89=_0x224a85;return this[_0x1a0b89(0x18b)]['config']?.[_0x1a0b89(0x160)]??0x3e8;},get 'workerTtl'(){const _0x429f75=_0x224a85;return this[_0x429f75(0x18b)][_0x429f75(0x11b)]?.['ttl']??0x7530;},get 'canOpenWorkerFunction'(){const _0x2afd03=_0x224a85;return!!this[_0x2afd03(0x1a1)]?.[_0x2afd03(0x159)];},get 'showWorkerReason'(){const _0x5e1e9d=_0x224a85;return'—'!==this[_0x5e1e9d(0x141)]&&_0x5e1e9d(0x174)!==this[_0x5e1e9d(0x141)];},get 'showWorkerAffinity'(){const _0x379ced=_0x224a85;return _0x379ced(0x1ac)!==this['affinityText'];},get 'processorSourceType'(){const _0x3dc13e=_0x224a85;return this['pipelineStats'][_0x3dc13e(0x191)]??this[_0x3dc13e(0x18b)]['config']?.['source_type']??'—';},get 'processorSourceEnv'(){const _0x118d24=_0x224a85;return this[_0x118d24(0x13f)][_0x118d24(0x189)]??this[_0x118d24(0x18b)][_0x118d24(0x11b)]?.[_0x118d24(0x189)]??this['envName']??'—';},get 'processorMode'(){const _0x37ed01=_0x224a85;return this[_0x37ed01(0x13f)]['mode']??this['eng'][_0x37ed01(0x11b)]?.[_0x37ed01(0x1ab)]??'async';},get 'processorBootstrap'(){const _0x10f704=_0x224a85;return this[_0x10f704(0x13f)]['bootstrap']??this[_0x10f704(0x18b)]['config']?.[_0x10f704(0x15a)]??_0x10f704(0x146);},get 'processorOriginMode'(){const _0x3ce51a=_0x224a85;return this[_0x3ce51a(0x13f)][_0x3ce51a(0x1a0)]??this[_0x3ce51a(0x18b)]['config']?.['originMode']??_0x3ce51a(0x151);},get 'processorBatchSize'(){const _0x30402e=_0x224a85;return this[_0x30402e(0x13f)][_0x30402e(0x136)]??this[_0x30402e(0x18b)][_0x30402e(0x11b)]?.[_0x30402e(0x136)]??0x100;},get 'processorCursorKey'(){const _0x4d1268=_0x224a85;return this[_0x4d1268(0x13f)][_0x4d1268(0x139)]??this['eng'][_0x4d1268(0x11b)]?.[_0x4d1268(0x139)]??this[_0x4d1268(0x18b)][_0x4d1268(0x143)]??'—';},get 'processorLockMode'(){const _0xc40c63=_0x224a85;return this[_0xc40c63(0x13f)][_0xc40c63(0x134)]??this[_0xc40c63(0x18b)][_0xc40c63(0x11b)]?.[_0xc40c63(0x134)]??_0xc40c63(0x1af);},get 'processorHydrateValues'(){const _0x2b0181=_0x224a85;return o(this[_0x2b0181(0x13f)][_0x2b0181(0x197)]??this[_0x2b0181(0x18b)][_0x2b0181(0x11b)]?.[_0x2b0181(0x197)]??!0x0);},get 'processorFailOnHandlerError'(){const _0x27affe=_0x224a85;return o(this[_0x27affe(0x13f)]['failOnHandlerError']??this[_0x27affe(0x18b)]['config']?.[_0x27affe(0x17e)]??!0x0);},get 'processorInvocations'(){const _0x8ed9b8=_0x224a85;return this[_0x8ed9b8(0x13f)][_0x8ed9b8(0x12f)]??0x0;},get 'processorProcessedChanges'(){const _0xfabfe1=_0x224a85;return this[_0xfabfe1(0x13f)][_0xfabfe1(0x184)]??0x0;},get 'processorFailedBatches'(){const _0xe79989=_0x224a85;return this[_0xe79989(0x13f)][_0xe79989(0x157)]??0x0;},get 'processorRunningBatches'(){const _0x3201a2=_0x224a85;return this[_0x3201a2(0x13f)][_0x3201a2(0x17a)]??0x0;},get 'processorLag'(){const _0x21b3db=_0x224a85;return this[_0x21b3db(0x13f)][_0x21b3db(0x18a)]??'—';},get 'processorProgress'(){const _0x5b57b8=_0x224a85;return p(this['pipelineStats'][_0x5b57b8(0x147)]);},get 'processorPaused'(){const _0x32b0b6=_0x224a85;return!0x0===this[_0x32b0b6(0x13f)]['paused'];},get 'materializerSourceType'(){const _0x5c94c3=_0x224a85;return this[_0x5c94c3(0x13f)]['source_type']??this['eng'][_0x5c94c3(0x11b)]?.[_0x5c94c3(0x191)]??'—';},get 'materializerTargetType'(){const _0x2b847c=_0x224a85;return this['pipelineStats']['target_type']??this['eng'][_0x2b847c(0x11b)]?.['target_type']??'—';},get 'materializerSourceEnv'(){const _0x1db647=_0x224a85;return this['pipelineStats'][_0x1db647(0x189)]??this[_0x1db647(0x18b)][_0x1db647(0x11b)]?.['source_env']??this[_0x1db647(0x13b)]??'—';},get 'materializerTargetEnv'(){const _0x4efee9=_0x224a85;return this[_0x4efee9(0x13f)][_0x4efee9(0x165)]??this[_0x4efee9(0x18b)]['config']?.[_0x4efee9(0x165)]??this[_0x4efee9(0x13b)]??'—';},get 'materializerBootstrap'(){const _0x474169=_0x224a85;return this['pipelineStats'][_0x474169(0x15a)]??this[_0x474169(0x18b)][_0x474169(0x11b)]?.[_0x474169(0x15a)]??_0x474169(0x146);},get 'materializerOriginMode'(){const _0x37221e=_0x224a85;return this[_0x37221e(0x13f)][_0x37221e(0x1a0)]??this[_0x37221e(0x18b)][_0x37221e(0x11b)]?.['originMode']??_0x37221e(0x151);},get 'materializerBatchSize'(){const _0x3b0083=_0x224a85;return this[_0x3b0083(0x13f)][_0x3b0083(0x136)]??this[_0x3b0083(0x18b)][_0x3b0083(0x11b)]?.[_0x3b0083(0x136)]??0x80;},get 'materializerCursorKey'(){const _0x44a3f5=_0x224a85;return this['pipelineStats'][_0x44a3f5(0x139)]??this[_0x44a3f5(0x18b)][_0x44a3f5(0x11b)]?.['cursorKey']??this[_0x44a3f5(0x18b)][_0x44a3f5(0x143)]??'—';},get 'materializerClearTargetOnRebuild'(){const _0x447b83=_0x224a85;return o(this[_0x447b83(0x13f)]['clearTargetOnRebuild']??this[_0x447b83(0x18b)]['config']?.[_0x447b83(0x18c)]??!0x0);},get 'materializerProcessedChanges'(){const _0x376d0d=_0x224a85;return this[_0x376d0d(0x13f)][_0x376d0d(0x184)]??0x0;},get 'materializerAppliedOps'(){const _0x525120=_0x224a85;return this[_0x525120(0x13f)][_0x525120(0x167)]??0x0;},get 'materializerFailedBatches'(){const _0x8eefb6=_0x224a85;return this[_0x8eefb6(0x13f)][_0x8eefb6(0x157)]??0x0;},get 'materializerRunningBatches'(){const _0x1ee538=_0x224a85;return this[_0x1ee538(0x13f)]['runningBatches']??0x0;},get 'materializerTargetCount'(){const _0x31b8a9=_0x224a85;return this[_0x31b8a9(0x13f)][_0x31b8a9(0x193)]??'—';},get 'materializerLag'(){const _0x2dc869=_0x224a85;return this[_0x2dc869(0x13f)][_0x2dc869(0x18a)]??'—';},get 'materializerProgress'(){const _0x4121e2=_0x224a85;return p(this[_0x4121e2(0x13f)]['progress']);},get 'materializerPaused'(){const _0x2fff1b=_0x224a85;return!0x0===this[_0x2fff1b(0x13f)][_0x2fff1b(0x19b)];},get 'materializerErrorText'(){const _0x42de06=_0x224a85;return this['pipelineStats'][_0x42de06(0x17f)]??this[_0x42de06(0x18b)]['error']??null;},get 'materializerPreviewPayload'(){const _0x2089bf=_0x224a85;return[{'action':_0x2089bf(0x19a),'key':_0x2089bf(0x149),'value':{'sample':!0x0,'title':_0x2089bf(0x12a),'sourceType':this[_0x2089bf(0x132)]},'clock':null},{'action':_0x2089bf(0x12c),'key':_0x2089bf(0x1b1),'clock':0x7b}];},get 'materializerPreviewContext'(){const _0x5b3361=_0x224a85;return{'mode':_0x5b3361(0x12e)===this[_0x5b3361(0x13f)][_0x5b3361(0x16d)]?_0x5b3361(0x129):_0x5b3361(0x135),'sourceType':this[_0x5b3361(0x132)],'targetType':this[_0x5b3361(0x1a2)],'sourceEnv':this['materializerSourceEnv'],'targetEnv':this[_0x5b3361(0x19c)],'engineKey':this['eng'][_0x5b3361(0x143)]??null,'cursorKey':this[_0x5b3361(0x13e)]};},'formatJson':_0x3d4a0d,'labelize':_0x135131=>String(_0x135131||'')[_0x224a85(0x1a4)](/_/g,'\x20'),'humanValue':o,'rawToggleStyle':_0x5a6085=>_0x5a6085?_0x224a85(0x13d):'','syncWorkerConfig'(_0x54393e=null){const _0x477285=_0x224a85,_0x3bb9b3=_0x54393e?.[_0x477285(0x11b)]??{};this[_0x477285(0x18d)]={'concurrency':null==_0x3bb9b3[_0x477285(0x137)]?'':String(_0x3bb9b3[_0x477285(0x137)]),'pollInterval':null==_0x3bb9b3['pollInterval']?'':String(_0x3bb9b3[_0x477285(0x160)]),'ttl':null==_0x3bb9b3[_0x477285(0x172)]?'':String(_0x3bb9b3[_0x477285(0x172)])},this[_0x477285(0x1ad)]=null;},'buildWorkerConfigPatch'(){const _0x230b21=_0x224a85,_0x21691c=this[_0x230b21(0x18b)][_0x230b21(0x11b)]??{},_0x216f11={'concurrency':d(this[_0x230b21(0x18d)][_0x230b21(0x137)],_0x230b21(0x15e)),'pollInterval':d(this['workerConfigDraft']['pollInterval'],'Poll\x20interval'),'ttl':d(this[_0x230b21(0x18d)][_0x230b21(0x172)],_0x230b21(0x16e))},_0x313d07={};for(const [_0x5cc19a,_0x13df10]of Object[_0x230b21(0x11a)](_0x216f11))null==_0x13df10?void 0x0!==_0x21691c[_0x5cc19a]&&(_0x313d07[_0x5cc19a]=null):_0x21691c[_0x5cc19a]!==_0x13df10&&(_0x313d07[_0x5cc19a]=_0x13df10);return _0x313d07;},'resetWorkerConfig'(){const _0x14df4c=_0x224a85;this[_0x14df4c(0x180)](this[_0x14df4c(0x18b)]);},'inspectWorkerFunction'(){const _0x1e7fd5=_0x224a85;this[_0x1e7fd5(0x17c)](this[_0x1e7fd5(0x1a1)]?.[_0x1e7fd5(0x159)]??null);},'openHandlerFunction'(_0x3fb407=null){const _0xe336a5=_0x224a85,_0x650638=_0x3fb407??this[_0xe336a5(0x1a9)];_0x650638&&_0x3096d(_0xe5eb0c,_0x650638,{'beforeNavigate':()=>_0xe5eb0c['$attr'][_0xe336a5(0x1a5)]?.[_0xe336a5(0x155)]?.()});},async 'openHandlerEditor'(){const _0x530ff2=_0x224a85;if(!this[_0x530ff2(0x1a9)])return;const _0x503270=_0xe5eb0c[_0x530ff2(0x127)][_0x530ff2(0x169)]['okdb'],_0x2ed3b9=_0xe5eb0c[_0x530ff2(0x127)]['stores']['functions'],_0x18f8f1=this['handlerEnv']&&'—'!==this[_0x530ff2(0x138)]?this[_0x530ff2(0x138)]:this[_0x530ff2(0x13b)];_0x18f8f1?(_0x503270[_0x530ff2(0x164)]!==_0x18f8f1&&_0x503270[_0x530ff2(0x14a)](_0x18f8f1),await _0x2ed3b9[_0x530ff2(0x176)](),await _0x2ed3b9[_0x530ff2(0x15b)](this[_0x530ff2(0x1a9)]),_0x2ed3b9[_0x530ff2(0x122)](),_0x2ed3b9[_0x530ff2(0x198)](this[_0x530ff2(0x12b)](this[_0x530ff2(0x17b)])),_0x2ed3b9[_0x530ff2(0x145)]({'materializerContext':this[_0x530ff2(0x123)]}),await _0xe5eb0c['$ok'][_0x530ff2(0x187)][_0x530ff2(0x1a5)]['open']({'owner':_0xe5eb0c,'title':'Edit\x20Function\x20·\x20'+this['handlerName'],'canDrag':!0x0,'content':_0x530ff2(0x1ae),'context':_0x4b6f2c=>({'modal':_0x4b6f2c,'onDone':async()=>{const _0x252d56=_0x530ff2;await _0x2ed3b9[_0x252d56(0x15b)](this[_0x252d56(0x1a9)]),await _0x2ed3b9[_0x252d56(0x163)](),_0xe5eb0c[_0x252d56(0x11f)]('refresh');}})})):this[_0x530ff2(0x17c)]();},async 'runMaterializerRepairAction'(_0xd81afc,_0x4ab212,_0x2e5fae=null){const _0x11e96a=_0x224a85;if(this['isMaterializer']&&this[_0x11e96a(0x19d)]&&!this[_0x11e96a(0x181)]){if(_0x2e5fae&&!await _0xe5eb0c[_0x11e96a(0x127)][_0x11e96a(0x187)][_0x11e96a(0x1a5)][_0x11e96a(0x119)](_0x2e5fae))return;this[_0x11e96a(0x181)]=!0x0,this['materializerRepairError']=null;try{const _0x209917=await fetch(''+this[_0x11e96a(0x19d)]+_0xd81afc,{'method':_0x11e96a(0x11c)}),_0xa66b58=await _0x209917['json']()[_0x11e96a(0x125)](()=>({}));if(!_0x209917['ok'])throw new Error(_0x2a7ee6(_0xa66b58,'Failed\x20('+_0x209917[_0x11e96a(0x1a7)]+')'));const _0x68243e=_0xa66b58?.[_0x11e96a(0x152)]??_0xa66b58?.[_0x11e96a(0x124)]??null;_0x68243e&&_0xe5eb0c[_0x11e96a(0x11f)]('engine-updated',_0x68243e),_0xe5eb0c[_0x11e96a(0x11f)]('refresh'),_0xe5eb0c['$ok'][_0x11e96a(0x187)]?.[_0x11e96a(0x15c)]?.[_0x11e96a(0x182)]?.(_0x4ab212);}catch(_0x2e65da){this[_0x11e96a(0x15f)]=_0x2e65da?.[_0x11e96a(0x130)]||String(_0x2e65da),_0xe5eb0c[_0x11e96a(0x127)][_0x11e96a(0x187)]?.[_0x11e96a(0x15c)]?.['error']?.(this['materializerRepairError']);}finally{this[_0x11e96a(0x181)]=!0x1;}}},'retryMaterializer'(){const _0x2d0059=_0x224a85;return this['runMaterializerRepairAction'](_0x2d0059(0x14c),_0x2d0059(0x175));},'resetMaterializerCursor'(){const _0x1bf67b=_0x224a85;return this[_0x1bf67b(0x161)](_0x1bf67b(0x178),_0x1bf67b(0x148),_0x1bf67b(0x11d)+this[_0x1bf67b(0x18b)][_0x1bf67b(0x159)]+'\x22?');},'rebuildMaterializer'(){const _0x210107=_0x224a85;return this[_0x210107(0x161)](_0x210107(0x12d),_0x210107(0x133),_0x210107(0x168)+this[_0x210107(0x18b)]['name']+'\x22?');},async 'saveWorkerConfig'(){const _0x4bf0fe=_0x224a85;if(this['isQueueWorker']&&this[_0x4bf0fe(0x19d)]&&!this[_0x4bf0fe(0x190)]){this['saveConfigBusy']=!0x0,this['saveConfigError']=null;try{const _0x5dc707=this[_0x4bf0fe(0x15d)]();if(!Object[_0x4bf0fe(0x1b0)](_0x5dc707)[_0x4bf0fe(0x118)])return void _0xe5eb0c[_0x4bf0fe(0x127)][_0x4bf0fe(0x187)]?.['toast']?.['info']?.(_0x4bf0fe(0x1a8));const _0x35c668=await fetch(this['basePath'],{'method':'PATCH','headers':{'Content-Type':'application/json'},'body':JSON['stringify']({'config':_0x5dc707})}),_0x3e9e64=await _0x35c668['json']()[_0x4bf0fe(0x125)](()=>({}));if(!_0x35c668['ok'])throw new Error(_0x2a7ee6(_0x3e9e64,_0x4bf0fe(0x171)+_0x35c668[_0x4bf0fe(0x1a7)]+')'));const _0x5d8958=_0x3e9e64?.[_0x4bf0fe(0x152)]??_0x3e9e64?.[_0x4bf0fe(0x124)]??null;_0x5d8958&&(this[_0x4bf0fe(0x180)](_0x5d8958),_0xe5eb0c['$dispatch'](_0x4bf0fe(0x142),_0x5d8958)),_0xe5eb0c[_0x4bf0fe(0x11f)](_0x4bf0fe(0x158)),_0xe5eb0c[_0x4bf0fe(0x127)][_0x4bf0fe(0x187)]?.[_0x4bf0fe(0x15c)]?.[_0x4bf0fe(0x182)]?.('Worker\x20settings\x20saved');}catch(_0x1c564a){this[_0x4bf0fe(0x1ad)]=_0x1c564a?.['message']||String(_0x1c564a),_0xe5eb0c[_0x4bf0fe(0x127)][_0x4bf0fe(0x187)]?.[_0x4bf0fe(0x15c)]?.['error']?.(this[_0x4bf0fe(0x1ad)]);}finally{this[_0x4bf0fe(0x190)]=!0x1;}}}}),'init'(_0x5d1a4d){const _0x2cf66a=_0x224a85;this['syncWorkerConfig'](_0x5d1a4d[_0x2cf66a(0x1aa)]['engine']),_0x5d1a4d[_0x2cf66a(0x185)](()=>_0x5d1a4d[_0x2cf66a(0x1aa)][_0x2cf66a(0x186)],()=>this[_0x2cf66a(0x180)](_0x5d1a4d[_0x2cf66a(0x1aa)][_0x2cf66a(0x186)]));},'template':_0x224a85(0x121),'style':_0x2b5256};function _0x33bb(){const _0xad5fa1=['lockMode','build','batchSize','concurrency','handlerEnv','cursorKey','7119430Wlriws','envName','failed','border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2040%,\x20transparent);color:var(--okdb-accent);background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x207%,\x20transparent);','materializerCursorKey','pipelineStats','1136384Lnjkee','reasonText','engine-updated','key','trunc','setModalPreviewContext','snapshot','progress','Materializer\x20cursor\x20reset','example-1','selectEnv','job_type','/retry','stats','pipelineHandler','stopped','updated','all','data','isArray','105658sVvPpQ','close','generic-engine-panel','failedBatches','refresh','name','bootstrap','select','toast','buildWorkerConfigPatch','Concurrency','materializerRepairError','pollInterval','runMaterializerRepairAction','includes','loadOverviewRuns','selectedEnv','target_env','4lrIqQX','appliedOps','Rebuild\x20materializer\x20\x22','stores','materializer','env','recordRuns','state','Job\x20TTL','268432rhFtAq','89274dXmnhY','Failed\x20(','ttl','join','running','Materializer\x20retry\x20started','onEnvChanged','type','/reset-cursor','queue-worker','runningBatches','materializerPreviewPayload','openHandlerFunction','stateText','failOnHandlerError','error','syncWorkerConfig','materializerRepairBusy','success','handler','processedChanges','$watch','engine','shared','boolean','source_env','lag','eng','clearTargetOnRebuild','workerConfigDraft','affinity','workerStats','saveConfigBusy','source_type','\x20must\x20be\x20a\x20positive\x20integer','targetCount','filter','248ByfPVD','909072ExrZFe','hydrateValues','setModalPayloadDraft','object','put','paused','materializerTargetEnv','basePath','queue_env','processed','originMode','workerHandler','materializerTargetType','engine_key','replace','modal','toLocaleString','status','No\x20worker\x20setting\x20changes\x20to\x20save','handlerName','$attr','mode','all\x20nodes','saveConfigError','<function-modal\x20:modal=\x22modal\x22\x20mode=\x22edit\x22\x20:on-done=\x22onDone\x22\x20/>','exclusive','keys','example-2','4991247hmwpcU','length','confirm','entries','config','POST','Reset\x20cursor\x20for\x20materializer\x20\x22','isFinite','$dispatch','inactive','\x0a<engine-panel-shell\x0a\x20\x20:engine=\x22eng\x22\x0a\x20\x20:env=\x22envName\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:=\x22isQueueWorker\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=\x22Queue\x20job\x20type\x20this\x20worker\x20consumes.\x22>{{\x20workerJobType\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Environment\x20whose\x20queue\x20is\x20consumed.\x22>queue:\x20{{\x20workerQueueEnv\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Function\x20environment.\x22>fn\x20env:\x20{{\x20workerFunctionEnv\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22showWorkerReason\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Why\x20the\x20worker\x20is\x20in\x20its\x20current\x20state.\x22>{{\x20reasonText\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\x20\x20<if\x20:=\x22showWorkerAffinity\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Node\x20tags\x20required\x20for\x20this\x20worker\x20to\x20run.\x22>affinity:\x20{{\x20affinityText\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<div\x20style=\x22display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22field-label\x22\x20style=\x22margin:0;\x22>Function</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22canOpenWorkerFunction\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22inspectWorkerFunction()\x22\x20class=\x22inline-link\x22\x20title=\x22View\x20or\x20edit\x20this\x20function\x20in\x20the\x20Functions\x20section.\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ƒ\x20{{\x20workerHandler?.name\x20||\x20\x27—\x27\x20}}\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</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!canOpenWorkerFunction\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22muted-code\x22\x20style=\x22color:var(--okdb-app-fg);\x22>{{\x20workerHandler?.name\x20||\x20\x27—\x27\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</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%,\x20360px);\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>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>{{\x20workerProcessed\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>Error</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(workerFailed\x20>\x200\x20?\x20\x27var(--okdb-danger)\x27\x20:\x20\x27var(--okdb-app-fg-strong)\x27)\x22>{{\x20workerFailed\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>Active</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(workerRunning\x20>\x200\x20?\x20\x27var(--okdb-warning)\x27\x20:\x20\x27var(--okdb-app-fg-strong)\x27)\x22>{{\x20workerRunning\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>Concurrency</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-accent);\x22>{{\x20workerConcurrency\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\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\x20style=\x22display:flex;align-items:center;gap:8px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22\x20style=\x22margin:0;\x22>Settings</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22flex:1;\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22story-note\x22\x20style=\x22margin-right:4px;\x22>updated\x20{{\x20updatedText\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22resetWorkerConfig()\x22\x20:disabled=\x22saveConfigBusy\x20||\x20!basePath\x22\x20title=\x22Discard\x20unsaved\x20changes.\x22\x20style=\x22font-size:11px;padding:4px\x2010px;opacity:.75;\x22>Reset</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22saveWorkerConfig()\x22\x20:disabled=\x22saveConfigBusy\x20||\x20!basePath\x22\x20title=\x22Save\x20and\x20restart\x20the\x20worker\x20with\x20these\x20values.\x22\x20style=\x22font-size:11px;padding:4px\x2010px;color:var(--okdb-accent);border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20saveConfigBusy\x20?\x20\x27Saving…\x27\x20:\x20\x27Save\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22form-grid\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22field-stack\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22field-label\x22\x20title=\x22Parallel\x20worker\x20lanes.\x22>Concurrency</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22field-input\x22\x20type=\x22number\x22\x20min=\x221\x22\x20:value=\x22workerConfigDraft.concurrency\x22\x20@input=\x22workerConfigDraft.concurrency\x20=\x20$event.target.value\x22\x20placeholder=\x221\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22field-stack\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22field-label\x22\x20title=\x22Milliseconds\x20to\x20wait\x20before\x20polling\x20again\x20when\x20the\x20queue\x20is\x20empty.\x22>Poll</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22field-input\x22\x20type=\x22number\x22\x20min=\x221\x22\x20:value=\x22workerConfigDraft.pollInterval\x22\x20@input=\x22workerConfigDraft.pollInterval\x20=\x20$event.target.value\x22\x20placeholder=\x221000\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22field-stack\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22field-label\x22\x20title=\x22Milliseconds\x20an\x20in-flight\x20claim\x20stays\x20reserved\x20before\x20it\x20can\x20be\x20reclaimed.\x22>TTL</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22field-input\x22\x20type=\x22number\x22\x20min=\x221\x22\x20:value=\x22workerConfigDraft.ttl\x22\x20@input=\x22workerConfigDraft.ttl\x20=\x20$event.target.value\x22\x20placeholder=\x2230000\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22field-stack\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22field-label\x22\x20title=\x22Whether\x20function\x20runs\x20are\x20persisted.\x22>Runs</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-input\x22\x20style=\x22display:flex;align-items:center;min-height:36px;background:var(--okdb-app-bg);\x22>{{\x20workerRecordRuns\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22saveConfigError\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22alert\x20alert--error\x22>{{\x20saveConfigError\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22isProcessor\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\x20this\x20processor\x20watches.\x22>{{\x20processorSourceType\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Environment\x20whose\x20changelog\x20is\x20consumed.\x22>source:\x20{{\x20processorSourceEnv\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Function\x20environment.\x22>fn\x20env:\x20{{\x20handlerEnv\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22How\x20source\x20changes\x20are\x20consumed.\x22>mode:\x20{{\x20processorMode\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22processorPaused\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Processor\x20registration\x20is\x20currently\x20paused.\x22>paused</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\x20\x20<if\x20:=\x22showWorkerReason\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Why\x20the\x20processor\x20is\x20in\x20its\x20current\x20state.\x22>{{\x20reasonText\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<div\x20class=\x22story-lead\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Watches\x20<strong>{{\x20processorSourceType\x20}}</strong>\x20in\x20<strong>{{\x20processorSourceEnv\x20}}</strong>\x20and\x20runs\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22canOpenHandlerFunction\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openHandlerFunction()\x22\x20class=\x22inline-link\x22\x20title=\x22View\x20or\x20edit\x20this\x20function\x20in\x20the\x20Functions\x20section.\x22>ƒ\x20{{\x20handlerName\x20}}\x20↗</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:=\x22!canOpenHandlerFunction\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22muted-code\x22\x20style=\x22color:var(--okdb-app-fg);\x22>{{\x20handlerName\x20||\x20\x27—\x27\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\x20\x20for\x20each\x20change\x20batch.\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>Use\x20this\x20engine\x20for\x20side\x20effects\x20and\x20projections\x20driven\x20by\x20change\x20batches\x20without\x20owning\x20a\x20dedicated\x20target\x20type.</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>Invocations</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-accent);\x22>{{\x20processorInvocations\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>Changes</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>{{\x20processorProcessedChanges\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>Failures</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(processorFailedBatches\x20>\x200\x20?\x20\x27var(--okdb-danger)\x27\x20:\x20\x27var(--okdb-app-fg-strong)\x27)\x22>{{\x20processorFailedBatches\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>Lag</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(processorLag\x20===\x200\x20?\x20\x27var(--okdb-success)\x27\x20:\x20\x27var(--okdb-warning)\x27)\x22>{{\x20processorLag\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\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>Processing\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>bootstrap</span><span\x20class=\x22kv-val\x22>{{\x20processorBootstrap\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>origin\x20mode</span><span\x20class=\x22kv-val\x22>{{\x20processorOriginMode\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>batch\x20size</span><span\x20class=\x22kv-val\x22>{{\x20processorBatchSize\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>running\x20batches</span><span\x20class=\x22kv-val\x22>{{\x20processorRunningBatches\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>progress</span><span\x20class=\x22kv-val\x22>{{\x20processorProgress\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>cursor\x20key</span><span\x20class=\x22kv-val\x22>{{\x20processorCursorKey\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>lock\x20mode</span><span\x20class=\x22kv-val\x22>{{\x20processorLockMode\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>hydrate\x20values</span><span\x20class=\x22kv-val\x22>{{\x20processorHydrateValues\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>fail\x20on\x20fn\x20error</span><span\x20class=\x22kv-val\x22>{{\x20processorFailOnHandlerError\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22isMaterializer\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\x20this\x20materializer\x20watches.\x22>{{\x20materializerSourceType\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Target\x20type\x20updated\x20by\x20returned\x20ops.\x22>target:\x20{{\x20materializerTargetType\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{{\x20materializerSourceEnv\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Target\x20environment.\x22>target\x20env:\x20{{\x20materializerTargetEnv\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Function\x20environment.\x22>fn\x20env:\x20{{\x20handlerEnv\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22materializerPaused\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Materializer\x20registration\x20is\x20currently\x20paused.\x22>paused</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<div\x20class=\x22story-lead\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Projects\x20<strong>{{\x20materializerSourceType\x20}}</strong>\x20into\x20<strong>{{\x20materializerTargetType\x20}}</strong>\x20using\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22canOpenHandlerFunction\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openHandlerFunction()\x22\x20class=\x22inline-link\x22\x20title=\x22View\x20or\x20edit\x20this\x20function\x20in\x20the\x20Functions\x20section.\x22>ƒ\x20{{\x20handlerName\x20}}\x20↗</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:=\x22!canOpenHandlerFunction\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22muted-code\x22\x20style=\x22color:var(--okdb-app-fg);\x22>{{\x20handlerName\x20||\x20\x27—\x27\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\x20\x20and\x20applies\x20the\x20returned\x20ops\x20to\x20the\x20target\x20collection.\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>Use\x20this\x20engine\x20when\x20you\x20want\x20deterministic,\x20rebuildable\x20derived\x20records\x20instead\x20of\x20free-form\x20side\x20effects.</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>Applied\x20ops</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>{{\x20materializerAppliedOps\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>Target\x20rows</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-accent);\x22>{{\x20materializerTargetCount\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>Changes</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>{{\x20materializerProcessedChanges\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>Failures</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(materializerFailedBatches\x20>\x200\x20?\x20\x27var(--okdb-danger)\x27\x20:\x20\x27var(--okdb-app-fg-strong)\x27)\x22>{{\x20materializerFailedBatches\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\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>Materialization\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>bootstrap</span><span\x20class=\x22kv-val\x22>{{\x20materializerBootstrap\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>origin\x20mode</span><span\x20class=\x22kv-val\x22>{{\x20materializerOriginMode\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>batch\x20size</span><span\x20class=\x22kv-val\x22>{{\x20materializerBatchSize\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>running\x20batches</span><span\x20class=\x22kv-val\x22>{{\x20materializerRunningBatches\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>progress</span><span\x20class=\x22kv-val\x22>{{\x20materializerProgress\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>lag</span><span\x20class=\x22kv-val\x22>{{\x20materializerLag\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>cursor\x20key</span><span\x20class=\x22kv-val\x22>{{\x20materializerCursorKey\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>clear\x20on\x20rebuild</span><span\x20class=\x22kv-val\x22>{{\x20materializerClearTargetOnRebuild\x20}}</span>\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;border-color:#244057;\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:6px;min-width:0;flex:1;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Repair\x20workflow</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22story-note\x22\x20style=\x22margin:0;\x22>Edit\x20the\x20handler\x20with\x20seeded\x20sample\x20input,\x20verify\x20the\x20draft\x20run,\x20then\x20retry,\x20rewind,\x20or\x20rebuild\x20from\x20here.</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=\x22display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openHandlerEditor()\x22\x20:disabled=\x22!canOpenHandlerFunction\x20||\x20materializerRepairBusy\x22\x20style=\x22font-size:12px;padding:4px\x2010px;color:var(--okdb-accent);border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent);\x22>ƒ\x20Edit\x20handler</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22retryMaterializer()\x22\x20:disabled=\x22materializerRepairBusy\x20||\x20!basePath\x22\x20style=\x22font-size:12px;padding:4px\x2010px;color:var(--okdb-orange);border-color:color-mix(in\x20srgb,\x20var(--okdb-orange)\x2033%,\x20transparent);\x22>↻\x20Retry</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22resetMaterializerCursor()\x22\x20:disabled=\x22materializerRepairBusy\x20||\x20!basePath\x22\x20style=\x22font-size:12px;padding:4px\x2010px;color:var(--okdb-info);border-color:color-mix(in\x20srgb,\x20var(--okdb-info)\x2033%,\x20transparent);\x22>⇤\x20Reset\x20cursor</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22rebuildMaterializer()\x22\x20:disabled=\x22materializerRepairBusy\x20||\x20!basePath\x22\x20style=\x22font-size:12px;padding:4px\x2010px;color:var(--okdb-success);border-color:color-mix(in\x20srgb,\x20var(--okdb-success)\x2033%,\x20transparent);\x22>⟳\x20Rebuild</button>\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<if\x20:=\x22materializerErrorText\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22alert\x20alert--error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-weight:600;margin-bottom:4px;\x22>Last\x20materializer\x20error</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>{{\x20materializerErrorText\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22materializerRepairError\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22alert\x20alert--error\x22>{{\x20materializerRepairError\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:grid;grid-template-columns:minmax(0,1fr)\x20minmax(280px,.9fr);gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:8px;min-width:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22>Suggested\x20<code>ctx.payload</code></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20class=\x22json-block\x22\x20style=\x22margin:0;max-height:220px;overflow:auto;\x22>{{\x20formatJson(materializerPreviewPayload)\x20}}</pre>\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;flex-direction:column;gap:8px;min-width:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22>Suggested\x20<code>ctx.materializer</code></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20class=\x22json-block\x22\x20style=\x22margin:0;max-height:220px;overflow:auto;\x22>{{\x20formatJson(materializerPreviewContext)\x20}}</pre>\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\x20class=\x22story-note\x22\x20style=\x22margin:0;\x22>Recommended\x20order:\x20<strong>Edit\x20handler</strong>\x20→\x20run\x20the\x20seeded\x20draft\x20preview\x20→\x20<strong>Retry</strong>.\x20Use\x20<strong>Reset\x20cursor</strong>\x20to\x20replay\x20without\x20clearing\x20the\x20target,\x20or\x20<strong>Rebuild</strong>\x20to\x20clear\x20and\x20rematerialize\x20from\x20scratch.</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22!hasSpecializedPipelineView\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22panel-grid\x20panel-grid--two\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card\x22\x20style=\x22display:flex;flex-direction:column;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Overview</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>state</span><span\x20class=\x22kv-val\x22>{{\x20stateText\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>reason</span><span\x20class=\x22kv-val\x22>{{\x20reasonText\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>enabled</span><span\x20class=\x22kv-val\x22>{{\x20eng.enabled\x20===\x20false\x20?\x20\x27no\x27\x20:\x20\x27yes\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>affinity</span><span\x20class=\x22kv-val\x22>{{\x20affinityText\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>updated</span><span\x20class=\x22kv-val\x22>{{\x20updatedText\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22runtimePreviewEntries.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22>Runtime\x20details</div>\x0a\x20\x20\x20\x20\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\x20\x20\x20\x20<each\x20:of=\x22runtimePreviewEntries\x22\x20let:item=\x22entry\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>{{\x20labelize(entry[0])\x20}}</span><span\x20class=\x22kv-val\x22>{{\x20humanValue(entry[1])\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card\x22\x20style=\x22display:flex;flex-direction:column;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Configuration</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22configPreviewEntries.length\x20>\x200\x22>\x0a\x20\x20\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\x20\x20<each\x20:of=\x22configPreviewEntries\x22\x20let:item=\x22entry\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>{{\x20labelize(entry[0])\x20}}</span><span\x20class=\x22kv-val\x22>{{\x20humanValue(entry[1])\x20}}</span>\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</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22configPreviewEntries.length\x20===\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22helper-text\x22>This\x20engine\x20mostly\x20uses\x20structured\x20config.\x20Open\x20the\x20raw\x20JSON\x20below\x20if\x20you\x20need\x20the\x20full\x20payload.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22statsPreviewEntries.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22>Stats\x20snapshot</div>\x0a\x20\x20\x20\x20\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\x20\x20\x20\x20<each\x20:of=\x22statsPreviewEntries\x22\x20let:item=\x22entry\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>{{\x20labelize(entry[0])\x20}}</span><span\x20class=\x22kv-val\x22>{{\x20humanValue(entry[1])\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<div\x20class=\x22card\x22\x20style=\x22display:flex;flex-direction:column;gap:12px;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:8px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Raw\x20data</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-subtitle\x22>Keep\x20the\x20default\x20view\x20visual\x20first.\x20Open\x20these\x20only\x20when\x20you\x20need\x20the\x20underlying\x20JSON.</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20class=\x22raw-toggle-row\x22>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22eng.runtime\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22raw-toggle\x22\x20:style=\x22rawToggleStyle(showRawRuntime)\x22\x20@click=\x22showRawRuntime\x20=\x20!showRawRuntime\x22>Runtime\x20JSON</button>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22eng.stats\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22raw-toggle\x22\x20:style=\x22rawToggleStyle(showRawStats)\x22\x20@click=\x22showRawStats\x20=\x20!showRawStats\x22>Stats\x20JSON</button>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22eng.config\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22raw-toggle\x22\x20:style=\x22rawToggleStyle(showRawConfig)\x22\x20@click=\x22showRawConfig\x20=\x20!showRawConfig\x22>Config\x20JSON</button>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22showRawRuntime\x20&&\x20eng.runtime\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22>Runtime\x20payload</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20class=\x22json-block\x22>{{\x20formatJson(eng.runtime)\x20}}</pre>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20<if\x20:=\x22showRawStats\x20&&\x20eng.stats\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22>Stats\x20payload</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20class=\x22json-block\x22>{{\x20formatJson(eng.stats)\x20}}</pre>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20<if\x20:=\x22showRawConfig\x20&&\x20eng.config\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22>Config\x20payload</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20class=\x22json-block\x22>{{\x20formatJson(eng.config)\x20}}</pre>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a</engine-panel-shell>\x0a','beginEditDraft','materializerPreviewContext','result','catch','5iNTTJV','$ok','number','live','Example\x20source\x20row','formatJson','remove','/rebuild','online','invocations','message','reason','materializerSourceType','Materializer\x20rebuild\x20started'];_0x33bb=function(){return _0xad5fa1;};return _0x33bb();}
1
+ const _0x40775c=_0x58da;(function(_0x1182bf,_0x274a6a){const _0x3fa4db=_0x58da,_0x115621=_0x1182bf();while(!![]){try{const _0x40539a=parseInt(_0x3fa4db(0x230))/0x1+parseInt(_0x3fa4db(0x224))/0x2+parseInt(_0x3fa4db(0x213))/0x3*(parseInt(_0x3fa4db(0x20d))/0x4)+-parseInt(_0x3fa4db(0x1f4))/0x5+-parseInt(_0x3fa4db(0x1b0))/0x6*(parseInt(_0x3fa4db(0x218))/0x7)+parseInt(_0x3fa4db(0x1cd))/0x8+parseInt(_0x3fa4db(0x1d2))/0x9*(-parseInt(_0x3fa4db(0x211))/0xa);if(_0x40539a===_0x274a6a)break;else _0x115621['push'](_0x115621['shift']());}catch(_0x3e17ca){_0x115621['push'](_0x115621['shift']());}}}(_0x2e7c,0x5e60c));import _0x44e0f4 from'./engine-panel-shell.ok.js';import _0x55ec78 from'../../functions/modals/function-modal.ok.js';import{ENGINE_PANEL_SHARED_STYLE as _0x3628c8}from'../engine-panel-shared-style.js';import{buildEngineBasePath as _0x4c9cde,formatJsonValue as _0x47dc45,getApiErrorMessage as _0x3e1260,openFunctionRoute as _0x111376,resolveEngineEnvName as _0x297458}from'../engine-ui-utils.js';function _0x58da(_0x42a01d,_0x19d885){_0x42a01d=_0x42a01d-0x1a8;const _0x2e7c29=_0x2e7c();let _0x58da61=_0x2e7c29[_0x42a01d];return _0x58da61;}function _0x2e7c(){const _0x584cf9=['queue_env','materializerSourceEnv','shared','failedBatches','materializerPreviewContext','queue-worker','invocations','batchSize','refresh','targetCount','failOnHandlerError','$dispatch','1233545KCHHDv','originMode','catch','isQueueWorker','info','workerHandler','engine-updated','materializerPreviewPayload','boolean','No\x20worker\x20setting\x20changes\x20to\x20save','functions','all\x20nodes','success','openHandlerFunction','handlerEnv','/reset-cursor','json','engine','select','affinity','$attr','source_type','/retry','syncWorkerConfig','basePath','1309352BldQVw','saveConfigError','handler','ttl','10GRhlIV','mode','3ThphCI','running','runMaterializerRepairAction','snapshot','beginEditDraft','539gweWZV','saveConfigBusy','string','all','confirm','remove','Materializer\x20retry\x20started','toast','pipelineStats','Reset\x20cursor\x20for\x20materializer\x20\x22','job_type','engine_key','345092eyDmnz','materializerTargetType','data','state','stats','target_type','Failed\x20(','materializerCursorKey','example-2','reasonText','object','result','358329CXALFO','POST','generic-engine-panel','pollInterval','includes','close','async','modal','config','border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2040%,\x20transparent);color:var(--okdb-accent);background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x207%,\x20transparent);','name','materializerRepairError','exclusive','Materializer\x20cursor\x20reset','type','failed','online','concurrency','eng','source_env','inactive','hydrateValues','29034wArEZM','processed','lag','length','materializerTargetEnv','Job\x20TTL','isMaterializer','open','stopped','affinityText','Poll\x20interval','envName','onEnvChanged','target_env','cursorKey','env','replace','handlerName','workerStats','materializerRepairBusy','clearTargetOnRebuild','entries','yes','materializerSourceType','processedChanges','paused','runningBatches','Concurrency','\x0a<engine-panel-shell\x0a\x20\x20:engine=\x22eng\x22\x0a\x20\x20:env=\x22envName\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:=\x22isQueueWorker\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=\x22Queue\x20job\x20type\x20this\x20worker\x20consumes.\x22>{{\x20workerJobType\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Environment\x20whose\x20queue\x20is\x20consumed.\x22>queue:\x20{{\x20workerQueueEnv\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Function\x20environment.\x22>fn\x20env:\x20{{\x20workerFunctionEnv\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22showWorkerReason\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Why\x20the\x20worker\x20is\x20in\x20its\x20current\x20state.\x22>{{\x20reasonText\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\x20\x20<if\x20:=\x22showWorkerAffinity\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Node\x20tags\x20required\x20for\x20this\x20worker\x20to\x20run.\x22>affinity:\x20{{\x20affinityText\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<div\x20style=\x22display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22field-label\x22\x20style=\x22margin:0;\x22>Function</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22canOpenWorkerFunction\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22inspectWorkerFunction()\x22\x20class=\x22inline-link\x22\x20title=\x22View\x20or\x20edit\x20this\x20function\x20in\x20the\x20Functions\x20section.\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ƒ\x20{{\x20workerHandler?.name\x20||\x20\x27—\x27\x20}}\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</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!canOpenWorkerFunction\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22muted-code\x22\x20style=\x22color:var(--okdb-app-fg);\x22>{{\x20workerHandler?.name\x20||\x20\x27—\x27\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</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%,\x20360px);\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>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>{{\x20workerProcessed\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>Error</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(workerFailed\x20>\x200\x20?\x20\x27var(--okdb-danger)\x27\x20:\x20\x27var(--okdb-app-fg-strong)\x27)\x22>{{\x20workerFailed\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>Active</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(workerRunning\x20>\x200\x20?\x20\x27var(--okdb-warning)\x27\x20:\x20\x27var(--okdb-app-fg-strong)\x27)\x22>{{\x20workerRunning\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>Concurrency</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-accent);\x22>{{\x20workerConcurrency\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\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\x20style=\x22display:flex;align-items:center;gap:8px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22\x20style=\x22margin:0;\x22>Settings</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22flex:1;\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22story-note\x22\x20style=\x22margin-right:4px;\x22>updated\x20{{\x20updatedText\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22resetWorkerConfig()\x22\x20:disabled=\x22saveConfigBusy\x20||\x20!basePath\x22\x20title=\x22Discard\x20unsaved\x20changes.\x22\x20style=\x22font-size:11px;padding:4px\x2010px;opacity:.75;\x22>Reset</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22saveWorkerConfig()\x22\x20:disabled=\x22saveConfigBusy\x20||\x20!basePath\x22\x20title=\x22Save\x20and\x20restart\x20the\x20worker\x20with\x20these\x20values.\x22\x20style=\x22font-size:11px;padding:4px\x2010px;color:var(--okdb-accent);border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20saveConfigBusy\x20?\x20\x27Saving…\x27\x20:\x20\x27Save\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22form-grid\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22field-stack\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22field-label\x22\x20title=\x22Parallel\x20worker\x20lanes.\x22>Concurrency</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22field-input\x22\x20type=\x22number\x22\x20min=\x221\x22\x20:value=\x22workerConfigDraft.concurrency\x22\x20@input=\x22workerConfigDraft.concurrency\x20=\x20$event.target.value\x22\x20placeholder=\x221\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22field-stack\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22field-label\x22\x20title=\x22Milliseconds\x20to\x20wait\x20before\x20polling\x20again\x20when\x20the\x20queue\x20is\x20empty.\x22>Poll</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22field-input\x22\x20type=\x22number\x22\x20min=\x221\x22\x20:value=\x22workerConfigDraft.pollInterval\x22\x20@input=\x22workerConfigDraft.pollInterval\x20=\x20$event.target.value\x22\x20placeholder=\x221000\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22field-stack\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22field-label\x22\x20title=\x22Milliseconds\x20an\x20in-flight\x20claim\x20stays\x20reserved\x20before\x20it\x20can\x20be\x20reclaimed.\x22>TTL</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22field-input\x22\x20type=\x22number\x22\x20min=\x221\x22\x20:value=\x22workerConfigDraft.ttl\x22\x20@input=\x22workerConfigDraft.ttl\x20=\x20$event.target.value\x22\x20placeholder=\x2230000\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22field-stack\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22field-label\x22\x20title=\x22Whether\x20function\x20runs\x20are\x20persisted.\x22>Runs</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-input\x22\x20style=\x22display:flex;align-items:center;min-height:36px;background:var(--okdb-app-bg);\x22>{{\x20workerRecordRuns\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22saveConfigError\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22alert\x20alert--error\x22>{{\x20saveConfigError\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22isProcessor\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\x20this\x20processor\x20watches.\x22>{{\x20processorSourceType\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Environment\x20whose\x20changelog\x20is\x20consumed.\x22>source:\x20{{\x20processorSourceEnv\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Function\x20environment.\x22>fn\x20env:\x20{{\x20handlerEnv\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22How\x20source\x20changes\x20are\x20consumed.\x22>mode:\x20{{\x20processorMode\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22processorPaused\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Processor\x20registration\x20is\x20currently\x20paused.\x22>paused</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\x20\x20<if\x20:=\x22showWorkerReason\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Why\x20the\x20processor\x20is\x20in\x20its\x20current\x20state.\x22>{{\x20reasonText\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<div\x20class=\x22story-lead\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Watches\x20<strong>{{\x20processorSourceType\x20}}</strong>\x20in\x20<strong>{{\x20processorSourceEnv\x20}}</strong>\x20and\x20runs\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22canOpenHandlerFunction\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openHandlerFunction()\x22\x20class=\x22inline-link\x22\x20title=\x22View\x20or\x20edit\x20this\x20function\x20in\x20the\x20Functions\x20section.\x22>ƒ\x20{{\x20handlerName\x20}}\x20↗</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:=\x22!canOpenHandlerFunction\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22muted-code\x22\x20style=\x22color:var(--okdb-app-fg);\x22>{{\x20handlerName\x20||\x20\x27—\x27\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\x20\x20for\x20each\x20change\x20batch.\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>Use\x20this\x20engine\x20for\x20side\x20effects\x20and\x20projections\x20driven\x20by\x20change\x20batches\x20without\x20owning\x20a\x20dedicated\x20target\x20type.</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>Invocations</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-accent);\x22>{{\x20processorInvocations\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>Changes</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>{{\x20processorProcessedChanges\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>Failures</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(processorFailedBatches\x20>\x200\x20?\x20\x27var(--okdb-danger)\x27\x20:\x20\x27var(--okdb-app-fg-strong)\x27)\x22>{{\x20processorFailedBatches\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>Lag</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(processorLag\x20===\x200\x20?\x20\x27var(--okdb-success)\x27\x20:\x20\x27var(--okdb-warning)\x27)\x22>{{\x20processorLag\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\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>Processing\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>bootstrap</span><span\x20class=\x22kv-val\x22>{{\x20processorBootstrap\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>origin\x20mode</span><span\x20class=\x22kv-val\x22>{{\x20processorOriginMode\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>batch\x20size</span><span\x20class=\x22kv-val\x22>{{\x20processorBatchSize\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>running\x20batches</span><span\x20class=\x22kv-val\x22>{{\x20processorRunningBatches\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>progress</span><span\x20class=\x22kv-val\x22>{{\x20processorProgress\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>cursor\x20key</span><span\x20class=\x22kv-val\x22>{{\x20processorCursorKey\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>lock\x20mode</span><span\x20class=\x22kv-val\x22>{{\x20processorLockMode\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>hydrate\x20values</span><span\x20class=\x22kv-val\x22>{{\x20processorHydrateValues\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>fail\x20on\x20fn\x20error</span><span\x20class=\x22kv-val\x22>{{\x20processorFailOnHandlerError\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22isMaterializer\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\x20this\x20materializer\x20watches.\x22>{{\x20materializerSourceType\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Target\x20type\x20updated\x20by\x20returned\x20ops.\x22>target:\x20{{\x20materializerTargetType\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{{\x20materializerSourceEnv\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Target\x20environment.\x22>target\x20env:\x20{{\x20materializerTargetEnv\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Function\x20environment.\x22>fn\x20env:\x20{{\x20handlerEnv\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22materializerPaused\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Materializer\x20registration\x20is\x20currently\x20paused.\x22>paused</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<div\x20class=\x22story-lead\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Projects\x20<strong>{{\x20materializerSourceType\x20}}</strong>\x20into\x20<strong>{{\x20materializerTargetType\x20}}</strong>\x20using\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22canOpenHandlerFunction\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openHandlerFunction()\x22\x20class=\x22inline-link\x22\x20title=\x22View\x20or\x20edit\x20this\x20function\x20in\x20the\x20Functions\x20section.\x22>ƒ\x20{{\x20handlerName\x20}}\x20↗</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:=\x22!canOpenHandlerFunction\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22muted-code\x22\x20style=\x22color:var(--okdb-app-fg);\x22>{{\x20handlerName\x20||\x20\x27—\x27\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\x20\x20and\x20applies\x20the\x20returned\x20ops\x20to\x20the\x20target\x20collection.\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>Use\x20this\x20engine\x20when\x20you\x20want\x20deterministic,\x20rebuildable\x20derived\x20records\x20instead\x20of\x20free-form\x20side\x20effects.</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>Applied\x20ops</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>{{\x20materializerAppliedOps\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>Target\x20rows</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-accent);\x22>{{\x20materializerTargetCount\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>Changes</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>{{\x20materializerProcessedChanges\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>Failures</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(materializerFailedBatches\x20>\x200\x20?\x20\x27var(--okdb-danger)\x27\x20:\x20\x27var(--okdb-app-fg-strong)\x27)\x22>{{\x20materializerFailedBatches\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\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>Materialization\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>bootstrap</span><span\x20class=\x22kv-val\x22>{{\x20materializerBootstrap\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>origin\x20mode</span><span\x20class=\x22kv-val\x22>{{\x20materializerOriginMode\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>batch\x20size</span><span\x20class=\x22kv-val\x22>{{\x20materializerBatchSize\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>running\x20batches</span><span\x20class=\x22kv-val\x22>{{\x20materializerRunningBatches\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>progress</span><span\x20class=\x22kv-val\x22>{{\x20materializerProgress\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>lag</span><span\x20class=\x22kv-val\x22>{{\x20materializerLag\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>cursor\x20key</span><span\x20class=\x22kv-val\x22>{{\x20materializerCursorKey\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>clear\x20on\x20rebuild</span><span\x20class=\x22kv-val\x22>{{\x20materializerClearTargetOnRebuild\x20}}</span>\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;border-color:#244057;\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:6px;min-width:0;flex:1;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Repair\x20workflow</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22story-note\x22\x20style=\x22margin:0;\x22>Edit\x20the\x20handler\x20with\x20seeded\x20sample\x20input,\x20verify\x20the\x20draft\x20run,\x20then\x20retry,\x20rewind,\x20or\x20rebuild\x20from\x20here.</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=\x22display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openHandlerEditor()\x22\x20:disabled=\x22!canOpenHandlerFunction\x20||\x20materializerRepairBusy\x22\x20style=\x22font-size:12px;padding:4px\x2010px;color:var(--okdb-accent);border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent);\x22>ƒ\x20Edit\x20handler</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22retryMaterializer()\x22\x20:disabled=\x22materializerRepairBusy\x20||\x20!basePath\x22\x20style=\x22font-size:12px;padding:4px\x2010px;color:var(--okdb-orange);border-color:color-mix(in\x20srgb,\x20var(--okdb-orange)\x2033%,\x20transparent);\x22>↻\x20Retry</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22resetMaterializerCursor()\x22\x20:disabled=\x22materializerRepairBusy\x20||\x20!basePath\x22\x20style=\x22font-size:12px;padding:4px\x2010px;color:var(--okdb-info);border-color:color-mix(in\x20srgb,\x20var(--okdb-info)\x2033%,\x20transparent);\x22>⇤\x20Reset\x20cursor</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22rebuildMaterializer()\x22\x20:disabled=\x22materializerRepairBusy\x20||\x20!basePath\x22\x20style=\x22font-size:12px;padding:4px\x2010px;color:var(--okdb-success);border-color:color-mix(in\x20srgb,\x20var(--okdb-success)\x2033%,\x20transparent);\x22>⟳\x20Rebuild</button>\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<if\x20:=\x22materializerErrorText\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22alert\x20alert--error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-weight:600;margin-bottom:4px;\x22>Last\x20materializer\x20error</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>{{\x20materializerErrorText\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22materializerRepairError\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22alert\x20alert--error\x22>{{\x20materializerRepairError\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:grid;grid-template-columns:minmax(0,1fr)\x20minmax(280px,.9fr);gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:8px;min-width:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22>Suggested\x20<code>ctx.payload</code></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20class=\x22json-block\x22\x20style=\x22margin:0;max-height:220px;overflow:auto;\x22>{{\x20formatJson(materializerPreviewPayload)\x20}}</pre>\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;flex-direction:column;gap:8px;min-width:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22>Suggested\x20<code>ctx.materializer</code></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20class=\x22json-block\x22\x20style=\x22margin:0;max-height:220px;overflow:auto;\x22>{{\x20formatJson(materializerPreviewContext)\x20}}</pre>\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\x20class=\x22story-note\x22\x20style=\x22margin:0;\x22>Recommended\x20order:\x20<strong>Edit\x20handler</strong>\x20→\x20run\x20the\x20seeded\x20draft\x20preview\x20→\x20<strong>Retry</strong>.\x20Use\x20<strong>Reset\x20cursor</strong>\x20to\x20replay\x20without\x20clearing\x20the\x20target,\x20or\x20<strong>Rebuild</strong>\x20to\x20clear\x20and\x20rematerialize\x20from\x20scratch.</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22!hasSpecializedPipelineView\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22panel-grid\x20panel-grid--two\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card\x22\x20style=\x22display:flex;flex-direction:column;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Overview</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>state</span><span\x20class=\x22kv-val\x22>{{\x20stateText\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>reason</span><span\x20class=\x22kv-val\x22>{{\x20reasonText\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>enabled</span><span\x20class=\x22kv-val\x22>{{\x20eng.enabled\x20===\x20false\x20?\x20\x27no\x27\x20:\x20\x27yes\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>affinity</span><span\x20class=\x22kv-val\x22>{{\x20affinityText\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>updated</span><span\x20class=\x22kv-val\x22>{{\x20updatedText\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22runtimePreviewEntries.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22>Runtime\x20details</div>\x0a\x20\x20\x20\x20\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\x20\x20\x20\x20<each\x20:of=\x22runtimePreviewEntries\x22\x20let:item=\x22entry\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>{{\x20labelize(entry[0])\x20}}</span><span\x20class=\x22kv-val\x22>{{\x20humanValue(entry[1])\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card\x22\x20style=\x22display:flex;flex-direction:column;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Configuration</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22configPreviewEntries.length\x20>\x200\x22>\x0a\x20\x20\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\x20\x20<each\x20:of=\x22configPreviewEntries\x22\x20let:item=\x22entry\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>{{\x20labelize(entry[0])\x20}}</span><span\x20class=\x22kv-val\x22>{{\x20humanValue(entry[1])\x20}}</span>\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</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22configPreviewEntries.length\x20===\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22helper-text\x22>This\x20engine\x20mostly\x20uses\x20structured\x20config.\x20Open\x20the\x20raw\x20JSON\x20below\x20if\x20you\x20need\x20the\x20full\x20payload.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22statsPreviewEntries.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22>Stats\x20snapshot</div>\x0a\x20\x20\x20\x20\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\x20\x20\x20\x20<each\x20:of=\x22statsPreviewEntries\x22\x20let:item=\x22entry\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>{{\x20labelize(entry[0])\x20}}</span><span\x20class=\x22kv-val\x22>{{\x20humanValue(entry[1])\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<div\x20class=\x22card\x22\x20style=\x22display:flex;flex-direction:column;gap:12px;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:8px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Raw\x20data</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-subtitle\x22>Keep\x20the\x20default\x20view\x20visual\x20first.\x20Open\x20these\x20only\x20when\x20you\x20need\x20the\x20underlying\x20JSON.</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20class=\x22raw-toggle-row\x22>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22eng.runtime\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22raw-toggle\x22\x20:style=\x22rawToggleStyle(showRawRuntime)\x22\x20@click=\x22showRawRuntime\x20=\x20!showRawRuntime\x22>Runtime\x20JSON</button>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22eng.stats\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22raw-toggle\x22\x20:style=\x22rawToggleStyle(showRawStats)\x22\x20@click=\x22showRawStats\x20=\x20!showRawStats\x22>Stats\x20JSON</button>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22eng.config\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22raw-toggle\x22\x20:style=\x22rawToggleStyle(showRawConfig)\x22\x20@click=\x22showRawConfig\x20=\x20!showRawConfig\x22>Config\x20JSON</button>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22showRawRuntime\x20&&\x20eng.runtime\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22>Runtime\x20payload</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20class=\x22json-block\x22>{{\x20formatJson(eng.runtime)\x20}}</pre>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20<if\x20:=\x22showRawStats\x20&&\x20eng.stats\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22>Stats\x20payload</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20class=\x22json-block\x22>{{\x20formatJson(eng.stats)\x20}}</pre>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20<if\x20:=\x22showRawConfig\x20&&\x20eng.config\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22>Config\x20payload</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20class=\x22json-block\x22>{{\x20formatJson(eng.config)\x20}}</pre>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a</engine-panel-shell>\x0a','5930640BQAdMu','status','Worker\x20settings\x20saved','runtime','isArray','5342931xPCtOA','\x20must\x20be\x20a\x20positive\x20integer','$ok','processor','stores','okdb','workerConfigDraft','stringify','pipelineHandler','$watch','build','materializer','key','reason','put','error','PATCH','Rebuild\x20materializer\x20\x22','isProcessor','isFinite','bootstrap','application/json'];_0x2e7c=function(){return _0x584cf9;};return _0x2e7c();}function o(_0xeee457,_0x144ade='—'){const _0x1c8f85=_0x58da;return null==_0xeee457||''===_0xeee457?_0x144ade:Array[_0x1c8f85(0x1d1)](_0xeee457)?_0xeee457[_0x1c8f85(0x1b3)]?_0xeee457['join'](',\x20'):_0x144ade:_0x1c8f85(0x1fc)==typeof _0xeee457?_0xeee457?_0x1c8f85(0x1c6):'no':String(_0xeee457);}function c(_0x14ed46,_0x4454e8=[]){const _0x5f2349=_0x58da;return function(_0x47928c){const _0x33d521=_0x58da;return!!_0x47928c&&_0x33d521(0x22e)==typeof _0x47928c&&!Array[_0x33d521(0x1d1)](_0x47928c);}(_0x14ed46)?Object[_0x5f2349(0x1c5)](_0x14ed46)['filter'](([_0x465f4d,_0x4fd6d2])=>!_0x4454e8['includes'](_0x465f4d)&&(null==_0x4fd6d2||[_0x5f2349(0x21a),'number',_0x5f2349(0x1fc)][_0x5f2349(0x234)](typeof _0x4fd6d2))):[];}function d(_0x1cb1bc,_0x1a11c9){const _0x1bd8ba=_0x58da;if(''===_0x1cb1bc||null==_0x1cb1bc)return null;const _0x1774f0=Math['trunc'](Number(_0x1cb1bc));if(!Number['isFinite'](_0x1774f0)||_0x1774f0<0x1)throw new Error(_0x1a11c9+_0x1bd8ba(0x1d3));return _0x1774f0;}function p(_0x17e999){const _0x2c3af0=_0x58da;if(null==_0x17e999||''===_0x17e999)return'—';const _0x34d8bd=Number(_0x17e999);if(!Number[_0x2c3af0(0x1e5)](_0x34d8bd))return String(_0x17e999);const _0x12e640=_0x34d8bd<=0x1?0x64*_0x34d8bd:_0x34d8bd;return Math['round'](_0x12e640)+'%';}export default{'tag':_0x40775c(0x232),'dependencies':[_0x44e0f4,_0x55ec78],'attr':{'engine':{},'env':{},'modal':{}},'context':_0x392f64=>({'saveConfigBusy':!0x1,'saveConfigError':null,'materializerRepairBusy':!0x1,'materializerRepairError':null,'showRawRuntime':!0x1,'showRawStats':!0x1,'showRawConfig':!0x1,'workerConfigDraft':{'concurrency':'','pollInterval':'','ttl':''},get 'eng'(){const _0xbe6660=_0x40775c;return _0x392f64[_0xbe6660(0x208)][_0xbe6660(0x205)]??{};},get 'envName'(){const _0x24eab2=_0x40775c;return _0x297458(this['eng'],_0x392f64[_0x24eab2(0x208)][_0x24eab2(0x1bf)]??null);},get 'basePath'(){const _0x2e3679=_0x40775c;return _0x4c9cde(this[_0x2e3679(0x1ac)],this[_0x2e3679(0x1bb)]);},get 'isQueueWorker'(){const _0x5d62a3=_0x40775c;return _0x5d62a3(0x1ed)===this[_0x5d62a3(0x1ac)][_0x5d62a3(0x1a8)];},get 'isProcessor'(){const _0x314736=_0x40775c;return _0x314736(0x1d5)===this['eng']['type'];},get 'isMaterializer'(){const _0x442254=_0x40775c;return _0x442254(0x1dd)===this['eng'][_0x442254(0x1a8)];},get 'hasSpecializedPipelineView'(){const _0x4d16ac=_0x40775c;return this['isQueueWorker']||this[_0x4d16ac(0x1e4)]||this[_0x4d16ac(0x1b6)];},get 'stateText'(){const _0x53ed31=_0x40775c;return _0x53ed31(0x1e1)===this[_0x53ed31(0x1ac)][_0x53ed31(0x1ce)]?_0x53ed31(0x1e1):_0x53ed31(0x1ae)===this[_0x53ed31(0x1ac)][_0x53ed31(0x1ce)]?_0x53ed31(0x1ae):this[_0x53ed31(0x1ac)]['isRunning']||_0x53ed31(0x1aa)===this['eng'][_0x53ed31(0x1ce)]?'running':this[_0x53ed31(0x1ac)]['status']||_0x53ed31(0x1b8);},get 'reasonText'(){const _0x53e244=_0x40775c,_0x1c63ad=this[_0x53e244(0x1ac)][_0x53e244(0x1df)]??null;return _0x1c63ad&&_0x1c63ad!==this['stateText']?String(_0x1c63ad)[_0x53e244(0x1c0)](/_/g,'\x20'):'—';},get 'affinityText'(){const _0x732cd5=_0x40775c;return o(this[_0x732cd5(0x1ac)][_0x732cd5(0x207)],_0x732cd5(0x1ff));},get 'updatedText'(){const _0x5c7a75=_0x40775c;return function(_0x99089d){if(!_0x99089d)return'—';try{return new Date(_0x99089d)['toLocaleString']();}catch{return String(_0x99089d);}}(this[_0x5c7a75(0x1ac)][_0x5c7a75(0x1d0)]?.['updated']);},get 'runtimePreviewEntries'(){const _0x2fa668=_0x40775c;return c(this[_0x2fa668(0x1ac)][_0x2fa668(0x1d0)],[_0x2fa668(0x227),_0x2fa668(0x1df),'error',_0x2fa668(0x214),'updated']);},get 'statsPreviewEntries'(){const _0x524e6d=_0x40775c;return c(this[_0x524e6d(0x1ac)][_0x524e6d(0x228)],[_0x524e6d(0x223),_0x524e6d(0x222),_0x524e6d(0x1e8),_0x524e6d(0x20f),_0x524e6d(0x1ab),_0x524e6d(0x1b1),_0x524e6d(0x1a9),_0x524e6d(0x214)]);},get 'configPreviewEntries'(){const _0x1bb8b3=_0x40775c;return c(this[_0x1bb8b3(0x1ac)][_0x1bb8b3(0x238)],[_0x1bb8b3(0x222),_0x1bb8b3(0x1e8),'handler','concurrency','pollInterval','ttl']);},get 'workerStats'(){const _0x1f846c=_0x40775c;return this[_0x1f846c(0x1ac)][_0x1f846c(0x228)]??{};},get 'pipelineStats'(){const _0xd680e7=_0x40775c;return this[_0xd680e7(0x1ac)][_0xd680e7(0x228)]??{};},get 'workerHandler'(){const _0x5052c2=_0x40775c;return this[_0x5052c2(0x1c2)][_0x5052c2(0x20f)]??this[_0x5052c2(0x1ac)][_0x5052c2(0x238)]?.[_0x5052c2(0x20f)]??null;},get 'pipelineHandler'(){const _0x3eaf42=_0x40775c;return this['pipelineStats'][_0x3eaf42(0x20f)]??this[_0x3eaf42(0x1ac)][_0x3eaf42(0x238)]?.[_0x3eaf42(0x20f)]??null;},get 'handlerName'(){const _0x16833e=_0x40775c;return this[_0x16833e(0x1da)]?.[_0x16833e(0x23a)]??null;},get 'handlerEnv'(){const _0x3e5c22=_0x40775c;return this[_0x3e5c22(0x1da)]?.['env']??this['envName']??'—';},get 'canOpenHandlerFunction'(){const _0x279cd1=_0x40775c;return!!this[_0x279cd1(0x1c1)];},get 'workerJobType'(){const _0x2fd4cd=_0x40775c;return this[_0x2fd4cd(0x1c2)]['job_type']??this['eng'][_0x2fd4cd(0x238)]?.[_0x2fd4cd(0x222)]??'—';},get 'workerQueueEnv'(){const _0x229684=_0x40775c;return this[_0x229684(0x1c2)]['queue_env']??this[_0x229684(0x1ac)][_0x229684(0x238)]?.[_0x229684(0x1e8)]??this[_0x229684(0x1bb)]??'—';},get 'workerFunctionEnv'(){const _0x224dd5=_0x40775c;return this[_0x224dd5(0x1f9)]?.[_0x224dd5(0x1bf)]??this['envName']??'—';},get 'workerRecordRuns'(){const _0x5c3f74=_0x40775c;return this['eng']['config']?.[_0x5c3f74(0x20f)]?.['recordRuns']??'all';},get 'workerProcessed'(){const _0x3fa6f3=_0x40775c;return this['workerStats'][_0x3fa6f3(0x1b1)]??0x0;},get 'workerFailed'(){const _0x47cb75=_0x40775c;return this[_0x47cb75(0x1c2)][_0x47cb75(0x1a9)]??0x0;},get 'workerRunning'(){const _0x30b8a1=_0x40775c;return this[_0x30b8a1(0x1c2)][_0x30b8a1(0x214)]??0x0;},get 'workerConcurrency'(){const _0x5251d6=_0x40775c;return this['workerStats'][_0x5251d6(0x1ab)]??this['eng']['config']?.[_0x5251d6(0x1ab)]??0x1;},get 'workerPollInterval'(){const _0x28c87b=_0x40775c;return this['eng']['config']?.[_0x28c87b(0x233)]??0x3e8;},get 'workerTtl'(){const _0x182664=_0x40775c;return this[_0x182664(0x1ac)][_0x182664(0x238)]?.['ttl']??0x7530;},get 'canOpenWorkerFunction'(){const _0x1e1f0e=_0x40775c;return!!this['workerHandler']?.[_0x1e1f0e(0x23a)];},get 'showWorkerReason'(){const _0x1b915f=_0x40775c;return'—'!==this[_0x1b915f(0x22d)]&&_0x1b915f(0x214)!==this[_0x1b915f(0x22d)];},get 'showWorkerAffinity'(){const _0x1d1e72=_0x40775c;return'all\x20nodes'!==this[_0x1d1e72(0x1b9)];},get 'processorSourceType'(){const _0xe68f50=_0x40775c;return this['pipelineStats']['source_type']??this['eng'][_0xe68f50(0x238)]?.[_0xe68f50(0x209)]??'—';},get 'processorSourceEnv'(){const _0x14c8d7=_0x40775c;return this[_0x14c8d7(0x220)][_0x14c8d7(0x1ad)]??this['eng'][_0x14c8d7(0x238)]?.[_0x14c8d7(0x1ad)]??this[_0x14c8d7(0x1bb)]??'—';},get 'processorMode'(){const _0x121203=_0x40775c;return this[_0x121203(0x220)][_0x121203(0x212)]??this[_0x121203(0x1ac)][_0x121203(0x238)]?.[_0x121203(0x212)]??_0x121203(0x236);},get 'processorBootstrap'(){const _0x16c563=_0x40775c;return this['pipelineStats']['bootstrap']??this[_0x16c563(0x1ac)][_0x16c563(0x238)]?.['bootstrap']??_0x16c563(0x216);},get 'processorOriginMode'(){const _0x126560=_0x40775c;return this[_0x126560(0x220)]['originMode']??this[_0x126560(0x1ac)][_0x126560(0x238)]?.[_0x126560(0x1f5)]??'all';},get 'processorBatchSize'(){const _0x42a1b7=_0x40775c;return this[_0x42a1b7(0x220)]['batchSize']??this[_0x42a1b7(0x1ac)][_0x42a1b7(0x238)]?.[_0x42a1b7(0x1ef)]??0x100;},get 'processorCursorKey'(){const _0x8fde45=_0x40775c;return this[_0x8fde45(0x220)][_0x8fde45(0x1be)]??this[_0x8fde45(0x1ac)]['config']?.['cursorKey']??this[_0x8fde45(0x1ac)][_0x8fde45(0x1de)]??'—';},get 'processorLockMode'(){const _0x512ed9=_0x40775c;return this[_0x512ed9(0x220)]['lockMode']??this[_0x512ed9(0x1ac)][_0x512ed9(0x238)]?.['lockMode']??_0x512ed9(0x23c);},get 'processorHydrateValues'(){const _0x1a335d=_0x40775c;return o(this[_0x1a335d(0x220)][_0x1a335d(0x1af)]??this[_0x1a335d(0x1ac)][_0x1a335d(0x238)]?.[_0x1a335d(0x1af)]??!0x0);},get 'processorFailOnHandlerError'(){const _0x173d4c=_0x40775c;return o(this[_0x173d4c(0x220)][_0x173d4c(0x1f2)]??this[_0x173d4c(0x1ac)][_0x173d4c(0x238)]?.[_0x173d4c(0x1f2)]??!0x0);},get 'processorInvocations'(){const _0x41a954=_0x40775c;return this[_0x41a954(0x220)][_0x41a954(0x1ee)]??0x0;},get 'processorProcessedChanges'(){const _0x2a7496=_0x40775c;return this[_0x2a7496(0x220)][_0x2a7496(0x1c8)]??0x0;},get 'processorFailedBatches'(){return this['pipelineStats']['failedBatches']??0x0;},get 'processorRunningBatches'(){const _0x232da4=_0x40775c;return this['pipelineStats'][_0x232da4(0x1ca)]??0x0;},get 'processorLag'(){const _0x40499f=_0x40775c;return this[_0x40499f(0x220)]['lag']??'—';},get 'processorProgress'(){return p(this['pipelineStats']['progress']);},get 'processorPaused'(){const _0x34be9e=_0x40775c;return!0x0===this[_0x34be9e(0x220)][_0x34be9e(0x1c9)];},get 'materializerSourceType'(){const _0x40c753=_0x40775c;return this[_0x40c753(0x220)][_0x40c753(0x209)]??this[_0x40c753(0x1ac)][_0x40c753(0x238)]?.[_0x40c753(0x209)]??'—';},get 'materializerTargetType'(){const _0x5cd860=_0x40775c;return this[_0x5cd860(0x220)][_0x5cd860(0x229)]??this[_0x5cd860(0x1ac)][_0x5cd860(0x238)]?.['target_type']??'—';},get 'materializerSourceEnv'(){const _0x2c0c82=_0x40775c;return this['pipelineStats'][_0x2c0c82(0x1ad)]??this[_0x2c0c82(0x1ac)][_0x2c0c82(0x238)]?.[_0x2c0c82(0x1ad)]??this[_0x2c0c82(0x1bb)]??'—';},get 'materializerTargetEnv'(){const _0x25c785=_0x40775c;return this[_0x25c785(0x220)][_0x25c785(0x1bd)]??this['eng'][_0x25c785(0x238)]?.[_0x25c785(0x1bd)]??this['envName']??'—';},get 'materializerBootstrap'(){const _0x2a4d10=_0x40775c;return this['pipelineStats']['bootstrap']??this[_0x2a4d10(0x1ac)][_0x2a4d10(0x238)]?.[_0x2a4d10(0x1e6)]??'snapshot';},get 'materializerOriginMode'(){const _0x4d019e=_0x40775c;return this['pipelineStats'][_0x4d019e(0x1f5)]??this[_0x4d019e(0x1ac)][_0x4d019e(0x238)]?.[_0x4d019e(0x1f5)]??_0x4d019e(0x21b);},get 'materializerBatchSize'(){const _0x33143d=_0x40775c;return this[_0x33143d(0x220)]['batchSize']??this['eng'][_0x33143d(0x238)]?.[_0x33143d(0x1ef)]??0x80;},get 'materializerCursorKey'(){const _0x3a7f26=_0x40775c;return this[_0x3a7f26(0x220)]['cursorKey']??this[_0x3a7f26(0x1ac)]['config']?.[_0x3a7f26(0x1be)]??this['eng'][_0x3a7f26(0x1de)]??'—';},get 'materializerClearTargetOnRebuild'(){const _0x473573=_0x40775c;return o(this[_0x473573(0x220)][_0x473573(0x1c4)]??this['eng'][_0x473573(0x238)]?.[_0x473573(0x1c4)]??!0x0);},get 'materializerProcessedChanges'(){const _0xebf598=_0x40775c;return this[_0xebf598(0x220)]['processedChanges']??0x0;},get 'materializerAppliedOps'(){const _0x12a788=_0x40775c;return this[_0x12a788(0x220)]['appliedOps']??0x0;},get 'materializerFailedBatches'(){const _0x5971b5=_0x40775c;return this['pipelineStats'][_0x5971b5(0x1eb)]??0x0;},get 'materializerRunningBatches'(){const _0x4544ce=_0x40775c;return this[_0x4544ce(0x220)]['runningBatches']??0x0;},get 'materializerTargetCount'(){const _0x3b6b23=_0x40775c;return this[_0x3b6b23(0x220)][_0x3b6b23(0x1f1)]??'—';},get 'materializerLag'(){const _0x25a59e=_0x40775c;return this[_0x25a59e(0x220)][_0x25a59e(0x1b2)]??'—';},get 'materializerProgress'(){const _0x2b9bc8=_0x40775c;return p(this[_0x2b9bc8(0x220)]['progress']);},get 'materializerPaused'(){const _0x1ac2ec=_0x40775c;return!0x0===this[_0x1ac2ec(0x220)][_0x1ac2ec(0x1c9)];},get 'materializerErrorText'(){const _0x161477=_0x40775c;return this[_0x161477(0x220)]['error']??this[_0x161477(0x1ac)][_0x161477(0x1e1)]??null;},get 'materializerPreviewPayload'(){const _0x1f37c3=_0x40775c;return[{'action':_0x1f37c3(0x1e0),'key':'example-1','value':{'sample':!0x0,'title':'Example\x20source\x20row','sourceType':this[_0x1f37c3(0x1c7)]},'clock':null},{'action':_0x1f37c3(0x21d),'key':_0x1f37c3(0x22c),'clock':0x7b}];},get 'materializerPreviewContext'(){const _0x3b53d2=_0x40775c;return{'mode':_0x3b53d2(0x1aa)===this[_0x3b53d2(0x220)]['state']?'live':_0x3b53d2(0x1dc),'sourceType':this['materializerSourceType'],'targetType':this[_0x3b53d2(0x225)],'sourceEnv':this[_0x3b53d2(0x1e9)],'targetEnv':this[_0x3b53d2(0x1b4)],'engineKey':this[_0x3b53d2(0x1ac)][_0x3b53d2(0x1de)]??null,'cursorKey':this[_0x3b53d2(0x22b)]};},'formatJson':_0x47dc45,'labelize':_0x1ca9be=>String(_0x1ca9be||'')['replace'](/_/g,'\x20'),'humanValue':o,'rawToggleStyle':_0x4f0b6b=>_0x4f0b6b?_0x40775c(0x239):'','syncWorkerConfig'(_0x428036=null){const _0x4c2366=_0x40775c,_0x37e2d2=_0x428036?.['config']??{};this[_0x4c2366(0x1d8)]={'concurrency':null==_0x37e2d2['concurrency']?'':String(_0x37e2d2[_0x4c2366(0x1ab)]),'pollInterval':null==_0x37e2d2['pollInterval']?'':String(_0x37e2d2[_0x4c2366(0x233)]),'ttl':null==_0x37e2d2[_0x4c2366(0x210)]?'':String(_0x37e2d2['ttl'])},this[_0x4c2366(0x20e)]=null;},'buildWorkerConfigPatch'(){const _0x3641b6=_0x40775c,_0x924016=this['eng'][_0x3641b6(0x238)]??{},_0x35f6d1={'concurrency':d(this[_0x3641b6(0x1d8)][_0x3641b6(0x1ab)],_0x3641b6(0x1cb)),'pollInterval':d(this[_0x3641b6(0x1d8)][_0x3641b6(0x233)],_0x3641b6(0x1ba)),'ttl':d(this[_0x3641b6(0x1d8)]['ttl'],_0x3641b6(0x1b5))},_0x513fb1={};for(const [_0x4837d1,_0x12eb18]of Object[_0x3641b6(0x1c5)](_0x35f6d1))null==_0x12eb18?void 0x0!==_0x924016[_0x4837d1]&&(_0x513fb1[_0x4837d1]=null):_0x924016[_0x4837d1]!==_0x12eb18&&(_0x513fb1[_0x4837d1]=_0x12eb18);return _0x513fb1;},'resetWorkerConfig'(){const _0x1bb48d=_0x40775c;this[_0x1bb48d(0x20b)](this[_0x1bb48d(0x1ac)]);},'inspectWorkerFunction'(){const _0x3f0a8f=_0x40775c;this['openHandlerFunction'](this[_0x3f0a8f(0x1f9)]?.['name']??null);},'openHandlerFunction'(_0x5a16d4=null){const _0x5239f3=_0x40775c,_0x216046=_0x5a16d4??this[_0x5239f3(0x1c1)];_0x216046&&_0x111376(_0x392f64,_0x216046,{'beforeNavigate':()=>_0x392f64['$attr'][_0x5239f3(0x237)]?.[_0x5239f3(0x235)]?.()});},async 'openHandlerEditor'(){const _0x698f97=_0x40775c;if(!this[_0x698f97(0x1c1)])return;const _0x25f3bb=_0x392f64['$ok'][_0x698f97(0x1d6)][_0x698f97(0x1d7)],_0x1cb5e3=_0x392f64[_0x698f97(0x1d4)]['stores'][_0x698f97(0x1fe)],_0x1724a6=this['handlerEnv']&&'—'!==this['handlerEnv']?this[_0x698f97(0x202)]:this[_0x698f97(0x1bb)];_0x1724a6?(_0x25f3bb['selectedEnv']!==_0x1724a6&&_0x25f3bb['selectEnv'](_0x1724a6),await _0x1cb5e3[_0x698f97(0x1bc)](),await _0x1cb5e3['select'](this['handlerName']),_0x1cb5e3[_0x698f97(0x217)](),_0x1cb5e3['setModalPayloadDraft'](this['formatJson'](this[_0x698f97(0x1fb)])),_0x1cb5e3['setModalPreviewContext']({'materializerContext':this[_0x698f97(0x1ec)]}),await _0x392f64[_0x698f97(0x1d4)][_0x698f97(0x1ea)][_0x698f97(0x237)][_0x698f97(0x1b7)]({'owner':_0x392f64,'title':'Edit\x20Function\x20·\x20'+this[_0x698f97(0x1c1)],'canDrag':!0x0,'content':'<function-modal\x20:modal=\x22modal\x22\x20mode=\x22edit\x22\x20:on-done=\x22onDone\x22\x20/>','context':_0x3a046=>({'modal':_0x3a046,'onDone':async()=>{const _0x3193be=_0x698f97;await _0x1cb5e3[_0x3193be(0x206)](this[_0x3193be(0x1c1)]),await _0x1cb5e3['loadOverviewRuns'](),_0x392f64[_0x3193be(0x1f3)](_0x3193be(0x1f0));}})})):this[_0x698f97(0x201)]();},async 'runMaterializerRepairAction'(_0x35b790,_0x46b406,_0xec8d0=null){const _0x480e1f=_0x40775c;if(this[_0x480e1f(0x1b6)]&&this['basePath']&&!this[_0x480e1f(0x1c3)]){if(_0xec8d0&&!await _0x392f64[_0x480e1f(0x1d4)]['shared']['modal'][_0x480e1f(0x21c)](_0xec8d0))return;this[_0x480e1f(0x1c3)]=!0x0,this['materializerRepairError']=null;try{const _0x51542f=await fetch(''+this[_0x480e1f(0x20c)]+_0x35b790,{'method':_0x480e1f(0x231)}),_0x2ec49d=await _0x51542f[_0x480e1f(0x204)]()[_0x480e1f(0x1f6)](()=>({}));if(!_0x51542f['ok'])throw new Error(_0x3e1260(_0x2ec49d,'Failed\x20('+_0x51542f[_0x480e1f(0x1ce)]+')'));const _0x45c916=_0x2ec49d?.[_0x480e1f(0x226)]??_0x2ec49d?.['result']??null;_0x45c916&&_0x392f64[_0x480e1f(0x1f3)](_0x480e1f(0x1fa),_0x45c916),_0x392f64[_0x480e1f(0x1f3)](_0x480e1f(0x1f0)),_0x392f64[_0x480e1f(0x1d4)][_0x480e1f(0x1ea)]?.[_0x480e1f(0x21f)]?.[_0x480e1f(0x200)]?.(_0x46b406);}catch(_0x51befc){this[_0x480e1f(0x23b)]=_0x51befc?.['message']||String(_0x51befc),_0x392f64['$ok']['shared']?.[_0x480e1f(0x21f)]?.['error']?.(this['materializerRepairError']);}finally{this[_0x480e1f(0x1c3)]=!0x1;}}},'retryMaterializer'(){const _0x5c02d2=_0x40775c;return this[_0x5c02d2(0x215)](_0x5c02d2(0x20a),_0x5c02d2(0x21e));},'resetMaterializerCursor'(){const _0x1914c6=_0x40775c;return this[_0x1914c6(0x215)](_0x1914c6(0x203),_0x1914c6(0x23d),_0x1914c6(0x221)+this['eng'][_0x1914c6(0x23a)]+'\x22?');},'rebuildMaterializer'(){const _0xbb1bf2=_0x40775c;return this[_0xbb1bf2(0x215)]('/rebuild','Materializer\x20rebuild\x20started',_0xbb1bf2(0x1e3)+this[_0xbb1bf2(0x1ac)][_0xbb1bf2(0x23a)]+'\x22?');},async 'saveWorkerConfig'(){const _0x14be88=_0x40775c;if(this[_0x14be88(0x1f7)]&&this[_0x14be88(0x20c)]&&!this[_0x14be88(0x219)]){this[_0x14be88(0x219)]=!0x0,this['saveConfigError']=null;try{const _0x4ee8d2=this['buildWorkerConfigPatch']();if(!Object['keys'](_0x4ee8d2)[_0x14be88(0x1b3)])return void _0x392f64['$ok'][_0x14be88(0x1ea)]?.[_0x14be88(0x21f)]?.[_0x14be88(0x1f8)]?.(_0x14be88(0x1fd));const _0x12f6a8=await fetch(this[_0x14be88(0x20c)],{'method':_0x14be88(0x1e2),'headers':{'Content-Type':_0x14be88(0x1e7)},'body':JSON[_0x14be88(0x1d9)]({'config':_0x4ee8d2})}),_0x51c003=await _0x12f6a8[_0x14be88(0x204)]()[_0x14be88(0x1f6)](()=>({}));if(!_0x12f6a8['ok'])throw new Error(_0x3e1260(_0x51c003,_0x14be88(0x22a)+_0x12f6a8[_0x14be88(0x1ce)]+')'));const _0x57e55a=_0x51c003?.['data']??_0x51c003?.[_0x14be88(0x22f)]??null;_0x57e55a&&(this['syncWorkerConfig'](_0x57e55a),_0x392f64[_0x14be88(0x1f3)](_0x14be88(0x1fa),_0x57e55a)),_0x392f64['$dispatch'](_0x14be88(0x1f0)),_0x392f64['$ok'][_0x14be88(0x1ea)]?.[_0x14be88(0x21f)]?.[_0x14be88(0x200)]?.(_0x14be88(0x1cf));}catch(_0x517373){this[_0x14be88(0x20e)]=_0x517373?.['message']||String(_0x517373),_0x392f64[_0x14be88(0x1d4)]['shared']?.[_0x14be88(0x21f)]?.[_0x14be88(0x1e1)]?.(this[_0x14be88(0x20e)]);}finally{this[_0x14be88(0x219)]=!0x1;}}}}),'init'(_0x4ae85f){const _0x1da577=_0x40775c;this[_0x1da577(0x20b)](_0x4ae85f[_0x1da577(0x208)][_0x1da577(0x205)]),_0x4ae85f[_0x1da577(0x1db)](()=>_0x4ae85f[_0x1da577(0x208)][_0x1da577(0x205)],()=>this['syncWorkerConfig'](_0x4ae85f[_0x1da577(0x208)][_0x1da577(0x205)]));},'template':_0x40775c(0x1cc),'style':_0x3628c8};
@@ -1 +1 @@
1
- const _0x30be55=_0xad98;(function(_0x3a514b,_0x22d9e6){const _0x21aeb6=_0xad98,_0x48241c=_0x3a514b();while(!![]){try{const _0x324f89=parseInt(_0x21aeb6(0x201))/0x1+-parseInt(_0x21aeb6(0x200))/0x2*(parseInt(_0x21aeb6(0x206))/0x3)+parseInt(_0x21aeb6(0x1f5))/0x4*(parseInt(_0x21aeb6(0x1f1))/0x5)+parseInt(_0x21aeb6(0x208))/0x6*(-parseInt(_0x21aeb6(0x1fd))/0x7)+parseInt(_0x21aeb6(0x1f0))/0x8+parseInt(_0x21aeb6(0x1e9))/0x9*(parseInt(_0x21aeb6(0x1ea))/0xa)+-parseInt(_0x21aeb6(0x204))/0xb;if(_0x324f89===_0x22d9e6)break;else _0x48241c['push'](_0x48241c['shift']());}catch(_0x240c72){_0x48241c['push'](_0x48241c['shift']());}}}(_0x2103,0x272c3));export default{'tag':_0x30be55(0x1f8),'context':_0xdb640=>({'busy':!0x1,'syncing':!0x1,'blobs':[],'error':null,'syncResult':null,async 'load'(){const _0x2d52e6=_0x30be55;this[_0x2d52e6(0x1f7)]=!0x0,this[_0x2d52e6(0x1eb)]=null;try{const _0x526c50=await fetch(__ENV__[_0x2d52e6(0x1f2)]+'/files/blobs/status'),_0x28d673=await _0x526c50[_0x2d52e6(0x1ee)]();if(!_0x526c50['ok'])throw new Error(_0x28d673?.[_0x2d52e6(0x1eb)]?.[_0x2d52e6(0x1f9)]||_0x2d52e6(0x1fa));this['blobs']=_0x28d673[_0x2d52e6(0x205)]??[];}catch(_0x3f726a){this['error']=_0x3f726a?.[_0x2d52e6(0x1f9)]||String(_0x3f726a);}finally{this[_0x2d52e6(0x1f7)]=!0x1;}},async 'triggerSync'(){const _0x558613=_0x30be55;this[_0x558613(0x1ff)]=!0x0,this['syncResult']=null;try{const _0x548f73=await fetch(__ENV__[_0x558613(0x1f2)]+_0x558613(0x1fb),{'method':_0x558613(0x203),'headers':{'Content-Type':_0x558613(0x1ef)},'body':'{}'}),_0x525513=await _0x548f73[_0x558613(0x1ee)]();if(!_0x548f73['ok'])throw new Error(_0x525513?.[_0x558613(0x1eb)]?.[_0x558613(0x1f9)]||_0x558613(0x1fa));this[_0x558613(0x1fe)]=_0x525513['data'],await this[_0x558613(0x1ed)]();}catch(_0x12fae1){this[_0x558613(0x1eb)]=_0x12fae1?.[_0x558613(0x1f9)]||String(_0x12fae1);}finally{this[_0x558613(0x1ff)]=!0x1;}},'fmtSize':_0x2a04f3=>null==_0x2a04f3?'—':_0x2a04f3<0x400?_0x2a04f3+'\x20B':_0x2a04f3<0x100000?(_0x2a04f3/0x400)['toFixed'](0x1)+_0x30be55(0x1f6):(_0x2a04f3/0x100000)[_0x30be55(0x1f3)](0x1)+_0x30be55(0x202),'nodeCount':_0x25aa03=>_0x25aa03&&'object'==typeof _0x25aa03?Object[_0x30be55(0x1f4)](_0x25aa03)[_0x30be55(0x1ec)](Boolean)[_0x30be55(0x207)]:0x0}),async 'mount'(){await this['load']();},'template':_0x30be55(0x1fc)};function _0xad98(_0x3c7008,_0x4b71a6){_0x3c7008=_0x3c7008-0x1e9;const _0x21033f=_0x2103();let _0xad98e8=_0x21033f[_0x3c7008];return _0xad98e8;}function _0x2103(){const _0x445c6f=['message','failed','/files/blobs/sync','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:16px;\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;\x20font-size:15px;\x22>Blob\x20Mesh\x20Sync</div>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22load()\x22\x20:disabled=\x22busy\x22\x20style=\x22font-size:12px;\x22>↻\x20Refresh</button>\x0a\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22triggerSync()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22syncing\x20||\x20busy\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:12px;\x20background:var(--okdb-sky-soft-bg);\x20border-color:var(--okdb-sky-soft-border);\x20color:var(--okdb-sky);\x22\x0a\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20{{\x20syncing\x20?\x20\x27Syncing…\x27\x20:\x20\x27⇄\x20Sync\x20Blobs\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a\x20\x20<if\x20:=\x22syncResult\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22\x0a\x20\x20\x20\x20\x20\x20padding:8px\x2012px;\x0a\x20\x20\x20\x20\x20\x20border-radius:8px;\x0a\x20\x20\x20\x20\x20\x20background:#1a2f1a;\x0a\x20\x20\x20\x20\x20\x20border:1px\x20solid\x20#2a4a2a;\x0a\x20\x20\x20\x20\x20\x20font-size:12px;\x0a\x20\x20\x20\x20\x20\x20color:#86efac;\x0a\x20\x20\x20\x20\x22>\x0a\x20\x20\x20\x20\x20\x20Sync\x20complete\x20—\x20pulled\x20<strong>{{\x20syncResult.synced\x20}}</strong>\x20blob(s).\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22syncResult.errors?.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-danger);\x20margin-left:8px;\x22>{{\x20syncResult.errors.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\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:12px;\x22>{{\x20error\x20}}</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22busy\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.5;\x22>Loading…</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22!busy\x20&&\x20blobs.length\x20===\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-size:13px;\x20opacity:.4;\x20padding:24px\x200;\x20text-align:center;\x22>\x0a\x20\x20\x20\x20\x20\x20No\x20blobs\x20tracked\x20yet.\x20Upload\x20files\x20to\x20see\x20them\x20here.\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22blobs.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22flex:1;\x20overflow:auto;\x20min-height:0;\x22>\x0a\x20\x20\x20\x20\x20\x20<table\x20style=\x22width:100%;\x20border-collapse:collapse;\x20font-size:12px;\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);\x20opacity:.6;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:left;\x20padding:6px\x208px;\x20font-weight:500;\x22>Hash</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:right;\x20padding:6px\x208px;\x20font-weight:500;\x22>Refs</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:center;\x20padding:6px\x208px;\x20font-weight:500;\x22>On\x20Disk</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:right;\x20padding:6px\x208px;\x20font-weight:500;\x22>Size</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:right;\x20padding:6px\x208px;\x20font-weight:500;\x22>Nodes</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=\x22blobs\x22\x20let:item=\x22b\x22\x20style=\x22border-bottom:1px\x20solid\x20var(--okdb-app-surface-2);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:5px\x208px;\x20font-family:monospace;\x20font-size:11px;\x20opacity:.7;\x22\x20:title=\x22b.hash\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20b.hash\x20?\x20b.hash.slice(0,\x2012)\x20:\x20\x27\x27\x20}}…\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\x20style=\x22padding:5px\x208px;\x20text-align:right;\x20font-family:monospace;\x22>{{\x20b.refs\x20}}</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:5px\x208px;\x20text-align:center;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22b.onDisk\x20?\x20\x27color:var(--okdb-success);\x27\x20:\x20\x27color:var(--okdb-danger);\x27\x22>{{\x20b.onDisk\x20?\x20\x27✓\x27\x20:\x20\x27✗\x27\x20}}</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\x20style=\x22padding:5px\x208px;\x20text-align:right;\x20font-family:monospace;\x20opacity:.7;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20fmtSize(b.sizeBytes)\x20}}\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\x20style=\x22padding:5px\x208px;\x20text-align:right;\x20opacity:.6;\x22>{{\x20nodeCount(b.nodes)\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\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.4;\x20text-align:right;\x22>{{\x20blobs.length\x20}}\x20blob(s)\x20tracked</div>\x0a\x20\x20</if>\x0a\x0a</div>','7fLBEJs','syncResult','syncing','46IoCMOb','55898AoRcaa','\x20MB','POST','1050896FAXVjS','data','10281bkUAJN','length','1784166YbzYvT','9zahxVK','2243550uKczsR','error','filter','load','json','application/json','2280728gHKqbq','675SkdhIj','API','toFixed','values','1980dPLHkC','\x20KB','busy','files-blob-status'];_0x2103=function(){return _0x445c6f;};return _0x2103();}
1
+ const _0x443467=_0x4dbf;(function(_0x594c2d,_0x3a0d5c){const _0x2394bf=_0x4dbf,_0x110d57=_0x594c2d();while(!![]){try{const _0x45ddb5=parseInt(_0x2394bf(0xb4))/0x1*(-parseInt(_0x2394bf(0x9f))/0x2)+parseInt(_0x2394bf(0xa8))/0x3*(-parseInt(_0x2394bf(0xaa))/0x4)+parseInt(_0x2394bf(0xb8))/0x5*(-parseInt(_0x2394bf(0x9e))/0x6)+-parseInt(_0x2394bf(0xa9))/0x7+parseInt(_0x2394bf(0x9c))/0x8*(parseInt(_0x2394bf(0xa4))/0x9)+parseInt(_0x2394bf(0xac))/0xa*(-parseInt(_0x2394bf(0xb3))/0xb)+parseInt(_0x2394bf(0xb9))/0xc;if(_0x45ddb5===_0x3a0d5c)break;else _0x110d57['push'](_0x110d57['shift']());}catch(_0x59c53d){_0x110d57['push'](_0x110d57['shift']());}}}(_0x3688,0x67e7b));function _0x4dbf(_0x6143a8,_0x4e4a31){_0x6143a8=_0x6143a8-0x9b;const _0x36889c=_0x3688();let _0x4dbf06=_0x36889c[_0x6143a8];return _0x4dbf06;}export default{'tag':'files-blob-status','context':_0x31bf0f=>({'busy':!0x1,'syncing':!0x1,'blobs':[],'error':null,'syncResult':null,async 'load'(){const _0x37e5fa=_0x4dbf;this['busy']=!0x0,this[_0x37e5fa(0xb7)]=null;try{const _0x2a8ab4=await fetch(__ENV__['API']+_0x37e5fa(0xb5)),_0x4d97b4=await _0x2a8ab4[_0x37e5fa(0x9d)]();if(!_0x2a8ab4['ok'])throw new Error(_0x4d97b4?.['error']?.[_0x37e5fa(0xaf)]||'failed');this[_0x37e5fa(0xb6)]=_0x4d97b4['data']??[];}catch(_0x367ab8){this[_0x37e5fa(0xb7)]=_0x367ab8?.[_0x37e5fa(0xaf)]||String(_0x367ab8);}finally{this[_0x37e5fa(0xb2)]=!0x1;}},async 'triggerSync'(){const _0xa20c9d=_0x4dbf;this['syncing']=!0x0,this[_0xa20c9d(0xa6)]=null;try{const _0x42ab9a=await fetch(__ENV__[_0xa20c9d(0xa5)]+_0xa20c9d(0xb1),{'method':_0xa20c9d(0x9b),'headers':{'Content-Type':_0xa20c9d(0xa1)},'body':'{}'}),_0x2fb72c=await _0x42ab9a[_0xa20c9d(0x9d)]();if(!_0x42ab9a['ok'])throw new Error(_0x2fb72c?.['error']?.['message']||'failed');this[_0xa20c9d(0xa6)]=_0x2fb72c[_0xa20c9d(0xa3)],await this['load']();}catch(_0x4a6813){this[_0xa20c9d(0xb7)]=_0x4a6813?.['message']||String(_0x4a6813);}finally{this[_0xa20c9d(0xad)]=!0x1;}},'fmtSize':_0x19ee48=>null==_0x19ee48?'—':_0x19ee48<0x400?_0x19ee48+'\x20B':_0x19ee48<0x100000?(_0x19ee48/0x400)['toFixed'](0x1)+_0x443467(0xa7):(_0x19ee48/0x100000)['toFixed'](0x1)+_0x443467(0xa2),'nodeCount':_0x39eb01=>_0x39eb01&&'object'==typeof _0x39eb01?Object[_0x443467(0xab)](_0x39eb01)[_0x443467(0xa0)](Boolean)[_0x443467(0xae)]:0x0}),async 'mount'(){await this['load']();},'template':_0x443467(0xb0)};function _0x3688(){const _0xe66f04=['\x20KB','312105XLHaST','3632811kokuqd','8cKcGWd','values','164190DpbfzR','syncing','length','message','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:16px;\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;\x20font-size:15px;\x22>Blob\x20Mesh\x20Sync</div>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22load()\x22\x20:disabled=\x22busy\x22\x20style=\x22font-size:12px;\x22>↻\x20Refresh</button>\x0a\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22triggerSync()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22syncing\x20||\x20busy\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:12px;\x20background:var(--okdb-sky-soft-bg);\x20border-color:var(--okdb-sky-soft-border);\x20color:var(--okdb-sky);\x22\x0a\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20{{\x20syncing\x20?\x20\x27Syncing…\x27\x20:\x20\x27⇄\x20Sync\x20Blobs\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a\x20\x20<if\x20:=\x22syncResult\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22\x0a\x20\x20\x20\x20\x20\x20padding:8px\x2012px;\x0a\x20\x20\x20\x20\x20\x20border-radius:8px;\x0a\x20\x20\x20\x20\x20\x20background:#1a2f1a;\x0a\x20\x20\x20\x20\x20\x20border:1px\x20solid\x20#2a4a2a;\x0a\x20\x20\x20\x20\x20\x20font-size:12px;\x0a\x20\x20\x20\x20\x20\x20color:#86efac;\x0a\x20\x20\x20\x20\x22>\x0a\x20\x20\x20\x20\x20\x20Sync\x20complete\x20—\x20pulled\x20<strong>{{\x20syncResult.synced\x20}}</strong>\x20blob(s).\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22syncResult.errors?.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-danger);\x20margin-left:8px;\x22>{{\x20syncResult.errors.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\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:12px;\x22>{{\x20error\x20}}</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22busy\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.5;\x22>Loading…</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22!busy\x20&&\x20blobs.length\x20===\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-size:13px;\x20opacity:.4;\x20padding:24px\x200;\x20text-align:center;\x22>\x0a\x20\x20\x20\x20\x20\x20No\x20blobs\x20tracked\x20yet.\x20Upload\x20files\x20to\x20see\x20them\x20here.\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22blobs.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22flex:1;\x20overflow:auto;\x20min-height:0;\x22>\x0a\x20\x20\x20\x20\x20\x20<table\x20style=\x22width:100%;\x20border-collapse:collapse;\x20font-size:12px;\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);\x20opacity:.6;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:left;\x20padding:6px\x208px;\x20font-weight:500;\x22>Hash</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:right;\x20padding:6px\x208px;\x20font-weight:500;\x22>Refs</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:center;\x20padding:6px\x208px;\x20font-weight:500;\x22>On\x20Disk</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:right;\x20padding:6px\x208px;\x20font-weight:500;\x22>Size</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:right;\x20padding:6px\x208px;\x20font-weight:500;\x22>Nodes</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=\x22blobs\x22\x20let:item=\x22b\x22\x20style=\x22border-bottom:1px\x20solid\x20var(--okdb-app-surface-2);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:5px\x208px;\x20font-family:monospace;\x20font-size:11px;\x20opacity:.7;\x22\x20:title=\x22b.hash\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20b.hash\x20?\x20b.hash.slice(0,\x2012)\x20:\x20\x27\x27\x20}}…\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\x20style=\x22padding:5px\x208px;\x20text-align:right;\x20font-family:monospace;\x22>{{\x20b.refs\x20}}</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:5px\x208px;\x20text-align:center;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22b.onDisk\x20?\x20\x27color:var(--okdb-success);\x27\x20:\x20\x27color:var(--okdb-danger);\x27\x22>{{\x20b.onDisk\x20?\x20\x27✓\x27\x20:\x20\x27✗\x27\x20}}</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\x20style=\x22padding:5px\x208px;\x20text-align:right;\x20font-family:monospace;\x20opacity:.7;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20fmtSize(b.sizeBytes)\x20}}\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\x20style=\x22padding:5px\x208px;\x20text-align:right;\x20opacity:.6;\x22>{{\x20nodeCount(b.nodes)\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\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.4;\x20text-align:right;\x22>{{\x20blobs.length\x20}}\x20blob(s)\x20tracked</div>\x0a\x20\x20</if>\x0a\x0a</div>','/files/blobs/sync','busy','22hOpUjs','89308MyafoL','/files/blobs/status','blobs','error','12235sqEcyy','24872388NoPZdt','POST','24UTFvgh','json','1404GwOOsb','12qoFGXv','filter','application/json','\x20MB','data','663669VKtogN','API','syncResult'];_0x3688=function(){return _0xe66f04;};return _0x3688();}