@kedem/okdb 1.8.18 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/okdb.js +1 -1
- package/docs/change-log.md +16 -16
- package/docs/embeddings.md +1 -1
- package/docs/functions.md +26 -25
- package/docs/http-cluster.md +157 -0
- package/docs/index.md +1 -0
- package/docs/manifest.json +5 -1
- package/docs/process-registry.md +185 -0
- package/docs/processors.md +61 -65
- package/docs/queue.md +23 -13
- package/docs/subscriptions.md +230 -0
- package/docs/worker-fleet.md +139 -0
- package/okdb-functions-runner-child.js +1 -1
- package/okdb-functions-sandbox-worker.js +1 -0
- package/okdb-http-worker-child.js +1 -0
- package/okdb-queue-load-handler.js +1 -0
- package/okdb-queue-spawn-child.js +1 -1
- package/okdb-views-bootstrap-worker.js +1 -1
- package/okdb-worker-child.js +1 -0
- package/okdb.js +1 -1
- package/package.json +1 -1
- package/public/sections/db/parts/db-overview.ok.js +1 -1
- package/public/sections/embeddings/parts/pipeline-create-panel.ok.js +1 -1
- package/public/sections/queue/parts/queue-jobs.ok.js +1 -1
- package/public/sections/system/index.ok.html +1 -1
- package/public/sections/system/modals/data-ops-modal.ok.js +1 -1
- package/public/sections/system/parts/system-process-panel.ok.js +1 -0
- package/public/sections/system/parts/system-processing-panel.ok.js +1 -0
- package/public/sections/system/parts/system-runtime-overview.ok.js +1 -0
- package/public/sections/system/parts/system-workers-panel.ok.js +1 -0
- package/types/environment.d.ts +21 -4
- package/types/features/embeddings.d.ts +11 -2
- package/types/features/queue.d.ts +27 -5
- package/types/features/views.d.ts +10 -10
- package/types/index.d.ts +54 -6
- package/types/options.d.ts +12 -0
- package/okdb-fts-handler.js +0 -1
- package/okdb-processor-worker.js +0 -1
- package/public/sections/processors/index.ok.html +0 -1
package/types/options.d.ts
CHANGED
|
@@ -24,6 +24,18 @@ export interface OKDBOptions {
|
|
|
24
24
|
runtimeDeclarations?: boolean;
|
|
25
25
|
log?: { retainDays?: number };
|
|
26
26
|
shutdownTimeout?: number;
|
|
27
|
+
/** Lifecycle role flags — gate which background work this instance runs.
|
|
28
|
+
* Defaults preserve full-role behavior; passive instances serve reads/writes
|
|
29
|
+
* but skip engines / async processors / compaction scheduling. */
|
|
30
|
+
engines?: boolean;
|
|
31
|
+
asyncProcessors?: boolean;
|
|
32
|
+
compaction?: 'active' | 'passive';
|
|
33
|
+
http?: boolean;
|
|
34
|
+
/** Which registered envs open() eagerly opens: 'all' (default), 'core'
|
|
35
|
+
* (~system/~log/default only), or an array of names (core + listed —
|
|
36
|
+
* an unknown listed name makes open() throw). Use openEnv(name) to open
|
|
37
|
+
* more on demand. */
|
|
38
|
+
envs?: 'all' | 'core' | string[];
|
|
27
39
|
}
|
|
28
40
|
|
|
29
41
|
export interface OKDBAuthOptions {
|
package/okdb-fts-handler.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";async function ftsApply(t,s){const p=s&&s.env;p&&p.okdb&&p.okdb.fts&&await p.okdb.fts._applyChanges(t,p)}module.exports={ftsApply:ftsApply},module.exports.default=ftsApply;
|
package/okdb-processor-worker.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
'use strict';const _0x3cd72c=_0x5d6f;(function(_0x50db2c,_0x23578a){const _0x3ace35=_0x5d6f,_0x1d7fb4=_0x50db2c();while(!![]){try{const _0xd0a858=-parseInt(_0x3ace35(0x188))/0x1*(-parseInt(_0x3ace35(0x197))/0x2)+-parseInt(_0x3ace35(0x1c0))/0x3*(parseInt(_0x3ace35(0x1d5))/0x4)+-parseInt(_0x3ace35(0x1cc))/0x5+-parseInt(_0x3ace35(0x1e3))/0x6*(-parseInt(_0x3ace35(0x1db))/0x7)+-parseInt(_0x3ace35(0x183))/0x8+-parseInt(_0x3ace35(0x1b1))/0x9*(parseInt(_0x3ace35(0x1a4))/0xa)+-parseInt(_0x3ace35(0x19e))/0xb*(-parseInt(_0x3ace35(0x18e))/0xc);if(_0xd0a858===_0x23578a)break;else _0x1d7fb4['push'](_0x1d7fb4['shift']());}catch(_0x32abae){_0x1d7fb4['push'](_0x1d7fb4['shift']());}}}(_0xc7b0,0xbc57d));var require$$0=require('worker_threads'),require$$1=require(_0x3cd72c(0x18a)),require$$4=require(_0x3cd72c(0x1d7));function getDefaultExportFromCjs(_0x186229){const _0x20b351=_0x3cd72c;return _0x186229&&_0x186229['__esModule']&&Object[_0x20b351(0x1dc)][_0x20b351(0x195)]['call'](_0x186229,_0x20b351(0x194))?_0x186229[_0x20b351(0x194)]:_0x186229;}var okdbProcessorWorker$1={},okdbEnums,hasRequiredOkdbEnums;function _0xc7b0(){const _0x56c05b=['from','resolve','unique:violation','put','default','hasOwnProperty','started','2702cbYBEX','dropping','license:activated','remote','stop','message','fts:registered','178783VBUTLk','done','unique:violation_resolved','openDB',':data','stopped','63590UlDftn','handle','export','scanType','created','object','filter','bus:type_drop','resetIndex','setTtl','mode','env:removed','schema:set','522Bvtlrn','ping','system:bus_state_change','length','all','live','registerFts','batch','halted','self','ttl:set','txn:rollback','live\x20worker:\x20','license:invalid','dropIndex','2016AQsAVv','exit','item:remove','view:progress','system:ready','ttl:clear','system:clock_change','system:type_drop','\x20is\x20not\x20a\x20function\x20in\x20','env:opened','close','txn:start','2973775VQOuPj','schema:drop','drain','ack','registerType','stopping','license:added','item:create','index:progress','3396BtWGyq','error','./okdb','catch','type','bus:drain','119YYJuiM','prototype','index:registered','origin','postMessage','drainError','env','freeze','268230SWrZhY','push','module','index:drop','passive','action','getChanges','function','drained','system:stopped','system:poke','5544992nRkPFS','type:registered','waiting','PUT','ttl:expired','45ihPyJM','ready','lmdb','setSchema','resetting','open','1608xaNdxW','reqId'];_0xc7b0=function(){return _0x56c05b;};return _0xc7b0();}function requireOkdbEnums(){const _0x37f691=_0x3cd72c;if(hasRequiredOkdbEnums)return okdbEnums;hasRequiredOkdbEnums=0x1;const _0x26b522={'PUT':_0x37f691(0x193),'REMOVE':'remove','INDEX_DROP':_0x37f691(0x1bf),'INDEX_REGISTER':'registerIndex','INDEX_RESET':_0x37f691(0x1ac),'TYPE_REGISTER':_0x37f691(0x1d0),'TYPE_DROP':'dropType','FTS_REGISTER':_0x37f691(0x1b7),'FTS_DROP':'dropFts','FTS_RESET':'resetFts','SCHEMA_SET':_0x37f691(0x18b),'SCHEMA_DROP':'dropSchema','TTL_SET':_0x37f691(0x1ad),'TTL_CLEAR':'clearTtl'},_0x5c8337={'SYSTEM_READY':_0x37f691(0x1c4),'SYSTEM_STOPPED':_0x37f691(0x1ec),'SYSTEM_CLOCK_CHANGE':_0x37f691(0x1c6),'SYSTEM_POKE':_0x37f691(0x1ed),'SYSTEM_DRAIN':'system:drain','SYSTEM_TYPE_DROP':_0x37f691(0x1c7),'SYSTEM_BUS_STATE_CHANGE':_0x37f691(0x1b3),'ITEM_CREATE':_0x37f691(0x1d3),'ITEM_UPDATE':'item:update','ITEM_REMOVE':_0x37f691(0x1c2),'INDEX_RESET':'index:reset','INDEX_READY':'index:ready','INDEX_PROGRESS':_0x37f691(0x1d4),'VIEW_PROGRESS':_0x37f691(0x1c3),'INDEX_DROP':_0x37f691(0x1e6),'INDEX_REGISTERED':_0x37f691(0x1dd),'FTS_REGISTERED':_0x37f691(0x19d),'FTS_DROP':'fts:drop','FTS_RESET':'fts:reset','SCHEMA_SET':_0x37f691(0x1b0),'SCHEMA_DROP':_0x37f691(0x1cd),'UNIQUE_VIOLATION':_0x37f691(0x192),'UNIQUE_VIOLATION_RESOLVED':_0x37f691(0x1a0),'REF_VIOLATION':'ref:violation','REF_VIOLATION_RESOLVED':'ref:violation_resolved','SYNC_APPLY':'sync:apply','TXN_START':_0x37f691(0x1cb),'TXN_END':'txn:end','TXN_ROLLBACK':_0x37f691(0x1bc),'TYPE_REGISTERED':_0x37f691(0x184),'TYPE_DROP':'type:drop','ENV_OPENED':_0x37f691(0x1c9),'ENV_REMOVED':_0x37f691(0x1af),'TTL_EXPIRED':_0x37f691(0x187),'TTL_SET':_0x37f691(0x1bb),'TTL_CLEAR':_0x37f691(0x1c5),'LICENSE_INVALID':_0x37f691(0x1be),'LICENSE_ADDED':_0x37f691(0x1d2),'LICENSE_ACTIVATED':_0x37f691(0x199),'LICENSE_REMOVED':'license:removed'},_0x12b89f={'CREATING':'creating','RESETTING':_0x37f691(0x18c),'READY':_0x37f691(0x189),'DROPPING':_0x37f691(0x198),'WAITING':_0x37f691(0x185)},_0x4a74e4={'CREATED':_0x37f691(0x1a8),'STARTING':'starting','STARTED':_0x37f691(0x196),'STOPPING':_0x37f691(0x1d1),'STOPPED':_0x37f691(0x1a3)},_0x3446d9={'CREATING':'creating','READY':'ready','HALTED':_0x37f691(0x1b9),'STOPPED':_0x37f691(0x1a3),'RESETTING':_0x37f691(0x18c)},_0x26a7bf=Object[_0x37f691(0x1e2)]({'POKE':'bus:poke','DRAIN':_0x37f691(0x1da),'TYPE_DROP':_0x37f691(0x1ab)});return okdbEnums={'BUS_EVENTS':_0x26a7bf,'CHANGE_ACTIONS':_0x26b522,'EVENTS':_0x5c8337,'INDEX_STATE':_0x12b89f,'OKDB_STATE':_0x4a74e4,'VIEW_STATE':_0x3446d9},okdbEnums;}var okdbProcessorOrigin,hasRequiredOkdbProcessorOrigin;function _0x5d6f(_0x4c8bc0,_0xfbd54e){_0x4c8bc0=_0x4c8bc0-0x183;const _0xc7b02f=_0xc7b0();let _0x5d6f5b=_0xc7b02f[_0x4c8bc0];return _0x5d6f5b;}function requireOkdbProcessorOrigin(){if(hasRequiredOkdbProcessorOrigin)return okdbProcessorOrigin;hasRequiredOkdbProcessorOrigin=0x1;function _0x191d8d(_0x315a8b,_0x35780b,_0x47838a){const _0x51f195=_0x5d6f;if(_0x35780b===_0x51f195(0x1b5))return _0x315a8b;if(_0x35780b===_0x51f195(0x1ba))return _0x315a8b['filter'](_0x1e6fc3=>_0x1e6fc3[_0x51f195(0x1de)]===_0x47838a);if(_0x35780b===_0x51f195(0x19a))return _0x315a8b[_0x51f195(0x1aa)](_0x5aef53=>_0x5aef53[_0x51f195(0x1de)]!==_0x47838a);return _0x315a8b;}function _0x11d3ea(_0x485849,_0x5ac757,_0x34342b){const _0xfcfac9=_0x5d6f;if(_0x5ac757===_0xfcfac9(0x1b5))return!![];if(_0x5ac757===_0xfcfac9(0x1ba))return _0x485849===_0x34342b;if(_0x5ac757==='remote')return _0x485849!==_0x34342b;return!![];}return okdbProcessorOrigin={'filterByOrigin':_0x191d8d,'passesOriginFilter':_0x11d3ea},okdbProcessorOrigin;}var hasRequiredOkdbProcessorWorker;function requireOkdbProcessorWorker(){const _0x4291e2=_0x3cd72c;if(hasRequiredOkdbProcessorWorker)return okdbProcessorWorker$1;hasRequiredOkdbProcessorWorker=0x1;const {parentPort:_0x1240e2,workerData:_0xe478e0}=require$$0,_0x483418=require$$1,_0x4c727c=_0xe478e0[_0x4291e2(0x1ae)]??'snapshot';_0x4c727c===_0x4291e2(0x1b6)?_0x2651bd()[_0x4291e2(0x1d8)](_0x504982=>{const _0x4db4fe=_0x4291e2;_0x1240e2[_0x4db4fe(0x1df)]({'type':_0x4db4fe(0x1d6),'error':_0x504982['message']??String(_0x504982)}),process['exit'](0x1);}):_0x40f046()[_0x4291e2(0x1d8)](_0x4e4c30=>{const _0xcfbc77=_0x4291e2;_0x1240e2[_0xcfbc77(0x1df)]({'type':_0xcfbc77(0x1d6),'error':_0x4e4c30['message']??String(_0x4e4c30)}),process['exit'](0x1);});async function _0x40f046(){const _0x9dc681=_0x4291e2,{envPath:_0x4af785,type:_0x3de2a,batchSize:_0x1acaa1,mapSize:_0x394f94,compression:_0xde851d}=_0xe478e0,_0xdcef26=_0x483418['open'](_0x4af785,{'readOnly':!![],'maxDbs':0x80,'mapSize':_0x394f94??0x100*0x400*0x400,'compression':_0xde851d??!![]}),_0x14cf59=_0xdcef26[_0x9dc681(0x1a1)]('type:'+_0x3de2a+_0x9dc681(0x1a2),{'dupSort':![],'useVersions':!![]}),_0x297edb=_0x14cf59['getRange']({'snapshot':!![]});let _0x328fd4=null;const _0x45f3af=()=>new Promise(_0x513193=>{_0x328fd4=_0x513193;});_0x1240e2['on'](_0x9dc681(0x19c),_0x34dec2=>{const _0x5011f8=_0x9dc681;if(_0x34dec2[_0x5011f8(0x1d9)]===_0x5011f8(0x1cf)&&_0x328fd4){const _0x2ce2e8=_0x328fd4;_0x328fd4=null,_0x2ce2e8();}});let _0x242748=[],_0x98fe76=0x0;for(const {key:_0x3a0ffc,value:_0x29637e,version:_0x398e1c}of _0x297edb){_0x242748[_0x9dc681(0x1e4)]({'key':_0x3a0ffc,'value':_0x29637e,'version':_0x398e1c});if(_0x242748[_0x9dc681(0x1b4)]>=_0x1acaa1){const _0x3623c2=_0x242748[_0x9dc681(0x1b4)];_0x1240e2[_0x9dc681(0x1df)]({'type':_0x9dc681(0x1b8),'entries':_0x242748,'processed':_0x98fe76}),await _0x45f3af(),_0x98fe76+=_0x3623c2,_0x242748=[];}}_0x242748['length']>0x0&&(_0x1240e2[_0x9dc681(0x1df)]({'type':_0x9dc681(0x1b8),'entries':_0x242748,'processed':_0x98fe76}),await _0x45f3af(),_0x98fe76+=_0x242748['length']),await _0xdcef26[_0x9dc681(0x1ca)](),_0x1240e2[_0x9dc681(0x1df)]({'type':_0x9dc681(0x19f),'total':_0x98fe76}),process['exit'](0x0);}async function _0x2651bd(){const _0x42e2e5=_0x4291e2,{handlerModule:_0x52cd17,rootPath:_0x357794,envName:_0x4e2529,bus:_0x308fc6}=_0xe478e0,{CHANGE_ACTIONS:_0x4ea8e1}=requireOkdbEnums(),{filterByOrigin:_0x4f5c07}=requireOkdbProcessorOrigin(),_0x11aab8=require$$4,_0x524c3b=new _0x11aab8(_0x357794,{'admin':![],'mcp':![],'http':![],'timeMachine':![],'engines':![],'asyncProcessors':![],'compaction':_0x42e2e5(0x1e7),'_skipBootRuntime':!![],..._0x308fc6===![]?{'bus':![]}:{}});await _0x524c3b[_0x42e2e5(0x18d)]();const _0x3e69dc=_0x524c3b[_0x42e2e5(0x1e1)](_0x4e2529),_0x42bdd5=require(_0x52cd17[_0x42e2e5(0x1e5)]);let _0x1f42f1=_0x42bdd5[_0x52cd17[_0x42e2e5(0x1a6)]]??_0x42bdd5[_0x42e2e5(0x194)]??_0x42bdd5;if(_0x1f42f1&&typeof _0x1f42f1===_0x42e2e5(0x1a9)&&typeof _0x1f42f1[_0x42e2e5(0x1a5)]===_0x42e2e5(0x1ea)){if(typeof _0x1f42f1['init']===_0x42e2e5(0x1ea))await _0x1f42f1['init']({'env':_0x3e69dc});_0x1f42f1=_0x1f42f1[_0x42e2e5(0x1a5)]['bind'](_0x1f42f1);}if(typeof _0x1f42f1!==_0x42e2e5(0x1ea))throw new Error(_0x42e2e5(0x1bd)+_0x52cd17[_0x42e2e5(0x1a6)]+_0x42e2e5(0x1c8)+_0x52cd17['module']);let _0x2272a5=Promise[_0x42e2e5(0x191)]();const _0x36d306=_0x36cd2c=>{const _0x5bbedc=_0x42e2e5;return _0x2272a5=_0x2272a5['then'](_0x36cd2c)[_0x5bbedc(0x1d8)](()=>{}),_0x2272a5;};await new Promise(_0x2781ca=>{const _0x4569d0=_0x42e2e5;_0x1240e2['on'](_0x4569d0(0x19c),_0x3002c7=>{const _0x49e279=_0x4569d0;if(_0x3002c7[_0x49e279(0x1d9)]===_0x49e279(0x1ce))_0x36d306(async()=>{const _0x280729=_0x49e279;try{const _0x2d9929=Array['from'](_0x3e69dc[_0x280729(0x1e9)](_0x3002c7[_0x280729(0x1a7)],_0x3002c7[_0x280729(0x190)],_0x3002c7['to'])),_0x3f74b4=_0x2d9929['filter'](_0x43ed10=>_0x43ed10[_0x280729(0x1e8)]===_0x4ea8e1[_0x280729(0x186)]||_0x43ed10[_0x280729(0x1e8)]===_0x4ea8e1['REMOVE']),_0x3c29ad=_0x4f5c07(_0x3f74b4,_0x3002c7['originMode'],_0x3002c7['origin']);await _0x1f42f1(_0x3c29ad,{'mode':_0x280729(0x1b6),'type':_0x3002c7[_0x280729(0x1a7)],'env':_0x3e69dc}),_0x1240e2[_0x280729(0x1df)]({'type':_0x280729(0x1eb),'reqId':_0x3002c7['reqId'],'lastClock':_0x3002c7['to']});}catch(_0xcd809b){_0x1240e2[_0x280729(0x1df)]({'type':_0x280729(0x1e0),'reqId':_0x3002c7[_0x280729(0x18f)],'error':_0xcd809b[_0x280729(0x19c)]??String(_0xcd809b)});}});else{if(_0x3002c7[_0x49e279(0x1d9)]===_0x49e279(0x1b2))_0x1240e2['postMessage']({'type':'pong'});else _0x3002c7[_0x49e279(0x1d9)]===_0x49e279(0x19b)&&_0x2781ca();}});}),await _0x524c3b['close'](),process[_0x42e2e5(0x1c1)](0x0);}return okdbProcessorWorker$1;}var okdbProcessorWorkerExports=requireOkdbProcessorWorker(),okdbProcessorWorker=getDefaultExportFromCjs(okdbProcessorWorkerExports);module['exports']=okdbProcessorWorker;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<script type="module">import s from"../../stores/events-store.js";export default{tag:"processors-index",unwrap:!0,context:s=>({processors:[],busy:!1,_unsubs:[],async load(){this.busy=!0;try{const s=await fetch(__ENV__.API+"/processors");s.ok&&(this.processors=(await s.json()).data??[])}catch{}finally{this.busy=!1}},async doPause(s){await fetch(__ENV__.API+"/processors/"+encodeURIComponent(s)+"/pause",{method:"POST"}),await this.load()},async doResume(s){await fetch(__ENV__.API+"/processors/"+encodeURIComponent(s)+"/resume",{method:"POST"}),await this.load()},async doRetry(s){await fetch(__ENV__.API+"/processors/"+encodeURIComponent(s)+"/retry",{method:"POST"}),await this.load()},async doResetCursor(s){s&&(await fetch(__ENV__.API+"/processors/cursor/reset",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cursorKey:s})}),await this.load())},stateColor(s){switch(s){case"online":return"var(--okdb-success)";case"building":return"var(--okdb-warning)";case"error":return"var(--okdb-danger)";case"waiting":return"var(--okdb-method-default)";case"paused":return"#818cf8";default:return"var(--okdb-app-fg-subtle)"}},lagLabel:s=>0===s.lag?"caught up":s.lag+" behind",progressPct:s=>s.progress?Math.round(100*(s.progress.percent??0)):null}),async init(o){await this.load();const e=()=>this.load();this._unsubs=[s.on("processor:ready",e),s.on("processor:error",e),s.on("processor:paused",e),s.on("processor:resumed",e),s.on("processor:retry",e)]},unmount(){for(const s of this._unsubs)s();this._unsubs=[]}};</script><style>.proc-grid{display:grid;grid-template-columns:1fr;gap:12px;padding:16px}.proc-card{background:var(--okdb-app-bg);border:1px solid var(--okdb-app-border);border-radius:8px;padding:14px 16px;font-size:13px}.proc-card__header{display:flex;align-items:center;gap:8px;margin-bottom:8px}.proc-card__dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.proc-card__name{font-weight:600;color:var(--okdb-app-fg-strong);flex:1}.proc-card__state{font-size:11px;padding:2px 8px;border-radius:4px;text-transform:uppercase;letter-spacing:.5px}.proc-card__row{display:flex;gap:16px;margin-top:6px;font-size:12px;color:var(--okdb-method-default)}.proc-card__row strong{color:var(--okdb-app-fg)}.proc-card__actions{display:flex;gap:6px;margin-top:10px}.proc-card__actions button{font-size:11px;padding:3px 10px;border-radius:4px;border:1px solid var(--okdb-app-border-strong);background:var(--okdb-app-surface);color:var(--okdb-method-default);cursor:pointer}.proc-card__actions button:hover{background:var(--okdb-app-border);color:var(--okdb-app-fg-strong)}.proc-card__error{margin-top:6px;padding:6px 8px;background:var(--okdb-danger-soft-bg);border:1px solid #7f1d1d;border-radius:4px;color:var(--okdb-danger);font-size:12px;word-break:break-all}.proc-card__progress{margin-top:6px;height:4px;background:var(--okdb-app-border);border-radius:2px;overflow:hidden}.proc-card__progress-bar{height:100%;background:var(--okdb-accent);transition:width .3s ease;border-radius:2px}.proc-empty{color:var(--okdb-app-fg-subtle);text-align:center;padding:40px 16px;font-size:14px}</style><template><component import="../../layouts/_default.ok.html"><template name="sidebar"><div style="padding:8px 8px;font-size:12px;color:var(--okdb-method-default)"><strong style="color:var(--okdb-app-fg-strong)">Processors</strong><div style="margin-top:4px;opacity:.6">{{ processors.length }} registered</div></div></template><template name="header"><h2 style="margin:0;font-size:16px;color:var(--okdb-app-fg-strong)">Change Processors</h2></template><template name="default"><if :="processors.length === 0 && !busy"><div class="proc-empty">No processors registered.<br><span style="font-size:12px;opacity:.6">Processors are registered by subsystems (FTS, embeddings) or via <code>okdb.processor.register()</code>.</span></div></if><div class="proc-grid"><for :of="processors" let:p><div class="proc-card"><div class="proc-card__header"><span class="proc-card__dot" :style="'background:' + stateColor(p.paused ? 'paused' : p.state)"></span> <span class="proc-card__name">{{ p.meta?.name || p.id.slice(0, 8) }} </span><span class="proc-card__state" :style="'color:' + stateColor(p.paused ? 'paused' : p.state)">{{ p.paused ? 'paused' : p.state }}</span></div><div class="proc-card__row"><span>Type: <strong>{{ p.type }}</strong></span> <span>Mode: <strong>{{ p.mode }}</strong></span> <span>Lag: <strong>{{ lagLabel(p) }}</strong></span></div><div class="proc-card__row"><span>Clock: <strong>{{ p.lastClock }}</strong> / {{ p.headClock }}</span><if :="p.bootstrap"><span>Bootstrap: <strong>{{ p.bootstrap }}</strong></span></if></div><if :="progressPct(p) !== null && p.state === 'building'"><div class="proc-card__progress"><div class="proc-card__progress-bar" :style="'width:' + progressPct(p) + '%'"></div></div><div style="font-size:11px;color:var(--okdb-app-fg-subtle);margin-top:2px">{{ p.progress?.phase }} — {{ progressPct(p) }}%</div></if><if :="p.error"><div class="proc-card__error">{{ p.error }}</div></if><div class="proc-card__actions"><if :="!p.paused && p.state === 'online'"><button @click="doPause(p.id)">⏸ Pause</button></if><if :="p.paused"><button @click="doResume(p.id)">▶ Resume</button></if><if :="p.state === 'error'"><button @click="doRetry(p.id)">↻ Retry</button></if><if :="p.cursorKey"><button @click="doResetCursor(p.cursorKey)" title="Reset cursor for this processor — forces full reprocess on next start">⟲ Reset Cursor</button></if></div></div></for></div></template></component></template>
|