@dimina-kit/devtools 0.4.0-dev.20260711062001 → 0.4.0-dev.20260711133419

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dimina-kit/devtools",
3
- "version": "0.4.0-dev.20260711062001",
3
+ "version": "0.4.0-dev.20260711133419",
4
4
  "description": "Dimina DevTools - modular developer tools for mini app debugging",
5
5
  "keywords": [
6
6
  "dimina",
@@ -85,10 +85,10 @@
85
85
  "chrome-remote-interface": "^0.34.0",
86
86
  "ws": "^8.20.0",
87
87
  "zod": "^4.3.6",
88
- "@dimina-kit/devkit": "0.1.2-dev.20260711062001",
89
- "@dimina-kit/view-anchor": "0.1.0-dev.20260711062001",
90
- "@dimina-kit/electron-deck": "0.1.0-dev.20260711062001",
91
- "@dimina-kit/inspect": "0.3.0"
88
+ "@dimina-kit/devkit": "0.1.2-dev.20260711133419",
89
+ "@dimina-kit/view-anchor": "0.1.0-dev.20260711133419",
90
+ "@dimina-kit/inspect": "0.3.0",
91
+ "@dimina-kit/electron-deck": "0.1.0-dev.20260711133419"
92
92
  },
93
93
  "devDependencies": {
94
94
  "@playwright/test": "^1.59.1",
@@ -1 +0,0 @@
1
- import{n as e}from"./index-nrKFi46w.js";var t=e(((e,t)=>{t.exports={}}));export default t();
@@ -1 +0,0 @@
1
- var e=``+new URL(`fs-core.worker-Bs1XABE2.js`,import.meta.url).href,t=``+new URL(`fs-query.worker-cZ-7Fjch.js`,import.meta.url).href;export{e as coreWorkerUrl,t as queryWorkerUrl};
@@ -1 +0,0 @@
1
- var e=new TextEncoder,t=new TextDecoder,n=(()=>{let e=new Uint32Array(256);for(let t=0;t<256;t++){let n=t;for(let e=0;e<8;e++)n=n&1?3988292384^n>>>1:n>>>1;e[t]=n>>>0}return e})();function r(e,t=0,r=e.length){let i=4294967295;for(let a=t;a<r;a++)i=n[(i^e[a])&255]^i>>>8;return(i^4294967295)>>>0}async function i(e){let t=await crypto.subtle.digest(`SHA-256`,e);return[...new Uint8Array(t)].map(e=>e.toString(16).padStart(2,`0`)).join(``)}var a=1146569521,o=64;function s(e){let t=new ArrayBuffer(o),n=new DataView(t);return n.setUint32(0,a),n.setUint32(4,e.epoch),n.setFloat64(8,e.compactGen),n.setFloat64(16,e.walStartGen),n.setUint32(24,e.manifestCrc),n.setUint32(60,r(new Uint8Array(t,0,60))),new Uint8Array(t)}function c(e){if(e.length<o)return null;let t=new DataView(e.buffer,e.byteOffset,o);return t.getUint32(60)!==r(e,0,60)||t.getUint32(0)!==a?null:{epoch:t.getUint32(4),compactGen:t.getFloat64(8),walStartGen:t.getFloat64(16),manifestCrc:t.getUint32(24)}}function l(t,n,i,a){let o=e.encode(JSON.stringify(a)),s=15+o.length+4+1,c=new ArrayBuffer(4+s),l=new DataView(c),u=new Uint8Array(c);l.setUint32(0,s),l.setBigUint64(4,BigInt(t)),l.setUint32(12,n),l.setUint8(16,i),l.setUint16(17,o.length),u.set(o,19);let d=19+o.length;return l.setUint32(d,r(u,4,d)),l.setUint8(d+4,193),u}function u(e,n){if(n+4>e.length)return null;let i=new DataView(e.buffer,e.byteOffset),a=i.getUint32(n);if(a<20||n+4+a>e.length)return null;let o=Number(i.getBigUint64(n+4)),s=i.getUint32(n+12),c=i.getUint8(n+16),l=i.getUint16(n+17),u=n+19,d=u+l;if(d+5!==n+4+a||i.getUint32(d)!==r(e,n+4,d)||i.getUint8(d+4)!==193)return null;let f;try{f=JSON.parse(t.decode(e.subarray(u,d)))}catch{return null}return{rec:{gen:o,epoch:s,opcode:c,meta:f},next:n+4+a}}var d=[`node_modules/`,`.checkpoints/`];function f(e){if(typeof e!=`string`||!e||e.includes(`\0`)||e.includes(`\\`)||e.startsWith(`/`))return null;let t=[];for(let n of e.split(`/`))if(!(n===``||n===`.`)){if(n===`..`)return null;t.push(n)}return t.length?t.join(`/`):null}var p={WRITE:1,RM:2,MV:3,MKDIR:4,CHECKPOINT:5,RESTORE:6},m={1:`write`,2:`rm`,3:`mv`,4:`mkdir`,5:`checkpoint`,6:`restore`},h=new Set([p.WRITE,p.RM,p.MV,p.RESTORE]),ee=50,g=4*1024*1024,_=1024,v=12e4,y=1e3,b=4096,te=20;function x(e,t,n){let r=Error(t);return r.code=e,n&&(r.extra=n),r}function S(e){return e.length?e[e.length-1].epoch:0}async function C(e,t){e.projectId=t,e.root=await(await navigator.storage.getDirectory()).getDirectoryHandle(t,{create:!0}),e.bc=new BroadcastChannel(`dwc:`+t),e.bc.onmessage=t=>e.onBroadcast(t.data);let n=new Promise(n=>{navigator.locks.request(`dwc:writer:`+t,{mode:`exclusive`},t=>(n(t),new Promise(t=>{e.releaseLock=t}))).catch(()=>n(null))});if(await Promise.race([n,new Promise(e=>setTimeout(()=>e(`timeout`),3e3))])===`timeout`){await e.recover(),e.mode=`readonly`,e.pushFullToQuery(),e.welcome(),n.then(async t=>{!t||e.mode===`dead`||await e.enqueue(async()=>{await e.becomeWriter()})});return}await e.becomeWriter(),e.welcome()}async function w(e){await e.recover(),e.sbHandle=await(await e.root.getFileHandle(`superblock`,{create:!0})).createSyncAccessHandle(),e.epoch+=1,e.writeSuperblock();let t=`wal.`+e.lastSegStart;e.walHandle=await(await e.root.getFileHandle(t,{create:!0})).createSyncAccessHandle(),e.walOffset=e.lastSegValidEnd,e.mode=`writer`,e.pushFullToQuery(),e.event({evt:`writer-granted`,gen:e.memGen}),e.walOffset>g&&e.enqueue(()=>e.compactNow())}function T(e){let t=1-e.currentSlot,n=s({epoch:e.epoch,compactGen:e.compactGen,walStartGen:e.walStartGen,manifestCrc:e.manifestCrc||0}),r=e.sbHandle.write(n,{at:t*o});if(r!==o)throw Error(`superblock partial write: `+r);e.sbHandle.flush(),e.currentSlot=t}async function E(e){let t=null;try{let n=await(await e.root.getFileHandle(`superblock`)).getFile(),r=new Uint8Array(await n.arrayBuffer()),i=c(r.subarray(0,o)),a=r.length>=128?c(r.subarray(o,2*o)):null;i&&a?(t=a.compactGen>i.compactGen||a.compactGen===i.compactGen&&a.epoch>=i.epoch?a:i,e.currentSlot=+(t===a)):i?(t=i,e.currentSlot=0):a&&(t=a,e.currentSlot=1)}catch{}return t||(t={epoch:0,compactGen:0,walStartGen:1,manifestCrc:0},e.currentSlot=1),t}async function D(e,n){if(n<=0)return 0;let i=await(await(await e.root.getDirectoryHandle(`manifests`)).getFileHandle(n+`.json`)).getFile(),a=new Uint8Array(await i.arrayBuffer());if(r(a)!==e.manifestCrc)throw Error(`manifest CRC mismatch (gen `+n+`)`);let o=JSON.parse(t.decode(a));for(let[t,n]of Object.entries(o.files))e.mirror.set(t,{content:await e.readBlob(n.h),rev:n.rev});for(let[t,n]of Object.entries(o.checkpoints||{}))e.checkpoints.set(t,n);return o.gen}async function O(e){let t=[];for await(let[n]of e.root.entries()){let r=/^wal\.(\d+)$/.exec(n);r&&+r[1]>=e.walStartGen&&t.push(+r[1])}return t.sort((e,t)=>e-t),t}function k(e,t,n,r){return!e||e.rec.gen!==t+1||e.rec.gen>=n||e.rec.epoch<S(r)}async function A(e,t,n,r,i,a){let o=await(await e.root.getFileHandle(`wal.`+t)).getFile(),s=new Uint8Array(await o.arrayBuffer()),c=0;for(;c<s.length;){let t=u(s,c);if(k(t,r,n,i))break;await e.applyRecord(t.rec),r=t.rec.gen,i.push(t.rec);let o=t.rec.meta;e.audit({gen:r,opcode:t.rec.opcode,actor:o.actor,turnId:o.turnId,path:o.path,from:o.from,to:o.to,cpId:o.cpId}),c=t.next,a&&(e.lastSegValidEnd=c)}return r}async function j(e,t,n){let r=n,i=[];for(let n=0;n<t.length;n++){let a=n+1<t.length?t[n+1]:1/0;r=await A(e,t[n],a,r,i,t[n]===e.lastSegStart)}return{finalGen:r,replayed:i}}async function M(e){e.mirror.clear(),e.checkpoints.clear(),e.opIds.clear(),e.auditLog=[],e.turn=null;let t=await E(e);e.epoch=t.epoch,e.compactGen=t.compactGen,e.walStartGen=t.walStartGen,e.manifestCrc=t.manifestCrc;let n=await D(e,e.compactGen),r=await O(e);e.lastSegStart=r.length?r[r.length-1]:e.walStartGen,e.lastSegValidEnd=0;let{finalGen:i,replayed:a}=await j(e,r,n);n=i,e.appendedGen=e.walGen=e.memGen=e.ackGen=n,e.trimCheckpoints();for(let t of a.slice(-_))t.meta.opId&&e.rememberOpId(t.meta.opId,{gen:t.gen});r.length||await e.root.getFileHandle(`wal.`+e.walStartGen,{create:!0})}async function N(e,t){let n=t.meta;switch(t.opcode){case p.WRITE:{let r=n.payload?.inline===void 0?await e.readBlob(n.payload.h):n.payload.inline;e.mirror.set(n.path,{content:r,rev:t.gen});break}case p.RM:e.mirror.delete(n.path);break;case p.MV:{let r=e.mirror.get(n.from);r&&(e.mirror.delete(n.from),e.mirror.set(n.to,{content:r.content,rev:t.gen}));break}case p.MKDIR:break;case p.CHECKPOINT:e.checkpoints.set(n.cpId,{h:n.h,gen:t.gen});break;case p.RESTORE:{let r=JSON.parse(await e.readBlob(n.h)),i=new Map;for(let[n,a]of Object.entries(r))i.set(n,{content:await e.readBlob(a),rev:t.gen});e.mirror=i;break}}}async function P(t,n){let r=e.encode(n),a=await i(r),o=await(await t.root.getDirectoryHandle(`blobs`,{create:!0})).getDirectoryHandle(a.slice(0,2),{create:!0});try{return await o.getFileHandle(a),a}catch{}let s=await(await o.getFileHandle(a,{create:!0})).createSyncAccessHandle();return s.write(r),s.flush(),s.close(),a}async function F(e,t){return(await(await(await(await e.root.getDirectoryHandle(`blobs`)).getDirectoryHandle(t.slice(0,2))).getFileHandle(t)).getFile()).text()}function I(e,{path:t}){let n=f(t),r=n&&e.mirror.get(n);if(!r)throw x(`not-found`,String(t));return{content:r.content,rev:r.rev,gen:e.memGen}}function L(e){return{paths:[...e.mirror.keys()].sort(),gen:e.memGen}}function R(e){let{mode:t,appendedGen:n,walGen:r,memGen:i,ackGen:a,compactGen:o,epoch:s,walStartGen:c}=e;return{mode:t,appendedGen:n,walGen:r,memGen:i,ackGen:a,compactGen:o,epoch:s,walStartGen:c,checkpoints:[...e.checkpoints.keys()],turn:e.turn?{turnId:e.turn.turnId,cpId:e.turn.cpId,expiresAt:e.turn.expiresAt,ops:e.turn.ops}:null}}function z(e,t,n){if(!e.queryPort)return;let r={};for(let[e,n]of Object.entries(t))r[e]=n?{content:n.content,rev:n.rev}:null;e.queryPort.postMessage({gen:n,diff:r})}function B(e){if(!e.queryPort)return;let t={};for(let[n,r]of e.mirror)t[n]={content:r.content,rev:r.rev};e.queryPort.postMessage({gen:e.memGen,full:!0,files:t})}function V(e,t){e.clientPort&&e.clientPort.postMessage(t)}function H(e){e.event({type:`WELCOME`,epoch:e.epoch,memGen:e.memGen,readonly:e.mode!==`writer`,mode:e.mode})}async function U(e,t){t.type===`handover-request`&&e.mode===`writer`&&(e.mode=`draining`,await e.enqueue(async()=>{e.flushWindow(),e.walHandle.close(),e.walHandle=null,e.sbHandle.close(),e.sbHandle=null,e.mode=`readonly`,e.releaseLock&&=(e.releaseLock(),null),e.bc.postMessage({type:`handover-done`,gen:e.memGen}),e.event({evt:`writer-lost`,gen:e.memGen})}))}function W(e,t){let n=e.chain.then(t);return e.chain=n.catch(()=>{}),n}function G(e,t,n,r){if(e.mode!==`writer`)throw x(`readonly`,`fs-core is `+e.mode);if(r&&r(),e.walOffset>g)throw x(`rotate-needed`,`internal`);let i=e.appendedGen+1,a=l(i,e.epoch,t,n);if(e.walHandle.write(a,{at:e.walOffset})!==a.length)throw Error(`WAL partial write`);return e.walOffset+=a.length,e.appendedGen=i,e.audit({gen:i,opcode:t,actor:n.actor,turnId:n.turnId,path:n.path,from:n.from,to:n.to,cpId:n.cpId}),i}function K(e,t){e.auditLog.push(t),e.auditLog.length>b&&e.auditLog.splice(0,e.auditLog.length-b)}function q(e,t,n,r){if(t!==`agent`)return;let i=e.turn;if(!i||i.turnId!==n)throw x(`turn-closed`,`agent write requires an active turn (got `+n+`)`);if(Date.now()>i.expiresAt)throw e.turn=null,x(`turn-closed`,`turn expired: `+n);if(e.agentToken!==null&&r!==e.agentToken)throw x(`agent-token-required`,`agent write requires a valid agent token`);if(++i.ops>y)throw x(`turn-quota`,`per-turn op quota exceeded (`+y+`)`)}function J(e,t){if(typeof t!=`string`||!t)throw x(`bad-args`,`agent token must be a non-empty string`);if(e.agentToken===null)return e.agentToken=t,{armed:!0};if(e.agentToken===t)return{armed:!0,idempotent:!0};throw x(`agent-token-gate-armed`,`agent token gate already armed with a different token`)}function Y(e,t){if((e.auditLog.length?e.auditLog[0].gen:e.appendedGen+1)>t+1)throw x(`restore-conflict`,`audit log does not cover baseGen `+t,{humanPaths:[],auditGap:!0});let n=[],r=new Set;for(let i of e.auditLog){if(i.gen<=t||i.actor!==`human`||!h.has(i.opcode))continue;let e=i.opcode===p.MV?i.to||i.from:i.opcode===p.RESTORE?`(restore:`+i.cpId+`)`:i.path;e&&!r.has(e)&&(r.add(e),n.push(e))}if(n.length)throw x(`restore-conflict`,`human edits since baseGen `+t,{humanPaths:n})}function ne(e,t){return e.staged.has(t)?e.staged.get(t)??null:e.mirror.get(t)||null}function X(e,t,n,r){let i=f(t);if(!i)throw x(`bad-path`,`invalid path: `+t);for(let e of d)if(i.startsWith(e))throw x(`derived-readonly`,i+` is derived area`);if(e.mode===`draining`)throw x(`draining`,`writer is handing over`);let a=e.curOf(i);if(n===null&&a)throw x(`cas-mismatch`,i+` already exists`);if(typeof n==`number`&&(!a||a.rev!==n))throw x(`cas-mismatch`,i+` rev=`+(a?a.rev:`none`)+` ifMatch=`+n);return i}async function Z(e){e.walOffset<=g||await e.compactNow()}async function re(e,t){let n=`wal.`+t,r=await e.root.getFileHandle(n+`.tmp`,{create:!0}),i=await r.createSyncAccessHandle();if(i.flush(),i.close(),r.move)await r.move(n);else{await e.root.getFileHandle(n,{create:!0});try{await e.root.removeEntry(n+`.tmp`)}catch{}}e.walHandle=await(await e.root.getFileHandle(n)).createSyncAccessHandle(),e.walOffset=0}function ie(e){if(e.flushTimer&&=(clearTimeout(e.flushTimer),null),!e.windowOps.length)return;e.walHandle.flush(),e.walGen=e.appendedGen;let t={};for(let[n,r]of e.staged)r===null?e.mirror.delete(n):e.mirror.set(n,r),t[n]=r;e.staged.clear(),e.memGen=e.walGen,e.pushDiff(t,e.memGen);let n=[],r=`human`;for(let t of e.windowOps)e.ackGen=Math.max(e.ackGen,t.gen),t.opId&&e.rememberOpId(t.opId,{gen:t.gen}),t.respond({ok:!0,result:{gen:t.gen,rev:t.gen,...t.extra}}),t.path&&n.push(t.path),t.actor===`agent`&&(r=`agent`);e.windowOps=[],e.event({evt:`fs-change`,gen:e.memGen,actor:r,...n.length<=32?{paths:n}:{count:n.length}}),e.bc.postMessage({type:`fs-change`,gen:e.memGen})}function ae(e,t,n){e.opIds.set(t,n),e.opIds.size>_&&e.opIds.delete(e.opIds.keys().next().value)}function oe(e,t){if(t){e.flushWindow();return}e.flushTimer||=setTimeout(()=>e.enqueue(()=>e.flushWindow()),ee)}async function se(t,{path:n,content:r,ifMatch:i,actor:a=`human`,turnId:o,agentToken:s,opId:c},l){if(typeof r!=`string`)throw x(`bad-args`,`content must be string`);await t.rotateIfNeeded();let u=e.encode(r).length<=4096?{inline:r}:{h:await t.ensureBlob(r)},d=f(n),m={opId:c,path:d,actor:a,turnId:o,ifMatch:i,payload:u},h=t.appendSync(p.WRITE,m,()=>{t.checkTurn(a,o,s),t.checkWrite(n,i,a)});t.staged.set(d,{content:r,rev:h}),t.windowOps.push({respond:l,gen:h,path:d,actor:a,opId:c}),t.scheduleFlush(a===`agent`)}async function ce(e,{path:t,old:n,next:r,ifMatch:i,actor:a=`human`,turnId:o,agentToken:s,opId:c},l){let u=f(t),d=u&&e.curOf(u);if(!d)throw x(`not-found`,String(t));let p=d.content.indexOf(n);if(p===-1)throw x(`edit-no-match`,`old string not found in `+u);if(d.content.indexOf(n,p+1)!==-1)throw x(`edit-ambiguous`,`old string not unique in `+u);let m=d.content.slice(0,p)+r+d.content.slice(p+n.length);return e.opWrite({path:t,content:m,ifMatch:i===void 0?d.rev:i,actor:a,turnId:o,agentToken:s,opId:c},l)}async function le(e,{path:t,actor:n=`human`,turnId:r,agentToken:i,opId:a},o){await e.rotateIfNeeded();let s=e.appendSync(p.RM,{opId:a,path:f(t),actor:n,turnId:r},()=>{e.checkTurn(n,r,i);let a=e.checkWrite(t,void 0,n);if(!e.curOf(a))throw x(`not-found`,a)});e.staged.set(f(t),null),e.windowOps.push({respond:o,gen:s,path:f(t),actor:n,opId:a}),e.scheduleFlush(!0)}async function ue(e,{from:t,to:n,actor:r=`human`,turnId:i,agentToken:a,opId:o},s){await e.rotateIfNeeded();let c=f(t),l=f(n),u=e.appendSync(p.MV,{opId:o,from:c,to:l,actor:r,turnId:i},()=>{if(e.checkTurn(r,i,a),e.checkWrite(t,void 0,r),e.checkWrite(n,void 0,r),!e.curOf(c))throw x(`not-found`,c);if(e.curOf(l))throw x(`cas-mismatch`,l+` exists`)}),d=e.curOf(c);e.staged.set(c,null),e.staged.set(l,{content:d.content,rev:u}),e.windowOps.push({respond:s,gen:u,path:l,actor:r,opId:o}),e.scheduleFlush(!0)}async function de(e,{opId:t,actor:n,turnId:r}){e.flushWindow(),await e.rotateIfNeeded();let i={};for(let[t,n]of e.mirror)i[t]=await e.ensureBlob(n.content);let a=await e.ensureBlob(JSON.stringify(i)),o=`cp-`+(e.appendedGen+1),s=e.appendSync(p.CHECKPOINT,{opId:t,cpId:o,h:a,actor:n,turnId:r},()=>{if(e.mode===`draining`)throw x(`draining`,`handing over`)});return e.checkpoints.set(o,{h:a,gen:s}),e.trimCheckpoints(),{cpId:o,gen:s}}function fe(e){for(;e.checkpoints.size>te;)e.checkpoints.delete(e.checkpoints.keys().next().value)}async function pe(e,{actor:t=`human`,turnId:n,agentToken:r,opId:i},a){e.checkTurn(t,n,r);let{cpId:o,gen:s}=await e.makeCheckpoint({opId:i,actor:t,turnId:n});e.windowOps.push({respond:a,gen:s,actor:t,opId:i,extra:{cpId:o}}),e.scheduleFlush(!0)}async function me(e,{turnId:t,ttlMs:n,opId:r},i){if(!t||typeof t!=`string`)throw x(`bad-args`,`turnId required`);if(e.turn&&Date.now()<=e.turn.expiresAt)throw x(`turn-active`,`a turn is already active: `+e.turn.turnId);let{cpId:a,gen:o}=await e.makeCheckpoint({opId:r,actor:`agent`,turnId:t}),s=Date.now()+(n||v);e.turn={turnId:t,cpId:a,expiresAt:s,ops:0},e.windowOps.push({respond:i,gen:o,actor:`agent`,opId:r,extra:{turnId:t,cpId:a,expiresAt:s}}),e.scheduleFlush(!0)}function he(e,{turnId:t},n){let r=!!(e.turn&&e.turn.turnId===t),i=r?e.turn.ops:0;r&&(e.turn=null),n({ok:!0,result:{turnId:t,closed:r,ops:i}})}function ge(e,{turnId:t}){return{turnId:t,changes:e.auditLog.filter(e=>e.turnId===t&&e.opcode!==p.CHECKPOINT).map(e=>({gen:e.gen,op:m[e.opcode],path:e.path,from:e.from,to:e.to})),cpId:e.turn&&e.turn.turnId===t?e.turn.cpId:(e.auditLog.find(e=>e.turnId===t&&e.opcode===p.CHECKPOINT)||{}).cpId,auditWindow:{cap:b,sinceGen:e.auditLog.length?e.auditLog[0].gen:e.memGen}}}async function _e(e,{cpId:t,baseGen:n,force:r=!1,actor:i=`human`,turnId:a,agentToken:o,opId:s},c){e.flushWindow(),await e.rotateIfNeeded();let l=e.checkpoints.get(t);if(!l)throw x(`not-found`,`checkpoint `+t);let u=typeof n==`number`?n:l.gen,d=JSON.parse(await e.readBlob(l.h)),f={};for(let[t,n]of Object.entries(d))f[t]=await e.readBlob(n);let m=e.appendSync(p.RESTORE,{opId:s,cpId:t,h:l.h,actor:i,turnId:a},()=>{if(e.checkTurn(i,a,o),e.mode===`draining`)throw x(`draining`,`handing over`);r||e.checkRestoreConflict(u)});e.walHandle.flush(),e.walGen=m;let h=new Map;for(let[e,t]of Object.entries(f))h.set(e,{content:t,rev:m});e.mirror=h,e.memGen=e.walGen,e.ackGen=m,s&&e.rememberOpId(s,{gen:m}),e.pushFullToQuery(),c({ok:!0,result:{gen:m,restored:Object.keys(f).length}}),e.event({evt:`fs-change`,gen:m,actor:i,count:Object.keys(f).length,restore:t}),e.bc.postMessage({type:`fs-change`,gen:m})}async function ve(e,t,n){n({ok:!0,result:await e.compactNow()})}async function ye(e){let t={};for(let[n,r]of e.mirror)t[n]={h:await e.ensureBlob(r.content),rev:r.rev};return t}async function be(e,t,n){let r=await e.root.getDirectoryHandle(`manifests`,{create:!0}),i=await(await r.getFileHandle(t+`.json`,{create:!0})).createSyncAccessHandle();return i.write(n),i.flush(),i.close(),r}async function xe(e){let t=[];for await(let[n]of e.root.entries()){let e=/^wal\.(\d+)$/.exec(n);e&&t.push(+e[1])}return t}async function Q(e,t){for(let n of t)try{await e.root.removeEntry(`wal.`+n)}catch{}}async function Se(e,t){let n=new Set(Object.values(t).map(e=>e.h));for(let t of e.checkpoints.values()){n.add(t.h);try{for(let r of Object.values(JSON.parse(await e.readBlob(t.h))))n.add(r)}catch{}}return n}async function Ce(e,t){try{let n=await e.root.getDirectoryHandle(`blobs`);for await(let[e,r]of n.entries())if(r.kind===`directory`){for await(let[e]of r.entries())if(!t.has(e))try{await r.removeEntry(e)}catch{}}}catch{}}async function we(e,t,n){try{for await(let[e]of t.entries())if(e!==n)try{await t.removeEntry(e)}catch{}}catch{}}async function Te(t){t.flushWindow();let n=t.memGen;if(n===t.compactGen)return{gen:n,skipped:!0};let i=await ye(t),a=Object.fromEntries(t.checkpoints),o=e.encode(JSON.stringify({gen:n,epoch:t.epoch,files:i,checkpoints:a})),s=await be(t,n,o),c=await xe(t);return t.walHandle.close(),await t.newSegment(n+1),t.lastSegStart=n+1,t.manifestCrc=r(o),t.compactGen=n,t.walStartGen=n+1,t.writeSuperblock(),await Q(t,c),await Ce(t,await Se(t,i)),await we(t,s,n+`.json`),{gen:n}}var $=new class{mode=`starting`;mirror=new Map;checkpoints=new Map;opIds=new Map;appendedGen=0;walGen=0;memGen=0;ackGen=0;compactGen=0;epoch=0;walStartGen=1;staged=new Map;windowOps=[];flushTimer=null;chain=Promise.resolve();clientPort=null;queryPort=null;releaseLock=null;walHandle=null;walOffset=0;sbHandle=null;currentSlot=0;turn=null;auditLog=[];agentToken=null;projectId;root;bc;lastSegStart;lastSegValidEnd;manifestCrc;start(e){return C(this,e)}becomeWriter(){return w(this)}writeSuperblock(){T(this)}recover(){return M(this)}applyRecord(e){return N(this,e)}epochFloor(e){return S(e)}ensureBlob(e){return P(this,e)}readBlob(e){return F(this,e)}opRead(e){return I(this,e)}opLs(){return L(this)}opStatus(){return R(this)}pushDiff(e,t){z(this,e,t)}pushFullToQuery(){B(this)}event(e){V(this,e)}welcome(){H(this)}onBroadcast(e){return U(this,e)}enqueue(e){return W(this,e)}appendSync(e,t,n){return G(this,e,t,n)}audit(e){K(this,e)}checkTurn(e,t,n){q(this,e,t,n)}armAgentToken(e){return J(this,e)}checkRestoreConflict(e){Y(this,e)}curOf(e){return ne(this,e)}checkWrite(e,t,n){return X(this,e,t,n)}rotateIfNeeded(){return Z(this)}newSegment(e){return re(this,e)}flushWindow(){ie(this)}rememberOpId(e,t){ae(this,e,t)}scheduleFlush(e){oe(this,e)}opWrite(e,t){return se(this,e,t)}opEdit(e,t){return ce(this,e,t)}opRm(e,t){return le(this,e,t)}opMv(e,t){return ue(this,e,t)}makeCheckpoint(e){return de(this,e)}trimCheckpoints(){fe(this)}opCheckpoint(e,t){return pe(this,e,t)}opTurnBegin(e,t){return me(this,e,t)}opTurnEnd(e,t){he(this,e,t)}opDiff(e){return ge(this,e)}opRestore(e,t){return _e(this,e,t)}opCompact(e,t){return ve(this,e,t)}compactNow(){return Te(this)}handleRpc(e){let t=t=>this.clientPort.postMessage({id:e.id,...t}),n=e=>t({ok:!1,code:e.code||`internal`,error:e.message||String(e),...e.extra||{}});if(e.opId&&this.opIds.has(e.opId)){let n=this.opIds.get(e.opId);t({ok:!0,result:{...n,rev:n.gen,idempotent:!0}});return}let r={...e.args,opId:e.opId},i={write:()=>this.opWrite(r,t),edit:()=>this.opEdit(r,t),rm:()=>this.opRm(r,t),mv:()=>this.opMv(r,t),mkdir:()=>{t({ok:!0,result:{gen:this.memGen}})},checkpoint:()=>this.opCheckpoint(r,t),restore:()=>this.opRestore(r,t),compact:()=>this.opCompact(r,t),turnBegin:()=>this.opTurnBegin(r,t),turnEnd:()=>this.opTurnEnd(r,t),diff:()=>t({ok:!0,result:this.opDiff(r)}),read:()=>t({ok:!0,result:this.opRead(r)}),ls:()=>t({ok:!0,result:this.opLs()}),status:()=>t({ok:!0,result:this.opStatus()}),armAgentTokenGate:()=>t({ok:!0,result:this.armAgentToken(r.token)})}[e.op];if(!i){n(x(`bad-op`,String(e.op)));return}if([`write`,`edit`,`rm`,`mv`,`checkpoint`,`restore`,`compact`,`turnBegin`,`turnEnd`].includes(e.op))this.enqueue(async()=>{try{await i()}catch(e){n(e)}});else try{i()}catch(e){n(e)}}};self.onmessage=async e=>{let t=e.data;if(t.type===`HELLO`){$.clientPort=self,$.queryPort=t.queryPort||null;try{await $.start(t.projectId)}catch(e){let t=e instanceof Error?e.stack:void 0;self.postMessage({type:`FATAL`,error:String(t||e)})}return}if(t.type===`PING`){self.postMessage({type:`PONG`,t:t.t});return}t.id!==void 0&&$.handleRpc(t)};