yaml-flow 8.11.4 → 8.11.6

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 (82) hide show
  1. package/browser/adapters/firestore-storage.js +2 -2
  2. package/browser/adapters/localstorage-storage.js +3 -3
  3. package/browser/asset-integrity.json +7 -7
  4. package/browser/server-runtime-controlface.js +4 -4
  5. package/lib/board-live-cards-node.cjs +2 -2
  6. package/lib/board-live-cards-node.js +2 -2
  7. package/lib/board-live-cards-public.cjs +1 -1
  8. package/lib/board-live-cards-public.js +1 -1
  9. package/lib/board-live-cards-server-runtime.cjs +1 -1
  10. package/lib/board-live-cards-server-runtime.js +1 -1
  11. package/lib/board-livegraph-runtime/index.cjs +1 -1
  12. package/lib/board-livegraph-runtime/index.js +1 -1
  13. package/lib/board-sse-state.cjs +2 -0
  14. package/lib/board-sse-state.d.cts +19 -0
  15. package/lib/board-sse-state.d.ts +19 -0
  16. package/lib/board-sse-state.js +2 -0
  17. package/lib/board-state-reducer.cjs +1 -1
  18. package/lib/board-state-reducer.js +1 -1
  19. package/lib/card-store-public.cjs +1 -1
  20. package/lib/card-store-public.js +1 -1
  21. package/lib/{chunk-MEL5LKF7.js → chunk-23PEDGFN.js} +2 -2
  22. package/lib/{chunk-O65MSWUE.cjs → chunk-52XPRCZC.cjs} +2 -2
  23. package/lib/chunk-5RUSICUC.cjs +3 -0
  24. package/lib/chunk-7SBE7A6E.cjs +2 -0
  25. package/lib/chunk-7Y47QXMX.cjs +2 -0
  26. package/lib/chunk-AW3COGCI.cjs +3 -0
  27. package/lib/chunk-CAQHA4GK.js +2 -0
  28. package/lib/chunk-CJQEM63S.cjs +2 -0
  29. package/lib/chunk-CODPG5MY.js +3 -0
  30. package/lib/chunk-EHREWADE.js +2 -0
  31. package/lib/chunk-EOVTMJYZ.js +2 -0
  32. package/lib/chunk-FULAMLUU.js +3 -0
  33. package/lib/chunk-HOSD6UHA.js +3 -0
  34. package/lib/{chunk-37JSBRZO.js → chunk-I3ZOFU3F.js} +2 -2
  35. package/lib/chunk-IXZV5BS5.js +2 -0
  36. package/lib/chunk-J7KE7SPA.cjs +2 -0
  37. package/lib/{chunk-LRO5AL75.cjs → chunk-NOAERAOE.cjs} +2 -2
  38. package/lib/chunk-Q444D72R.js +2 -0
  39. package/lib/chunk-QKWQ4HRE.js +3 -0
  40. package/lib/chunk-R7SQQSDX.js +2 -0
  41. package/lib/chunk-SIPLKLWU.cjs +2 -0
  42. package/lib/{chunk-HLJH7LGW.js → chunk-SK2R5ILQ.js} +3 -3
  43. package/lib/chunk-VI36DRWG.cjs +2 -0
  44. package/lib/chunk-WE7JOO4T.cjs +3 -0
  45. package/lib/chunk-WGYS2L4V.js +2 -0
  46. package/lib/chunk-X5MLNGGM.cjs +16 -0
  47. package/lib/{chunk-Z26U6RSG.cjs → chunk-YAPTL2MP.cjs} +2 -2
  48. package/lib/{chunk-MQAVZUXB.cjs → chunk-ZWXZ5DBX.cjs} +3 -3
  49. package/lib/cloud-storage.cjs +1 -1
  50. package/lib/cloud-storage.js +1 -1
  51. package/lib/continuous-event-graph/index.cjs +1 -1
  52. package/lib/continuous-event-graph/index.js +1 -1
  53. package/lib/event-graph/index.cjs +1 -1
  54. package/lib/event-graph/index.js +1 -1
  55. package/lib/firestore-storage/index.cjs +1 -1
  56. package/lib/firestore-storage/index.js +1 -1
  57. package/lib/index.cjs +2 -2
  58. package/lib/index.js +1 -1
  59. package/lib/localstorage-storage/index.cjs +1 -1
  60. package/lib/localstorage-storage/index.js +1 -1
  61. package/lib/notification-consumer/index.cjs +1 -1
  62. package/lib/notification-consumer/index.js +1 -1
  63. package/lib/server-runtime/index.cjs +1 -1
  64. package/lib/server-runtime/index.js +1 -1
  65. package/lib/server-runtime-controlface/index.cjs +1 -1
  66. package/lib/server-runtime-controlface/index.js +1 -1
  67. package/lib/server-runtime-core/index.cjs +1 -1
  68. package/lib/server-runtime-core/index.js +1 -1
  69. package/package.json +6 -1
  70. package/lib/chunk-4BEQXKRF.js +0 -2
  71. package/lib/chunk-5EA2ESS4.cjs +0 -16
  72. package/lib/chunk-5VTIOM2U.js +0 -3
  73. package/lib/chunk-5XLFPPTY.cjs +0 -2
  74. package/lib/chunk-7QNEV5S3.js +0 -2
  75. package/lib/chunk-BAG7MHZP.cjs +0 -3
  76. package/lib/chunk-EZOXABJ2.js +0 -3
  77. package/lib/chunk-G4XXRHL2.cjs +0 -3
  78. package/lib/chunk-HVLWVMG6.cjs +0 -3
  79. package/lib/chunk-LODXIALE.cjs +0 -2
  80. package/lib/chunk-VGT3TRQG.js +0 -3
  81. package/lib/chunk-WDPOGXTY.js +0 -2
  82. package/lib/chunk-WHKT5HN4.js +0 -3
@@ -1,3 +1,3 @@
1
- var FirestoreStorage=(function(exports){'use strict';var k="b64:";function ae(e){let t=new TextEncoder().encode(e),o=globalThis.Buffer,r;if(o)r=o.from(t).toString("base64");else if(typeof btoa=="function"){let n="";for(let s of t)n+=String.fromCharCode(s);r=btoa(n);}else throw new Error("No base64 encoder available in this runtime");return r.replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function ie(e){let t=e.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-e.length%4)%4),o=globalThis.Buffer;if(o)return o.from(t,"base64").toString("utf8");if(typeof atob=="function"){let r=atob(t),n=new Uint8Array(r.length);for(let s=0;s<r.length;s+=1)n[s]=r.charCodeAt(s);return new TextDecoder().decode(n)}throw new Error("No base64 decoder available in this runtime")}function l(e){return `${k}${ae(JSON.stringify(e))}`}function p(e){if(!e.startsWith(k))throw new Error(`Invalid ref format (expected ${k}<base64url(json)>): ${e}`);let t;try{t=JSON.parse(ie(e.slice(k.length)));}catch{throw new Error(`Invalid ref format (malformed base64url/json): ${e}`)}if(!t||typeof t!="object")throw new Error(`Invalid ref format (expected object payload): ${e}`);let o=t;if(typeof o.kind!="string"||typeof o.value!="string")throw new Error(`Invalid ref format (payload must contain string kind/value): ${e}`);return {kind:o.kind,value:o.value}}function E(e){return {messageId:e.id,enqueuedAt:e.enqueuedAt,attempt:e.attempt,request:e.body}}function le(e){return typeof e=="string"?e.startsWith("b64:")?p(e).value:e:e.value}function $(e){return {async enqueueRequest(t){return (await e.enqueue(t)).id},async leaseRequests(t){return (await e.lease(t)).map(o=>({...E(o),leaseToken:o.leaseToken,leaseExpiresAt:o.leaseExpiresAt}))},ackRequest(t,o){return e.ack(t,o)},nackRequest(t,o,r){return e.nack(t,o,r)},async peekActive(){return (await e.peekActive()).map(E)},async peekDeadLetter(){return (await e.peekDeadLetter()).map(t=>({...E(t),reason:t.reason}))}}}function I(e){let t=e.callbackTransport,o=e.resolveBlob??(async n=>{let s=await e.blobStorage("").read(n.value);if(s==null)throw new Error(`Blob not found for ref ${n.kind}:${n.value}`);return s});async function r(n,s){if(n.howToRun==="queue-storage")return e.queueStoreRef?(await $(e.queueStorageForRef(e.queueStoreRef,"task-executor")).enqueueRequest({boardId:typeof n.extra?.boardId=="string"?n.extra.boardId:e.boardId,ref:n,args:s}),{dispatched:true}):{dispatched:false,error:"queue-storage dispatch requires queueStoreRef"};if(n.howToRun==="http:post"){let a=e.fetch??globalThis.fetch;if(!a)return {dispatched:false,error:"http:post dispatch requires fetch support"};let i=await a(le(n.whatToRun),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...s,...n.extra?{extra:n.extra}:{}})});if(!i.ok){let c=await i.text().catch(()=>"");return {dispatched:false,error:`HTTP ${i.status}: ${c}`}}return {dispatched:true}}return {dispatched:false,error:`Unsupported hosted async transport "${n.howToRun}"`}}return {kvStorage:e.kvStorage,kvStorageForRef:e.kvStorageForRef,blobStorage:e.blobStorage,blobStorageForRef:e.blobStorageForRef,chatStorageForRef:e.chatStorageForRef,queueStorageForRef:e.queueStorageForRef,scratchStorage:e.scratchStorage,scratchStorageForRef:e.scratchStorageForRef,archiveFactory:e.archiveFactory,archiveFactoryForRef:e.archiveFactoryForRef,journalStorage:e.journalStorage,journalStorageForRef:e.journalStorageForRef,lock:e.lock,get callbackTransport(){return t},set callbackTransport(n){t=n;},dispatchExecution:(n,s)=>e.dispatchExecution?.(n,s)??r(n,s),supportsDirectSourceOutput:e.supportsDirectSourceOutput,resolveBlob:o,hashFn:e.hashFn,genId:e.genId,requestProcessAccumulated:e.requestProcessAccumulated,publishBoardChangeNotifications:e.publishBoardChangeNotifications,warn:e.onWarn}}function P(e){if(e==null||typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return `[${e.map(P).join(",")}]`;let t=e;return `{${Object.keys(t).sort().map(r=>`${JSON.stringify(r)}:${P(t[r])}`).join(",")}}`}function b(e,t){let o=t>>>0;for(let r=0;r<e.length;r++)o^=e.charCodeAt(r),o=Math.imul(o,16777619)>>>0;return o}function z(e){let t=P(e),o=b(t,2166136261),r=b(t,3735928559),n=b(t,19088743),s=b(t,4277009102);return [o,r,n,s].map(a=>a.toString(16).padStart(8,"0")).join("")}function W(e){return String(e).replace(/[^a-zA-Z0-9_-]/g,"_")}function Y(e){let t=e.payload??{};return {id:e.id,role:typeof t.role=="string"?t.role:"system",text:typeof t.text=="string"?t.text:"",files:Array.isArray(t.files)?t.files:[],turn:typeof t.turn=="string"?t.turn:"",updated_at:typeof t.updated_at=="string"?t.updated_at:""}}function X(e,t){let o=n=>`chats/${W(n)}/processing`,r=n=>`chats/${W(n)}/config`;return {async append(n,s,a,i=[],c=""){return (await e(n).append({role:s,text:a,files:i,turn:c,updated_at:new Date().toISOString()})).id},async readAll(n){return (await e(n).readAll()).map(Y)},async readAfter(n,s){let a=await e(n).readAfter(s);return {records:a.entries.map(Y),cursor:a.newCursor}},async clear(n){await e(n).clear?.();},async setProcessing(n,s){s?await t.write(o(n),true):await t.delete(o(n));},async isProcessing(n){return await t.read(o(n))===true},async getConfig(n){return await t.read(r(n))??{}},async setConfig(n,s){let a=await t.read(r(n))??{};await t.write(r(n),{...a,...s});}}}function Ke(e){return String(e).replace(/[^a-zA-Z0-9_-]/g,"_")}function te(e){let t="";for(let o=0;o<e.length;o++)t+=String.fromCharCode(e[o]);return btoa(t)}function $e(e){let t=atob(e),o=new Uint8Array(t.length);for(let r=0;r<t.length;r++)o[r]=t.charCodeAt(r);return o}function Ve(e){let t=new TextEncoder().encode(e);return te(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function Me(e){return z(e).slice(0,16)}function re(){return globalThis.crypto&&typeof globalThis.crypto.randomUUID=="function"?globalThis.crypto.randomUUID():`${Date.now().toString(16)}-${Math.random().toString(16).slice(2,10)}`}function u(e){return Ve(String(e))}function m(){let e=String(Date.now()).padStart(13,"0"),t=Math.random().toString(36).slice(2,10).padEnd(8,"0");return `${e}-${t}`}function ne(e){try{return p(e)}catch{return null}}function y(e,t){let o=ne(e);return o?.kind==="firestore"&&o.value?o.value:t}function g(e){if(e===void 0)return null;if(Array.isArray(e))return e.map(t=>g(t===void 0?null:t));if(e&&typeof e=="object"){let t=Object.entries(e).filter(([,o])=>o!==void 0).map(([o,r])=>[o,g(r)]);return Object.fromEntries(t)}return e}function oe(e,t){return e.collection("boards").doc(t)}function h(e,t,o){return oe(e,t).collection(o)}function O(e){return {kind:"firestore",value:String(e)}}function f(e){return l(O(e))}function se(e){return {baseRef:O(`boards/${e}`),boardRuntimeStoreRef:f(`boards/${e}/runtime-board`),cardStoreRef:f(`boards/${e}/cards`),outputsStoreRef:f(`boards/${e}/runtime-out`),queueStoreRef:f(`boards/${e}/runtime`),scratchStoreRef:f(`boards/${e}/scratch`),chatStoreRef:f(`boards/${e}/chat`),artifactsStoreRef:f(`boards/${e}/files`),fetchedSourcesStoreRef:f(`boards/${e}/sources`)}}function _(e){return {async read(t){let o=await e.doc(u(t)).get();return o.exists?o.data()?.value??null:null},async write(t,o){await e.doc(u(t)).set(g({k:t,value:o}));},async delete(t){await e.doc(u(t)).delete();},async listKeys(t=""){return (await(t?e.where("k",">=",t).where("k","<",`${t}\uF8FF`).orderBy("k"):e.orderBy("k")).get()).docs.map(n=>n.data()?.k??n.id)}}}function v(e){return {async append(t){let o=m();return await e.doc(o).set(g({id:o,createdAt:new Date().toISOString(),payload:t})),{id:o,payload:t}},async readAll(){return (await e.orderBy("id").get()).docs.map(o=>{let r=o.data()??{};return {id:String(r.id??o.id),payload:r.payload}})},async readAfter(t){let n=(await(t?e.where("id",">",t).orderBy("id"):e.orderBy("id")).get()).docs.map(s=>{let a=s.data()??{};return {id:String(a.id??s.id),payload:a.payload}});return {entries:n,newCursor:n.length>0?n[n.length-1].id:t}},async clear(){let t=await e.get();if(typeof e.firestore.batch=="function"){let o=e.firestore.batch();for(let r of t.docs)o.delete(e.doc(r.id));await o.commit();return}await Promise.all(t.docs.map(o=>e.doc(o.id).delete()));}}}function A(e){return {async read(t){let o=await e.doc(u(t)).get();return o.exists?o.data()?.content??null:null},async write(t,o){await e.doc(u(t)).set({k:t,content:o});},async exists(t){return (await e.doc(u(t)).get()).exists},async remove(t){await e.doc(u(t)).delete();},async readBytes(t){let o=await e.doc(u(t)).get();if(!o.exists)return null;let r=o.data()??{};return typeof r.bytesBase64=="string"?$e(r.bytesBase64):typeof r.content=="string"?new TextEncoder().encode(r.content):null},async writeBytes(t,o){await e.doc(u(t)).set({k:t,bytesBase64:te(o)});},async listKeys(t=""){return (await(t?e.where("k",">=",t).where("k","<",`${t}\uF8FF`).orderBy("k"):e.orderBy("k")).get()).docs.map(n=>n.data()?.k??n.id)},async stat(t){let o=await e.doc(u(t)).get();if(!o.exists)return null;let r=o.data()??{},n=typeof r.bytesBase64=="string"?Math.floor(r.bytesBase64.length*3/4):typeof r.content=="string"?r.content.length:0;return {key:t,size:n,contentType:String(r.contentType??"application/octet-stream")}},async renameKey(t,o){let r=await e.doc(u(t)).get();if(!r.exists)return false;let n=r.data()??{};return await e.doc(u(o)).set({...n,k:o}),await e.doc(u(t)).delete(),true}}}function Z(e){let t=A(e);return {...t,async getUniqueKey(o="scratch-",r=""){return `${o}${m()}${r}`},async create(o,r="scratch-",n=""){let s=`${r}${m()}${n}`;return await t.write(s,o),s},keyRef(o){return O(`${e.path}/${u(o)}`)},config:{async get(o){let r=await t.read(`__config__/${o}`);if(r==null)return null;try{return JSON.parse(r)}catch{return r}},async set(o,r){await t.write(`__config__/${o}`,JSON.stringify(r));}}}}function ee(e,t){let o=oe(e,t);return {stream(r){return v(o.collection(`archive-stream-${r}`))},blob(r){return A(o.collection(`archive-blob-${r}`))},async listStreams(r=""){return typeof o.listCollections!="function"?[]:(await o.listCollections()).map(s=>s.path.split("/").at(-1)??"").filter(s=>s.startsWith(`archive-stream-${r}`)).map(s=>s.slice(15))},async listBlobs(r=""){return typeof o.listCollections!="function"?[]:(await o.listCollections()).map(s=>s.path.split("/").at(-1)??"").filter(s=>s.startsWith(`archive-blob-${r}`)).map(s=>s.slice(13))},config:{async get(r){let n=await o.collection("archive-config").doc("main").get();return n.exists?n.data()?.[r]??null:null},async set(r,n){await o.collection("archive-config").doc("main").set(g({[r]:n}),{merge:true});}}}}function Je(e,t={}){let o=t.holderId??re(),r=t.ttlMs??3e4;return {async tryAcquire(){try{await e.firestore.runTransaction(async n=>{let s=await n.get(e),a=new Date().toISOString();if(s.exists){let i=s.data()??{};if(i.held===!0&&typeof i.expiresAt=="string"&&i.expiresAt>a)throw Object.assign(new Error("locked"),{code:"locked"})}n.set(e,{held:!0,holderId:o,acquiredAt:a,expiresAt:new Date(Date.now()+r).toISOString()});});}catch(n){if(n?.code==="locked")return null;throw n}return async()=>{try{await e.firestore.runTransaction(async n=>{let s=await n.get(e);if(!s.exists)return;(s.data()??{}).holderId===o&&n.update(e,{held:!1,holderId:null});});}catch{}}}}}function Ge(e,t={}){let o=t.defaultVisibilityMs??3e4;return {async enqueue(r){let n=m(),s=new Date().toISOString();return await e.doc(n).set(g({id:n,body:r,enqueuedAt:s,attempt:0,staged:false,visibleAfter:s,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null})),{id:n,body:r,enqueuedAt:s,attempt:0}},async enqueueMany(r){let n=[];for(let s of r)n.push(await this.enqueue(s));return n},async enqueueIfAbsent(r,n){if((await e.where("dedupKey","==",n).where("dead","==",false).limit(1).get()).docs.length>0)return null;let a=m(),i=new Date().toISOString();return await e.doc(a).set(g({id:a,body:r,dedupKey:n,enqueuedAt:i,attempt:0,staged:false,visibleAfter:i,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null})),{id:a,body:r,enqueuedAt:i,attempt:0}},async stage(r,n={}){if(n.dedupKey&&(await e.where("dedupKey","==",n.dedupKey).where("dead","==",false).limit(1).get()).docs.length>0)return null;let s=m(),a=new Date().toISOString();return await e.doc(s).set(g({id:s,body:r,dedupKey:n.dedupKey,enqueuedAt:a,attempt:0,staged:true,visibleAfter:null,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null})),{id:s,body:r,enqueuedAt:a,attempt:0}},async commitStaged(r){try{return await e.firestore.runTransaction(async n=>{let s=e.doc(r),a=await n.get(s);if(!a.exists)throw new Error("missing");let i=a.data()??{};if(i.dead===!0||i.staged!==!0)throw new Error("not-staged");n.update(s,{staged:!1,enqueuedAt:new Date().toISOString(),attempt:0,visibleAfter:new Date().toISOString()});}),!0}catch{return false}},async discardStaged(r,n){try{return await e.firestore.runTransaction(async s=>{let a=e.doc(r),i=await s.get(a);if(!i.exists)throw new Error("missing");let c=i.data()??{};if(c.dead===!0||c.staged!==!0)throw new Error("not-staged");s.update(a,{staged:!1,dead:!0,deadReason:n??"discarded"});}),!0}catch{return false}},async peekStaged(r=""){return (await e.where("dead","==",false).where("staged","==",true).orderBy("enqueuedAt").get()).docs.map(s=>s.data()??{}).filter(s=>!r||String(s.id??"").startsWith(r)).map(s=>({id:String(s.id??""),body:s.body,enqueuedAt:String(s.enqueuedAt??""),attempt:Number(s.attempt??0)}))},async lease(r={}){let n=Math.max(1,Number(r.max??1)),s=Math.max(1,Number(r.visibilityMs??o)),a=new Date().toISOString(),i=Math.max(n*32,128),c=await e.where("dead","==",false).where("staged","==",false).where("visibleAfter","<=",a).orderBy("visibleAfter").limit(i).get(),S=[];for(let B of c.docs){if(S.length>=n)break;let F=e.doc(B.id);try{let x=null;await e.firestore.runTransaction(async q=>{let N=await q.get(F);if(!N.exists)throw new Error("gone");let d=N.data()??{},T=new Date().toISOString();if(d.dead===!0)throw new Error("dead");if(d.staged===!0)throw new Error("staged");if(typeof d.visibleAfter=="string"&&d.visibleAfter>T)throw new Error("hidden");if(d.leaseToken&&typeof d.leaseExpiresAt=="string"&&d.leaseExpiresAt>T)throw new Error("leased");let L=re(),D=new Date(Date.now()+s).toISOString(),j=Number(d.attempt??0)+1;q.update(F,{leaseToken:L,leaseExpiresAt:D,attempt:j}),x={id:String(d.id??B.id),body:d.body,enqueuedAt:String(d.enqueuedAt??T),attempt:j,leaseToken:L,leaseExpiresAt:D};}),x&&S.push(x);}catch{}}return S},async ack(r,n){try{return await e.firestore.runTransaction(async s=>{let a=e.doc(r),i=await s.get(a);if(!i.exists)return;if((i.data()??{}).leaseToken!==n)throw new Error("token mismatch");s.delete(a);}),!0}catch{return false}},async nack(r,n,s={}){try{return await e.firestore.runTransaction(async a=>{let i=e.doc(r),c=await a.get(i);if(!c.exists)return;if((c.data()??{}).leaseToken!==n)throw new Error("token mismatch");s.dead===!0?a.update(i,{dead:!0,deadReason:s.reason??"nacked",leaseToken:null,leaseExpiresAt:null}):a.update(i,{leaseToken:null,leaseExpiresAt:null,visibleAfter:new Date().toISOString()});}),!0}catch{return false}},async peekActive(r=""){return (await e.where("dead","==",false).where("staged","==",false).orderBy("enqueuedAt").get()).docs.map(s=>s.data()??{}).filter(s=>!r||String(s.id??"").startsWith(r)).map(s=>({id:String(s.id??""),body:s.body,enqueuedAt:String(s.enqueuedAt??""),attempt:Number(s.attempt??0)}))},async peekDeadLetter(r=""){return (await e.where("dead","==",true).orderBy("enqueuedAt").get()).docs.map(s=>s.data()??{}).filter(s=>!r||String(s.id??"").startsWith(r)).map(s=>({id:String(s.id??""),body:s.body,enqueuedAt:String(s.enqueuedAt??""),attempt:Number(s.attempt??0),reason:s.deadReason}))}}}function Qe(e,t,o={}){return I({boardId:t,kvStorage(r){return _(h(e,t,`kv-${r||"root"}`))},kvStorageForRef(r){return _(e.collection(y(r,`boards/${t}/kv-root`)))},blobStorage(r){return A(h(e,t,`blobs-${r||"root"}`))},blobStorageForRef(r){return A(e.collection(y(r,`boards/${t}/blobs-root`)))},chatStorageForRef(r){let n=y(r,`boards/${t}/chat`);return X(s=>v(e.collection(`${n}-journal-${Ke(s)}`)),_(e.collection(`${n}-kv`)))},queueStoreRef:se(t).queueStoreRef,queueStorageForRef(r,n){let s=y(r,`boards/${t}/runtime`);return Ge(e.collection(`${s}-${n}`))},scratchStorage(){return Z(h(e,t,"scratch"))},scratchStorageForRef(r){return Z(e.collection(y(r,`boards/${t}/scratch`)))},archiveFactory(){return ee(e,t)},archiveFactoryForRef(r){let n=ne(r),s=n?.kind==="firestore-board"?n.value:t;return ee(e,s)},journalStorage(){return v(h(e,t,"journal"))},journalStorageForRef(r){let n=y(r,`boards/${t}/runtime-board`);return v(e.collection(`${n}-journal`))},lock:Je(h(e,t,"locks").doc("board-lock"),{holderId:o.holderId}),hashFn(r){return Me(r)},genId(){return m()},supportsDirectSourceOutput(r){return r.howToRun==="queue-storage"||r.howToRun==="http:post"},requestProcessAccumulated:o.requestProcessAccumulated,publishBoardChangeNotifications:o.publishBoardChangeNotifications,onWarn:r=>console.warn(`[firestore-board-adapter:${t}] ${r}`)})}function Wn(e,t,o={}){let r={...se(t),...o.refs??{}},n=Qe(e,t,o);return {refs:r,boardAdapter:n}}
2
- exports.createFirestoreArchiveFactory=ee;exports.createFirestoreBlobStorage=A;exports.createFirestoreBoardAdapter=Qe;exports.createFirestoreBoardRefs=se;exports.createFirestoreBoardRuntimeBundle=Wn;exports.createFirestoreJournalStorage=v;exports.createFirestoreKvStorage=_;exports.createFirestoreLock=Je;exports.createFirestoreQueueStorage=Ge;exports.createFirestoreScratchStorage=Z;exports.makeFirestoreRef=O;exports.serializeFirestoreRef=f;return exports;})({});//# sourceMappingURL=firestore-storage.js.map
1
+ var FirestoreStorage=(function(exports){'use strict';var k="b64:";function ie(e){let t=new TextEncoder().encode(e),o=globalThis.Buffer,r;if(o)r=o.from(t).toString("base64");else if(typeof btoa=="function"){let n="";for(let s of t)n+=String.fromCharCode(s);r=btoa(n);}else throw new Error("No base64 encoder available in this runtime");return r.replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function ue(e){let t=e.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-e.length%4)%4),o=globalThis.Buffer;if(o)return o.from(t,"base64").toString("utf8");if(typeof atob=="function"){let r=atob(t),n=new Uint8Array(r.length);for(let s=0;s<r.length;s+=1)n[s]=r.charCodeAt(s);return new TextDecoder().decode(n)}throw new Error("No base64 decoder available in this runtime")}function l(e){return `${k}${ie(JSON.stringify(e))}`}function p(e){if(!e.startsWith(k))throw new Error(`Invalid ref format (expected ${k}<base64url(json)>): ${e}`);let t;try{t=JSON.parse(ue(e.slice(k.length)));}catch{throw new Error(`Invalid ref format (malformed base64url/json): ${e}`)}if(!t||typeof t!="object")throw new Error(`Invalid ref format (expected object payload): ${e}`);let o=t;if(typeof o.kind!="string"||typeof o.value!="string")throw new Error(`Invalid ref format (payload must contain string kind/value): ${e}`);return {kind:o.kind,value:o.value}}function E(e){return {messageId:e.id,enqueuedAt:e.enqueuedAt,attempt:e.attempt,request:e.body}}function fe(e){return typeof e=="string"?e.startsWith("b64:")?p(e).value:e:e.value}function $(e){return {async enqueueRequest(t){return (await e.enqueue(t)).id},async leaseRequests(t){return (await e.lease(t)).map(o=>({...E(o),leaseToken:o.leaseToken,leaseExpiresAt:o.leaseExpiresAt}))},ackRequest(t,o){return e.ack(t,o)},nackRequest(t,o,r){return e.nack(t,o,r)},async peekActive(){return (await e.peekActive()).map(E)},async peekDeadLetter(){return (await e.peekDeadLetter()).map(t=>({...E(t),reason:t.reason}))}}}function I(e){let t=e.callbackTransport,o=e.resolveBlob??(async n=>{let s=await e.blobStorage("").read(n.value);if(s==null)throw new Error(`Blob not found for ref ${n.kind}:${n.value}`);return s});async function r(n,s){if(n.howToRun==="queue-storage")return e.queueStoreRef?(await $(e.queueStorageForRef(e.queueStoreRef,"task-executor")).enqueueRequest({boardId:typeof n.extra?.boardId=="string"?n.extra.boardId:e.boardId,ref:n,args:s}),{dispatched:true}):{dispatched:false,error:"queue-storage dispatch requires queueStoreRef"};if(n.howToRun==="http:post"){let a=e.fetch??globalThis.fetch;if(!a)return {dispatched:false,error:"http:post dispatch requires fetch support"};let i=await a(fe(n.whatToRun),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...s,...n.extra?{extra:n.extra}:{}})});if(!i.ok){let c=await i.text().catch(()=>"");return {dispatched:false,error:`HTTP ${i.status}: ${c}`}}return {dispatched:true}}return {dispatched:false,error:`Unsupported hosted async transport "${n.howToRun}"`}}return {kvStorage:e.kvStorage,kvStorageForRef:e.kvStorageForRef,blobStorage:e.blobStorage,blobStorageForRef:e.blobStorageForRef,chatStorageForRef:e.chatStorageForRef,queueStorageForRef:e.queueStorageForRef,scratchStorage:e.scratchStorage,scratchStorageForRef:e.scratchStorageForRef,archiveFactory:e.archiveFactory,archiveFactoryForRef:e.archiveFactoryForRef,journalStorage:e.journalStorage,journalStorageForRef:e.journalStorageForRef,lock:e.lock,get callbackTransport(){return t},set callbackTransport(n){t=n;},dispatchExecution:(n,s)=>e.dispatchExecution?.(n,s)??r(n,s),supportsDirectSourceOutput:e.supportsDirectSourceOutput,resolveBlob:o,hashFn:e.hashFn,genId:e.genId,requestProcessAccumulated:e.requestProcessAccumulated,publishBoardChangeNotifications:e.publishBoardChangeNotifications,warn:e.onWarn}}function P(e){if(e==null||typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return `[${e.map(P).join(",")}]`;let t=e;return `{${Object.keys(t).sort().map(r=>`${JSON.stringify(r)}:${P(t[r])}`).join(",")}}`}function b(e,t){let o=t>>>0;for(let r=0;r<e.length;r++)o^=e.charCodeAt(r),o=Math.imul(o,16777619)>>>0;return o}function W(e){let t=P(e),o=b(t,2166136261),r=b(t,3735928559),n=b(t,19088743),s=b(t,4277009102);return [o,r,n,s].map(a=>a.toString(16).padStart(8,"0")).join("")}function Y(e){return String(e).replace(/[^a-zA-Z0-9_-]/g,"_")}function X(e){let t=e.payload??{};return {id:e.id,role:typeof t.role=="string"?t.role:"system",text:typeof t.text=="string"?t.text:"",files:Array.isArray(t.files)?t.files:[],turn:typeof t.turn=="string"?t.turn:"",updated_at:typeof t.updated_at=="string"?t.updated_at:""}}function Z(e,t){let o=n=>`chats/${Y(n)}/processing`,r=n=>`chats/${Y(n)}/config`;return {async append(n,s,a,i=[],c=""){return (await e(n).append({role:s,text:a,files:i,turn:c,updated_at:new Date().toISOString()})).id},async readAll(n){return (await e(n).readAll()).map(X)},async readAfter(n,s){let a=await e(n).readAfter(s);return {records:a.entries.map(X),cursor:a.newCursor}},async clear(n){await e(n).clear?.();},async setProcessing(n,s){s?await t.write(o(n),true):await t.delete(o(n));},async isProcessing(n){return await t.read(o(n))===true},async getConfig(n){return await t.read(r(n))??{}},async setConfig(n,s){let a=await t.read(r(n))??{};await t.write(r(n),{...a,...s});}}}function Ke(e){return String(e).replace(/[^a-zA-Z0-9_-]/g,"_")}function re(e){let t="";for(let o=0;o<e.length;o++)t+=String.fromCharCode(e[o]);return btoa(t)}function $e(e){let t=atob(e),o=new Uint8Array(t.length);for(let r=0;r<t.length;r++)o[r]=t.charCodeAt(r);return o}function Ve(e){let t=new TextEncoder().encode(e);return re(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function Me(e){return W(e).slice(0,16)}function ne(){return globalThis.crypto&&typeof globalThis.crypto.randomUUID=="function"?globalThis.crypto.randomUUID():`${Date.now().toString(16)}-${Math.random().toString(16).slice(2,10)}`}function u(e){return Ve(String(e))}function m(){let e=String(Date.now()).padStart(13,"0"),t=Math.random().toString(36).slice(2,10).padEnd(8,"0");return `${e}-${t}`}function oe(e){try{return p(e)}catch{return null}}function y(e,t){let o=oe(e);return o?.kind==="firestore"&&o.value?o.value:t}function g(e){if(e===void 0)return null;if(Array.isArray(e))return e.map(t=>g(t===void 0?null:t));if(e&&typeof e=="object"){let t=Object.entries(e).filter(([,o])=>o!==void 0).map(([o,r])=>[o,g(r)]);return Object.fromEntries(t)}return e}function se(e,t){return e.collection("boards").doc(t)}function h(e,t,o){return se(e,t).collection(o)}function O(e){return {kind:"firestore",value:String(e)}}function f(e){return l(O(e))}function ae(e){return {baseRef:O(`boards/${e}`),boardRuntimeStoreRef:f(`boards/${e}/runtime-board`),cardStoreRef:f(`boards/${e}/cards`),outputsStoreRef:f(`boards/${e}/runtime-out`),queueStoreRef:f(`boards/${e}/runtime`),scratchStoreRef:f(`boards/${e}/scratch`),chatStoreRef:f(`boards/${e}/chat`),artifactsStoreRef:f(`boards/${e}/files`),fetchedSourcesStoreRef:f(`boards/${e}/sources`)}}function _(e){return {async read(t){let o=await e.doc(u(t)).get();return o.exists?o.data()?.value??null:null},async write(t,o){await e.doc(u(t)).set(g({k:t,value:o}));},async delete(t){await e.doc(u(t)).delete();},async listKeys(t=""){return (await(t?e.where("k",">=",t).where("k","<",`${t}\uF8FF`).orderBy("k"):e.orderBy("k")).get()).docs.map(n=>n.data()?.k??n.id)}}}function v(e){return {async append(t){let o=m();return await e.doc(o).set(g({id:o,createdAt:new Date().toISOString(),payload:t})),{id:o,payload:t}},async readAll(){return (await e.orderBy("id").get()).docs.map(o=>{let r=o.data()??{};return {id:String(r.id??o.id),payload:r.payload}})},async readAfter(t){let n=(await(t?e.where("id",">",t).orderBy("id"):e.orderBy("id")).get()).docs.map(s=>{let a=s.data()??{};return {id:String(a.id??s.id),payload:a.payload}});return {entries:n,newCursor:n.length>0?n[n.length-1].id:t}},async clear(){let t=await e.get();if(typeof e.firestore.batch=="function"){let o=e.firestore.batch();for(let r of t.docs)o.delete(e.doc(r.id));await o.commit();return}await Promise.all(t.docs.map(o=>e.doc(o.id).delete()));}}}function A(e){return {async read(t){let o=await e.doc(u(t)).get();return o.exists?o.data()?.content??null:null},async write(t,o){await e.doc(u(t)).set({k:t,content:o});},async exists(t){return (await e.doc(u(t)).get()).exists},async remove(t){await e.doc(u(t)).delete();},async readBytes(t){let o=await e.doc(u(t)).get();if(!o.exists)return null;let r=o.data()??{};return typeof r.bytesBase64=="string"?$e(r.bytesBase64):typeof r.content=="string"?new TextEncoder().encode(r.content):null},async writeBytes(t,o){await e.doc(u(t)).set({k:t,bytesBase64:re(o)});},async listKeys(t=""){return (await(t?e.where("k",">=",t).where("k","<",`${t}\uF8FF`).orderBy("k"):e.orderBy("k")).get()).docs.map(n=>n.data()?.k??n.id)},async stat(t){let o=await e.doc(u(t)).get();if(!o.exists)return null;let r=o.data()??{},n=typeof r.bytesBase64=="string"?Math.floor(r.bytesBase64.length*3/4):typeof r.content=="string"?r.content.length:0;return {key:t,size:n,contentType:String(r.contentType??"application/octet-stream")}},async renameKey(t,o){let r=await e.doc(u(t)).get();if(!r.exists)return false;let n=r.data()??{};return await e.doc(u(o)).set({...n,k:o}),await e.doc(u(t)).delete(),true}}}function ee(e){let t=A(e);return {...t,async getUniqueKey(o="scratch-",r=""){return `${o}${m()}${r}`},async create(o,r="scratch-",n=""){let s=`${r}${m()}${n}`;return await t.write(s,o),s},keyRef(o){return O(`${e.path}/${u(o)}`)},config:{async get(o){let r=await t.read(`__config__/${o}`);if(r==null)return null;try{return JSON.parse(r)}catch{return r}},async set(o,r){await t.write(`__config__/${o}`,JSON.stringify(r));}}}}function te(e,t){let o=se(e,t);return {stream(r){return v(o.collection(`archive-stream-${r}`))},blob(r){return A(o.collection(`archive-blob-${r}`))},async listStreams(r=""){return typeof o.listCollections!="function"?[]:(await o.listCollections()).map(s=>s.path.split("/").at(-1)??"").filter(s=>s.startsWith(`archive-stream-${r}`)).map(s=>s.slice(15))},async listBlobs(r=""){return typeof o.listCollections!="function"?[]:(await o.listCollections()).map(s=>s.path.split("/").at(-1)??"").filter(s=>s.startsWith(`archive-blob-${r}`)).map(s=>s.slice(13))},config:{async get(r){let n=await o.collection("archive-config").doc("main").get();return n.exists?n.data()?.[r]??null:null},async set(r,n){await o.collection("archive-config").doc("main").set(g({[r]:n}),{merge:true});}}}}function Je(e,t={}){let o=t.holderId??ne(),r=t.ttlMs??3e4;return {async tryAcquire(){try{await e.firestore.runTransaction(async n=>{let s=await n.get(e),a=new Date().toISOString();if(s.exists){let i=s.data()??{};if(i.held===!0&&typeof i.expiresAt=="string"&&i.expiresAt>a)throw Object.assign(new Error("locked"),{code:"locked"})}n.set(e,{held:!0,holderId:o,acquiredAt:a,expiresAt:new Date(Date.now()+r).toISOString()});});}catch(n){if(n?.code==="locked")return null;throw n}return async()=>{try{await e.firestore.runTransaction(async n=>{let s=await n.get(e);if(!s.exists)return;(s.data()??{}).holderId===o&&n.update(e,{held:!1,holderId:null});});}catch{}}}}}function Ge(e,t={}){let o=t.defaultVisibilityMs??3e4;return {async enqueue(r){let n=m(),s=new Date().toISOString();return await e.doc(n).set(g({id:n,body:r,enqueuedAt:s,attempt:0,staged:false,visibleAfter:s,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null})),{id:n,body:r,enqueuedAt:s,attempt:0}},async enqueueMany(r){let n=[];for(let s of r)n.push(await this.enqueue(s));return n},async enqueueIfAbsent(r,n){if((await e.where("dedupKey","==",n).where("dead","==",false).limit(1).get()).docs.length>0)return null;let a=m(),i=new Date().toISOString();return await e.doc(a).set(g({id:a,body:r,dedupKey:n,enqueuedAt:i,attempt:0,staged:false,visibleAfter:i,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null})),{id:a,body:r,enqueuedAt:i,attempt:0}},async stage(r,n={}){if(n.dedupKey&&(await e.where("dedupKey","==",n.dedupKey).where("dead","==",false).limit(1).get()).docs.length>0)return null;let s=m(),a=new Date().toISOString();return await e.doc(s).set(g({id:s,body:r,dedupKey:n.dedupKey,enqueuedAt:a,attempt:0,staged:true,visibleAfter:null,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null})),{id:s,body:r,enqueuedAt:a,attempt:0}},async commitStaged(r){try{return await e.firestore.runTransaction(async n=>{let s=e.doc(r),a=await n.get(s);if(!a.exists)throw new Error("missing");let i=a.data()??{};if(i.dead===!0||i.staged!==!0)throw new Error("not-staged");n.update(s,{staged:!1,enqueuedAt:new Date().toISOString(),attempt:0,visibleAfter:new Date().toISOString()});}),!0}catch{return false}},async discardStaged(r,n){try{return await e.firestore.runTransaction(async s=>{let a=e.doc(r),i=await s.get(a);if(!i.exists)throw new Error("missing");let c=i.data()??{};if(c.dead===!0||c.staged!==!0)throw new Error("not-staged");s.update(a,{staged:!1,dead:!0,deadReason:n??"discarded"});}),!0}catch{return false}},async peekStaged(r=""){return (await e.where("dead","==",false).where("staged","==",true).orderBy("enqueuedAt").get()).docs.map(s=>s.data()??{}).filter(s=>!r||String(s.id??"").startsWith(r)).map(s=>({id:String(s.id??""),body:s.body,enqueuedAt:String(s.enqueuedAt??""),attempt:Number(s.attempt??0)}))},async lease(r={}){let n=Math.max(1,Number(r.max??1)),s=Math.max(1,Number(r.visibilityMs??o)),a=new Date().toISOString(),i=Math.max(n*32,128),c=await e.where("dead","==",false).where("staged","==",false).where("visibleAfter","<=",a).orderBy("visibleAfter").limit(i).get(),S=[];for(let B of c.docs){if(S.length>=n)break;let F=e.doc(B.id);try{let x=null;await e.firestore.runTransaction(async q=>{let N=await q.get(F);if(!N.exists)throw new Error("gone");let d=N.data()??{},T=new Date().toISOString();if(d.dead===!0)throw new Error("dead");if(d.staged===!0)throw new Error("staged");if(typeof d.visibleAfter=="string"&&d.visibleAfter>T)throw new Error("hidden");if(d.leaseToken&&typeof d.leaseExpiresAt=="string"&&d.leaseExpiresAt>T)throw new Error("leased");let L=ne(),D=new Date(Date.now()+s).toISOString(),j=Number(d.attempt??0)+1;q.update(F,{leaseToken:L,leaseExpiresAt:D,attempt:j}),x={id:String(d.id??B.id),body:d.body,enqueuedAt:String(d.enqueuedAt??T),attempt:j,leaseToken:L,leaseExpiresAt:D};}),x&&S.push(x);}catch{}}return S},async ack(r,n){try{return await e.firestore.runTransaction(async s=>{let a=e.doc(r),i=await s.get(a);if(!i.exists)return;if((i.data()??{}).leaseToken!==n)throw new Error("token mismatch");s.delete(a);}),!0}catch{return false}},async nack(r,n,s={}){try{return await e.firestore.runTransaction(async a=>{let i=e.doc(r),c=await a.get(i);if(!c.exists)return;if((c.data()??{}).leaseToken!==n)throw new Error("token mismatch");s.dead===!0?a.update(i,{dead:!0,deadReason:s.reason??"nacked",leaseToken:null,leaseExpiresAt:null}):a.update(i,{leaseToken:null,leaseExpiresAt:null,visibleAfter:new Date().toISOString()});}),!0}catch{return false}},async peekActive(r=""){return (await e.where("dead","==",false).where("staged","==",false).orderBy("enqueuedAt").get()).docs.map(s=>s.data()??{}).filter(s=>!r||String(s.id??"").startsWith(r)).map(s=>({id:String(s.id??""),body:s.body,enqueuedAt:String(s.enqueuedAt??""),attempt:Number(s.attempt??0)}))},async peekDeadLetter(r=""){return (await e.where("dead","==",true).orderBy("enqueuedAt").get()).docs.map(s=>s.data()??{}).filter(s=>!r||String(s.id??"").startsWith(r)).map(s=>({id:String(s.id??""),body:s.body,enqueuedAt:String(s.enqueuedAt??""),attempt:Number(s.attempt??0),reason:s.deadReason}))}}}function Qe(e,t,o={}){return I({boardId:t,kvStorage(r){return _(h(e,t,`kv-${r||"root"}`))},kvStorageForRef(r){return _(e.collection(y(r,`boards/${t}/kv-root`)))},blobStorage(r){return A(h(e,t,`blobs-${r||"root"}`))},blobStorageForRef(r){return A(e.collection(y(r,`boards/${t}/blobs-root`)))},chatStorageForRef(r){let n=y(r,`boards/${t}/chat`);return Z(s=>v(e.collection(`${n}-journal-${Ke(s)}`)),_(e.collection(`${n}-kv`)))},queueStoreRef:ae(t).queueStoreRef,queueStorageForRef(r,n){let s=y(r,`boards/${t}/runtime`);return Ge(e.collection(`${s}-${n}`))},scratchStorage(){return ee(h(e,t,"scratch"))},scratchStorageForRef(r){return ee(e.collection(y(r,`boards/${t}/scratch`)))},archiveFactory(){return te(e,t)},archiveFactoryForRef(r){let n=oe(r),s=n?.kind==="firestore-board"?n.value:t;return te(e,s)},journalStorage(){return v(h(e,t,"journal"))},journalStorageForRef(r){let n=y(r,`boards/${t}/runtime-board`);return v(e.collection(`${n}-journal`))},lock:Je(h(e,t,"locks").doc("board-lock"),{holderId:o.holderId}),hashFn(r){return Me(r)},genId(){return m()},supportsDirectSourceOutput(r){return r.howToRun==="queue-storage"||r.howToRun==="http:post"},requestProcessAccumulated:o.requestProcessAccumulated,publishBoardChangeNotifications:o.publishBoardChangeNotifications,onWarn:r=>console.warn(`[firestore-board-adapter:${t}] ${r}`)})}function Yn(e,t,o={}){let r={...ae(t),...o.refs??{}},n=Qe(e,t,o);return {refs:r,boardAdapter:n}}
2
+ exports.createFirestoreArchiveFactory=te;exports.createFirestoreBlobStorage=A;exports.createFirestoreBoardAdapter=Qe;exports.createFirestoreBoardRefs=ae;exports.createFirestoreBoardRuntimeBundle=Yn;exports.createFirestoreJournalStorage=v;exports.createFirestoreKvStorage=_;exports.createFirestoreLock=Je;exports.createFirestoreQueueStorage=Ge;exports.createFirestoreScratchStorage=ee;exports.makeFirestoreRef=O;exports.serializeFirestoreRef=f;return exports;})({});//# sourceMappingURL=firestore-storage.js.map
3
3
  //# sourceMappingURL=firestore-storage.js.map
@@ -1,4 +1,4 @@
1
- var LocalStorageStorage=(function(exports){'use strict';var A="b64:";function le(r){let t=new TextEncoder().encode(r),n=globalThis.Buffer,o;if(n)o=n.from(t).toString("base64");else if(typeof btoa=="function"){let e="";for(let s of t)e+=String.fromCharCode(s);o=btoa(e);}else throw new Error("No base64 encoder available in this runtime");return o.replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function fe(r){let t=r.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-r.length%4)%4),n=globalThis.Buffer;if(n)return n.from(t,"base64").toString("utf8");if(typeof atob=="function"){let o=atob(t),e=new Uint8Array(o.length);for(let s=0;s<o.length;s+=1)e[s]=o.charCodeAt(s);return new TextDecoder().decode(e)}throw new Error("No base64 decoder available in this runtime")}function h(r){return `${A}${le(JSON.stringify(r))}`}function v(r){if(!r.startsWith(A))throw new Error(`Invalid ref format (expected ${A}<base64url(json)>): ${r}`);let t;try{t=JSON.parse(fe(r.slice(A.length)));}catch{throw new Error(`Invalid ref format (malformed base64url/json): ${r}`)}if(!t||typeof t!="object")throw new Error(`Invalid ref format (expected object payload): ${r}`);let n=t;if(typeof n.kind!="string"||typeof n.value!="string")throw new Error(`Invalid ref format (payload must contain string kind/value): ${r}`);return {kind:n.kind,value:n.value}}function B(r){return {messageId:r.id,enqueuedAt:r.enqueuedAt,attempt:r.attempt,request:r.body}}function ye(r){return typeof r=="string"?r.startsWith("b64:")?v(r).value:r:r.value}function K(r){return {async enqueueRequest(t){return (await r.enqueue(t)).id},async leaseRequests(t){return (await r.lease(t)).map(n=>({...B(n),leaseToken:n.leaseToken,leaseExpiresAt:n.leaseExpiresAt}))},ackRequest(t,n){return r.ack(t,n)},nackRequest(t,n,o){return r.nack(t,n,o)},async peekActive(){return (await r.peekActive()).map(B)},async peekDeadLetter(){return (await r.peekDeadLetter()).map(t=>({...B(t),reason:t.reason}))}}}function q(r){let t=r.callbackTransport,n=r.resolveBlob??(async e=>{let s=await r.blobStorage("").read(e.value);if(s==null)throw new Error(`Blob not found for ref ${e.kind}:${e.value}`);return s});async function o(e,s){if(e.howToRun==="queue-storage")return r.queueStoreRef?(await K(r.queueStorageForRef(r.queueStoreRef,"task-executor")).enqueueRequest({boardId:typeof e.extra?.boardId=="string"?e.extra.boardId:r.boardId,ref:e,args:s}),{dispatched:true}):{dispatched:false,error:"queue-storage dispatch requires queueStoreRef"};if(e.howToRun==="http:post"){let u=r.fetch??globalThis.fetch;if(!u)return {dispatched:false,error:"http:post dispatch requires fetch support"};let a=await u(ye(e.whatToRun),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...s,...e.extra?{extra:e.extra}:{}})});if(!a.ok){let c=await a.text().catch(()=>"");return {dispatched:false,error:`HTTP ${a.status}: ${c}`}}return {dispatched:true}}return {dispatched:false,error:`Unsupported hosted async transport "${e.howToRun}"`}}return {kvStorage:r.kvStorage,kvStorageForRef:r.kvStorageForRef,blobStorage:r.blobStorage,blobStorageForRef:r.blobStorageForRef,chatStorageForRef:r.chatStorageForRef,queueStorageForRef:r.queueStorageForRef,scratchStorage:r.scratchStorage,scratchStorageForRef:r.scratchStorageForRef,archiveFactory:r.archiveFactory,archiveFactoryForRef:r.archiveFactoryForRef,journalStorage:r.journalStorage,journalStorageForRef:r.journalStorageForRef,lock:r.lock,get callbackTransport(){return t},set callbackTransport(e){t=e;},dispatchExecution:(e,s)=>r.dispatchExecution?.(e,s)??o(e,s),supportsDirectSourceOutput:r.supportsDirectSourceOutput,resolveBlob:n,hashFn:r.hashFn,genId:r.genId,requestProcessAccumulated:r.requestProcessAccumulated,publishBoardChangeNotifications:r.publishBoardChangeNotifications,warn:r.onWarn}}function N(r){if(r==null||typeof r!="object")return JSON.stringify(r);if(Array.isArray(r))return `[${r.map(N).join(",")}]`;let t=r;return `{${Object.keys(t).sort().map(o=>`${JSON.stringify(o)}:${N(t[o])}`).join(",")}}`}function I(r,t){let n=t>>>0;for(let o=0;o<r.length;o++)n^=r.charCodeAt(o),n=Math.imul(n,16777619)>>>0;return n}function Y(r){let t=N(r),n=I(t,2166136261),o=I(t,3735928559),e=I(t,19088743),s=I(t,4277009102);return [n,o,e,s].map(u=>u.toString(16).padStart(8,"0")).join("")}function _(r){function t(s){return `${r}:blob:${s}`}let n=new TextEncoder;function o(s){if(typeof btoa=="function"){let u="";for(let a=0;a<s.length;a++)u+=String.fromCharCode(s[a]);return btoa(u)}return ""}function e(s){if(typeof atob=="function"){let u=atob(s),a=new Uint8Array(u.length);for(let c=0;c<u.length;c++)a[c]=u.charCodeAt(c);return a}return new Uint8Array}return {read(s){return globalThis.localStorage.getItem(t(s))},write(s,u){globalThis.localStorage.setItem(t(s),u);},exists(s){return globalThis.localStorage.getItem(t(s))!==null},remove(s){globalThis.localStorage.removeItem(t(s));},readBytes(s){let u=globalThis.localStorage.getItem(t(s));if(u===null)return null;try{let a=JSON.parse(u);if(a&&a.__kind==="bytes-b64"&&typeof a.data=="string")return e(a.data)}catch{}return n.encode(u)},writeBytes(s,u){let a=JSON.stringify({__kind:"bytes-b64",data:o(u)});globalThis.localStorage.setItem(t(s),a);},listKeys(s){let u=t(s??""),a=[];for(let c=0;c<globalThis.localStorage.length;c++){let l=globalThis.localStorage.key(c);l&&l.startsWith(u)&&a.push(l.slice(t("").length));}return a.sort()},stat(s){let u=globalThis.localStorage.getItem(t(s));if(u===null)return null;let a=n.encode(u).byteLength;try{let c=JSON.parse(u);c&&c.__kind==="bytes-b64"&&typeof c.data=="string"&&(a=e(c.data).byteLength);}catch{}return {key:s,size:a}},renameKey(s,u){let a=globalThis.localStorage.getItem(t(s));return a===null?false:(globalThis.localStorage.setItem(t(u),a),globalThis.localStorage.removeItem(t(s)),true)}}}var Ge=":scratch-marker",Ue=":scratch-config",P=":scratch:",He=1440*60*1e3,Qe=720*60*1e3,ze=200;function Q(r,t){if(!r)return t;let n=r.replace(/[^A-Za-z0-9._-]/g,"_");return n.length>0?n:t}function X(r){let t=`${r}${Ge}`,n=`${r}${Ue}`,o=i=>`${r}${P}${i}`,e=i=>`${r}${P}${i}:__ts`,s=globalThis.localStorage.getItem(t)===null;if(s)try{globalThis.localStorage.setItem(t,`scratch-store
2
- ${new Date().toISOString()}`);}catch{}function u(){let i=globalThis.localStorage.getItem(n);if(i===null)return {};try{let d=JSON.parse(i);return d&&typeof d=="object"&&!Array.isArray(d)?d:{}}catch{return {}}}function a(i){try{globalThis.localStorage.setItem(n,JSON.stringify(i));}catch{}}if(s){let i=u();typeof i["retention.lastSweepAt"]!="number"&&(i["retention.lastSweepAt"]=Date.now(),a(i));}function c(){if(globalThis.localStorage.getItem(t)===null)return;let i=u(),d=typeof i["retention.maxAgeMs"]=="number"?i["retention.maxAgeMs"]:He,f=typeof i["retention.sweepIntervalMs"]=="number"?i["retention.sweepIntervalMs"]:Qe;if(d<=0||f<=0)return;let m=typeof i["retention.lastSweepAt"]=="number"?i["retention.lastSweepAt"]:0,p=Date.now();if(p-m<f)return;i["retention.lastSweepAt"]=p,a(i);let y=p,S=`${r}${P}`,k=[];for(let C=0;C<globalThis.localStorage.length;C++){let b=globalThis.localStorage.key(C);b&&b.startsWith(S)&&!b.endsWith(":__ts")&&k.push(b);}for(let C of k){if(Date.now()-y>ze)break;let b=globalThis.localStorage.getItem(`${C}:__ts`),O=b===null?0:Number(b);if(Number.isFinite(O)&&O>0&&p-O>d){try{globalThis.localStorage.removeItem(C);}catch{}try{globalThis.localStorage.removeItem(`${C}:__ts`);}catch{}}}}function l(i,d){let f=Q(i,"scratch"),m=Q(d,".json"),p=m.startsWith(".")?m:`.${m}`,y=Math.random().toString(36).slice(2,10);return `${f}-${Date.now()}-${y}${p}`}function g(i,d){globalThis.localStorage.setItem(o(i),d),globalThis.localStorage.setItem(e(i),String(Date.now()));}return {read(i){return globalThis.localStorage.getItem(o(i))},write(i,d){g(i,d);try{c();}catch{}},exists(i){return globalThis.localStorage.getItem(o(i))!==null},remove(i){try{globalThis.localStorage.removeItem(o(i));}catch{}try{globalThis.localStorage.removeItem(e(i));}catch{}},readBytes(i){let d=globalThis.localStorage.getItem(o(i));return d===null?null:new TextEncoder().encode(d)},writeBytes(i,d){let f="";for(let m=0;m<d.length;m++)f+=String.fromCharCode(d[m]);g(i,f);try{c();}catch{}},stat(i){let d=globalThis.localStorage.getItem(o(i));if(d===null)return null;let f=globalThis.localStorage.getItem(e(i)),m=f===null?null:Number(f);return {key:i,size:new TextEncoder().encode(d).byteLength,updatedAt:m!==null&&Number.isFinite(m)?new Date(m).toISOString():void 0}},listKeys(i){let d=`${r}${P}`,f=[];for(let m=0;m<globalThis.localStorage.length;m++){let p=globalThis.localStorage.key(m);if(p&&p.startsWith(d)&&!p.endsWith(":__ts")){let y=p.slice(d.length);(!i||y.startsWith(i))&&f.push(y);}}return f.sort()},getUniqueKey(i,d){return l(i,d)},create(i,d,f){let m=l(d,f);g(m,i);try{c();}catch{}return m},keyRef(i){return {kind:"local-storage-scratch",value:i,extra:{prefix:r}}},renameKey(i,d){let f=globalThis.localStorage.getItem(o(i));if(f===null)return false;g(d,f);try{globalThis.localStorage.removeItem(o(i));}catch{}try{globalThis.localStorage.removeItem(e(i));}catch{}return true},config:{get(i){return u()[i]??null},set(i,d){let f=u();d==null?delete f[i]:f[i]=d,a(f);}}}}var We=":archive-marker",Ye=":archive-config",F=":archive:stream:",z=":archive:blob:";function W(r){let t=r.replace(/[^A-Za-z0-9._-]/g,"_");if(!t)throw new Error("Archive segment name cannot be empty after sanitization");return t}function Z(r){let t=`${r}${We}`,n=`${r}${Ye}`,o=a=>`${r}${F}${a}`;if(globalThis.localStorage.getItem(t)===null)try{globalThis.localStorage.setItem(t,`archive-store
3
- ${new Date().toISOString()}`);}catch{}function e(){let a=globalThis.localStorage.getItem(n);if(a===null)return {};try{let c=JSON.parse(a);return c&&typeof c=="object"&&!Array.isArray(c)?c:{}}catch{return {}}}function s(a){try{globalThis.localStorage.setItem(n,JSON.stringify(a));}catch{}}function u(){if(globalThis.localStorage.getItem(t)===null)return;let a=e(),c=typeof a["retention.maxAgeMs"]=="number"?a["retention.maxAgeMs"]:0,l=typeof a["retention.sweepIntervalMs"]=="number"?a["retention.sweepIntervalMs"]:0;if(c<=0||l<=0)return;let g=typeof a["retention.lastSweepAt"]=="number"?a["retention.lastSweepAt"]:0,i=Date.now();if(i-g<l)return;a["retention.lastSweepAt"]=i,s(a);let d=`${r}${F}`;for(let f=0;f<globalThis.localStorage.length;f++){let m=globalThis.localStorage.key(f);if(!m||!m.startsWith(d))continue;let p=globalThis.localStorage.getItem(m);if(p)try{let y=JSON.parse(p),S=y.filter(k=>typeof k.__ts!="number"||i-k.__ts<=c);S.length!==y.length&&globalThis.localStorage.setItem(m,JSON.stringify(S));}catch{}}}return {stream(a){let c=W(a),l=o(c);function g(){let d=globalThis.localStorage.getItem(l);if(!d)return [];try{return JSON.parse(d)}catch{return []}}function i(d){try{globalThis.localStorage.setItem(l,JSON.stringify(d));}catch{}}return {append(d){let f={id:globalThis.crypto.randomUUID(),payload:d,__ts:Date.now()},m=g();m.push(f),i(m);try{u();}catch{}return {id:f.id,payload:f.payload}},readAll(){return g().map(d=>({id:d.id,payload:d.payload}))},readAfter(d){let f=g();if(!d){let S=f.map(k=>({id:k.id,payload:k.payload}));return {entries:S,newCursor:S.length>0?S[S.length-1].id:null}}let m=f.findIndex(S=>S.id===d),y=(m===-1?f:f.slice(m+1)).map(S=>({id:S.id,payload:S.payload}));return {entries:y,newCursor:y.length>0?y[y.length-1].id:d}},clear(){try{globalThis.localStorage.removeItem(l);}catch{}}}},blob(a){let c=W(a),l=_(`${r}${z}${c}`);return {read:g=>l.read(g),write:(g,i)=>{l.write(g,i);try{u();}catch{}},exists:g=>l.exists(g),remove:g=>l.remove(g),readBytes:l.readBytes?g=>l.readBytes(g):void 0,writeBytes:l.writeBytes?(g,i)=>{l.writeBytes(g,i);try{u();}catch{}}:void 0,listKeys:g=>l.listKeys(g),stat:l.stat?g=>l.stat(g):void 0,renameKey:(g,i)=>l.renameKey(g,i)}},listStreams(a){let c=`${r}${F}`,l=[];for(let g=0;g<globalThis.localStorage.length;g++){let i=globalThis.localStorage.key(g);if(!i||!i.startsWith(c))continue;let d=i.slice(c.length);(!a||d.startsWith(a))&&l.push(d);}return l.sort()},listBlobs(a){let c=`${r}${z}`,l=new Set;for(let g=0;g<globalThis.localStorage.length;g++){let i=globalThis.localStorage.key(g);if(!i||!i.startsWith(c))continue;let d=i.slice(c.length),f=d.indexOf(":"),m=f===-1?d:d.slice(0,f);(!a||m.startsWith(a))&&l.add(m);}return Array.from(l).sort()},config:{get(a){return e()[a]??null},set(a,c){let l=e();c==null?delete l[a]:l[a]=c,s(l);}}}}function ee(r){function t(n){return `${r}:kv:${n}`}return {read(n){let o=globalThis.localStorage.getItem(t(n));if(o===null)return null;try{return JSON.parse(o)}catch{return null}},write(n,o){globalThis.localStorage.setItem(t(n),JSON.stringify(o));},delete(n){globalThis.localStorage.removeItem(t(n));},listKeys(n){let o=t(n??""),e=[];for(let s=0;s<globalThis.localStorage.length;s++){let u=globalThis.localStorage.key(s);u!==null&&u.startsWith(o)&&e.push(u.slice(t("").length));}return e}}}function te(r){function t(){let o=globalThis.localStorage.getItem(r);if(!o)return [];try{return JSON.parse(o)}catch{return []}}function n(o){globalThis.localStorage.setItem(r,JSON.stringify(o));}return {readAllEntries(){return t()},appendEntry(o){let e=t();e.push(o),n(e);},generateId(){return globalThis.crypto.randomUUID()}}}function re(r){return String(r).replace(/[^a-zA-Z0-9_-]/g,"_")}function ne(r){let t=r.payload??{};return {id:r.id,role:typeof t.role=="string"?t.role:"system",text:typeof t.text=="string"?t.text:"",files:Array.isArray(t.files)?t.files:[],turn:typeof t.turn=="string"?t.turn:"",updated_at:typeof t.updated_at=="string"?t.updated_at:""}}function oe(r,t){let n=e=>`chats/${re(e)}/processing`,o=e=>`chats/${re(e)}/config`;return {async append(e,s,u,a=[],c=""){return (await r(e).append({role:s,text:u,files:a,turn:c,updated_at:new Date().toISOString()})).id},async readAll(e){return (await r(e).readAll()).map(ne)},async readAfter(e,s){let u=await r(e).readAfter(s);return {records:u.entries.map(ne),cursor:u.newCursor}},async clear(e){await r(e).clear?.();},async setProcessing(e,s){s?await t.write(n(e),true):await t.delete(n(e));},async isProcessing(e){return await t.read(n(e))===true},async getConfig(e){return await t.read(o(e))??{}},async setConfig(e,s){let u=await t.read(o(e))??{};await t.write(o(e),{...u,...s});}}}function Xe(){let r=false;return {async tryAcquire(){return r?null:(r=true,()=>{r=false;})}}}function Ze(){let r=new Map,t=new Map,n=new Map;return {async enqueue(o){let e={id:globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,10)}`,body:o,enqueuedAt:new Date().toISOString(),attempt:0};return r.set(e.id,e),e},async enqueueMany(o){let e=[];for(let s of o)e.push(await this.enqueue(s));return e},async enqueueIfAbsent(o,e){for(let u of r.values())if(u.dedupKey===e)return null;for(let u of t.values())if(u.dedupKey===e)return null;let s={id:globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,10)}`,body:o,enqueuedAt:new Date().toISOString(),attempt:0,dedupKey:e};return r.set(s.id,s),s},async stage(o,e){let s=e?.dedupKey;if(s){for(let a of r.values())if(a.dedupKey===s)return null;for(let a of t.values())if(a.dedupKey===s)return null}let u={id:globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,10)}`,body:o,enqueuedAt:new Date().toISOString(),attempt:0,...s?{dedupKey:s}:{}};return t.set(u.id,u),u},async commitStaged(o){let e=t.get(o);return e?(t.delete(o),r.set(o,{...e,enqueuedAt:new Date().toISOString(),attempt:0}),true):false},async discardStaged(o,e){let s=t.get(o);return s?(t.delete(o),n.set(o,{...s,reason:e}),true):false},async peekStaged(o=""){return Array.from(t.values()).filter(e=>!o||e.id.startsWith(o)).map(e=>({id:e.id,body:e.body,enqueuedAt:e.enqueuedAt,attempt:e.attempt}))},async lease(o){let e=Math.max(1,Math.floor(o?.max??1)),s=Math.max(1,Math.floor(o?.visibilityMs??6e4)),u=Date.now();for(let c of r.values())c.leaseExpiresAt&&Date.parse(c.leaseExpiresAt)<=u&&(delete c.leaseToken,delete c.leaseExpiresAt);let a=[];for(let c of r.values()){if(a.length>=e)break;c.leaseToken||(c.attempt+=1,c.leaseToken=globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,10)}`,c.leaseExpiresAt=new Date(Date.now()+s).toISOString(),a.push({id:c.id,body:c.body,enqueuedAt:c.enqueuedAt,attempt:c.attempt,leaseToken:c.leaseToken,leaseExpiresAt:c.leaseExpiresAt}));}return a},async ack(o,e){let s=r.get(o);return !s||s.leaseToken!==e?false:(r.delete(o),true)},async nack(o,e,s){let u=r.get(o);return !u||u.leaseToken!==e?false:(delete u.leaseToken,delete u.leaseExpiresAt,s?.dead&&(r.delete(o),n.set(o,{...u,reason:s.reason})),true)},async peekActive(o=""){return Array.from(r.values()).filter(e=>!e.leaseToken).filter(e=>!o||e.id.startsWith(o)).map(e=>({id:e.id,body:e.body,enqueuedAt:e.enqueuedAt,attempt:e.attempt}))},async peekDeadLetter(o=""){return Array.from(n.values()).filter(e=>!o||e.id.startsWith(o)).map(e=>({id:e.id,body:e.body,enqueuedAt:e.enqueuedAt,attempt:e.attempt,reason:e.reason}))}}}function L(r){let t=ee(r);return {async read(n){return t.read(n)},async write(n,o){t.write(n,o);},async delete(n){t.delete(n);},async listKeys(n){return t.listKeys(n)}}}function se(r){let t=_(r);return {async read(n){return t.read(n)},async write(n,o){t.write(n,o);},async exists(n){return t.exists(n)},async remove(n){t.remove(n);},async readBytes(n){return t.readBytes?.(n)??null},async writeBytes(n,o){await t.writeBytes?.(n,o);},async listKeys(n){return t.listKeys(n)},async stat(n){return t.stat?.(n)??null},async renameKey(n,o){let e=await t.read(n);return e==null?false:(t.write(o,e),t.remove(n),true)}}}function ae(r){let t=X(r);return {async read(n){return t.read(n)},async write(n,o){t.write(n,o);},async exists(n){return t.exists(n)},async remove(n){t.remove(n);},async readBytes(n){return t.readBytes?.(n)??null},async writeBytes(n,o){await t.writeBytes?.(n,o);},async listKeys(n){return t.listKeys(n)},async stat(n){return t.stat?.(n)??null},async getUniqueKey(n,o){return t.getUniqueKey(n,o)},async create(n,o,e){return t.create(n,o,e)},keyRef(n){return t.keyRef(n)},async renameKey(n,o){let e=t.read(n);return e==null?false:(t.write(o,e),t.remove(n),true)},config:{async get(n){return t.config.get(n)},async set(n,o){t.config.set(n,o);}}}}function D(r){let t=te(r);function n(o){return {id:o.id,payload:o.event}}return {async append(o){let e={id:t.generateId(),event:o};return t.appendEntry(e),n(e)},async readAll(){return t.readAllEntries().map(n)},async readAfter(o){let e=t.readAllEntries().map(n);if(!o)return {entries:e,newCursor:e.length>0?e[e.length-1].id:null};let s=e.findIndex(a=>a.id===o),u=s===-1?e:e.slice(s+1);return {entries:u,newCursor:u.length>0?u[u.length-1].id:o}}}}function ie(r){let t=Z(r);return {stream(n){let o=t.stream(n);return {async append(e){return o.append(e)},async readAll(){return o.readAll()},async readAfter(e){return o.readAfter(e)},async clear(){o.clear?.();}}},blob(n){let o=t.blob(n);return {async read(e){return o.read(e)},async write(e,s){o.write(e,s);},async exists(e){return o.exists(e)},async remove(e){o.remove(e);},async readBytes(e){return o.readBytes?.(e)??null},async writeBytes(e,s){await o.writeBytes?.(e,s);},async listKeys(e){return o.listKeys(e)},async stat(e){return o.stat?.(e)??null},async renameKey(e,s){let u=o.read(e);return u==null?false:(o.write(s,u),o.remove(e),true)}}},async listStreams(n){return t.listStreams(n)},async listBlobs(n){return t.listBlobs(n)},config:{async get(n){return t.config.get(n)},async set(n,o){t.config.set(n,o);}}}}function ue(r){return String(r||"").trim()}function et(r){return String(r).replace(/[^a-zA-Z0-9_-]/g,"_")}function ce(r){return {kind:"local-storage",value:ue(r)}}function R(r){return h(ce(r))}function de(r){let t=`boards:${r}`;return {baseRef:ce(t),boardRuntimeStoreRef:R(`${t}:runtime-board`),cardStoreRef:R(`${t}:cards`),outputsStoreRef:R(`${t}:runtime-out`),queueStoreRef:R(`${t}:runtime`),scratchStoreRef:R(`${t}:scratch`),chatStoreRef:R(`${t}:chat`),artifactsStoreRef:R(`${t}:files`),fetchedSourcesStoreRef:R(`${t}:sources`)}}function w(r,t){try{let n=v(r);if(n?.kind==="local-storage"&&n.value)return ue(n.value)}catch{}return t}function tt(r,t={}){let n=de(r),o=new Map;return q({boardId:r,kvStorage(e){return L(`${n.baseRef.value}:${e||"root"}`)},kvStorageForRef(e){return L(w(e,`${n.baseRef.value}:root`))},blobStorage(e){return se(e?`${n.baseRef.value}:${e}`:n.baseRef.value)},blobStorageForRef(e){return se(w(e,n.baseRef.value))},chatStorageForRef(e){let s=w(e,`${n.baseRef.value}:chat`);return oe(u=>D(`${s}:journal:${et(u)}`),L(s))},queueStoreRef:n.queueStoreRef,queueStorageForRef(e,s){let u=`${w(e,`${n.baseRef.value}:runtime`)}:queue:${s}`,a=o.get(u);return a||(a=Ze(),o.set(u,a)),a},scratchStorage(){return ae(`${n.baseRef.value}:scratch`)},scratchStorageForRef(e){return ae(w(e,`${n.baseRef.value}:scratch`))},archiveFactory(){return ie(`${n.baseRef.value}:archive`)},archiveFactoryForRef(e){return ie(w(e,`${n.baseRef.value}:archive`))},journalStorage(){return D(`${n.baseRef.value}:journal`)},journalStorageForRef(e){return D(`${w(e,`${n.baseRef.value}:runtime-board`)}:journal`)},lock:Xe(),resolveBlob:async e=>{let s=e?.kind==="local-storage"?e:null;if(!s?.value)throw new Error(`Unsupported localStorage ref: ${h(e)}`);let u=_(s.value),a=await Promise.resolve(u.read(""));if(a===null)throw new Error(`Blob not found: ${h(e)}`);try{let c=JSON.parse(a);if(c?.__kind==="bytes-b64"&&typeof c.data=="string"){let l=await Promise.resolve(u.readBytes?.(""));if(l)return new TextDecoder().decode(l)}}catch{}return a},hashFn:Y,genId:()=>(globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,10)}`).replace(/-/g,""),requestProcessAccumulated:t.requestProcessAccumulated,publishBoardChangeNotifications:t.publishBoardChangeNotifications,onWarn:e=>console.warn(`[localstorage-board-adapter:${r}] ${e}`)})}function no(r,t={}){return {refs:{...de(r),...t.refs??{}},boardAdapter:tt(r,t)}}exports.createLocalStorageBoardAdapter=tt;exports.createLocalStorageBoardRefs=de;exports.createLocalStorageBoardRuntimeBundle=no;exports.makeLocalStorageRef=ce;exports.serializeLocalStorageRef=R;return exports;})({});//# sourceMappingURL=localstorage-storage.js.map
1
+ var LocalStorageStorage=(function(exports){'use strict';var A="b64:";function fe(r){let t=new TextEncoder().encode(r),n=globalThis.Buffer,o;if(n)o=n.from(t).toString("base64");else if(typeof btoa=="function"){let e="";for(let s of t)e+=String.fromCharCode(s);o=btoa(e);}else throw new Error("No base64 encoder available in this runtime");return o.replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function ge(r){let t=r.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-r.length%4)%4),n=globalThis.Buffer;if(n)return n.from(t,"base64").toString("utf8");if(typeof atob=="function"){let o=atob(t),e=new Uint8Array(o.length);for(let s=0;s<o.length;s+=1)e[s]=o.charCodeAt(s);return new TextDecoder().decode(e)}throw new Error("No base64 decoder available in this runtime")}function h(r){return `${A}${fe(JSON.stringify(r))}`}function v(r){if(!r.startsWith(A))throw new Error(`Invalid ref format (expected ${A}<base64url(json)>): ${r}`);let t;try{t=JSON.parse(ge(r.slice(A.length)));}catch{throw new Error(`Invalid ref format (malformed base64url/json): ${r}`)}if(!t||typeof t!="object")throw new Error(`Invalid ref format (expected object payload): ${r}`);let n=t;if(typeof n.kind!="string"||typeof n.value!="string")throw new Error(`Invalid ref format (payload must contain string kind/value): ${r}`);return {kind:n.kind,value:n.value}}function B(r){return {messageId:r.id,enqueuedAt:r.enqueuedAt,attempt:r.attempt,request:r.body}}function Se(r){return typeof r=="string"?r.startsWith("b64:")?v(r).value:r:r.value}function K(r){return {async enqueueRequest(t){return (await r.enqueue(t)).id},async leaseRequests(t){return (await r.lease(t)).map(n=>({...B(n),leaseToken:n.leaseToken,leaseExpiresAt:n.leaseExpiresAt}))},ackRequest(t,n){return r.ack(t,n)},nackRequest(t,n,o){return r.nack(t,n,o)},async peekActive(){return (await r.peekActive()).map(B)},async peekDeadLetter(){return (await r.peekDeadLetter()).map(t=>({...B(t),reason:t.reason}))}}}function q(r){let t=r.callbackTransport,n=r.resolveBlob??(async e=>{let s=await r.blobStorage("").read(e.value);if(s==null)throw new Error(`Blob not found for ref ${e.kind}:${e.value}`);return s});async function o(e,s){if(e.howToRun==="queue-storage")return r.queueStoreRef?(await K(r.queueStorageForRef(r.queueStoreRef,"task-executor")).enqueueRequest({boardId:typeof e.extra?.boardId=="string"?e.extra.boardId:r.boardId,ref:e,args:s}),{dispatched:true}):{dispatched:false,error:"queue-storage dispatch requires queueStoreRef"};if(e.howToRun==="http:post"){let u=r.fetch??globalThis.fetch;if(!u)return {dispatched:false,error:"http:post dispatch requires fetch support"};let a=await u(Se(e.whatToRun),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...s,...e.extra?{extra:e.extra}:{}})});if(!a.ok){let c=await a.text().catch(()=>"");return {dispatched:false,error:`HTTP ${a.status}: ${c}`}}return {dispatched:true}}return {dispatched:false,error:`Unsupported hosted async transport "${e.howToRun}"`}}return {kvStorage:r.kvStorage,kvStorageForRef:r.kvStorageForRef,blobStorage:r.blobStorage,blobStorageForRef:r.blobStorageForRef,chatStorageForRef:r.chatStorageForRef,queueStorageForRef:r.queueStorageForRef,scratchStorage:r.scratchStorage,scratchStorageForRef:r.scratchStorageForRef,archiveFactory:r.archiveFactory,archiveFactoryForRef:r.archiveFactoryForRef,journalStorage:r.journalStorage,journalStorageForRef:r.journalStorageForRef,lock:r.lock,get callbackTransport(){return t},set callbackTransport(e){t=e;},dispatchExecution:(e,s)=>r.dispatchExecution?.(e,s)??o(e,s),supportsDirectSourceOutput:r.supportsDirectSourceOutput,resolveBlob:n,hashFn:r.hashFn,genId:r.genId,requestProcessAccumulated:r.requestProcessAccumulated,publishBoardChangeNotifications:r.publishBoardChangeNotifications,warn:r.onWarn}}function N(r){if(r==null||typeof r!="object")return JSON.stringify(r);if(Array.isArray(r))return `[${r.map(N).join(",")}]`;let t=r;return `{${Object.keys(t).sort().map(o=>`${JSON.stringify(o)}:${N(t[o])}`).join(",")}}`}function I(r,t){let n=t>>>0;for(let o=0;o<r.length;o++)n^=r.charCodeAt(o),n=Math.imul(n,16777619)>>>0;return n}function X(r){let t=N(r),n=I(t,2166136261),o=I(t,3735928559),e=I(t,19088743),s=I(t,4277009102);return [n,o,e,s].map(u=>u.toString(16).padStart(8,"0")).join("")}function _(r){function t(s){return `${r}:blob:${s}`}let n=new TextEncoder;function o(s){if(typeof btoa=="function"){let u="";for(let a=0;a<s.length;a++)u+=String.fromCharCode(s[a]);return btoa(u)}return ""}function e(s){if(typeof atob=="function"){let u=atob(s),a=new Uint8Array(u.length);for(let c=0;c<u.length;c++)a[c]=u.charCodeAt(c);return a}return new Uint8Array}return {read(s){return globalThis.localStorage.getItem(t(s))},write(s,u){globalThis.localStorage.setItem(t(s),u);},exists(s){return globalThis.localStorage.getItem(t(s))!==null},remove(s){globalThis.localStorage.removeItem(t(s));},readBytes(s){let u=globalThis.localStorage.getItem(t(s));if(u===null)return null;try{let a=JSON.parse(u);if(a&&a.__kind==="bytes-b64"&&typeof a.data=="string")return e(a.data)}catch{}return n.encode(u)},writeBytes(s,u){let a=JSON.stringify({__kind:"bytes-b64",data:o(u)});globalThis.localStorage.setItem(t(s),a);},listKeys(s){let u=t(s??""),a=[];for(let c=0;c<globalThis.localStorage.length;c++){let l=globalThis.localStorage.key(c);l&&l.startsWith(u)&&a.push(l.slice(t("").length));}return a.sort()},stat(s){let u=globalThis.localStorage.getItem(t(s));if(u===null)return null;let a=n.encode(u).byteLength;try{let c=JSON.parse(u);c&&c.__kind==="bytes-b64"&&typeof c.data=="string"&&(a=e(c.data).byteLength);}catch{}return {key:s,size:a}},renameKey(s,u){let a=globalThis.localStorage.getItem(t(s));return a===null?false:(globalThis.localStorage.setItem(t(u),a),globalThis.localStorage.removeItem(t(s)),true)}}}var Ge=":scratch-marker",Ue=":scratch-config",P=":scratch:",He=1440*60*1e3,Qe=720*60*1e3,ze=200;function z(r,t){if(!r)return t;let n=r.replace(/[^A-Za-z0-9._-]/g,"_");return n.length>0?n:t}function Z(r){let t=`${r}${Ge}`,n=`${r}${Ue}`,o=i=>`${r}${P}${i}`,e=i=>`${r}${P}${i}:__ts`,s=globalThis.localStorage.getItem(t)===null;if(s)try{globalThis.localStorage.setItem(t,`scratch-store
2
+ ${new Date().toISOString()}`);}catch{}function u(){let i=globalThis.localStorage.getItem(n);if(i===null)return {};try{let d=JSON.parse(i);return d&&typeof d=="object"&&!Array.isArray(d)?d:{}}catch{return {}}}function a(i){try{globalThis.localStorage.setItem(n,JSON.stringify(i));}catch{}}if(s){let i=u();typeof i["retention.lastSweepAt"]!="number"&&(i["retention.lastSweepAt"]=Date.now(),a(i));}function c(){if(globalThis.localStorage.getItem(t)===null)return;let i=u(),d=typeof i["retention.maxAgeMs"]=="number"?i["retention.maxAgeMs"]:He,f=typeof i["retention.sweepIntervalMs"]=="number"?i["retention.sweepIntervalMs"]:Qe;if(d<=0||f<=0)return;let m=typeof i["retention.lastSweepAt"]=="number"?i["retention.lastSweepAt"]:0,p=Date.now();if(p-m<f)return;i["retention.lastSweepAt"]=p,a(i);let y=p,S=`${r}${P}`,k=[];for(let C=0;C<globalThis.localStorage.length;C++){let b=globalThis.localStorage.key(C);b&&b.startsWith(S)&&!b.endsWith(":__ts")&&k.push(b);}for(let C of k){if(Date.now()-y>ze)break;let b=globalThis.localStorage.getItem(`${C}:__ts`),O=b===null?0:Number(b);if(Number.isFinite(O)&&O>0&&p-O>d){try{globalThis.localStorage.removeItem(C);}catch{}try{globalThis.localStorage.removeItem(`${C}:__ts`);}catch{}}}}function l(i,d){let f=z(i,"scratch"),m=z(d,".json"),p=m.startsWith(".")?m:`.${m}`,y=Math.random().toString(36).slice(2,10);return `${f}-${Date.now()}-${y}${p}`}function g(i,d){globalThis.localStorage.setItem(o(i),d),globalThis.localStorage.setItem(e(i),String(Date.now()));}return {read(i){return globalThis.localStorage.getItem(o(i))},write(i,d){g(i,d);try{c();}catch{}},exists(i){return globalThis.localStorage.getItem(o(i))!==null},remove(i){try{globalThis.localStorage.removeItem(o(i));}catch{}try{globalThis.localStorage.removeItem(e(i));}catch{}},readBytes(i){let d=globalThis.localStorage.getItem(o(i));return d===null?null:new TextEncoder().encode(d)},writeBytes(i,d){let f="";for(let m=0;m<d.length;m++)f+=String.fromCharCode(d[m]);g(i,f);try{c();}catch{}},stat(i){let d=globalThis.localStorage.getItem(o(i));if(d===null)return null;let f=globalThis.localStorage.getItem(e(i)),m=f===null?null:Number(f);return {key:i,size:new TextEncoder().encode(d).byteLength,updatedAt:m!==null&&Number.isFinite(m)?new Date(m).toISOString():void 0}},listKeys(i){let d=`${r}${P}`,f=[];for(let m=0;m<globalThis.localStorage.length;m++){let p=globalThis.localStorage.key(m);if(p&&p.startsWith(d)&&!p.endsWith(":__ts")){let y=p.slice(d.length);(!i||y.startsWith(i))&&f.push(y);}}return f.sort()},getUniqueKey(i,d){return l(i,d)},create(i,d,f){let m=l(d,f);g(m,i);try{c();}catch{}return m},keyRef(i){return {kind:"local-storage-scratch",value:i,extra:{prefix:r}}},renameKey(i,d){let f=globalThis.localStorage.getItem(o(i));if(f===null)return false;g(d,f);try{globalThis.localStorage.removeItem(o(i));}catch{}try{globalThis.localStorage.removeItem(e(i));}catch{}return true},config:{get(i){return u()[i]??null},set(i,d){let f=u();d==null?delete f[i]:f[i]=d,a(f);}}}}var We=":archive-marker",Ye=":archive-config",F=":archive:stream:",W=":archive:blob:";function Y(r){let t=r.replace(/[^A-Za-z0-9._-]/g,"_");if(!t)throw new Error("Archive segment name cannot be empty after sanitization");return t}function ee(r){let t=`${r}${We}`,n=`${r}${Ye}`,o=a=>`${r}${F}${a}`;if(globalThis.localStorage.getItem(t)===null)try{globalThis.localStorage.setItem(t,`archive-store
3
+ ${new Date().toISOString()}`);}catch{}function e(){let a=globalThis.localStorage.getItem(n);if(a===null)return {};try{let c=JSON.parse(a);return c&&typeof c=="object"&&!Array.isArray(c)?c:{}}catch{return {}}}function s(a){try{globalThis.localStorage.setItem(n,JSON.stringify(a));}catch{}}function u(){if(globalThis.localStorage.getItem(t)===null)return;let a=e(),c=typeof a["retention.maxAgeMs"]=="number"?a["retention.maxAgeMs"]:0,l=typeof a["retention.sweepIntervalMs"]=="number"?a["retention.sweepIntervalMs"]:0;if(c<=0||l<=0)return;let g=typeof a["retention.lastSweepAt"]=="number"?a["retention.lastSweepAt"]:0,i=Date.now();if(i-g<l)return;a["retention.lastSweepAt"]=i,s(a);let d=`${r}${F}`;for(let f=0;f<globalThis.localStorage.length;f++){let m=globalThis.localStorage.key(f);if(!m||!m.startsWith(d))continue;let p=globalThis.localStorage.getItem(m);if(p)try{let y=JSON.parse(p),S=y.filter(k=>typeof k.__ts!="number"||i-k.__ts<=c);S.length!==y.length&&globalThis.localStorage.setItem(m,JSON.stringify(S));}catch{}}}return {stream(a){let c=Y(a),l=o(c);function g(){let d=globalThis.localStorage.getItem(l);if(!d)return [];try{return JSON.parse(d)}catch{return []}}function i(d){try{globalThis.localStorage.setItem(l,JSON.stringify(d));}catch{}}return {append(d){let f={id:globalThis.crypto.randomUUID(),payload:d,__ts:Date.now()},m=g();m.push(f),i(m);try{u();}catch{}return {id:f.id,payload:f.payload}},readAll(){return g().map(d=>({id:d.id,payload:d.payload}))},readAfter(d){let f=g();if(!d){let S=f.map(k=>({id:k.id,payload:k.payload}));return {entries:S,newCursor:S.length>0?S[S.length-1].id:null}}let m=f.findIndex(S=>S.id===d),y=(m===-1?f:f.slice(m+1)).map(S=>({id:S.id,payload:S.payload}));return {entries:y,newCursor:y.length>0?y[y.length-1].id:d}},clear(){try{globalThis.localStorage.removeItem(l);}catch{}}}},blob(a){let c=Y(a),l=_(`${r}${W}${c}`);return {read:g=>l.read(g),write:(g,i)=>{l.write(g,i);try{u();}catch{}},exists:g=>l.exists(g),remove:g=>l.remove(g),readBytes:l.readBytes?g=>l.readBytes(g):void 0,writeBytes:l.writeBytes?(g,i)=>{l.writeBytes(g,i);try{u();}catch{}}:void 0,listKeys:g=>l.listKeys(g),stat:l.stat?g=>l.stat(g):void 0,renameKey:(g,i)=>l.renameKey(g,i)}},listStreams(a){let c=`${r}${F}`,l=[];for(let g=0;g<globalThis.localStorage.length;g++){let i=globalThis.localStorage.key(g);if(!i||!i.startsWith(c))continue;let d=i.slice(c.length);(!a||d.startsWith(a))&&l.push(d);}return l.sort()},listBlobs(a){let c=`${r}${W}`,l=new Set;for(let g=0;g<globalThis.localStorage.length;g++){let i=globalThis.localStorage.key(g);if(!i||!i.startsWith(c))continue;let d=i.slice(c.length),f=d.indexOf(":"),m=f===-1?d:d.slice(0,f);(!a||m.startsWith(a))&&l.add(m);}return Array.from(l).sort()},config:{get(a){return e()[a]??null},set(a,c){let l=e();c==null?delete l[a]:l[a]=c,s(l);}}}}function te(r){function t(n){return `${r}:kv:${n}`}return {read(n){let o=globalThis.localStorage.getItem(t(n));if(o===null)return null;try{return JSON.parse(o)}catch{return null}},write(n,o){globalThis.localStorage.setItem(t(n),JSON.stringify(o));},delete(n){globalThis.localStorage.removeItem(t(n));},listKeys(n){let o=t(n??""),e=[];for(let s=0;s<globalThis.localStorage.length;s++){let u=globalThis.localStorage.key(s);u!==null&&u.startsWith(o)&&e.push(u.slice(t("").length));}return e}}}function re(r){function t(){let o=globalThis.localStorage.getItem(r);if(!o)return [];try{return JSON.parse(o)}catch{return []}}function n(o){globalThis.localStorage.setItem(r,JSON.stringify(o));}return {readAllEntries(){return t()},appendEntry(o){let e=t();e.push(o),n(e);},generateId(){return globalThis.crypto.randomUUID()}}}function ne(r){return String(r).replace(/[^a-zA-Z0-9_-]/g,"_")}function oe(r){let t=r.payload??{};return {id:r.id,role:typeof t.role=="string"?t.role:"system",text:typeof t.text=="string"?t.text:"",files:Array.isArray(t.files)?t.files:[],turn:typeof t.turn=="string"?t.turn:"",updated_at:typeof t.updated_at=="string"?t.updated_at:""}}function se(r,t){let n=e=>`chats/${ne(e)}/processing`,o=e=>`chats/${ne(e)}/config`;return {async append(e,s,u,a=[],c=""){return (await r(e).append({role:s,text:u,files:a,turn:c,updated_at:new Date().toISOString()})).id},async readAll(e){return (await r(e).readAll()).map(oe)},async readAfter(e,s){let u=await r(e).readAfter(s);return {records:u.entries.map(oe),cursor:u.newCursor}},async clear(e){await r(e).clear?.();},async setProcessing(e,s){s?await t.write(n(e),true):await t.delete(n(e));},async isProcessing(e){return await t.read(n(e))===true},async getConfig(e){return await t.read(o(e))??{}},async setConfig(e,s){let u=await t.read(o(e))??{};await t.write(o(e),{...u,...s});}}}function Xe(){let r=false;return {async tryAcquire(){return r?null:(r=true,()=>{r=false;})}}}function Ze(){let r=new Map,t=new Map,n=new Map;return {async enqueue(o){let e={id:globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,10)}`,body:o,enqueuedAt:new Date().toISOString(),attempt:0};return r.set(e.id,e),e},async enqueueMany(o){let e=[];for(let s of o)e.push(await this.enqueue(s));return e},async enqueueIfAbsent(o,e){for(let u of r.values())if(u.dedupKey===e)return null;for(let u of t.values())if(u.dedupKey===e)return null;let s={id:globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,10)}`,body:o,enqueuedAt:new Date().toISOString(),attempt:0,dedupKey:e};return r.set(s.id,s),s},async stage(o,e){let s=e?.dedupKey;if(s){for(let a of r.values())if(a.dedupKey===s)return null;for(let a of t.values())if(a.dedupKey===s)return null}let u={id:globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,10)}`,body:o,enqueuedAt:new Date().toISOString(),attempt:0,...s?{dedupKey:s}:{}};return t.set(u.id,u),u},async commitStaged(o){let e=t.get(o);return e?(t.delete(o),r.set(o,{...e,enqueuedAt:new Date().toISOString(),attempt:0}),true):false},async discardStaged(o,e){let s=t.get(o);return s?(t.delete(o),n.set(o,{...s,reason:e}),true):false},async peekStaged(o=""){return Array.from(t.values()).filter(e=>!o||e.id.startsWith(o)).map(e=>({id:e.id,body:e.body,enqueuedAt:e.enqueuedAt,attempt:e.attempt}))},async lease(o){let e=Math.max(1,Math.floor(o?.max??1)),s=Math.max(1,Math.floor(o?.visibilityMs??6e4)),u=Date.now();for(let c of r.values())c.leaseExpiresAt&&Date.parse(c.leaseExpiresAt)<=u&&(delete c.leaseToken,delete c.leaseExpiresAt);let a=[];for(let c of r.values()){if(a.length>=e)break;c.leaseToken||(c.attempt+=1,c.leaseToken=globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,10)}`,c.leaseExpiresAt=new Date(Date.now()+s).toISOString(),a.push({id:c.id,body:c.body,enqueuedAt:c.enqueuedAt,attempt:c.attempt,leaseToken:c.leaseToken,leaseExpiresAt:c.leaseExpiresAt}));}return a},async ack(o,e){let s=r.get(o);return !s||s.leaseToken!==e?false:(r.delete(o),true)},async nack(o,e,s){let u=r.get(o);return !u||u.leaseToken!==e?false:(delete u.leaseToken,delete u.leaseExpiresAt,s?.dead&&(r.delete(o),n.set(o,{...u,reason:s.reason})),true)},async peekActive(o=""){return Array.from(r.values()).filter(e=>!e.leaseToken).filter(e=>!o||e.id.startsWith(o)).map(e=>({id:e.id,body:e.body,enqueuedAt:e.enqueuedAt,attempt:e.attempt}))},async peekDeadLetter(o=""){return Array.from(n.values()).filter(e=>!o||e.id.startsWith(o)).map(e=>({id:e.id,body:e.body,enqueuedAt:e.enqueuedAt,attempt:e.attempt,reason:e.reason}))}}}function D(r){let t=te(r);return {async read(n){return t.read(n)},async write(n,o){t.write(n,o);},async delete(n){t.delete(n);},async listKeys(n){return t.listKeys(n)}}}function ae(r){let t=_(r);return {async read(n){return t.read(n)},async write(n,o){t.write(n,o);},async exists(n){return t.exists(n)},async remove(n){t.remove(n);},async readBytes(n){return t.readBytes?.(n)??null},async writeBytes(n,o){await t.writeBytes?.(n,o);},async listKeys(n){return t.listKeys(n)},async stat(n){return t.stat?.(n)??null},async renameKey(n,o){let e=await t.read(n);return e==null?false:(t.write(o,e),t.remove(n),true)}}}function ie(r){let t=Z(r);return {async read(n){return t.read(n)},async write(n,o){t.write(n,o);},async exists(n){return t.exists(n)},async remove(n){t.remove(n);},async readBytes(n){return t.readBytes?.(n)??null},async writeBytes(n,o){await t.writeBytes?.(n,o);},async listKeys(n){return t.listKeys(n)},async stat(n){return t.stat?.(n)??null},async getUniqueKey(n,o){return t.getUniqueKey(n,o)},async create(n,o,e){return t.create(n,o,e)},keyRef(n){return t.keyRef(n)},async renameKey(n,o){let e=t.read(n);return e==null?false:(t.write(o,e),t.remove(n),true)},config:{async get(n){return t.config.get(n)},async set(n,o){t.config.set(n,o);}}}}function L(r){let t=re(r);function n(o){return {id:o.id,payload:o.event}}return {async append(o){let e={id:t.generateId(),event:o};return t.appendEntry(e),n(e)},async readAll(){return t.readAllEntries().map(n)},async readAfter(o){let e=t.readAllEntries().map(n);if(!o)return {entries:e,newCursor:e.length>0?e[e.length-1].id:null};let s=e.findIndex(a=>a.id===o),u=s===-1?e:e.slice(s+1);return {entries:u,newCursor:u.length>0?u[u.length-1].id:o}}}}function ue(r){let t=ee(r);return {stream(n){let o=t.stream(n);return {async append(e){return o.append(e)},async readAll(){return o.readAll()},async readAfter(e){return o.readAfter(e)},async clear(){o.clear?.();}}},blob(n){let o=t.blob(n);return {async read(e){return o.read(e)},async write(e,s){o.write(e,s);},async exists(e){return o.exists(e)},async remove(e){o.remove(e);},async readBytes(e){return o.readBytes?.(e)??null},async writeBytes(e,s){await o.writeBytes?.(e,s);},async listKeys(e){return o.listKeys(e)},async stat(e){return o.stat?.(e)??null},async renameKey(e,s){let u=o.read(e);return u==null?false:(o.write(s,u),o.remove(e),true)}}},async listStreams(n){return t.listStreams(n)},async listBlobs(n){return t.listBlobs(n)},config:{async get(n){return t.config.get(n)},async set(n,o){t.config.set(n,o);}}}}function ce(r){return String(r||"").trim()}function et(r){return String(r).replace(/[^a-zA-Z0-9_-]/g,"_")}function de(r){return {kind:"local-storage",value:ce(r)}}function R(r){return h(de(r))}function le(r){let t=`boards:${r}`;return {baseRef:de(t),boardRuntimeStoreRef:R(`${t}:runtime-board`),cardStoreRef:R(`${t}:cards`),outputsStoreRef:R(`${t}:runtime-out`),queueStoreRef:R(`${t}:runtime`),scratchStoreRef:R(`${t}:scratch`),chatStoreRef:R(`${t}:chat`),artifactsStoreRef:R(`${t}:files`),fetchedSourcesStoreRef:R(`${t}:sources`)}}function w(r,t){try{let n=v(r);if(n?.kind==="local-storage"&&n.value)return ce(n.value)}catch{}return t}function tt(r,t={}){let n=le(r),o=new Map;return q({boardId:r,kvStorage(e){return D(`${n.baseRef.value}:${e||"root"}`)},kvStorageForRef(e){return D(w(e,`${n.baseRef.value}:root`))},blobStorage(e){return ae(e?`${n.baseRef.value}:${e}`:n.baseRef.value)},blobStorageForRef(e){return ae(w(e,n.baseRef.value))},chatStorageForRef(e){let s=w(e,`${n.baseRef.value}:chat`);return se(u=>L(`${s}:journal:${et(u)}`),D(s))},queueStoreRef:n.queueStoreRef,queueStorageForRef(e,s){let u=`${w(e,`${n.baseRef.value}:runtime`)}:queue:${s}`,a=o.get(u);return a||(a=Ze(),o.set(u,a)),a},scratchStorage(){return ie(`${n.baseRef.value}:scratch`)},scratchStorageForRef(e){return ie(w(e,`${n.baseRef.value}:scratch`))},archiveFactory(){return ue(`${n.baseRef.value}:archive`)},archiveFactoryForRef(e){return ue(w(e,`${n.baseRef.value}:archive`))},journalStorage(){return L(`${n.baseRef.value}:journal`)},journalStorageForRef(e){return L(`${w(e,`${n.baseRef.value}:runtime-board`)}:journal`)},lock:Xe(),resolveBlob:async e=>{let s=e?.kind==="local-storage"?e:null;if(!s?.value)throw new Error(`Unsupported localStorage ref: ${h(e)}`);let u=_(s.value),a=await Promise.resolve(u.read(""));if(a===null)throw new Error(`Blob not found: ${h(e)}`);try{let c=JSON.parse(a);if(c?.__kind==="bytes-b64"&&typeof c.data=="string"){let l=await Promise.resolve(u.readBytes?.(""));if(l)return new TextDecoder().decode(l)}}catch{}return a},hashFn:X,genId:()=>(globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,10)}`).replace(/-/g,""),requestProcessAccumulated:t.requestProcessAccumulated,publishBoardChangeNotifications:t.publishBoardChangeNotifications,onWarn:e=>console.warn(`[localstorage-board-adapter:${r}] ${e}`)})}function oo(r,t={}){return {refs:{...le(r),...t.refs??{}},boardAdapter:tt(r,t)}}exports.createLocalStorageBoardAdapter=tt;exports.createLocalStorageBoardRefs=le;exports.createLocalStorageBoardRuntimeBundle=oo;exports.makeLocalStorageRef=de;exports.serializeLocalStorageRef=R;return exports;})({});//# sourceMappingURL=localstorage-storage.js.map
4
4
  //# sourceMappingURL=localstorage-storage.js.map
@@ -1,18 +1,18 @@
1
1
  {
2
- "generatedAt": "2026-06-15T05:27:10.595Z",
2
+ "generatedAt": "2026-06-18T23:44:19.907Z",
3
3
  "algorithm": "sha256",
4
4
  "files": {
5
5
  "browser/server-runtime-controlface.js": {
6
- "sha256": "sha256-dMRr0E3V7cxBSDd5lVAOaW2ZuNxQEbwD/eFTHbbw4Yk=",
7
- "bytes": 190699
6
+ "sha256": "sha256-xcsZzlY8TF2GnpeAKqVBb2lsF0yI6pZMf/jHuV+kobk=",
7
+ "bytes": 190913
8
8
  },
9
9
  "browser/adapters/firestore-storage.js": {
10
- "sha256": "sha256-029x2uoJpIDFvMmaZxjxagdGZI177os6jTlAhqcHH/Y=",
11
- "bytes": 17558
10
+ "sha256": "sha256-dAP2RFjTHpzcEpvcixRvM139mcUc9Lg1W6T9/CwaRvA=",
11
+ "bytes": 17562
12
12
  },
13
13
  "browser/adapters/localstorage-storage.js": {
14
- "sha256": "sha256-6/z1184UBsbbR90bj0WyWRTSzP3QDcs16+YhBUxjK8Q=",
15
- "bytes": 22193
14
+ "sha256": "sha256-xqP10b03lw9LGMihnUzirEtECdT5TANdosLs/Mtha24=",
15
+ "bytes": 22195
16
16
  },
17
17
  "browser/adapters/firebase-storage.js": {
18
18
  "sha256": "sha256-luv3dI9cncRpeu7kYFnIPg5cIlKXi+nPOzCAQSEjfHc=",