@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/dist/main/ipc/project-fs.d.ts +2 -2
- package/dist/main/ipc/project-fs.js +1 -1
- package/dist/main/services/workbench-coi-server.js +2 -2
- package/dist/vscode-workbench/assets/__vite-browser-external-BON7qP59.js +1 -0
- package/dist/vscode-workbench/assets/{dist-UYlh9rWP.js → dist-oHcwN53f.js} +3 -3
- package/dist/vscode-workbench/assets/fs-core-worker-urls-DZ1nod84.js +1 -0
- package/dist/vscode-workbench/assets/fs-core.worker-Bnmpp6fo.js +1 -0
- package/dist/vscode-workbench/assets/{iconv-lite-umd-P85lbjJb.js → iconv-lite-umd-CLMLpdGm.js} +1 -1
- package/dist/vscode-workbench/assets/{index-nrKFi46w.js → index-BE3UJdoH.js} +3 -3
- package/dist/vscode-workbench/assets/{jschardet-CLQONAKz.js → jschardet-BICW8PLJ.js} +1 -1
- package/dist/vscode-workbench/index.html +1 -1
- package/package.json +5 -5
- package/dist/vscode-workbench/assets/__vite-browser-external-B1y6A_ue.js +0 -1
- package/dist/vscode-workbench/assets/fs-core-worker-urls-BGhWkdqX.js +0 -1
- package/dist/vscode-workbench/assets/fs-core.worker-Bs1XABE2.js +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dimina-kit/devtools",
|
|
3
|
-
"version": "0.4.0-dev.
|
|
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.
|
|
89
|
-
"@dimina-kit/view-anchor": "0.1.0-dev.
|
|
90
|
-
"@dimina-kit/
|
|
91
|
-
"@dimina-kit/
|
|
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)};
|