@popmelt.com/core 0.27.0 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/claude-plugin/.claude-plugin/plugin.json +1 -1
  2. package/codex-plugin/.codex-plugin/plugin.json +1 -1
  3. package/dist/ParticipantRuntime-4NMUTZL3.mjs +139 -0
  4. package/dist/PopmeltTasteConnectedPane-ZMJXKDPJ.mjs +221 -0
  5. package/dist/PreviewRuntime-AZAHK27Q.mjs +2 -0
  6. package/dist/bridge-entry.mjs +2 -229
  7. package/dist/browser-runtime-57XUOV3C.mjs +2 -0
  8. package/dist/browser.mjs +1 -1
  9. package/dist/chunk-3LBOX7HQ.mjs +3 -0
  10. package/dist/chunk-BISCKKOX.mjs +2 -0
  11. package/dist/chunk-DPSBNNGU.mjs +2 -0
  12. package/dist/chunk-GL4I4MI6.mjs +3 -0
  13. package/dist/chunk-HGW2U6PD.mjs +2 -0
  14. package/dist/chunk-HPQJKWK5.mjs +1 -0
  15. package/dist/chunk-JNR6PO2Z.mjs +369 -0
  16. package/dist/chunk-LVEMYZOA.mjs +2 -0
  17. package/dist/chunk-M3MBL5NR.mjs +2 -0
  18. package/dist/chunk-O4HZP3RP.mjs +2 -0
  19. package/dist/chunk-PKTQWFUA.mjs +2 -0
  20. package/dist/chunk-Q5PC5FWC.mjs +347 -0
  21. package/dist/chunk-QXVMGZFP.mjs +1 -0
  22. package/dist/chunk-R5RMIYS5.mjs +77 -0
  23. package/dist/chunk-WNZFCDVR.mjs +289 -0
  24. package/dist/chunk-XTOCFTVW.mjs +2 -0
  25. package/dist/{chunk-C5Q6LDAS.mjs → chunk-YBULEE33.mjs} +1 -1
  26. package/dist/chunk-YIAZGECE.mjs +2 -0
  27. package/dist/cli.mjs +169 -106
  28. package/dist/focus-inspection-ZKWDPDRI.mjs +2 -0
  29. package/dist/index-CHp2bgs1.d.mts +565 -0
  30. package/dist/index.mjs +1 -1
  31. package/dist/memory-legacy.d.mts +1 -489
  32. package/dist/memory-legacy.mjs +1 -1
  33. package/dist/memory-store.d.mts +2 -660
  34. package/dist/memory-store.mjs +1 -3
  35. package/dist/plugin-astro.mjs +1 -1
  36. package/dist/plugin-nuxt.mjs +1 -1
  37. package/dist/plugin-vite.mjs +1 -1
  38. package/dist/server.d.mts +3 -291
  39. package/dist/server.mjs +7 -234
  40. package/dist/taste-proposal-session-XU4N7RUV.mjs +2 -0
  41. package/dist/types-Bur49CLH.d.mts +349 -0
  42. package/dist/workspace-snapshot-EJQHHDQ4.mjs +2 -0
  43. package/package.json +23 -25
  44. package/dist/ParticipantRuntime-AD3YD4FW.mjs +0 -139
  45. package/dist/PopmeltTasteConnectedPane-HLCTVPJP.mjs +0 -81
  46. package/dist/PreviewRuntime-KGLZJGUN.mjs +0 -2
  47. package/dist/browser-runtime-3JZGB3P2.mjs +0 -2
  48. package/dist/chunk-7YCLSSQA.mjs +0 -2
  49. package/dist/chunk-7YIQQYRU.mjs +0 -77
  50. package/dist/chunk-D7HY2EDH.mjs +0 -2
  51. package/dist/chunk-MDJYUX5S.mjs +0 -370
  52. package/dist/chunk-MTRUVFH7.mjs +0 -1
  53. package/dist/chunk-TFPKDKDO.mjs +0 -345
  54. package/dist/chunk-TSY2K45H.mjs +0 -2
  55. package/dist/server-MJF4KF26.mjs +0 -241
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{b as m,a as i}from"./chunk-JNR6PO2Z.mjs";import"./chunk-Q5PC5FWC.mjs";import"./chunk-M3MBL5NR.mjs";import"./chunk-EX63NVDN.mjs";import"./chunk-N2ZEZCHO.mjs";import"./chunk-J3UIBBU2.mjs";import"./chunk-3LBOX7HQ.mjs";import"./chunk-PKTQWFUA.mjs";import"./chunk-R5RMIYS5.mjs";import"./chunk-BISCKKOX.mjs";import"./chunk-XTOCFTVW.mjs";import"./chunk-LVEMYZOA.mjs";import"./chunk-YIAZGECE.mjs";import"./chunk-HGW2U6PD.mjs";import{createElement as p}from"react";import{createRoot as e}from"react-dom/client";function n(o,t){let r=e(o);return r.render(p(m,t)),()=>{r.unmount(),i()}}export{n as mountBrowserRuntime};
package/dist/browser.mjs CHANGED
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{a as isPopmeltPreview}from"./chunk-EX63NVDN.mjs";var m={unmount(){}},u="[data-popmelt-browser-host]";async function p(o={}){if(!o.enabled||typeof document>"u")return m;if(document.querySelector(`${u}, [data-popmelt-top-layer-host]`))throw new Error("Popmelt is already mounted. Unmount it before mounting again.");let e=document.createElement("div");e.setAttribute("data-popmelt-browser-host",""),e.setAttribute("data-devtools",""),document.documentElement.appendChild(e);let d=[["__POPMELT_PROJECT_ID__",o.projectId],["__POPMELT_BRIDGE_URL__",o.bridgeUrl]].flatMap(([t,r])=>{if(r===void 0)return[];let n=Object.prototype.hasOwnProperty.call(window,t),l=window[t],i=r??void 0;return window[t]=i,[()=>{window[t]===i&&(n?window[t]=l:delete window[t])}]}),a=()=>{e.remove();for(let t of d)t()};try{let{mountBrowserRuntime:t}=await import("./browser-runtime-3JZGB3P2.mjs");if(!e.isConnected)throw new Error("Popmelt mount was removed before startup.");let r=t(e,o),n=!0;return{unmount(){if(n){n=!1;try{r()}finally{a()}}}}}catch(t){throw a(),t}}export{p as mountPopmelt};
2
+ export{a as isPopmeltPreview}from"./chunk-EX63NVDN.mjs";var m={unmount(){}},u="[data-popmelt-browser-host]";async function p(o={}){if(!o.enabled||typeof document>"u")return m;if(document.querySelector(`${u}, [data-popmelt-top-layer-host]`))throw new Error("Popmelt is already mounted. Unmount it before mounting again.");let e=document.createElement("div");e.setAttribute("data-popmelt-browser-host",""),e.setAttribute("data-devtools",""),document.documentElement.appendChild(e);let d=[["__POPMELT_PROJECT_ID__",o.projectId],["__POPMELT_BRIDGE_URL__",o.bridgeUrl]].flatMap(([t,r])=>{if(r===void 0)return[];let n=Object.prototype.hasOwnProperty.call(window,t),l=window[t],i=r??void 0;return window[t]=i,[()=>{window[t]===i&&(n?window[t]=l:delete window[t])}]}),a=()=>{e.remove();for(let t of d)t()};try{let{mountBrowserRuntime:t}=await import("./browser-runtime-57XUOV3C.mjs");if(!e.isConnected)throw new Error("Popmelt mount was removed before startup.");let r=t(e,o),n=!0;return{unmount(){if(n){n=!1;try{r()}finally{a()}}}}}catch(t){throw a(),t}}export{p as mountPopmelt};
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import{l as N,d as W}from"./chunk-HGW2U6PD.mjs";import{destroyContext as F,domToCanvas as z,createContext as J}from"modern-screenshot";function A(t,e,n){if(t===null||typeof t=="string"||typeof t=="boolean")return;if(typeof t=="number"){if(!Number.isFinite(t))throw new TypeError(`Comment metadata at ${e} must be finite.`);return}if(typeof t!="object")throw new TypeError(`Comment metadata at ${e} must be JSON-serializable.`);if(n.has(t))throw new TypeError(`Comment metadata at ${e} contains a cycle.`);let o=Object.getPrototypeOf(t);if(!Array.isArray(t)&&o!==Object.prototype&&o!==null)throw new TypeError(`Comment metadata at ${e} must use plain objects and arrays.`);if(n.add(t),Array.isArray(t))t.forEach((l,r)=>A(l,`${e}[${r}]`,n));else for(let[l,r]of Object.entries(t))A(r,`${e}.${l}`,n);n.delete(t)}function X(t){if(t===void 0)return;if(t===null||Array.isArray(t)||typeof t!="object")throw new TypeError("Comment metadata must be a JSON object.");A(t,"meta",new Set);let e=JSON.stringify(t);if(new TextEncoder().encode(e).byteLength>65536)throw new RangeError("Comment metadata exceeds the 65536 byte limit.");return JSON.parse(e)}var S="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",q=1500,G=5e3,Q=24e6,K=16e3,V=4,Z=["position","inset","top","right","bottom","left","z-index","display","visibility","opacity","overflow","overflow-x","overflow-y","box-sizing","box-decoration-break","float","clear","width","min-width","max-width","height","min-height","max-height","margin","margin-top","margin-right","margin-bottom","margin-left","padding","padding-top","padding-right","padding-bottom","padding-left","border","border-width","border-style","border-color","border-top","border-right","border-bottom","border-left","border-radius","outline","outline-offset","box-shadow","background","background-color","background-image","background-size","background-position","background-repeat","background-clip","background-origin","color","font","font-family","font-size","font-style","font-weight","font-stretch","font-variant","line-height","letter-spacing","text-align","text-decoration","text-indent","text-overflow","text-shadow","text-transform","white-space","word-break","overflow-wrap","vertical-align","direction","writing-mode","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","align-content","align-items","align-self","justify-content","justify-items","justify-self","gap","row-gap","column-gap","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-row","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","order","columns","column-count","column-fill","column-rule","column-span","column-width","list-style","list-style-image","list-style-position","list-style-type","object-fit","object-position","aspect-ratio","transform","transform-box","transform-origin","transform-style","perspective","perspective-origin","backface-visibility","clip","clip-path","filter","backdrop-filter","mix-blend-mode","isolation","mask","mask-image","mask-position","mask-repeat","mask-size","content","quotes","counter-increment","counter-reset","appearance","accent-color","caret-color","cursor","pointer-events","fill","fill-opacity","fill-rule","stroke","stroke-width","stroke-opacity"];async function _(t,e){try{let n=await t();if(n)return n}catch{}return e()}var C=new Map,$=new WeakMap,tt=1;function p(){return typeof performance<"u"?performance.now():Date.now()}function E(t){if(t?.debug!==void 0)return t.debug;if(typeof window>"u")return!1;try{return window.localStorage.getItem("popmelt:screenshot-debug")==="true"}catch{return!1}}function et(t){let e=0,n=0;for(let o of t.querySelectorAll("img[src]"))P(o.currentSrc||o.src)&&(e++,(!o.complete||o.naturalWidth===0)&&n++);return{remoteImages:e,unresolvedRemoteImages:n}}function nt(t){return new Promise((e,n)=>{let o=new FileReader;o.onload=()=>e(String(o.result)),o.onerror=()=>n(o.error??new Error("Asset could not be read")),o.readAsDataURL(t)})}function ot(t,e){let n=null;return async o=>{if(!P(o))return!1;n??(n=Date.now()+t);let l=n-Date.now();if(l<=0)return e(),S;let r=new AbortController,a=setTimeout(()=>r.abort(),l);try{let s=await fetch(o,{cache:"force-cache",mode:"cors",signal:r.signal});if(!s.ok)throw new Error(`Asset returned ${s.status}`);return await nt(await s.blob())}catch{return e(),S}finally{clearTimeout(a)}}}function rt(t,e,n){let o=$.get(t);o||(o=tt++,$.set(t,o));let l=e.filter(r=>(r.status??"pending")==="pending").map(r=>{let a=r.points[0],s=r.points[r.points.length-1];return`${r.id}:${r.points.length}:${a?.x??""}:${a?.y??""}:${s?.x??""}:${s?.y??""}`}).join("|");return[o,window.location.href,window.innerWidth,window.innerHeight,n?.dpr??window.devicePixelRatio??1,n?.viewportOnly?window.scrollY:"",l].join("::")}function at(t,e,n){let o=Math.min(e,n);return{top:Math.max(0,Math.min(t,n-o)),height:o,annotations:[]}}function P(t){if(typeof window>"u")return!1;try{let e=new URL(t,window.location.href);return e.protocol!=="http:"&&e.protocol!=="https:"?!1:e.origin!==window.location.origin}catch{return!1}}function it(t){let e=document.createElement("canvas").getContext("2d");return e?(e.fillStyle=t,e.fillStyle):"#888888"}function j(t,e=[],n,o,l=[],r=[],a){let s=new Map,c=[];for(let i of t)if(i.groupId){let m=s.get(i.groupId)||[];m.push(i),s.set(i.groupId,m)}else c.push(i);let u=[];for(let[i,m]of s){let h=m.find(d=>d.type!=="text"),f=m.find(d=>d.type==="text");if(h){let d=h.linkedSelector||f?.linkedSelector,g=f?.imageCount||h.imageCount,w=f?.attachments||h.attachments,y=f?.interactionEpisode||h.interactionEpisode,v=h.pathname||f?.pathname;u.push({id:h.id,type:h.type,instruction:f?.text,...d?{linkedSelector:d}:{},...h.target||f?.target?{target:h.target??f?.target}:{},...v?{pathname:v}:{},elements:h.elements||[],...g?{imageCount:g}:{},...w?.length?{attachments:w}:{},...y?{interactionEpisode:y}:{}})}}for(let i of c)u.push({id:i.id,type:i.type,instruction:i.type==="text"?i.text:void 0,...i.linkedSelector?{linkedSelector:i.linkedSelector}:{},...i.target?{target:i.target}:{},...i.pathname?{pathname:i.pathname}:{},elements:i.elements||[],...i.imageCount?{imageCount:i.imageCount}:{},...i.attachments?.length?{attachments:i.attachments}:{},...i.interactionEpisode?{interactionEpisode:i.interactionEpisode}:{}});return{timestamp:new Date().toISOString(),url:window.location.href,viewport:{width:window.innerWidth,height:window.innerHeight},scrollPosition:{x:window.scrollX,y:window.scrollY},annotations:u,styleModifications:e,...l.length>0?{textModifications:l}:{},...r.length>0?{domModifications:r}:{},...n?{inspectedElement:n}:{},...o&&o.length>0?{spacingTokenChanges:o}:{},...a?{meta:a}:{}}}function lt(t){if(!t.points||t.points.length===0)return null;let e=t.points.map(o=>o.x),n=t.points.map(o=>o.y);return{minX:Math.min(...e),minY:Math.min(...n),maxX:Math.max(...e),maxY:Math.max(...n)}}function st(t,e){if(t.length===0)return[];let n=t.map(i=>({annotation:i,bounds:lt(i)})).filter(i=>i.bounds!==null);if(n.length===0)return[];n.sort((i,m)=>i.bounds.minY-m.bounds.minY);let o=Math.min(...n.map(i=>i.bounds.minY)),l=Math.max(...n.map(i=>i.bounds.maxY));if(l-o<=e){let i=(o+l)/2,m=Math.max(0,i-e/2);return[{top:m,bottom:m+e,annotations:t}]}let r=[],a=50,s=Math.max(0,o-a),c=[],u=s;for(let{annotation:i,bounds:m}of n){let h=m.maxY+a;if(h-s<=e)c.push(i),u=Math.max(u,h);else{if(c.length>0){let f=(s+u)/2,d=Math.max(0,f-e/2);r.push({top:d,bottom:d+e,annotations:c})}s=Math.max(0,m.minY-a),c=[i],u=m.maxY+a}}if(c.length>0){let i=(s+u)/2,m=Math.max(0,i-e/2);r.push({top:m,bottom:m+e,annotations:c})}return r}function ct(t){let e=new Map;for(let n of t)if(n.linkedSelector)try{let o=N(n.linkedSelector);if(o){let l=W(o);e.set(n.id,{x:l.left+window.scrollX,y:l.top+window.scrollY,width:l.width,height:l.height})}}catch{}return e}function T(t,e,n,o,l){if(t.save(),t.scale(o,o),l)for(let r of e){let a=l.get(r.id);if(!a)continue;let s=a.y-n;t.fillStyle=r.color,t.globalAlpha=.05,t.fillRect(a.x,s,a.width,a.height),t.globalAlpha=1,t.strokeStyle=r.color,t.lineWidth=1,t.setLineDash([2,4]),t.strokeRect(a.x,s,a.width,a.height),t.setLineDash([])}for(let r of e){let a=r.points.map(s=>({x:s.x,y:s.y-n}));switch(t.strokeStyle=r.color,t.fillStyle=r.color,t.lineWidth=r.strokeWidth,t.lineCap="round",t.lineJoin="round",r.type){case"freehand":if(a.length<2)break;t.beginPath(),t.moveTo(a[0].x,a[0].y);for(let s=1;s<a.length;s++)t.lineTo(a[s].x,a[s].y);t.stroke();break;case"line":if(a.length<2)break;t.beginPath(),t.moveTo(a[0].x,a[0].y),t.lineTo(a[a.length-1].x,a[a.length-1].y),t.stroke();break;case"rectangle":{if(a.length<2)break;let s=a[0],c=a[a.length-1],u=Math.min(s.x,c.x),i=Math.min(s.y,c.y),m=Math.abs(c.x-s.x),h=Math.abs(c.y-s.y);t.strokeRect(u,i,m,h);break}case"circle":{if(a.length<2)break;let s=a[0],c=a[a.length-1],u=(s.x+c.x)/2,i=(s.y+c.y)/2,m=Math.abs(c.x-s.x)/2,h=Math.abs(c.y-s.y)/2;t.beginPath(),t.ellipse(u,i,m,h,0,0,Math.PI*2),t.stroke();break}case"text":{if(!r.text||a.length<1)break;let s=a[0],c=r.fontSize||16;t.font=`${c}px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,t.fillStyle=r.color;let u=(r.imageCount&&r.imageCount>0?`[${r.imageCount} image${r.imageCount>1?"s":""}] ${r.text}`:r.text).split(`
3
+ `),i=c*1.2,m=4,h=0;for(let f of u)h=Math.max(h,t.measureText(f).width);t.fillRect(s.x-m,s.y-m,h+m*2,u.length*i+m*2),t.fillStyle="#ffffff",u.forEach((f,d)=>{t.fillText(f,s.x,s.y+c+d*i)});break}}}t.restore()}async function dt(t,e,n=[],o){let l=rt(t,n,o),r=C.get(l);if(r)return E(o)&&console.debug("[Screenshot] Reusing in-flight capture",l),r;let a=Mt(t,n,o).finally(()=>C.delete(l));return C.set(l,a),a}function mt(){let t=getComputedStyle(document.documentElement).backgroundColor;return t&&t!=="rgba(0, 0, 0, 0)"&&t!=="transparent"?t:"#ffffff"}function ht(t){return t instanceof HTMLElement?t.id==="devtools-canvas"||t.id==="devtools-toolbar"||t.id==="devtools-scrim"?!1:t.dataset.devtools===void 0:!0}function ut(t,e,n,o){return t.length===0?[{top:Math.max(0,Math.min(o,Math.max(0,n-e))),height:Math.min(e,n||e),annotations:[]}]:t.map(l=>{let r=Math.min(e,n||e);return{top:Math.max(0,Math.min(l.top,Math.max(0,n-r))),height:r,annotations:l.annotations}})}function ft(t,e,n){if(t.length===0)return null;let o=Math.min(...t.map(a=>a.top)),l=Math.max(...t.map(a=>a.top+a.height))-o,r=e*l*n*n;return l>K||r>Q?null:{top:o,height:l}}async function gt(t,e){let n=[];for(let o of t){let l=Object.getOwnPropertyDescriptor(o.element,"toDataURL");try{Object.defineProperty(o.element,"toDataURL",{configurable:!0,value:()=>o.dataUrl}),n.push(()=>{l?Object.defineProperty(o.element,"toDataURL",l):Reflect.deleteProperty(o.element,"toDataURL")})}catch{}}try{return await e()}finally{for(let o of n.reverse())o()}}async function pt(t,e,n,o,l,r,a,s){let c=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)>window.innerHeight*V||t.querySelectorAll("*").length>2500,u=s?await s():[];return gt(u,()=>J(t,{autoDestruct:!1,filter:ht,features:{restoreScrollPosition:!0},onCloneNode:i=>{t===document.body&&(i.style.margin=getComputedStyle(t).margin)},onCloneEachNode:i=>{if(i.nodeType===1&&i.localName==="html"&&i.ownerDocument!==document){let m=i.style;m.overflow="hidden",m.display="inline-block",m.clipPath=`inset(0 round ${m.borderRadius||"0px"})`}},scale:o,backgroundColor:mt(),width:n,height:e.height,style:{transform:`translate(${-window.scrollX}px, ${-e.top}px)`,transformOrigin:"top left"},timeout:l,debug:r,includeStyleProperties:c?[...Z]:null,fetchFn:ot(l,()=>{a.remoteAssetFallbacks++}),fetch:{requestInit:{cache:"force-cache"},placeholderImage:S}}))}async function wt(t,e,n){return t.width=n,t.height=e.height,t.style={transform:`translate(${-window.scrollX}px, ${-e.top}px)`,transformOrigin:"top left"},z(t)}async function yt(t,e,n){let o=document.createElement("canvas");o.width=e,o.height=n;let l=o.getContext("2d");if(!l)throw new Error("Canvas context unavailable");if(typeof createImageBitmap=="function"){let s=await createImageBitmap(t);return l.drawImage(s,0,0,e,n),s.close(),o}let r=new Image,a=URL.createObjectURL(t);try{return await new Promise((s,c)=>{r.onload=()=>s(),r.onerror=()=>c(new Error("Native screenshot could not be decoded")),r.src=a}),l.drawImage(r,0,0,e,n),o}finally{URL.revokeObjectURL(a)}}async function L(t,e,n,o,l,r){if(o?.nativeCapture){let u=p();try{let i=await o.nativeCapture({url:window.location.href,clip:{x:window.scrollX,y:t.top,width:e,height:t.height},scale:n});if(r.nativeMs+=p()-u,i)return r.mode=r.renderMs>0||r.contextMs>0?"mixed":"native",yt(i,Math.round(e*n),Math.round(t.height*n))}catch(i){r.nativeMs+=p()-u,E(o)&&console.debug("[Screenshot] Native capture unavailable; using DOM fallback",i)}}let a=await l(),s=p(),c=await wt(a,t,e);return r.renderMs+=p()-s,r.mode=r.mode==="native"?"mixed":"dom",c}function U(t,e,n,o,l,r){let a=document.createElement("canvas");a.width=Math.round(o*l),a.height=Math.round(n.height*l);let s=a.getContext("2d");if(!s)throw new Error("Canvas context unavailable");let c=Math.round((n.top-e)*l);return s.drawImage(t,0,c,a.width,a.height,0,0,a.width,a.height),T(s,n.annotations,n.top,l,r),a}function bt(t){if(t.length===1)return t[0];let e=document.createElement("canvas");e.width=t[0]?.width??0,e.height=t.reduce((l,r)=>l+r.height,0);let n=e.getContext("2d");if(!n)throw new Error("Canvas context unavailable");let o=0;for(let l of t)n.drawImage(l,0,o),o+=l.height;return e}function xt(t,e="image/webp",n=.8){return new Promise(o=>t.toBlob(o,e,n))}async function Mt(t,e,n){let o=p(),l=n?.dpr??(window.devicePixelRatio||1),r=window.innerWidth,a=window.innerHeight,s=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight),c=Math.max(250,n?.mediaTimeoutMs??q),u=E(n),i=e.filter(b=>(b.status??"pending")==="pending"),m=ct(i),h=n?.viewportOnly?[at(window.scrollY,a,s)]:ut(st(i,a),a,s,window.scrollY),f=et(t),d={startedAt:o,mode:"dom",mediaTimeoutMs:c,ranges:h.length,...f,remoteAssetFallbacks:0,nativeMs:0,contextMs:0,renderMs:0,compositeMs:0,encodeMs:0};console.log("[Screenshot] Starting capture with",i.length,"active annotations (filtered",e.length-i.length,"captured);",`${h.length} range(s), ${f.remoteImages} remote image(s), ${f.unresolvedRemoteImages} unresolved`);let g=null,w=null,y=ft(h,r,l),v=y??h[0],R=async()=>{if(!g){let b=p();g=pt(t,v,r,l,c,u,d,n?.captureSurfaces).then(x=>(w=x,d.contextMs+=p()-b,x))}return g};try{let b=p(),x;if(y){let M=await L(y,r,l,n,R,d);x=h.map(k=>U(M,y.top,k,r,l,m))}else{x=[];for(let M of h){let k=await L(M,r,l,n,R,d);x.push(U(k,M.top,M,r,l,m))}}let Y=bt(x);d.compositeMs+=p()-b-d.renderMs-d.nativeMs-d.contextMs;let B=p(),I=await xt(Y);d.encodeMs=p()-B;let O=p()-d.startedAt,H={mode:d.mode,totalMs:Math.round(O),mediaTimeoutMs:d.mediaTimeoutMs,ranges:d.ranges,remoteImages:d.remoteImages,unresolvedRemoteImages:d.unresolvedRemoteImages,remoteAssetFallbacks:d.remoteAssetFallbacks,nativeMs:Math.round(d.nativeMs),contextMs:Math.round(d.contextMs),renderMs:Math.round(d.renderMs),compositeMs:Math.max(0,Math.round(d.compositeMs)),encodeMs:Math.round(d.encodeMs),overBudget:O>G};return console.log("[Screenshot] Capture complete",JSON.stringify(H)),I?[I]:[]}catch(b){return console.error("[Screenshot] Capture failed:",b),[]}finally{w&&F(w)}}async function D(t){if(t.length===0)return null;if(t.length===1)return t[0];let e=await Promise.all(t.map(s=>new Promise((c,u)=>{let i=new Image;i.onload=()=>c(i),i.onerror=u,i.src=URL.createObjectURL(s)}))),n=e[0].width,o=e.reduce((s,c)=>s+c.height,0),l=document.createElement("canvas");l.width=n,l.height=o;let r=l.getContext("2d");if(!r)return null;let a=0;for(let s of e)r.drawImage(s,0,a),a+=s.height,URL.revokeObjectURL(s.src);return new Promise(s=>{l.toBlob(c=>s(c),"image/webp",.8)})}async function vt(t,e,n,o,l){try{let r=Array.isArray(t)?t:[t];if(r.length===0)return!1;let a=await D(r);if(!a)return!1;let s=a;if(a.type!=="image/png"){let f=new Image,d=URL.createObjectURL(a);await new Promise(w=>{f.onload=()=>w(),f.src=d}),URL.revokeObjectURL(d);let g=document.createElement("canvas");g.width=f.naturalWidth,g.height=f.naturalHeight,g.getContext("2d").drawImage(f,0,0),s=await new Promise(w=>g.toBlob(y=>w(y),"image/png"))}let c={"image/png":s},u=e&&e.length>0,i=n&&n.length>0,m=o&&o.length>0,h=l&&l.length>0;if(u||i||m||h){let f=e?e.filter(d=>(d.status??"pending")==="pending"):[];if(f.length>0||i||m||h){let d=j(f,n||[],void 0,void 0,o||[],l||[]),g=new Blob([JSON.stringify(d,null,2)],{type:"text/plain"});c["text/plain"]=g}}return await navigator.clipboard.write([new ClipboardItem(c)]),!0}catch(r){return console.warn("Clipboard write failed:",r),!1}}export{X as a,_ as b,it as c,j as d,T as e,dt as f,D as g,vt as h};
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{c as a}from"./chunk-YIAZGECE.mjs";var b={isAnnotating:!1,activeTool:"inspector",activeColor:"oklch(0.628 0.258 29)",strokeWidth:3,annotations:[],undoStack:[],redoStack:[],selectedAnnotationIds:[],lastSelectedId:null,styleModifications:[],textModifications:[],domModifications:[],spacingTokenChanges:[],spacingTokenMods:[]};function c(t){return!!(t&&(t.namespaceURI==="http://www.w3.org/1999/xhtml"||t.namespaceURI==="http://www.w3.org/2000/svg"))}var f=new WeakMap,s=new WeakMap;function S(t,e){if(c(e))for(let[o,r]of s.get(t)??[])r.value?e.style.setProperty(o,r.value,r.priority):e.style.removeProperty(o)}function v(t,e){f.set(t,new Set(e))}function x(t){f.delete(t)}function d(t,e){return c(t)&&(f.get(t)?.has(e)??!1)}function p(t){let e=t.sticker;return e?e.family==="padding"||e.family==="margin"?e.subproperty==="all"?10:e.subproperty==="x"||e.subproperty==="y"?20:30:e.family==="radius"||e.family==="border"?e.subproperty==="all"?10:20:10:0}function P(t){return t.changes.map((e,o)=>({change:e,index:o})).sort((e,o)=>p(e.change)-p(o.change)||e.index-o.index).map(({change:e})=>e)}function m(t,e,o){if(c(t)){let r=s.get(t);r||(r=new Map,s.set(t,r)),r.has(e)||r.set(e,{value:t.style.getPropertyValue(e),priority:t.style.getPropertyPriority(e)}),t.style.setProperty(e,o,"important")}}function w(t,e,o,r=!1){if(c(t)){let n=r?s.get(t)?.get(e):void 0;n?.value?t.style.setProperty(e,n.value,n.priority):t.style.removeProperty(e),s.get(t)?.delete(e)}}function g(t){let e=a(t.selector);if(!e&&t.durableSelector&&(e=a(t.durableSelector),e)){let o=t.selector.match(/\[data-pm="([^"]+)"\]/)?.[1];o&&e.setAttribute("data-pm",o)}return e}function k(t){for(let e of t){let o=g(e);if(o)for(let r of P(e))d(o,r.property)||m(o,r.property,r.modified)}}function A(t,e=!1){for(let o of t){let r=a(o.selector);if(r)for(let n of o.changes)d(r,n.property)||w(r,n.property,n.original,e)}}function y(t){let e=a(t.selector);if(!e&&t.durableSelector&&(e=a(t.durableSelector),e)){let o=t.selector.match(/\[data-pm="([^"]+)"\]/)?.[1];o&&e.setAttribute("data-pm",o)}return e}function h(t,e){let o=t;for(let r of e)o=o?.childNodes[r]??null;return o?.nodeType===Node.TEXT_NODE?o:null}function M(t){for(let e of t){let o=y(e);if(!o)continue;let r=h(o,e.textNodePath);r&&(!e.selector.startsWith("@frame(")||r.nodeValue===e.original)&&r.nodeValue!==e.modified&&(r.nodeValue=e.modified)}}function V(t){for(let e of t){let o=y(e);if(!o)continue;let r=h(o,e.textNodePath);r&&(!e.selector.startsWith("@frame(")||r.nodeValue===e.modified)&&r.nodeValue!==e.original&&(r.nodeValue=e.original)}}function l(t,e){if(!t)return null;let o=a(t);if(!o&&e&&(o=a(e),o)){let r=t.match(/\[data-pm="([^"]+)"\]/)?.[1];r&&o.setAttribute("data-pm",r)}return o}function I(t){t.removeAttribute("data-pm"),t.querySelectorAll("[data-pm]").forEach(e=>e.removeAttribute("data-pm"))}function N(t,e){let o=e.match(/\[data-pm="([^"]+)"\]/)?.[1];o&&t.setAttribute("data-pm",o)}function u(t,e,o){let r=Array.from(t.children).filter(i=>i!==e),n=Math.max(0,Math.min(o,r.length));t.insertBefore(e,r[n]??null)}function T(t){for(let e of t){let o=l(e.targetParentSelector,e.targetParentDurableSelector);if(!o)continue;if(e.operation==="move"){let i=l(e.selector,e.durableSelector);if(!i||i===o||i.contains(o))continue;u(o,i,e.targetIndex);continue}if(l(e.selector,e.durableSelector))continue;let r=l(e.sourceSelector,e.sourceDurableSelector);if(!r)continue;let n=r.cloneNode(!0);n instanceof Element&&(I(n),N(n,e.selector),u(o,n,e.targetIndex))}}function W(t){for(let e of[...t].reverse()){if(e.operation==="copy"){l(e.selector,e.durableSelector)?.remove();continue}let o=l(e.selector,e.durableSelector),r=l(e.originalParentSelector,e.originalParentDurableSelector);!o||!r||o===r||o.contains(r)||u(r,o,e.originalIndex??r.children.length)}}export{b as a,c as b,S as c,v as d,x as e,m as f,g,k as h,A as i,M as j,V as k,T as l,W as m};
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{c as v}from"./chunk-M3MBL5NR.mjs";import{a as P,l as R,h as $,j as x,k as g,i as b,m as y}from"./chunk-BISCKKOX.mjs";import{v as A}from"./chunk-HGW2U6PD.mjs";var O="__popmelt_code_preview";function C(a,n){let t=new URL(a,n);if(t.origin!==new URL(n).origin||!/^https?:$/.test(t.protocol))throw new Error("Code previews must use the same application origin");return t.hash="",t.searchParams.delete("popmelt"),t.searchParams.set(O,"1"),t.href}function T(a,n){if(!new URL(location.href).searchParams.has(O))return!1;if(parent===window)return!0;window.__POPMELT_CODE_PREVIEW__?.dispose();let t=P,w="",s=!1,u=0,d=new Map,h=()=>{for(let[e,i]of d)i===null?e.removeAttribute("data-pm"):e.setAttribute("data-pm",i);d.clear()},r=new v(n?.get()??[]),m=()=>{for(let e of t.annotations)e.target&&r.resolve(e.target)},_=()=>{R(t.domModifications),$(t.styleModifications),x(t.textModifications),m();for(let e of t.annotations){let i=e.linkedSelector?.match(/^\[data-pm="([^"]+)"\]$/)?.[1];if(!i)continue;let o=A(e.linkedSelector,e.elements?.[0]);o&&(d.has(o)||d.set(o,o.getAttribute("data-pm")),o.setAttribute("data-pm",i))}},c=new MutationObserver(e=>{e.some(i=>i.addedNodes.length)&&(cancelAnimationFrame(u),u=requestAnimationFrame(()=>{c.disconnect(),_(),p()}))}),p=()=>c.observe(document.body,{childList:!0,subtree:!0}),E=()=>{let e=r;e.whenReady().then(()=>{!s&&r===e&&(m(),document.dispatchEvent(new Event("popmelt-subjects-ready")))})},L=n?.subscribe(()=>{r.destroy(),r=new v(n.get()),m(),E()});E();let f={dispose(){s||(s=!0,c.disconnect(),L?.(),r.destroy(),cancelAnimationFrame(u),window.removeEventListener("pagehide",f.dispose),window.__POPMELT_CODE_PREVIEW__===f&&delete window.__POPMELT_CODE_PREVIEW__,g(t.textModifications),b(t.styleModifications,!0),y(t.domModifications),h())},source:a,getSubjects:()=>r,update(e){if(s)throw new Error("Preview runtime closed");if(e.draft.source&&e.draft.source.sourceId!==a.sourceId)throw new Error("This draft belongs to a different source");let i=JSON.stringify([e.planeId,e.draft.revision,e.draft.source?.sourceId,e.draft.source?.revision]);if(w===i)return;let o=structuredClone(e.draft.state??P),l=M=>!M.pathname||M.pathname===location.pathname,I={...o,annotations:o.annotations.filter(l),styleModifications:o.styleModifications.filter(l),textModifications:o.textModifications.filter(l),domModifications:o.domModifications.filter(l)};c.disconnect(),g(t.textModifications),b(t.styleModifications,!0),y(t.domModifications),h(),t=I,_(),p(),w=i}};return window.__POPMELT_CODE_PREVIEW__=f,p(),window.addEventListener("pagehide",f.dispose,{once:!0}),!0}export{C as a,T as b};
@@ -0,0 +1,3 @@
1
+ import{a as q,b as V,c as M,d as N}from"./chunk-QXVMGZFP.mjs";function Ie(o,e){return{storeId:o,explanationId:e}}function lt(o,e){let{fromId:t,toId:r,toStoreId:n,...s}=e;return{...s,from:Ie(o,t),to:Ie(n??o,r)}}var ge={project:0,route:1,component:2,selector:2,file:3},we={intention:0,principle:1,pattern:2};function Je(o,e){let t=ge[o.scope.kind]-ge[e.scope.kind];return t!==0?t:we[o.kind]-we[e.kind]}function ut(o){return o==="expresses"||o==="excepts"}function $e(o,e){if(e.type==="expresses"||e.type==="excepts")return structuredClone(e);if(e.type==="operationalizes")return{...structuredClone(e),type:"expresses"};if(e.type==="instantiates")return{...structuredClone(e),type:"expresses",fromId:e.toId,toId:e.fromId};if(e.type==="refines"){let t=o.explanations.find(s=>s.id===e.fromId),r=o.explanations.find(s=>s.id===e.toId);if(!t||!r)return;let n=Je(t,r);return n===0?void 0:n>0?{...structuredClone(e),type:"expresses"}:{...structuredClone(e),type:"expresses",fromId:e.toId,toId:e.fromId}}}function Q(o){let e=structuredClone(o),t=new Set;return e.relations=o.relations.flatMap(r=>{let n=$e(o,r);if(!n)return[];let s=`${n.type}:${n.fromId}:${n.toStoreId??""}:${n.toId}`;return t.has(s)?[]:(t.add(s),[n])}),e}import{createHash as ze}from"crypto";import{mkdir as ve,open as se,readFile as ae,readdir as qe,rename as Ve,unlink as de}from"fs/promises";import{join as C}from"path";var Ne={records:[],events:[],relationships:[],artifacts:[],tombstones:[],projectionUpdates:[]};function Y(o){return ze("sha256").update(JSON.stringify(o)).digest("hex")}function je(o){return Y(o)}function be(o,e,t){[...e.records,...e.recordReplacements??[]].some(r=>r.recordType==="advisory_explanation")&&!o.manifest.features.includes("advisory_explanations")&&o.manifest.features.push("advisory_explanations");for(let r of e.recordReplacements??[]){if(r.recordType!=="advisory_explanation")throw new Error(`Record replacement is not supported for ${r.recordType}.`);let n=o.records.findIndex(a=>a.recordType===r.recordType&&a.id===r.id);if(n<0)throw new Error(`Record replacement target not found: ${r.recordType} ${r.id}`);let s=o.records[n];if(s.projectId!==r.projectId||s.createdAt!==r.createdAt||s.participantId!==r.participantId)throw new Error(`Record replacement changed immutable identity for ${r.id}.`);o.records[n]=structuredClone(r)}for(let r of e.projectionUpdates){let n=o.records.find(s=>s.recordType===r.entityType&&s.id===r.entityId);if(!n||n.recordType!=="proposal"&&n.recordType!=="decision")throw new Error(`Projection target not found: ${r.entityType} ${r.entityId}`);if(n.state!==r.fromState)throw new Error(`Projection state conflict for ${r.entityType} ${r.entityId}: expected ${r.fromState}, found ${n.state}`);n.state=r.state}return o.records.push(...e.records),o.events.push(...e.events),o.relationships.push(...e.relationships),o.artifacts.push(...e.artifacts),o.tombstones.push(...e.tombstones),o.manifest.updatedAt=t,o}function Le(o,e,t){return be(structuredClone(o),e,t)}async function _(o,e){let t=`${o}.${process.pid}.${Date.now()}.tmp`,r=await se(t,"w");try{await r.writeFile(`${JSON.stringify(e,null,2)}
2
+ `,"utf8"),await r.sync()}finally{await r.close()}try{await Ve(t,o)}catch(n){throw await de(t).catch(()=>{}),n}}async function L(o){return JSON.parse(await ae(o,"utf8"))}var X=class{constructor(e){this.writeChain=Promise.resolve();this.memoryDir=C(e,".popmelt","memory"),this.journalDir=C(this.memoryDir,"journal"),this.manifestPath=C(this.memoryDir,"manifest.json"),this.checkpointPath=C(this.memoryDir,"checkpoint.json"),this.lockPath=C(this.memoryDir,"writer.lock")}async readHead(){let e=await L(this.manifestPath);return{...e.head,checkpointSequence:e.checkpoint.sequence,checkpointHash:e.checkpoint.hash}}async initialize(e){let t=V(e);if(!t.valid)throw new Error(`Cannot initialize invalid memory bundle: ${JSON.stringify(t.issues)}`);await ve(this.journalDir,{recursive:!0});try{throw await ae(this.manifestPath,"utf8"),new Error("Memory journal is already initialized.")}catch(r){if(r instanceof Error&&r.message==="Memory journal is already initialized."||r.code!=="ENOENT")throw r}await this.withWriterLock(async()=>{try{throw await ae(this.manifestPath,"utf8"),new Error("Memory journal is already initialized.")}catch(a){if(a instanceof Error&&a.message==="Memory journal is already initialized."||a.code!=="ENOENT")throw a}let r=Y(e),n={storageVersion:1,sequence:0,hash:r,journalHash:null,bundle:e},s={storageVersion:1,projectId:e.manifest.projectId,checkpoint:{file:"checkpoint.json",sequence:0,hash:r},head:{sequence:0,hash:null},updatedAt:e.manifest.updatedAt};await _(this.checkpointPath,n),await _(this.manifestPath,s)})}async load(){let e=await this.loadInternal();return{bundle:e.bundle,report:e.report}}async recover(){return this.enqueueWrite(async()=>this.withWriterLock(async()=>{let e=await this.loadInternal();return e.report.recoveredTransactions>0&&(e.manifest.head={sequence:e.report.headSequence,hash:e.report.headHash},e.manifest.updatedAt=e.bundle.manifest.updatedAt,await _(this.manifestPath,e.manifest)),{bundle:e.bundle,report:e.report}}))}async rotateCheckpoint(){return this.enqueueWrite(async()=>this.withWriterLock(async()=>{let e=await this.loadInternal();if(e.report.headSequence===e.report.checkpointSequence)return{bundle:e.bundle,report:e.report};let t=Y(e.bundle),r=`checkpoint-${String(e.report.headSequence).padStart(12,"0")}.json`,n={storageVersion:1,sequence:e.report.headSequence,hash:t,journalHash:e.report.headHash,bundle:e.bundle};return await _(C(this.memoryDir,r),n),e.manifest.checkpoint={file:r,sequence:n.sequence,hash:t},await _(this.manifestPath,e.manifest),{bundle:e.bundle,report:{...e.report,checkpointSequence:n.sequence,appliedTransactions:0}}}))}async maintain(e=250){let t=await this.load();return t.report.headSequence-t.report.checkpointSequence>=e?this.rotateCheckpoint():t}async commit(e,t){return this.enqueueWrite(async()=>this.withWriterLock(async()=>{if(!q(t.transactionId))throw new Error("Transaction ID must be UUIDv7.");if(Number.isNaN(Date.parse(t.committedAt)))throw new Error("committedAt must be ISO-8601.");let r=await this.loadInternal();if(r.transactionIds.has(t.transactionId))throw new Error(`Transaction already exists: ${t.transactionId}`);let n=r.report.headSequence+1,s={storageVersion:1,sequence:n,transactionId:t.transactionId,projectId:r.bundle.manifest.projectId,committedAt:t.committedAt,previousHash:r.report.headHash,mutation:e},a={...s,hash:je(s)},c=Le(r.bundle,e,t.committedAt),y=V(c);if(!y.valid)throw new Error(`Journal mutation produces invalid memory: ${JSON.stringify(y.issues)}`);let l=`${String(n).padStart(12,"0")}-${t.transactionId}.json`;return await _(C(this.journalDir,l),a),r.manifest.head={sequence:n,hash:a.hash},r.manifest.updatedAt=t.committedAt,await _(this.manifestPath,r.manifest),{bundle:c,report:{checkpointSequence:r.report.checkpointSequence,appliedTransactions:r.report.appliedTransactions+1,recoveredTransactions:0,ignoredTemporaryFiles:r.report.ignoredTemporaryFiles,headSequence:n,headHash:a.hash}}}))}async commitReviewPlan(e,t){return this.commit({...Ne,records:e.append.records,events:e.append.events,relationships:e.append.relationships,projectionUpdates:e.projectionUpdates},t)}async loadInternal(){let e=await L(this.manifestPath),t=await L(C(this.memoryDir,e.checkpoint.file));if(e.storageVersion!==1||t.storageVersion!==1)throw new Error("Unsupported memory journal storage version.");if(e.projectId!==t.bundle.manifest.projectId)throw new Error("Checkpoint project does not match journal manifest.");if(t.hash!==Y(t.bundle)||t.hash!==e.checkpoint.hash)throw new Error("Memory checkpoint hash mismatch.");let r=await qe(this.journalDir),n=r.filter(h=>h.endsWith(".tmp")),a=r.filter(h=>/^\d{12}-[0-9a-f-]+\.json$/i.test(h)).sort().filter(h=>Number(h.slice(0,12))>t.sequence),c=structuredClone(t.bundle),y=t.sequence,l=t.journalHash??null,v=new Set;for(let h of a){let b=await L(C(this.journalDir,h)),{hash:f,...T}=b;if(f!==je(T))throw new Error(`Journal hash mismatch: ${h}`);if(b.sequence!==y+1)throw new Error(`Journal sequence gap at ${h}`);if(b.previousHash!==l)throw new Error(`Journal chain mismatch at ${h}`);if(b.projectId!==e.projectId)throw new Error(`Journal project mismatch at ${h}`);if(v.has(b.transactionId))throw new Error(`Duplicate transaction ID: ${b.transactionId}`);be(c,b.mutation,b.committedAt),y=b.sequence,l=b.hash,v.add(b.transactionId)}if(e.head.sequence>y)throw new Error("Journal manifest points beyond available transactions.");if(e.head.sequence===y&&e.head.hash!==l)throw new Error("Journal manifest head hash mismatch.");let S=V(c);if(!S.valid)throw new Error(`Loaded journal is invalid: ${JSON.stringify(S.issues)}`);return{bundle:c,manifest:e,transactionIds:v,report:{checkpointSequence:t.sequence,appliedTransactions:a.length,recoveredTransactions:Math.max(0,y-e.head.sequence),ignoredTemporaryFiles:n.length,headSequence:y,headHash:l}}}enqueueWrite(e){let t=this.writeChain.then(e,e);return this.writeChain=t.then(()=>{},()=>{}),t}async withWriterLock(e){await ve(this.memoryDir,{recursive:!0});let t;try{t=await se(this.lockPath,"wx")}catch(r){if(r.code!=="EEXIST")throw r;let n=await L(this.lockPath).catch(()=>({})),s=!0;if(typeof n.pid=="number")try{process.kill(n.pid,0)}catch(a){s=a.code!=="ESRCH"}if(s)throw new Error("Memory journal is locked by another writer.");await de(this.lockPath),t=await se(this.lockPath,"wx")}try{return await t.writeFile(JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()})),await e()}finally{await t.close(),await de(this.lockPath).catch(()=>{})}}};import{mkdir as Ce,readFile as U,writeFile as _e}from"fs/promises";import{join as O}from"path";var He=new Set(["about","after","again","before","being","change","from","have","into","make","should","that","the","their","this","with","would","here","only"]);function ce(o){return o.toLowerCase().replace(/[^a-z0-9]+/g," ").trim().replace(/\s+/g," ")}function Z(o){return new Set(ce(o).split(" ").filter(e=>e.length>2&&!He.has(e)))}function Re(o,e){if(!o.size||!e.size)return 0;let t=0;for(let r of o)e.has(r)&&(t+=1);return t/Math.min(o.size,e.size)}function Ue(o,e){let t=new Set(e.subjectIds??[]),r=(e.subjectHints??[]).map(ce).filter(Boolean),n=Z([e.action,e.text].filter(Boolean).join(" ")),s=[];for(let a of o){if(t.has(a.id)){s.push({subjectId:a.id,subjectType:a.subjectType,label:a.label,confidence:"exact",matchedBy:"id",score:100});continue}let c,y=[{value:a.label,by:"semantic"},...a.aliases.map(l=>({value:l,by:"alias"})),...a.locators.map(l=>({value:l.value,by:"locator"}))];for(let l of y){let v=ce(l.value);for(let b of r){let f=v===b?95:v.includes(b)||b.includes(v)?75:0;f>(c?.score??0)&&(c={subjectId:a.id,subjectType:a.subjectType,label:a.label,confidence:f>=90?"exact":"strong",matchedBy:l.by,score:f})}let h=["/","#","[","]","="].some(b=>l.value.includes(b))?0:Math.round(Re(Z(v),n)*55);h>=30&&h>(c?.score??0)&&(c={subjectId:a.id,subjectType:a.subjectType,label:a.label,confidence:h>=45?"strong":"weak",matchedBy:"semantic",score:h})}c&&s.push(c)}return s.sort((a,c)=>c.score-a.score||a.subjectId.localeCompare(c.subjectId))}function Ke(o){return Math.ceil(JSON.stringify(o).length/4)}function B(o,e){return o.relationshipType===e&&o.from.entityType==="decision"&&o.to.entityType==="decision"}function Fe(o,e){let t=e.filter(s=>s.coverageClaims.some(a=>a.decisionId===o));if(!t.length)return{decisionId:o,state:"unimplemented",attemptIds:[]};let r=t.filter(s=>s.state==="completed"),n=r.some(s=>s.coverageClaims.some(a=>a.decisionId===o&&a.coverage==="full"));return{decisionId:o,state:n?"implemented":r.length?"partial":"unknown",attemptIds:t.map(s=>s.id)}}function We(o,e,t){let r=e.filter(c=>c.targets.some(y=>y.entityType==="decision"&&y.entityId===o)).sort((c,y)=>y.createdAt.localeCompare(c.createdAt)),n=t.some(c=>c.signalType==="verification_expired"&&c.target.entityType==="decision"&&c.target.entityId===o),s=r[0],a=n?"stale":s?s.state==="passed"?"passing":s.state==="failed"?"failing":["inconclusive","error","cancelled"].includes(s.state)?"blocked":"unverified":"unverified";return{target:{entityType:"decision",entityId:o},state:a,attemptIds:r.map(c=>c.id)}}function xe(o,e){let t=Math.max(300,e.maxEstimatedTokens??1200),r=Math.max(1,e.maxDecisions??6),n=o.records.filter(i=>i.recordType==="subject"),s=e.candidateDecisionIds?new Set(e.candidateDecisionIds):void 0,a=o.records.filter(i=>i.recordType==="decision"&&i.state==="active"),c=s?a.filter(i=>s.has(i.id)):a,y=o.records.filter(i=>i.recordType==="implementation_attempt"),l=o.records.filter(i=>i.recordType==="verification_attempt"),v=o.records.filter(i=>i.recordType==="freshness_signal"&&i.state==="open"),S=o.records.filter(i=>i.recordType==="evidence"),h=o.records.filter(i=>i.recordType==="model_entry"),b=Ue(n,e),f=new Map(b.map(i=>[i.subjectId,i.score])),T=Z([e.action,e.text].filter(Boolean).join(" ")),p=c.flatMap(i=>{let x=Math.max(0,...i.subjects.map(k=>f.get(k.subjectId)??0)),R=Math.round(Re(Z(i.claim),T)*35),g=x+R;return g>=50?[{decision:i,score:g}]:[]}).sort((i,x)=>x.score-i.score||i.decision.id.localeCompare(x.decision.id)),j=new Map;for(let i of p.slice(0,r))j.set(i.decision.id,i.decision);for(let i of o.relationships){if(!B(i,"excepts")&&!B(i,"contradicts"))continue;let x=a.find(g=>g.id===i.from.entityId),R=a.find(g=>g.id===i.to.entityId);!x||!R||!j.has(x.id)&&!j.has(R.id)||(j.size<r&&j.set(x.id,x),j.size<r&&j.set(R.id,R))}let u=[...j.values()],d=i=>i.from.entityType==="decision"&&i.to.entityType==="decision"&&j.has(i.from.entityId)&&j.has(i.to.entityId),w=(i,x=!1)=>{let R=new Set(i.map(I=>I.id)),g=v.filter(I=>I.target.entityType==="decision"&&R.has(I.target.entityId)),k=new Set(o.relationships.filter(I=>B(I,"excepts")&&R.has(I.from.entityId)&&R.has(I.to.entityId)).flatMap(I=>[I.from.entityId,I.to.entityId])),G=o.relationships.filter(I=>B(I,"contradicts")&&R.has(I.from.entityId)&&R.has(I.to.entityId)).map(I=>({id:I.id,decisionIds:[I.from.entityId,I.to.entityId],unresolvedQuestion:I.reason,expansionRefs:[{kind:"record",id:I.id}]})),Oe=new Set(G.flatMap(I=>I.decisionIds)),ie=S.filter(I=>I.sourceRefs.some(E=>E.kind==="record"&&R.has(E.id))||o.relationships.some(E=>E.relationshipType==="supports"&&E.from.entityType==="evidence"&&E.from.entityId===I.id&&E.to.entityType==="decision"&&R.has(E.to.entityId))),ye=Math.max(0,p.length-i.length),fe=o.relationships.some(I=>B(I,"contradicts")&&d(I)&&(!R.has(I.from.entityId)||!R.has(I.to.entityId))),he=x||ye>0||fe,D=[];b.length===0&&(e.subjectHints?.length??0)>0?D.push({code:"subject_unresolved",message:"No canonical subject matched the supplied task hints.",expansionRefs:[]}):i.length===0&&D.push({code:"no_applicable_decision",message:"No accepted decision applies to the resolved task subjects.",expansionRefs:[]}),G.length&&D.push({code:"known_conflict",message:"Applicable accepted decisions contain an unresolved contradiction.",expansionRefs:G.flatMap(I=>I.expansionRefs)}),ie.some(I=>I.availability!=="available")&&D.push({code:"evidence_unavailable",message:"Some supporting evidence is unavailable.",expansionRefs:ie.map(I=>({kind:"record",id:I.id}))}),he&&D.push({code:"retrieval_truncated",message:"Additional applicable memory exists outside this packet.",expansionRefs:[{kind:"record",id:o.manifest.projectId}]});let oe={contractVersion:1,projectId:o.manifest.projectId,retrievedAt:e.retrievedAt??new Date().toISOString(),query:{text:e.text,action:e.action,subjectHints:e.subjectHints??[]},budget:{maxEstimatedTokens:t,estimatedTokens:0},subjectMatches:b.map(({score:I,...E})=>E),modelEntries:h.filter(I=>I.decisionIds.some(E=>R.has(E))).map(I=>({id:I.id,key:I.key,value:I.value,decisionIds:I.decisionIds})),decisions:i.map(I=>({id:I.id,kind:I.kind,claim:I.claim,subjectIds:I.subjects.map(E=>E.subjectId),authority:I.authority,effectiveState:Oe.has(I.id)?"conflicted":k.has(I.id)?"excepted":"active",freshness:g.filter(E=>E.target.entityId===I.id).map(E=>E.signalType),expansionRef:{kind:"record",id:I.id}})),conflicts:G,uncertainties:D,implementation:i.map(I=>Fe(I.id,y)),verification:i.map(I=>We(I.id,l,g)),evidence:ie.map(I=>({evidenceId:I.id,summary:I.summary,availability:I.availability,sourceRefs:I.sourceRefs})),completeness:{status:he?"truncated":"complete",omittedDecisionCount:ye,omittedEvidenceCount:0,conflictsComplete:!fe}};return oe.budget.estimatedTokens=Ke(oe),oe},m=w(u);for(;m.budget.estimatedTokens>t&&u.length>0;){let i=u.pop(),x=o.relationships.filter(R=>B(R,"contradicts")&&(R.from.entityId===i.id||R.to.entityId===i.id)).flatMap(R=>[R.from.entityId,R.to.entityId]);u=u.filter(R=>!x.includes(R.id)),m=w(u,!0)}return m}var Ge=new Set(["about","after","again","before","being","change","from","have","into","make","should","that","the","their","this","with","would","here","only"]);function pe(o){return o.toLowerCase().replace(/[^a-z0-9]+/g," ").trim().replace(/\s+/g," ")}function ee(o){return new Set(pe(o).split(" ").filter(e=>e.length>2&&!Ge.has(e)))}function Se(o,e){if(!o.size||!e.size)return 0;let t=0;for(let r of o)e.has(r)&&(t+=1);return t/Math.min(o.size,e.size)}function Qe(o){return[{value:o.label,by:"label"},...o.aliases.map(e=>({value:e,by:"alias"})),...o.locators.map(e=>({value:e.value,by:"locator"}))]}function Ye(o,e){let t=new Map,r=new Set(e.subjectIds??[]),n=(e.subjectHints??[]).map(pe).filter(Boolean),s=ee([e.action,e.text].filter(Boolean).join(" "));for(let a of o){if(r.has(a.id)){t.set(a.id,{subjectId:a.id,label:a.label,confidence:"exact",matchedBy:"id",score:100});continue}let c;for(let y of Qe(a)){let l=pe(y.value);for(let h of n){let b=l===h?95:l.includes(h)||h.includes(l)?75:0;b>(c?.score??0)&&(c={subjectId:a.id,label:a.label,confidence:b>=90?"exact":"strong",matchedBy:y.by,score:b})}let S=["/","#","[","]","="].some(h=>y.value.includes(h))?0:Math.round(Se(ee(l),s)*55);S>=30&&S>(c?.score??0)&&(c={subjectId:a.id,label:a.label,confidence:S>=45?"strong":"weak",matchedBy:"query_text",score:S})}c&&t.set(a.id,c)}return t}function Xe(o,e){let t=new Set(o.sourceRefs.filter(a=>a.kind==="iteration").map(a=>a.id)),r=new Set(o.sourceRefs.filter(a=>a.kind==="thread").map(a=>a.id)),n=e.filter(a=>a.iterationIds.some(c=>t.has(c))||a.sourceRefs.some(c=>c.kind==="thread"&&r.has(c.id)));if(!n.length)return{state:"none_found",attemptIds:[]};let s=new Set(n.map(a=>a.state));return{state:s.size>1?"mixed":s.has("completed")?"completed":"attempted",attemptIds:n.map(a=>a.id)}}function Ze(o){return Math.ceil(JSON.stringify(o).length/4)}function le(o,e){let t=o.records.filter(p=>p.recordType==="subject"),r=e.generatedAt??new Date().toISOString(),n=e.candidateProposalIds?new Set(e.candidateProposalIds):void 0,s=o.records.filter(p=>{if(p.recordType!=="proposal"||n&&!n.has(p.id))return!1;if(p.state==="pending")return!0;if(p.state!=="deferred")return!1;let j=[...o.events].reverse().find(u=>u.entity.entityType==="proposal"&&u.entity.entityId===p.id&&u.toState==="deferred"&&u.transitionContext?.kind==="proposal_deferral")?.transitionContext;return j?j.resurfaceWhen.includes("different_action")&&e.resurface?.differentAction||j.resurfaceWhen.includes("new_evidence")&&e.resurface?.newEvidence||j.resurfaceWhen.includes("new_conflict")&&e.resurface?.newConflict||j.resurfaceWhen.includes("owner_request")&&e.resurface?.ownerRequested||j.resurfaceWhen.includes("after_date")&&!!(j.revisitAfter&&Date.parse(r)>=Date.parse(j.revisitAfter)):!1}),a=o.records.filter(p=>p.recordType==="implementation_attempt"),c=Ye(t,e),y=[...c.values()].sort((p,j)=>j.score-p.score),l=ee([e.action,e.text].filter(Boolean).join(" ")),v=s.flatMap(p=>{let j=p.subjects.map(m=>c.get(m.subjectId)).filter(m=>!!m),u=Math.max(0,...j.map(m=>m.score)),d=Math.round(Se(ee(p.claim),l)*35),w=u+d;return w>=50?[{proposal:p,proposalMatches:j,score:w}]:[]}).sort((p,j)=>j.score-p.score||p.proposal.id.localeCompare(j.proposal.id)),S=Math.max(1,e.maxPackets??3),h=Math.max(200,e.maxEstimatedTokens??1200),b=[],f=0;for(let p of v){if(b.length>=S)break;let j=p.proposal.sourceRefs.slice(0,4),u={contractVersion:1,packetId:`review:${p.proposal.id}`,projectId:o.manifest.projectId,generatedAt:r,trigger:{action:e.action,reason:p.proposalMatches.length?`Historical proposal intersects ${p.proposalMatches.map(w=>w.label).join(", ")}.`:"Historical proposal materially overlaps the current task.",subjectMatches:p.proposalMatches.map(({score:w,...m})=>m)},proposal:{id:p.proposal.id,claim:p.proposal.claim,state:p.proposal.state,proposedKind:p.proposal.proposedKind,subjectIds:p.proposal.subjects.map(w=>w.subjectId),origin:p.proposal.origin.mode},authority:"unaccepted",presentation:p.score>=100&&["constraint","rule"].includes(p.proposal.proposedKind??"")?"surface_before_action":"advisory",implementation:Xe(p.proposal,a),evidence:{sourceCount:p.proposal.sourceRefs.length,sourceRefs:j},actions:["accept","edit_and_accept","split","bundle","reject","defer","request_evidence"],expansionRefs:[{kind:"record",id:p.proposal.id},...j]},d={...u,estimatedTokens:Ze(u)};if(f+d.estimatedTokens>h)break;b.push(d),f+=d.estimatedTokens}let T=Math.max(0,v.length-b.length);return{packets:b,subjectMatches:y.map(({score:p,...j})=>j),completeness:{status:T>0?"truncated":"complete",consideredProposalCount:v.length,omittedPacketCount:T,maxEstimatedTokens:h,estimatedTokens:f},uncertainty:c.size===0?"subject_unresolved":v.length===0?"no_relevant_pending_proposal":void 0}}function H(o,e,t,r){return{id:r,schemaVersion:1,projectId:o.manifest.projectId,createdAt:t.occurredAt,participantId:t.participantId,sourceRefs:[{kind:"record",id:e.id},...t.sourceRefs??[]],recordType:"lifecycle_event",authority:t.authority}}function Te(o,e,t,r,n){return{id:n,schemaVersion:1,projectId:o.manifest.projectId,createdAt:t.occurredAt,participantId:t.participantId,sourceRefs:[{kind:"record",id:e.id},...t.sourceRefs??[]],recordType:"decision",proposalId:e.id,acceptanceEventId:r,acceptedById:t.participantId,authority:t.authority,state:"active",kind:t.kind,claim:e.claim,rationale:t.rationale??e.rationale,subjects:e.subjects,subjectSemantics:e.subjectSemantics,noChange:!1}}function et(o){switch(o.action){case"accept":return[o.eventId,o.decisionId];case"edit_and_accept":return[o.withdrawalEventId,o.replacementProposalId,o.acceptanceEventId,o.decisionId,o.relationshipId];case"reject":case"defer":return[o.eventId]}}function te(o,e){let t=[],r=o.records.find(s=>s.recordType==="proposal"&&s.id===e.proposalId);r?r.state!=="pending"&&t.push({code:"proposal_not_pending",message:`Proposal is ${r.state}, not pending.`}):t.push({code:"proposal_not_found",message:"Proposal does not exist."}),e.authority.level==="contributor"&&t.push({code:"insufficient_authority",message:"Contributors cannot resolve owner review."}),e.authority.level==="delegate"&&!e.authority.grantId&&t.push({code:"missing_authority_grant",message:"Delegate review requires a grant ID."}),q(e.participantId)||t.push({code:"invalid_participant_id",message:"Participant ID must be UUIDv7."});for(let s of et(e))q(s)||t.push({code:"invalid_generated_id",message:`${s} is not UUIDv7.`});if(Number.isNaN(Date.parse(e.occurredAt))&&t.push({code:"invalid_timestamp",message:"occurredAt must be ISO-8601."}),t.length||!r)return{ok:!1,errors:t};if(e.action==="accept"){if(!e.reason.trim())return{ok:!1,errors:[{code:"reason_required",message:"Acceptance requires a reason."}]};let s={...H(o,r,e,e.eventId),entity:{entityType:"proposal",entityId:r.id},eventType:"proposal.accepted",fromState:"pending",toState:"accepted",reason:e.reason},a=Te(o,r,e,s.id,e.decisionId);return{ok:!0,plan:{action:e.action,proposalId:r.id,append:{records:[a],events:[s],relationships:[]},projectionUpdates:[{entityType:"proposal",entityId:r.id,fromState:"pending",state:"accepted"}],resultRefs:[{entityType:"decision",entityId:a.id}]}}}if(e.action==="edit_and_accept"){if(!e.claim.trim()||!e.reason.trim())return{ok:!1,errors:[{code:"claim_and_reason_required",message:"Edited acceptance requires claim and reason."}]};if(e.subjects.length>1&&!e.subjectSemantics?.trim())return{ok:!1,errors:[{code:"subject_semantics_required",message:"Multi-subject edits require semantics."}]};let s={id:e.replacementProposalId,schemaVersion:1,projectId:o.manifest.projectId,createdAt:e.occurredAt,participantId:e.participantId,sourceRefs:[{kind:"record",id:r.id},...e.sourceRefs??[]],recordType:"proposal",state:"accepted",claim:e.claim,rationale:e.rationale,proposedKind:e.kind,subjects:e.subjects,subjectSemantics:e.subjectSemantics,origin:{mode:"declared"}},a={...H(o,r,e,e.withdrawalEventId),entity:{entityType:"proposal",entityId:r.id},eventType:"proposal.withdrawn",fromState:"pending",toState:"withdrawn",reason:"Owner replaced the inferred proposal with edited wording during review."},c={...H(o,s,e,e.acceptanceEventId),entity:{entityType:"proposal",entityId:s.id},eventType:"proposal.accepted",fromState:"pending",toState:"accepted",reason:e.reason},y=Te(o,s,e,c.id,e.decisionId),l={id:e.relationshipId,schemaVersion:1,projectId:o.manifest.projectId,createdAt:e.occurredAt,participantId:e.participantId,sourceRefs:[{kind:"record",id:r.id}],recordType:"relationship",relationshipType:"derived_from",from:{entityType:"proposal",entityId:s.id},to:{entityType:"proposal",entityId:r.id},reason:"Owner-edited proposal derives from the historical review candidate."};return{ok:!0,plan:{action:e.action,proposalId:r.id,append:{records:[s,y],events:[a,c],relationships:[l]},projectionUpdates:[{entityType:"proposal",entityId:r.id,fromState:"pending",state:"withdrawn"}],resultRefs:[{entityType:"proposal",entityId:s.id},{entityType:"decision",entityId:y.id}]}}}if(e.action==="reject"){if(!e.reason.trim())return{ok:!1,errors:[{code:"reason_required",message:"Rejection requires a reason."}]};let s={...H(o,r,e,e.eventId),entity:{entityType:"proposal",entityId:r.id},eventType:"proposal.rejected",fromState:"pending",toState:"rejected",reason:e.reason};return{ok:!0,plan:{action:e.action,proposalId:r.id,append:{records:[],events:[s],relationships:[]},projectionUpdates:[{entityType:"proposal",entityId:r.id,fromState:"pending",state:"rejected"}],resultRefs:[{entityType:"proposal",entityId:r.id}]}}}let n={...H(o,r,e,e.eventId),entity:{entityType:"proposal",entityId:r.id},eventType:"proposal.deferred",fromState:"pending",toState:"deferred",reason:e.reason,transitionContext:{kind:"proposal_deferral",...e.context}};return{ok:!0,plan:{action:e.action,proposalId:r.id,append:{records:[],events:[n],relationships:[]},projectionUpdates:[{entityType:"proposal",entityId:r.id,fromState:"pending",state:"deferred"}],resultRefs:[{entityType:"proposal",entityId:r.id}]}}}var tt=()=>({records:[],events:[],relationships:[],artifacts:[],tombstones:[],projectionUpdates:[]});function ke(o,e){let t=o.records.find(d=>d.recordType==="participant"&&d.kind==="human"&&d.status==="active"),r=o.records.find(d=>d.recordType==="participant"&&d.kind==="ai"&&d.status==="active");if(!t||!r)throw new Error("Canonical memory requires active human and AI participants before job capture.");let n=o.manifest.projectId,s=`${e.threadId}:${e.jobId}`,a=new Date(e.createdAt).toISOString(),c=new Date(e.completedAt).toISOString(),y=tt(),l=y.records,v=o.records.find(d=>d.recordType==="thread"&&d.sourceRefs.some(w=>w.kind==="thread"&&w.id===e.threadId));v||(v={id:M(n,"live-thread",e.threadId,e.createdAt),schemaVersion:1,projectId:o.manifest.projectId,createdAt:a,participantId:t.id,sourceRefs:[{kind:"thread",id:e.threadId}],recordType:"thread",state:e.outcome==="question_asked"?"open":"resolved",messageArtifactIds:[],outcome:e.outcome==="question_asked"?"question_unresolved":e.resolutions.some(d=>d.status==="resolved")?"implementation_only":"no_outcome",resultRefs:[]},l.push(v));let S=[];for(let d of[...new Set(e.subjectHints.filter(Boolean))]){let w=o.records.find(m=>m.recordType==="subject"&&m.locators.some(i=>i.value===d&&i.status==="current"));w||(w={id:M(n,"live-subject",d,e.createdAt),schemaVersion:1,projectId:o.manifest.projectId,createdAt:a,participantId:t.id,sourceRefs:[{kind:"external",id:d}],recordType:"subject",subjectType:"element",label:d,aliases:[],locators:[{id:M(n,"live-locator",d,e.createdAt),kind:"dom_selector",value:d,status:"current",validFrom:a,sourceRefs:[{kind:"external",id:d}]}]},l.push(w)),S.push(w)}for(let d of[...new Set((e.filePaths??[]).filter(Boolean))]){let w=o.records.find(m=>m.recordType==="subject"&&m.locators.some(i=>i.kind==="source_file"&&i.value===d&&i.status==="current"));w||(w={id:M(n,"live-file-subject",d,e.createdAt),schemaVersion:1,projectId:o.manifest.projectId,createdAt:a,participantId:t.id,sourceRefs:[{kind:"external",id:d}],recordType:"subject",subjectType:"file",label:d,aliases:[],locators:[{id:M(n,"live-file-locator",d,e.createdAt),kind:"source_file",value:d,status:"current",validFrom:a,sourceRefs:[{kind:"external",id:d}]}]},l.push(w)),S.push(w)}let h=(e.semanticCandidates??[]).filter(d=>d.claim.trim()),b;if(h.length>0){b=M(n,"live-observation",s,e.createdAt);let d={id:b,schemaVersion:1,projectId:o.manifest.projectId,createdAt:a,participantId:t.id,sourceRefs:[{kind:"thread",id:e.threadId}],recordType:"observation",state:"open",statement:h.map(w=>w.claim.trim()).join(" "),captureContext:{subjectIds:S.map(w=>w.id),artifactIds:[]},resolvedByIds:[]};l.push(d)}let f=M(n,"live-iteration",s,e.completedAt),T={id:f,schemaVersion:1,projectId:o.manifest.projectId,createdAt:a,participantId:r.id,sourceRefs:[{kind:"thread",id:e.threadId},{kind:"external",id:e.jobId,uri:"popmelt:job"},...(e.submissionIds??[]).map(d=>({kind:"external",id:d,uri:"popmelt:submission"})),...e.outcomeId?[{kind:"external",id:e.outcomeId,uri:"popmelt:outcome"}]:[],...(e.imprintEvidenceIds??[]).map(d=>({kind:"external",id:d,uri:"popmelt:imprint-evidence"})),...b?[{kind:"record",id:b}]:[]],recordType:"iteration",threadIds:[v.id],startedAt:a,completedAt:c,requestSummary:e.requestSummary||"[request unavailable]",responseSummary:e.responseSummary?.slice(0,2e3),outcome:e.outcome,execution:e.execution,artifactIds:[],...e.imprintAssessment?{imprintAssessment:e.imprintAssessment}:{}};l.push(T);let p=[],j=e.resolutions.filter(d=>d.status==="resolved"&&d.summary.trim()),u=S.length>0?S:o.records.filter(d=>d.recordType==="subject"&&d.subjectType==="project").slice(0,1);if(h.length>0&&u.length===0)throw new Error("Canonical memory has no project subject for an unscoped proposal.");for(let[d,w]of h.entries()){let m=M(n,"live-proposal",`${s}:${d}`,e.completedAt),i=u.map(R=>({subjectId:R.id,role:"governed"})),x={id:m,schemaVersion:1,projectId:o.manifest.projectId,createdAt:c,participantId:r.id,sourceRefs:[{kind:"iteration",id:f},{kind:"thread",id:e.threadId}],recordType:"proposal",state:"pending",claim:w.claim.trim(),rationale:w.rationale?.trim()||void 0,proposedKind:w.proposedKind,subjects:i,subjectSemantics:i.length>1?"The task selected these subjects together; independent authority remains unresolved.":void 0,origin:{mode:"inferred",sourceText:w.sourceText?.trim()||e.requestSummary,iterationId:f,inferredById:r.id}};l.push(x),p.push(m)}if(j.length>0){let d=new Set(e.governingDecisionIds??[]),w=o.records.filter(i=>i.recordType==="decision"&&i.state==="active"&&d.has(i.id)),m={id:M(n,"live-implementation",s,e.completedAt),schemaVersion:1,projectId:o.manifest.projectId,createdAt:c,participantId:r.id,sourceRefs:[{kind:"iteration",id:f}],recordType:"implementation_attempt",state:"completed",iterationIds:[f],coverageClaims:w.map(i=>({decisionId:i.id,coverage:"partial",claim:`This iteration applied the decision while completing: ${j.map(x=>x.summary).join(" ")}`,sourceRefs:[{kind:"iteration",id:f}]})),summary:j.map(i=>i.summary).join(" "),artifactIds:[]};l.push(m)}return{mutation:y,iterationId:f,proposalIds:p,observationId:b}}import{createHash as rt}from"crypto";import{mkdir as nt,open as it,readFile as ot,rename as st,unlink as at}from"fs/promises";import{join as Me}from"path";function Ae(o){return o.toLowerCase().replace(/[^a-z0-9]+/g," ").trim().replace(/\s+/g," ")}function Pe(o){return rt("sha256").update(JSON.stringify(o)).digest("hex")}async function dt(o,e){let t=`${o}.${process.pid}.${Date.now()}.tmp`,r=await it(t,"w");try{await r.writeFile(`${JSON.stringify(e,null,2)}
3
+ `,"utf8"),await r.sync()}finally{await r.close()}try{await st(t,o)}catch(n){throw await at(t).catch(()=>{}),n}}function ct(o,e,t=new Date().toISOString()){let r={},n={},s={},a=(y,l,v)=>{let S=y[l]??=[];S.includes(v)||S.push(v)};for(let y of o.records)if(y.recordType==="subject"){let l=y;for(let v of[l.label,...l.aliases,...l.locators.filter(S=>S.status==="current").map(S=>S.value)]){let S=Ae(v);S&&a(r,S,l.id)}}else if(y.recordType==="decision"&&y.state==="active")for(let l of y.subjects)a(n,l.subjectId,y.id);else if(y.recordType==="proposal"&&["pending","deferred"].includes(y.state))for(let l of y.subjects)a(s,l.subjectId,y.id);let c={version:1,projectId:o.manifest.projectId,journalHead:e,generatedAt:t,subjectIdsByValue:r,decisionIdsBySubject:n,proposalIdsBySubject:s};return{...c,checksum:Pe(c)}}function Ee(o,e){let t=[...new Set(e.flatMap(r=>o.subjectIdsByValue[Ae(r)]??[]))];if(t.length)return{subjectIds:t,decisionIds:[...new Set(t.flatMap(r=>o.decisionIdsBySubject[r]??[]))],proposalIds:[...new Set(t.flatMap(r=>o.proposalIdsBySubject[r]??[]))]}}var re=class{constructor(e){this.indexDir=Me(e,".popmelt","memory","indexes"),this.indexPath=Me(this.indexDir,"retrieval-v1.json")}async ensure(e,t){try{let n=JSON.parse(await ot(this.indexPath,"utf8")),{checksum:s,...a}=n;if(n.version===1&&n.projectId===e.manifest.projectId&&n.journalHead.sequence===t.sequence&&n.journalHead.hash===t.hash&&s===Pe(a))return n}catch(n){if(n.code!=="ENOENT"&&!(n instanceof SyntaxError))throw n}let r=ct(e,t);return await nt(this.indexDir,{recursive:!0}),await dt(this.indexPath,r),r}};import{randomBytes as pt}from"crypto";function A(o=Date.now()){let t=Math.max(0,Math.min(Math.floor(o),0xffffffffffff)).toString(16).padStart(12,"0"),r=pt(10).toString("hex"),n=(Number.parseInt(r[3],16)&3|8).toString(16);return`${t.slice(0,8)}-${t.slice(8)}-7${r.slice(0,3)}-${n}${r.slice(4,7)}-${r.slice(7,19)}`}var F="popmelt:imprint",De="popmelt:imprint-evidence",J="popmelt:imprint-relation";function K(o){return o.sourceRefs.find(e=>e.kind==="external"&&e.uri===F)?.id}function ue(o){let e=new Set;return o.filter(t=>{let r=`${t.kind}:${t.id}:${t.uri??""}`;return e.has(r)?!1:(e.add(r),!0)})}function ne(o,e){if(!o)return[];let t=new Set(o.relations.flatMap(r=>r.type==="expresses"&&!r.toStoreId&&r.toId===e?[r.fromId]:[]));return o.concrete.filter(r=>t.has(r.id)).map(r=>({id:r.id,modelPath:r.modelPath,value:structuredClone(r.value),createdAt:r.createdAt,updatedAt:r.updatedAt}))}function me(o){if(o==="expresses")return"expresses";if(o==="excepts")return"excepts"}var Be=class{constructor(e){this.projectRoot=e;this.store=new X(e),this.indexStore=new re(e),this.manifestPath=O(e,".popmelt","memory","manifest.json")}async status(){try{let e=JSON.parse(await U(this.manifestPath,"utf8"));return{initialized:!0,state:"ready",projectId:e.projectId,headSequence:e.head.sequence,updatedAt:e.updatedAt}}catch(e){if(e.code==="ENOENT")return{initialized:!1,state:this.runtimeState?.state??"absent",phase:this.runtimeState?.phase,error:this.runtimeState?.error};throw e}}beginAutomaticInitialization(e={}){return this.initializationPromise?this.initializationPromise:(this.initializationPromise=(async()=>{this.runtimeState={state:"initializing",phase:"analyzing_legacy"};try{if((await this.status()).initialized){let n=await this.store.load();return n.report.recoveredTransactions>0&&(n=await this.store.recover()),await this.refreshIndex(n),await this.status()}let r=await N({...e,projectRoot:this.projectRoot});if(r.report.schemaIssues.some(n=>n.severity==="error"))throw new Error("Legacy analysis produced schema errors; automatic initialization refused.");this.runtimeState={state:"initializing",phase:"writing_checkpoint"};try{await this.store.initialize(r.bundle)}catch(n){if(!(n instanceof Error)||!n.message.includes("already initialized"))throw n}return await this.refreshIndex(await this.store.load()),this.runtimeState={state:"ready"},await this.status()}catch(t){return this.runtimeState={state:"degraded",error:t instanceof Error?t.message:String(t)},await this.status()}})(),this.initializationPromise)}async analyzeLegacy(e={}){return(await N({...e,projectRoot:this.projectRoot})).report}async migrateImprintSnapshot(){if(this.initializationPromise&&await this.initializationPromise,!(await this.status()).initialized)return{migrated:!1,explanations:0,evidence:0};let e=O(this.projectRoot,".popmelt","memory","migrations"),t=O(e,"imprint-advisories-v2.json");try{let d=JSON.parse(await U(t,"utf8"));return{migrated:!1,explanations:d.explanations??0,evidence:d.evidence??0}}catch{}let r;try{r=Q(JSON.parse(await U(O(this.projectRoot,".popmelt","imprint","graph.json"),"utf8")))}catch{}if(!r?.explanations)return await Ce(e,{recursive:!0}),await _e(t,JSON.stringify({version:2,migratedAt:new Date().toISOString(),explanations:0,evidence:0},null,2)),{migrated:!0,explanations:0,evidence:0};let n=await this.store.load(),s=n.bundle.records.find(d=>d.recordType==="participant"&&d.kind==="human"&&d.status==="active"),c=n.bundle.records.find(d=>d.recordType==="participant"&&d.kind==="ai"&&d.status==="active")??s,y=n.bundle.records.find(d=>d.recordType==="subject"&&d.subjectType==="project");if(!c||!y)return{migrated:!1,explanations:0,evidence:0};let l=n.bundle.manifest.projectId,v=new Set(n.bundle.records.map(d=>d.id)),S=new Set(n.bundle.relationships.flatMap(d=>d.sourceRefs.flatMap(w=>w.kind==="external"&&w.uri===J?[w.id]:[]))),h=new Map,b=n.bundle.records.filter(d=>d.recordType==="advisory_explanation");for(let d of r.explanations){let w=b.find(m=>K(m)===d.id);h.set(d.id,w?.id??M(l,"imprint-explanation",d.id,Date.parse(d.createdAt)))}let f=[],T=[],p=[],j=0;for(let d of r.explanations){let w=h.get(d.id),m=b.find(g=>g.id===w),i=[],x=d.evidence.length?d.evidence:[{id:`fallback:${d.id}`,kind:"observation",stance:"supports",summary:d.rationale,threadId:"imprint-migration",jobId:"imprint-migration",createdAt:d.createdAt}];for(let g of x){let k=M(l,"imprint-evidence-record",g.id,Date.parse(g.createdAt));i.push(k),!v.has(k)&&(f.push({id:k,schemaVersion:1,projectId:l,createdAt:g.createdAt,participantId:c.id,sourceRefs:ue([{kind:"external",id:g.id,uri:De},{kind:"external",id:d.id,uri:F},{kind:"thread",id:g.threadId},{kind:"message",id:g.jobId}]),recordType:"evidence",kind:["confirmation","correction","exception","rejection"].includes(g.kind)?"user_feedback":"judgment",summary:g.summary,availability:"available",artifactIds:[]}),p.push({id:M(l,"imprint-evidence-link",`${d.id}:${g.id}`,Date.parse(g.createdAt)),schemaVersion:1,projectId:l,createdAt:g.createdAt,participantId:c.id,sourceRefs:[{kind:"external",id:g.id,uri:De}],recordType:"relationship",relationshipType:"derived_from",from:{entityType:"advisory_explanation",entityId:w},to:{entityType:"evidence",entityId:k},reason:"This advisory explanation was derived from collaboration evidence."}),j+=1)}let R={id:w,schemaVersion:1,projectId:l,createdAt:m?.createdAt??d.createdAt,participantId:m?.participantId??c.id,sourceRefs:ue([...m?.sourceRefs??[],{kind:"external",id:d.id,uri:F}]),recordType:"advisory_explanation",kind:d.kind,state:d.state,statement:d.statement,rationale:d.rationale,scope:structuredClone(d.scope),subjectIds:[y.id],evidenceIds:[...new Set([...m?.evidenceIds??[],...i])],concreteBindings:ne(r,d.id),supersededById:d.supersededBy?h.get(d.supersededBy):void 0,updatedAt:d.updatedAt};m?T.push(R):f.push(R)}for(let d of r.relations){let w=me(d.type);if(!w||d.toStoreId)continue;let m=h.get(d.fromId),i=h.get(d.toId);!m||!i||S.has(d.id)||p.push({id:M(l,"imprint-relation",d.id,Date.parse(d.createdAt)),schemaVersion:1,projectId:l,createdAt:d.createdAt,participantId:c.id,sourceRefs:[{kind:"external",id:d.id,uri:J}],recordType:"relationship",relationshipType:w,from:{entityType:"advisory_explanation",entityId:m},to:{entityType:"advisory_explanation",entityId:i},reason:d.rationale||"The Imprint graph connected these explanations."})}let u=new Date().toISOString();if(f.length||T.length||p.length)try{let d=await this.store.commit({records:f,recordReplacements:T,events:[],relationships:p,artifacts:[],tombstones:[],projectionUpdates:[]},{transactionId:M(l,"imprint-advisories-v2",r.projectId,Date.parse(r.updatedAt)),committedAt:u});await this.refreshIndex(d)}catch(d){if(!(d instanceof Error)||!d.message.includes("Transaction already exists"))throw d}return await Ce(e,{recursive:!0}),await _e(t,JSON.stringify({version:2,migratedAt:u,explanations:r.explanations.length,evidence:j,source:".popmelt/imprint (canonical cutover)"},null,2)),{migrated:!0,explanations:r.explanations.length,evidence:j}}async review(e,t={}){let r=await this.loadSource(t),n=await this.withIndexedCandidates(r,e);return{source:r.source,selection:le(r.bundle,n)}}async contextualize(e,t={}){let r=await this.loadSource(t),n=await this.withIndexedCandidates(r,e);return{source:r.source,actionPacket:xe(r.bundle,n),reviewSelection:le(r.bundle,n)}}async imprintTopology(){let e;try{e=await this.loadJournalSource()}catch(t){if(t.code==="ENOENT")return{explanations:[],relations:[]};throw t}return{explanations:e.bundle.records.flatMap(t=>t.recordType==="advisory_explanation"?[{memoryId:t.id,explanationId:K(t)??t.id}]:[]),relations:e.bundle.relationships.flatMap(t=>t.relationshipType!=="expresses"&&t.relationshipType!=="excepts"||t.from.entityType!=="advisory_explanation"||t.to.entityType!=="advisory_explanation"?[]:[{id:t.id,type:t.relationshipType,from:{memoryId:t.from.entityId,...t.from.storeId?{storeId:t.from.storeId}:{}},to:{memoryId:t.to.entityId,...t.to.storeId?{storeId:t.to.storeId}:{}},rationale:t.reason}])}}async planReview(e,t={}){let r=await this.loadSource(t);return{source:r.source,result:te(r.bundle,e)}}async initializeFromLegacy(e){if(!e.confirmed)throw new Error("Explicit confirmation is required to initialize memory storage.");if((await this.status()).initialized)throw new Error("Memory storage is already initialized.");let t=await N({projectRoot:this.projectRoot,projectKey:e.projectKey,proofCaseIds:e.proofCaseIds,writerVersion:e.writerVersion});if(t.report.schemaIssues.some(r=>r.severity==="error"))throw new Error("Legacy analysis produced schema errors; initialization refused.");return await this.store.initialize(t.bundle),await this.refreshIndex(await this.store.load()),{status:await this.status(),report:t.report}}async commitReview(e,t){if(!(await this.status()).initialized)throw new Error("Memory storage is not initialized.");let r=await this.store.load(),n=te(r.bundle,e);if(!n.ok)throw new Error(`Owner review action is invalid: ${JSON.stringify(n.errors)}`);let s=await this.store.commitReviewPlan(n.plan,t);return await this.refreshIndex(s),s}async commitConversationalReview(e){if(this.initializationPromise&&await this.initializationPromise,!(await this.status()).initialized)return{status:"not_ready",action:e.action,proposalId:e.proposalId,message:"Canonical memory is not ready; the review was not committed."};let t=await this.store.load(),r=t.bundle.records.find(h=>h.recordType==="proposal"&&h.id===e.proposalId),n=t.bundle.records.find(h=>h.recordType==="participant"&&h.kind==="human"&&h.status==="active");if(!r||r.state!=="pending"||!n)return{status:"rejected",action:e.action,proposalId:e.proposalId,message:r?r.state!=="pending"?`The proposal is already ${r.state}.`:"No active local owner participant is available.":"The reviewed proposal no longer exists."};let s=Date.now(),a=new Date(s).toISOString(),c={proposalId:r.id,participantId:n.id,authority:{level:"owner",mode:"local_trusted"},occurredAt:a},y=e.action==="accept"?{...c,action:"accept",eventId:A(s),decisionId:A(s),kind:e.kind,reason:e.reason}:e.action==="edit_and_accept"?{...c,action:"edit_and_accept",withdrawalEventId:A(s),replacementProposalId:A(s),acceptanceEventId:A(s),decisionId:A(s),relationshipId:A(s),claim:e.claim,kind:e.kind,subjects:r.subjects,subjectSemantics:r.subjectSemantics,reason:e.reason}:e.action==="reject"?{...c,action:"reject",eventId:A(s),reason:e.reason}:{...c,action:"defer",eventId:A(s),reason:e.reason,context:{taskContext:e.taskContext,subjectIds:r.subjects.map(h=>h.subjectId),resurfaceWhen:e.resurfaceWhen?.length?e.resurfaceWhen:["different_action","owner_request"]}},l=te(t.bundle,y);if(!l.ok)return{status:"rejected",action:e.action,proposalId:e.proposalId,message:l.errors.map(h=>h.message).join(" ")};let v=await this.store.commitReviewPlan(l.plan,{transactionId:A(s),committedAt:a});await this.refreshIndex(v);let S=l.plan.resultRefs.find(h=>h.entityType==="decision")?.entityId;return{status:"committed",action:e.action,proposalId:e.proposalId,decisionId:S,message:e.action==="accept"||e.action==="edit_and_accept"?"Accepted product memory was committed.":e.action==="reject"?"Historical candidate was rejected.":"Historical candidate was deferred.",headSequence:v.report.headSequence}}async captureCompletedJob(e){if(this.initializationPromise&&await this.initializationPromise,!(await this.status()).initialized)return{status:"not_ready",proposalIds:[]};let t=await this.store.load(),r=ke(t.bundle,e),n=M(t.bundle.manifest.projectId,"live-capture-transaction",`${e.threadId}:${e.jobId}`,e.completedAt);try{let s=await this.store.commit(r.mutation,{transactionId:n,committedAt:new Date(e.completedAt).toISOString()});return await this.refreshIndex(s),{status:"captured",iterationId:r.iterationId,proposalIds:r.proposalIds,headSequence:s.report.headSequence}}catch(s){if(s instanceof Error&&s.message.includes("Transaction already exists"))return{status:"duplicate",iterationId:r.iterationId,proposalIds:r.proposalIds};throw s}}async recordImprintEvidence(e){if(this.initializationPromise&&await this.initializationPromise,!(await this.status()).initialized||e.summary.changes.length===0)return;let t;try{t=Q(JSON.parse(await U(O(this.projectRoot,".popmelt","imprint","graph.json"),"utf8")))}catch{}let r=await this.store.load(),n=r.bundle.records.find(u=>u.recordType==="participant"&&u.kind==="human"&&u.status==="active"),s=r.bundle.records.find(u=>u.recordType==="participant"&&u.kind==="ai"&&u.status==="active"),a=e.action?n:s??n,c=r.bundle.records.find(u=>u.recordType==="subject"&&u.subjectType==="project");if(!a||!c)return;let y=e.occurredAt??new Date().toISOString(),l=Date.parse(y),v=r.bundle.manifest.projectId,S=[],h=[],b=[],f=r.bundle.records.filter(u=>u.recordType==="advisory_explanation"),T=new Map(f.flatMap(u=>{let d=K(u);return d?[[d,u.id]]:[]}));for(let u of e.summary.changes)if(!T.has(u.explanationId)){let d=t?.explanations.find(w=>w.id===u.explanationId);T.set(u.explanationId,M(v,"imprint-explanation",u.explanationId,Date.parse(d?.createdAt??y)))}for(let u of e.summary.changes){let d={kind:"external",id:u.explanationId,uri:F},w=T.get(u.explanationId),m=f.find(g=>g.id===w),i=t?.explanations.find(g=>g.id===u.explanationId),x={id:M(v,"imprint-live-evidence",`${e.summary.transactionId}:${u.explanationId}:${e.action??"automatic"}`,l),schemaVersion:1,projectId:v,createdAt:y,participantId:a.id,sourceRefs:[d,{kind:"thread",id:e.threadId},{kind:"message",id:e.jobId}],recordType:"evidence",kind:e.action?"user_feedback":"judgment",summary:e.action?`${e.action}: ${e.summary.detail}`:`${e.summary.kind}: ${e.summary.detail}`,availability:"available",artifactIds:[]};S.push(x);let R={id:w,schemaVersion:1,projectId:v,createdAt:m?.createdAt??i?.createdAt??y,participantId:m?.participantId??a.id,sourceRefs:ue([...m?.sourceRefs??[],d,{kind:"thread",id:e.threadId},{kind:"message",id:e.jobId}]),recordType:"advisory_explanation",kind:i?.kind??m?.kind??"pattern",state:i?.state??u.state,statement:i?.statement??u.statement,rationale:i?.rationale??m?.rationale??e.summary.detail,scope:structuredClone(i?.scope??m?.scope??{kind:"project",values:[]}),subjectIds:m?.subjectIds??[c.id],evidenceIds:[...new Set([...m?.evidenceIds??[],x.id])],concreteBindings:i?ne(t,u.explanationId):m?.concreteBindings??[],supersededById:i?.supersededBy?T.get(i.supersededBy):m?.supersededById,updatedAt:i?.updatedAt??y};m?h.push(R):S.push(R),b.push({id:M(v,"imprint-live-evidence-link",`${e.summary.transactionId}:${u.explanationId}:${e.action??"automatic"}`,l),schemaVersion:1,projectId:v,createdAt:y,participantId:a.id,sourceRefs:[d],recordType:"relationship",relationshipType:"derived_from",from:{entityType:"advisory_explanation",entityId:R.id},to:{entityType:"evidence",entityId:x.id},reason:e.action?"The developer grounding response updates this advisory explanation.":"The Imprint explanation was derived from this collaboration evidence."})}let p=new Set(r.bundle.relationships.flatMap(u=>u.sourceRefs.flatMap(d=>d.kind==="external"&&d.uri===J?[d.id]:[])));for(let u of t?.relations??[]){let d=me(u.type);if(!d)continue;let w=T.get(u.fromId),m=u.toStoreId?e.qualifiedExplanationMemoryIds?.[`${u.toStoreId}:${u.toId}`]:T.get(u.toId);!w||!m||p.has(u.id)||b.push({id:M(v,"imprint-relation",u.id,Date.parse(u.createdAt)),schemaVersion:1,projectId:v,createdAt:u.createdAt,participantId:a.id,sourceRefs:[{kind:"external",id:u.id,uri:J}],recordType:"relationship",relationshipType:d,from:{entityType:"advisory_explanation",entityId:w},to:{entityType:"advisory_explanation",entityId:m,...u.toStoreId?{storeId:u.toStoreId}:{}},reason:u.rationale||"The Imprint graph connected these explanations."})}let j=M(r.bundle.manifest.projectId,"imprint-evidence",`${e.summary.transactionId}:${e.action??"automatic"}`,l);try{let u=await this.store.commit({records:S,recordReplacements:h,events:[],relationships:b,artifacts:[],tombstones:[],projectionUpdates:[]},{transactionId:j,committedAt:y});await this.refreshIndex(u)}catch(u){if(!(u instanceof Error)||!u.message.includes("Transaction already exists"))throw u}}async syncImprintGraph(){if(this.initializationPromise&&await this.initializationPromise,!(await this.status()).initialized)return{status:"not_ready",relationships:0,explanations:0};let e;try{e=Q(JSON.parse(await U(O(this.projectRoot,".popmelt","imprint","graph.json"),"utf8")))}catch{return{status:"no_change",relationships:0,explanations:0}}let t=await this.store.load(),r=t.bundle.records.find(i=>i.recordType==="participant"&&i.kind==="human"&&i.status==="active"),s=t.bundle.records.find(i=>i.recordType==="participant"&&i.kind==="ai"&&i.status==="active")??r;if(!s)return{status:"not_ready",relationships:0,explanations:0};let a=t.bundle.records.find(i=>i.recordType==="subject"&&i.subjectType==="project");if(!a)return{status:"not_ready",relationships:0,explanations:0};let c=t.bundle.manifest.projectId,y=t.bundle.records.filter(i=>i.recordType==="advisory_explanation"),l=new Map(y.flatMap(i=>{let x=K(i);return x?[[x,i]]:[]})),v=new Map([...[...l].map(([i,x])=>[i,x.id]),...e.explanations.filter(i=>!l.has(i.id)).map(i=>[i.id,M(c,"imprint-explanation",i.id,Date.parse(i.createdAt))])]),S=[],h=[],b=new Set(e.explanations.map(i=>i.id));for(let i of e.explanations){let x=l.get(i.id);if(!x){S.push({id:v.get(i.id),schemaVersion:1,projectId:c,createdAt:i.createdAt,participantId:s.id,sourceRefs:[{kind:"external",id:i.id,uri:F}],recordType:"advisory_explanation",kind:i.kind,state:i.state,statement:i.statement,rationale:i.rationale,scope:structuredClone(i.scope),subjectIds:[a.id],evidenceIds:[],concreteBindings:ne(e,i.id),supersededById:i.supersededBy?v.get(i.supersededBy):void 0,updatedAt:i.updatedAt});continue}let R={...structuredClone(x),kind:i.kind,state:i.state,statement:i.statement,rationale:i.rationale,scope:structuredClone(i.scope),concreteBindings:ne(e,i.id),supersededById:i.supersededBy?v.get(i.supersededBy):void 0,updatedAt:i.updatedAt},g=k=>JSON.stringify({kind:k.kind,state:k.state,statement:k.statement,rationale:k.rationale,scope:k.scope,concreteBindings:k.concreteBindings,supersededById:k.supersededById,updatedAt:k.updatedAt});g(x)!==g(R)&&h.push(R)}for(let[i,x]of l)b.has(i)||x.state==="retired"||h.push({...structuredClone(x),state:"retired",supersededById:void 0,updatedAt:e.updatedAt});let f=new Set(t.bundle.tombstones.flatMap(i=>i.objectType==="relationship"?[i.objectId]:[])),T=new Map(t.bundle.relationships.flatMap(i=>{if(f.has(i.id))return[];let x=i.sourceRefs.find(R=>R.kind==="external"&&R.uri===J)?.id;return x?[[x,i]]:[]})),p=[],j=new Set;for(let i of e.relations){let x=me(i.type);if(!x||i.toStoreId)continue;let R=v.get(i.fromId),g=v.get(i.toId);if(!R||!g)continue;let k=T.get(i.id);k&&k.relationshipType===x&&k.from.entityType==="advisory_explanation"&&k.from.entityId===R&&k.to.entityType==="advisory_explanation"&&k.to.entityId===g||(k&&j.add(i.id),p.push({id:M(c,"imprint-relation",`${i.id}:${x}:${R}:${g}`,Date.parse(i.createdAt)),schemaVersion:1,projectId:c,createdAt:i.createdAt,participantId:s.id,sourceRefs:[{kind:"external",id:i.id,uri:J}],recordType:"relationship",relationshipType:x,from:{entityType:"advisory_explanation",entityId:R},to:{entityType:"advisory_explanation",entityId:g},reason:i.rationale||"The Imprint graph connected these explanations."}))}let u=new Set(e.relations.map(i=>i.id)),d=r?[...T].filter(([i])=>!u.has(i)||j.has(i)).map(([,i])=>({id:M(c,"imprint-relationship-tombstone",i.id,Date.parse(e.updatedAt)),schemaVersion:1,projectId:c,objectId:i.id,objectType:"relationship",deletedAt:e.updatedAt,deletedById:r.id,authority:{level:"owner",mode:"local_trusted"},reasonCategory:"serious_error",erasureLevel:"content",invalidates:[]})):[];if(!S.length&&!h.length&&!p.length&&!d.length)return{status:"no_change",relationships:0,explanations:0,headSequence:t.report.headSequence};let w=e.updatedAt,m=M(c,"imprint-graph-sync",e.head.hash??String(e.head.sequence),Date.parse(w));try{let i=await this.store.commit({records:S,recordReplacements:h,events:[],relationships:p,artifacts:[],tombstones:d,projectionUpdates:[]},{transactionId:m,committedAt:w});return await this.refreshIndex(i),{status:"synced",relationships:p.length+d.length,explanations:S.length+h.length,headSequence:i.report.headSequence}}catch(i){if(!(i instanceof Error)||!i.message.includes("Transaction already exists"))throw i;return{status:"no_change",relationships:0,explanations:0,headSequence:t.report.headSequence}}}async recover(e){if(!e)throw new Error("Explicit confirmation is required to recover the journal head.");if(!(await this.status()).initialized)throw new Error("Memory storage is not initialized.");let t=await this.store.recover();return await this.refreshIndex(t),t}async diagnostics(){let e=await this.status();if(!e.initialized)return{status:e};let t=await this.store.load();await this.refreshIndex(t);let r={};for(let n of t.bundle.records)r[n.recordType]=(r[n.recordType]??0)+1;return{status:e,journal:t.report,records:r,openFreshnessSignals:t.bundle.records.filter(n=>n.recordType==="freshness_signal"&&n.state==="open").length,unavailableEvidence:t.bundle.records.filter(n=>n.recordType==="evidence"&&n.availability!=="available").length}}async getProjectableDecisions(e=12){if(this.initializationPromise&&await this.initializationPromise,!(await this.status()).initialized)return[];let{bundle:t}=await this.store.load(),r=new Set(t.records.flatMap(a=>a.recordType==="model_projection"&&a.state==="applied"?a.coverage.filter(c=>c.status==="projected").map(c=>c.decisionId):[])),n=new Set(t.relationships.flatMap(a=>a.relationshipType==="contradicts"&&a.from.entityType==="decision"&&a.to.entityType==="decision"?[a.from.entityId,a.to.entityId]:[])),s=new Set(t.records.flatMap(a=>a.recordType==="freshness_signal"&&a.state==="open"&&a.target.entityType==="decision"?[a.target.entityId]:[]));return t.records.filter(a=>a.recordType==="decision"&&a.state==="active"&&!r.has(a.id)&&!n.has(a.id)&&!s.has(a.id)).sort((a,c)=>c.createdAt.localeCompare(a.createdAt)).slice(0,Math.max(1,e))}async getCanonicalModelEntries(){if(!(await this.status()).initialized)return[];let{bundle:e}=await this.store.load(),t=new Set(e.records.flatMap(n=>n.recordType==="decision"&&n.state==="active"?[n.id]:[])),r=new Map;for(let n of e.records.filter(s=>s.recordType==="model_entry").sort((s,a)=>s.createdAt.localeCompare(a.createdAt)))n.decisionIds.some(s=>t.has(s))&&r.set(n.key,n);return[...r.values()]}async getImprintView(e=[],t){let r=()=>({head:{sequence:0,updatedAt:new Date(0).toISOString()},counts:{total:0,emerging:0,testing:0,grounded:0,challenged:0,retired:0,needsGrounding:0},explanations:[]});if(!(await this.status()).initialized)return r();let n=await this.store.load(),s=n.bundle.records.filter(p=>p.recordType==="advisory_explanation"),a=new Map(s.map(p=>[p.id,p])),c=new Map(s.flatMap(p=>{let j=K(p);return j?[[j,p.id]]:[]})),y=new Set(e.map(p=>c.get(p)??p)),l=new Map(n.bundle.records.flatMap(p=>p.recordType==="participant"?[[p.id,p.kind]]:[])),v=new Map(n.bundle.records.flatMap(p=>p.recordType==="evidence"?[[p.id,p]]:[])),S=new Set(n.bundle.tombstones.flatMap(p=>p.objectType==="relationship"?[p.objectId]:[])),h=new Set(["expresses","operationalizes","excepts"]),b={testing:0,emerging:1,grounded:2,challenged:3,retired:4},f=s.map(p=>{let j=p.evidenceIds.flatMap(m=>{let i=v.get(m);if(!i)return[];let x=i.sourceRefs.find(W=>W.kind==="thread")?.id,R=i.sourceRefs.find(W=>W.kind==="message")?.id,g=i.kind==="judgment"||i.kind==="user_feedback"||i.kind==="project_state"?i.kind:"other",k=l.get(i.participantId)??"unknown";return[{id:i.id,kind:g,summary:i.summary,createdAt:i.createdAt,participantKind:k,threadId:x,jobId:R}]}).sort((m,i)=>i.createdAt.localeCompare(m.createdAt)),u=n.bundle.relationships.flatMap(m=>{if(S.has(m.id))return[];if(!h.has(m.relationshipType))return[];let i=m.from.entityType==="advisory_explanation"&&m.from.entityId===p.id&&m.to.entityType==="advisory_explanation",x=m.to.entityType==="advisory_explanation"&&m.to.entityId===p.id&&m.from.entityType==="advisory_explanation";if(!i&&!x)return[];let R=i?m.to.entityId:m.from.entityId,g=a.get(R);return g?[{id:m.id,type:m.relationshipType==="excepts"?"excepts":"expresses",direction:i?"outgoing":"incoming",explanationId:g.id,statement:g.statement,rationale:m.reason}]:[]}),d=[...(p.supersededById?[p.supersededById]:[]).flatMap(m=>{let i=a.get(m);return i?[{id:`supersedes:${p.id}:${i.id}`,type:"supersedes",direction:"incoming",explanationId:i.id,statement:i.statement,rationale:"A later explanation replaced this challenged wording."}]:[]}),...s.flatMap(m=>m.supersededById===p.id?[{id:`supersedes:${m.id}:${p.id}`,type:"supersedes",direction:"outgoing",explanationId:m.id,statement:m.statement,rationale:"This explanation replaced earlier challenged wording."}]:[])],w=[...new Set([...p.sourceRefs.flatMap(m=>m.kind==="thread"?[m.id]:[]),...j.flatMap(m=>m.threadId?[m.threadId]:[])])].filter(m=>!t||t.has(m));return{id:p.id,kind:p.kind,state:p.state,statement:p.statement,rationale:p.rationale,scope:structuredClone(p.scope),createdAt:p.createdAt,updatedAt:p.updatedAt,evidenceCount:j.length,recentEvidence:j.slice(0,4),concrete:p.concreteBindings.map(m=>({...structuredClone(m)})),relations:[...u,...d],sourceThreadIds:w,needsGrounding:p.state==="testing"&&y.has(p.id)}}).sort((p,j)=>Number(j.needsGrounding)-Number(p.needsGrounding)||b[p.state]-b[j.state]||j.updatedAt.localeCompare(p.updatedAt)),T={total:f.filter(p=>p.state!=="retired").length,emerging:f.filter(p=>p.state==="emerging").length,testing:f.filter(p=>p.state==="testing").length,grounded:f.filter(p=>p.state==="grounded").length,challenged:f.filter(p=>p.state==="challenged").length,retired:f.filter(p=>p.state==="retired").length,needsGrounding:f.filter(p=>p.needsGrounding).length};return{head:{sequence:n.report.headSequence,updatedAt:n.bundle.manifest.updatedAt},counts:T,explanations:f}}async getModelView(){if(!(await this.status()).initialized)return{decisions:[],entries:[]};let{bundle:e}=await this.store.load(),t=new Set(e.records.flatMap(c=>c.recordType==="decision"&&c.state==="active"?[c.id]:[])),r=new Map;for(let c of e.records.filter(y=>y.recordType==="model_entry").sort((y,l)=>y.createdAt.localeCompare(l.createdAt)))c.decisionIds.some(y=>t.has(y))&&r.set(c.key,c);let n=[...r.values()],s=e.records.filter(c=>c.recordType==="verification_attempt");return{decisions:e.records.filter(c=>c.recordType==="decision"&&c.state==="active").map(c=>{let y=s.filter(l=>l.targets.some(v=>v.entityType==="decision"&&v.entityId===c.id)).sort((l,v)=>v.createdAt.localeCompare(l.createdAt))[0];return{id:c.id,kind:c.kind,claim:c.claim,projected:n.some(l=>l.decisionIds.includes(c.id)),verification:y?y.state:"unverified"}}),entries:n.map(c=>({id:c.id,key:c.key,value:c.value,decisionIds:c.decisionIds}))}}async recordDirectModelMutation(e){if(this.initializationPromise&&await this.initializationPromise,!(await this.status()).initialized)throw new Error("Canonical memory is not ready.");let t=await this.store.load(),r=t.bundle.records.find(g=>g.recordType==="participant"&&g.kind==="human"&&g.status==="active"),n=t.bundle.records.find(g=>g.recordType==="subject"&&g.subjectType==="project");if(!r||!n)throw new Error("Canonical owner or project subject is unavailable.");let s=Date.now(),a=new Date(s).toISOString(),c=A(s),y=A(s),l=A(s),v=A(s),S=A(s),h=new Set(t.bundle.records.flatMap(g=>g.recordType==="model_entry"&&g.key===e.key?g.decisionIds:[])),b=t.bundle.records.filter(g=>g.recordType==="decision"&&g.state==="active"&&h.has(g.id)),f={schemaVersion:1,projectId:t.bundle.manifest.projectId,createdAt:a,participantId:r.id,sourceRefs:[{kind:"external",id:e.key,uri:"popmelt:model-pane"}]},T=[{subjectId:n.id,role:"governed"}],p={...f,id:c,recordType:"proposal",state:"accepted",claim:e.claim,proposedKind:"rule",subjects:T,origin:{mode:"declared",sourceText:e.claim,reviewedById:r.id}},j={...f,id:y,recordType:"lifecycle_event",entity:{entityType:"proposal",entityId:c},eventType:"accept",fromState:"pending",toState:"accepted",authority:{level:"owner",mode:"local_trusted"},reason:"The owner explicitly changed the projected model in the Model pane."},u={...f,id:l,recordType:"decision",proposalId:c,acceptanceEventId:y,acceptedById:r.id,authority:{level:"owner",mode:"local_trusted"},state:"active",kind:"rule",claim:e.claim,subjects:T,noChange:!1,effectiveAt:a},d={...f,id:v,recordType:"model_entry",key:e.key,subjectIds:[n.id],decisionIds:[l],value:e.value},w={...f,id:S,recordType:"model_projection",state:"applied",runId:`model-pane:${e.key}:${s}`,appliedById:r.id,authority:{level:"owner",mode:"local_trusted"},appliedAt:a,decisionIds:[l],entryIds:[v],coverage:[{decisionId:l,status:"projected"}]},m={...f,id:A(s),recordType:"relationship",relationshipType:"derived_from",from:{entityType:"model_entry",entityId:v},to:{entityType:"decision",entityId:l},reason:"The model change is projected from the owner-confirmed decision."},i=b.map(g=>({...f,id:A(s),recordType:"lifecycle_event",entity:{entityType:"decision",entityId:g.id},eventType:"decision.superseded",fromState:"active",toState:"superseded",authority:{level:"owner",mode:"local_trusted"},reason:`A newer explicit model declaration replaced ${e.key}.`})),x=b.map(g=>({...f,id:A(s),recordType:"relationship",relationshipType:"supersedes",from:{entityType:"decision",entityId:u.id},to:{entityType:"decision",entityId:g.id},reason:`The owner replaced the previous declaration for ${e.key}.`,authority:{level:"owner",mode:"local_trusted"}})),R=await this.store.commit({records:[p,u,d,w],events:[j,...i],relationships:[m,...x],artifacts:[],tombstones:[],projectionUpdates:b.map(g=>({entityType:"decision",entityId:g.id,fromState:"active",state:"superseded"}))},{transactionId:A(s),committedAt:a});return await this.refreshIndex(R),{decisionId:l,entryId:v}}async findPendingProposalForLegacyDecision(e){if(!(await this.status()).initialized)return null;let{bundle:t}=await this.store.load(),r=t.records.find(n=>n.recordType==="proposal"&&n.state==="pending"&&n.sourceRefs.some(s=>s.id===e));return r?{proposalId:r.id,claim:r.claim}:null}async findPendingProposalsForThread(e){if(this.initializationPromise&&await this.initializationPromise,!(await this.status()).initialized)return[];let{bundle:t}=await this.store.load(),r=new Map(t.records.flatMap(n=>n.recordType==="subject"?[[n.id,n.label]]:[]));return t.records.filter(n=>n.recordType==="proposal"&&n.state==="pending"&&n.sourceRefs.some(s=>s.kind==="thread"&&s.id===e)).sort((n,s)=>n.createdAt.localeCompare(s.createdAt)).map(n=>({proposalId:n.id,claim:n.claim,rationale:n.rationale,proposedKind:n.proposedKind,subjectLabels:n.subjects.flatMap(s=>{let a=r.get(s.subjectId);return a?[a]:[]})}))}async applyModelProjection(e){if(this.initializationPromise&&await this.initializationPromise,!(await this.status()).initialized)throw new Error("Canonical memory is not ready.");if(e.changes.length===0)throw new Error("A model projection requires selected changes.");let t=await this.store.load(),r=t.bundle.records.find(f=>f.recordType==="model_projection"&&f.state==="applied"&&f.runId===e.runId);if(r)return{projectionId:r.id,entryIds:r.entryIds,headSequence:t.report.headSequence};let n=t.bundle.records.filter(f=>f.recordType==="decision"&&e.decisionIds.includes(f.id)&&f.state==="active");if(n.length!==new Set(e.decisionIds).size)throw new Error("Model projection references a missing or inactive canonical decision.");let s=t.bundle.records.find(f=>f.recordType==="participant"&&f.kind==="human"&&f.status==="active");if(!s)throw new Error("No active local owner participant is available.");let a=Date.now(),c=new Date(a).toISOString(),y=A(a),l=e.changes.map(f=>{let T=f.decisionIds?.filter(u=>e.decisionIds.includes(u)),p=T?.length?T:e.decisionIds,j=[...new Set(n.filter(u=>p.includes(u.id)).flatMap(u=>u.subjects.map(d=>d.subjectId)))];return{id:A(a),schemaVersion:1,projectId:t.bundle.manifest.projectId,createdAt:c,participantId:s.id,sourceRefs:p.map(u=>({kind:"record",id:u})),recordType:"model_entry",key:f.path.map(String).join("."),subjectIds:j,decisionIds:p,value:f.value}}),v=new Set(l.flatMap(f=>f.decisionIds)),S={id:y,schemaVersion:1,projectId:t.bundle.manifest.projectId,createdAt:c,participantId:s.id,sourceRefs:e.decisionIds.map(f=>({kind:"record",id:f})),recordType:"model_projection",state:"applied",runId:e.runId,presentationJobId:e.presentationJobId,appliedById:s.id,authority:{level:"owner",mode:"local_trusted"},appliedAt:c,decisionIds:e.decisionIds,entryIds:l.map(f=>f.id),coverage:e.decisionIds.map(f=>e.coverage?.find(T=>T.decisionId===f)??{decisionId:f,status:v.has(f)?"projected":"unprojected"})},h=l.flatMap(f=>f.decisionIds.map(T=>({id:A(a),schemaVersion:1,projectId:t.bundle.manifest.projectId,createdAt:c,participantId:s.id,sourceRefs:[{kind:"record",id:S.id}],recordType:"relationship",relationshipType:"derived_from",from:{entityType:"model_entry",entityId:f.id},to:{entityType:"decision",entityId:T},reason:"The owner applied this model entry as a projection of accepted product truth."}))),b=await this.store.commit({records:[...l,S],events:[],relationships:h,artifacts:[],tombstones:[],projectionUpdates:[]},{transactionId:A(a),committedAt:c});return await this.refreshIndex(b),{projectionId:y,entryIds:l.map(f=>f.id),headSequence:b.report.headSequence}}async loadSource(e){return(await this.status()).initialized?this.loadJournalSource():{source:"legacy_preview",bundle:(await N({...e,projectRoot:this.projectRoot})).bundle}}async loadJournalSource(){let e=await this.store.readHead(),t=`${e.checkpointSequence}:${e.checkpointHash}:${e.sequence}:${e.hash??""}`;if(this.contextualSourceCache?.headKey===t)return this.contextualSourceCache.value;let r=await this.store.load(),n={source:"journal",bundle:r.bundle,journal:r.report};return this.contextualSourceCache={headKey:t,value:n},n}async withIndexedCandidates(e,t){if(e.source!=="journal"||!e.journal)return t;let r=await this.indexStore.ensure(e.bundle,{sequence:e.journal.headSequence,hash:e.journal.headHash}),n=Ee(r,t.subjectHints??[]);return n?{...t,subjectIds:[...new Set([...t.subjectIds??[],...n.subjectIds])],candidateDecisionIds:n.decisionIds,candidateProposalIds:n.proposalIds}:t}async refreshIndex(e){await this.indexStore.ensure(e.bundle,{sequence:e.report.headSequence,hash:e.report.headHash}),e.report.headSequence-e.report.checkpointSequence>=250&&await this.store.rotateCheckpoint()}};function z(o){if(!o||typeof o!="object"||Array.isArray(o))throw new Error("Expected a JSON object.");return o}function P(o,e){if(typeof o!="string"||!o.trim())throw new Error(`${e} must be a non-empty string.`);return o}function $(o,e,t){let r=P(o,e);if(!t.includes(r))throw new Error(`${e} is invalid.`);return r}function Nt(o){let e=z(o),t=z(e.authority),r=t.level,n=t.mode,s=$(r,"authority.level",["owner","delegate","contributor"]),a=$(n,"authority.mode",["local_trusted","hosted"]),c={proposalId:P(e.proposalId,"proposalId"),participantId:P(e.participantId,"participantId"),occurredAt:P(e.occurredAt,"occurredAt"),authority:{level:s,mode:a,grantId:typeof t.grantId=="string"?t.grantId:void 0}};switch(e.action){case"accept":return{...c,action:"accept",eventId:P(e.eventId,"eventId"),decisionId:P(e.decisionId,"decisionId"),kind:$(e.kind,"kind",["principle","preference","rule","constraint"]),reason:P(e.reason,"reason"),rationale:typeof e.rationale=="string"?e.rationale:void 0};case"reject":return{...c,action:"reject",eventId:P(e.eventId,"eventId"),reason:P(e.reason,"reason")};case"defer":{let y=z(e.context);if(!Array.isArray(y.subjectIds)||!Array.isArray(y.resurfaceWhen))throw new Error("Deferral context requires subjectIds and resurfaceWhen arrays.");return{...c,action:"defer",eventId:P(e.eventId,"eventId"),reason:typeof e.reason=="string"?e.reason:void 0,context:{taskContext:typeof y.taskContext=="string"?y.taskContext:void 0,subjectIds:y.subjectIds.map(l=>P(l,"subjectId")),resurfaceWhen:y.resurfaceWhen.map(l=>$(l,"resurfaceWhen",["different_action","new_evidence","new_conflict","owner_request","after_date"])),revisitAfter:typeof y.revisitAfter=="string"?y.revisitAfter:void 0}}}case"edit_and_accept":{if(!Array.isArray(e.subjects))throw new Error("subjects must be an array.");return{...c,action:"edit_and_accept",withdrawalEventId:P(e.withdrawalEventId,"withdrawalEventId"),replacementProposalId:P(e.replacementProposalId,"replacementProposalId"),acceptanceEventId:P(e.acceptanceEventId,"acceptanceEventId"),decisionId:P(e.decisionId,"decisionId"),relationshipId:P(e.relationshipId,"relationshipId"),claim:P(e.claim,"claim"),kind:$(e.kind,"kind",["principle","preference","rule","constraint"]),subjects:e.subjects.map(y=>{let l=z(y);return{subjectId:P(l.subjectId,"subjectId"),role:$(l.role,"role",["governed","consumer","provider","context"])}}),subjectSemantics:typeof e.subjectSemantics=="string"?e.subjectSemantics:void 0,rationale:typeof e.rationale=="string"?e.rationale:void 0,reason:P(e.reason,"reason")}}default:throw new Error("Unsupported owner review action.")}}function Lt(o){let e=z(o),t=(s,a)=>{if(s!==void 0){if(!Array.isArray(s))throw new Error(`${a} must be an array.`);return s.map(c=>P(c,a))}},r=(s,a)=>{if(s!==void 0){if(typeof s!="number"||!Number.isFinite(s)||s<=0)throw new Error(`${a} must be a positive number.`);return s}},n=e.resurface===void 0?void 0:z(e.resurface);if(e.generatedAt!==void 0&&(typeof e.generatedAt!="string"||Number.isNaN(Date.parse(e.generatedAt))))throw new Error("generatedAt must be an ISO-8601 timestamp.");return{action:typeof e.action=="string"?e.action:void 0,text:typeof e.text=="string"?e.text:void 0,subjectIds:t(e.subjectIds,"subjectIds"),subjectHints:t(e.subjectHints,"subjectHints"),maxPackets:r(e.maxPackets,"maxPackets"),maxEstimatedTokens:r(e.maxEstimatedTokens,"maxEstimatedTokens"),generatedAt:typeof e.generatedAt=="string"?e.generatedAt:void 0,resurface:n?{differentAction:n.differentAction===!0,newEvidence:n.newEvidence===!0,newConflict:n.newConflict===!0,ownerRequested:n.ownerRequested===!0}:void 0}}export{Ie as a,lt as b,Je as c,ut as d,Q as e,je as f,X as g,Be as h,Nt as i,Lt as j};
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ function m(e){try{let t=e.defaultView?.frameElement;return t?.localName==="iframe"?t:null}catch{return null}}function w(e){if(e.localName!=="iframe"||e.closest("[data-devtools],[data-popmelt-peer-surface]"))return null;try{let t=e.contentDocument;return t?.documentElement?t:null}catch{return null}}function C(e){let t=e.getBoundingClientRect(),r=e.offsetWidth?t.width/e.offsetWidth:1,u=e.offsetHeight?t.height/e.offsetHeight:1;return{x:t.left+e.clientLeft*r,y:t.top+e.clientTop*u,sx:r,sy:u}}function v(e,t){let{left:r,top:u,width:l,height:n}=e,o=m(t);for(;o;){let i=C(o);r=i.x+r*i.sx,u=i.y+u*i.sy,l*=i.sx,n*=i.sy,o=m(o.ownerDocument)}return new DOMRect(r,u,l,n)}function T(e){return v(e.getBoundingClientRect(),e.ownerDocument)}function O(e,t,r){let u=[],l=m(r);for(;l;)u.unshift(l),l=m(l.ownerDocument);for(let n of u){let o=C(n);e=(e-o.x)/o.sx,t=(t-o.y)/o.sy}return{x:e,y:t}}function U(e){return e.ownerDocument.defaultView??window}function V(e){return!!(e&&e.namespaceURI==="http://www.w3.org/1999/xhtml")}function A(e,t=document){if(e===t)return!0;let r=m(e);return!!(r?.isConnected&&r.contentDocument===e&&A(r.ownerDocument,t))}function $(e,t){if(!A(t))return new DOMRect(0,0,0,0);let r=e.left,u=e.top,l=e.right,n=e.bottom;for(let o=m(t);o;o=m(o.ownerDocument)){let i=v({left:0,top:0,width:o.clientWidth,height:o.clientHeight},o.contentDocument);r=Math.max(r,i.left),u=Math.max(u,i.top),l=Math.min(l,i.right),n=Math.min(n,i.bottom)}return new DOMRect(r,u,Math.max(0,l-r),Math.max(0,n-u))}var g="@frame(";function z(e,t){return`${g}${encodeURIComponent(JSON.stringify({selector:e,url:t.URL}))}) `}function S(e){if(!e.startsWith(g))return null;let t=e.indexOf(") ");if(t<0)return null;try{let r=JSON.parse(decodeURIComponent(e.slice(g.length,t)));return typeof r.selector!="string"||typeof r.url!="string"?null:{...r,rest:e.slice(t+2)}}catch{return null}}var b=" >>> ";function N(e){return Array.from(e.querySelectorAll("*")).flatMap(t=>t.shadowRoot?[t.shadowRoot]:[])}function x(e=document){let t=[e];for(let r of t)t.push(...N(r));return t}function p(e,t=document){if(e.startsWith(g)){let l=S(e);if(!l)return null;let n=l.selector.startsWith(g)||l.selector.includes(b)?[p(l.selector,t)].filter(s=>!!s):x(t).flatMap(s=>Array.from(s.querySelectorAll(l.selector))),o=n.length===1?n[0]:null,i=o&&w(o);return!i||i.URL!==l.url?null:p(l.rest,i)}let r=e.split(b);if(r.length>1){let l=t,n=null;for(let o=0;o<r.length;o+=1){if(n=l.querySelector(r[o]),!n)return null;if(o<r.length-1){if(!n.shadowRoot)return null;l=n.shadowRoot}}return n}let u=[t];for(let l of u){let n=l.querySelector(e);if(n)return n;u.push(...N(l))}return null}function D(e){if(e.parentElement)return e.parentElement;let t=e.getRootNode();return"host"in t?t.host:null}function B(e,t){return t.startsWith(g)||t.includes(b)?p(t)===e:e.matches(t)}function H(e,t){let r=e;for(;r;){if(r.matches(t))return r;r=D(r)}return null}function _(e,t){let r=t;for(;r;){if(r===e)return!0;r=D(r)}return!1}function k(e,t,r,u=l=>[l]){let l=[];for(let n of e.querySelectorAll("iframe")){if(!w(n))continue;let o=n.getBoundingClientRect();if(t<o.left||t>o.right||r<o.top||r>o.bottom||n.ownerDocument.defaultView?.getComputedStyle(n).pointerEvents!=="none")continue;let i=n.style.getPropertyValue("pointer-events"),s=n.style.getPropertyPriority("pointer-events");n.style.setProperty("pointer-events","auto","important"),l.push(()=>i?n.style.setProperty("pointer-events",i,s):n.style.removeProperty("pointer-events"))}try{let n=typeof e.elementsFromPoint=="function"?e.elementsFromPoint(t,r):[],o=e.elementFromPoint?.(t,r)??null;return(o&&!n.includes(o)?[o,...n]:n).filter(i=>e.nodeType===9||i.getRootNode()===e).flatMap(u)}finally{l.forEach(n=>n())}}function W(e,t,r=document){let u=[],l=new Set,n=r.nodeType===9?r:r.ownerDocument,o=O(e,t,n);for(let i of x(r).reverse())for(let s of k(i,o.x,o.y,h=>{let a=w(h);return a?[...W(e,t,a),h]:[h]}))l.has(s)||(l.add(s),u.push(s));return u}function I(){return b}var J=["id","data-testid","data-test","data-cy","data-popmelt-media-id","aria-label","name","href"],P=e=>e.replace(/\s+/g," ").trim();function y(e){return e==="id"||e==="data-popmelt-media-id"||/^data-(?:testid|test|cy)(?:-[a-z0-9_-]+)?$/.test(e)}function j(e,t){return!!(t&&t.length<=200&&!(e==="id"&&/^(radix-|:|_r_)/.test(t)))}function q(e){let t={},r=new Set([...J,...e.getAttributeNames().filter(y)]);for(let n of r){let o=e.getAttribute(n);o&&j(n,o)&&(t[n]=o)}let u=P(e.querySelector("h1,h2,h3,h4,h5,h6")?.textContent??""),l=P(Array.from(e.childNodes).filter(n=>n.nodeType===3).map(n=>n.textContent).join(" "));return{tag:e.tagName.toLowerCase(),...Object.keys(t).length?{attributes:t}:{},...u&&u.length<=200?{heading:u}:{},...l&&l.length<=200?{text:l}:{}}}function F(e,t,r=document){let u=x(r),l=a=>{try{return u.flatMap(f=>Array.from(f.querySelectorAll(a)))}catch{return[]}},n=!!(t&&(t.heading||t.text||Object.keys(t.attributes??{}).length)),o=a=>{if(!t||!n)return!0;let f=q(a);return f.tag===t.tag&&(!t.heading||f.heading===t.heading)&&(!t.text||f.text===t.text)&&Object.entries(t.attributes??{}).every(([c,d])=>a.getAttribute(c)===d)};for(let a of e){if(a.includes(" >>> ")||a.startsWith("@frame(")){try{let c=p(a,r),d=S(a),M=Object.entries(t?.attributes??{}).filter(([R])=>y(R)),E=d&&c&&(d.rest.startsWith("[data-pm=")||M.length>0&&c.tagName.toLowerCase()===t?.tag&&M.every(([R,L])=>c.getAttribute(R)===L));if(c&&(E||o(c)))return{status:"matched",element:c}}catch{}continue}let f=l(a);if(f.length===1&&(/^\[data-pm=/.test(a)||!n))return{status:"matched",element:f[0]}}if(!n||e.some(a=>a.includes(" >>> ")||a.startsWith("@frame("))||!/^[a-z][a-z0-9-]*$/.test(t.tag))return{status:"missing"};let i=l(t.tag);if(i.length>500)return{status:"ambiguous"};let s=Object.entries(t.attributes??{}).filter(([a])=>y(a));if(s.length){let a=i.filter(f=>s.every(([c,d])=>f.getAttribute(c)===d));return a.length===1?{status:"matched",element:a[0]}:{status:a.length?"ambiguous":"missing"}}let h=i.filter(o);return h.length===1?{status:"matched",element:h[0]}:{status:h.length?"ambiguous":"missing"}}function Q(e,t,r=document){let u={};if(t)for(let[i,s]of Object.entries({...t.dataAttributes,...t.id?{id:t.id}:{}}))y(i)&&j(i,s)&&(u[i]=s);let l=t?.targetFingerprint?.tag??t?.tagName?.toLowerCase(),n=t&&l?{...t.targetFingerprint,tag:l,attributes:{...u,...t.targetFingerprint?.attributes}}:t?.targetFingerprint,o=F([e,t?.selector].filter(i=>!!i),n,r);return o.status==="matched"?o.element:null}export{m as a,w as b,v as c,T as d,O as e,U as f,V as g,A as h,$ as i,z as j,x as k,p as l,D as m,B as n,H as o,_ as p,W as q,I as r,y as s,q as t,F as u,Q as v};
@@ -0,0 +1 @@
1
+ import{a as p}from"./chunk-NOHXTT24.mjs";import{request as c}from"http";function u(){let e=process.env.POPMELT_BRIDGE_URL;if(!e)return null;try{let t=new URL(e);return{port:t.port?Number.parseInt(t.port,10):null,projectId:process.env.POPMELT_PROJECT_ID||null,leaseEligible:!1}}catch{return null}}async function h(e,t,i){let r=u();if(e?.bridge===!1||r)return r??{port:null,projectId:null,leaseEligible:!1};try{let{startPopmelt:o}=await import("./server.mjs"),n=t.config?.server?.host,l=n===!0?"0.0.0.0":n||"localhost",s=t.config?.server?.port??i,d=`http://${l==="0.0.0.0"?"localhost":l}:${s}`,a=await o({port:e?.port,projectRoot:e?.projectRoot,devOrigin:d,force:!0,detached:!0,manageLease:!1});return console.log(`[popmelt] bridge ready at http://localhost:${a.port}`),{port:a.port,projectId:a.projectId,leaseEligible:!0}}catch(o){let n=o instanceof Error?o.message:String(o);return console.warn("[popmelt] bridge failed to start:",n),{port:null,projectId:null,leaseEligible:!1}}}async function v(e,t,i=fetch){if(!e.leaseEligible||e.port===null)return null;let r=await p({port:e.port,projectId:e.projectId},i);if(!r)return null;let o=()=>{n()},n=async()=>{process.removeListener("beforeExit",o),await r.release()};return process.once("beforeExit",o),t.httpServer?.once("close",()=>{n()}),{id:r.id,release:n}}function g(e,t,i){if(i.port===null)return null;let r=new URL(t,"http://popmelt.local");if(r.pathname!==`${e}/status`)return null;let o=new URL("/status",`http://localhost:${i.port}`);return r.searchParams.forEach((n,l)=>o.searchParams.append(l,n)),i.projectId&&o.searchParams.set("projectId",i.projectId),o}function b(e,t){return(i,r,o)=>{let n=g(e,i.url||"",t());if(!n)return o();let l=c(n,{method:i.method,headers:{...i.headers,host:n.host}},s=>{r.writeHead(s.statusCode||502,s.headers),s.pipe(r)});l.on("error",()=>{r.writeHead(502,{"Content-Type":"text/plain"}),r.end(`Popmelt bridge not running on port ${t().port}`)}),i.pipe(l)}}function P(e){let t=e.port===null?null:`http://localhost:${e.port}`;return`window.__POPMELT_BRIDGE_URL__=${JSON.stringify(t)};window.__POPMELT_PROJECT_ID__=${JSON.stringify(e.projectId)};`}export{h as a,v as b,b as c,P as d};