@agent-receipts/dashboard 0.3.0 → 0.3.1

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 (128) hide show
  1. package/package.json +1 -1
  2. package/standalone/apps/web/.next/BUILD_ID +1 -1
  3. package/standalone/apps/web/.next/app-build-manifest.json +67 -67
  4. package/standalone/apps/web/.next/app-path-routes-manifest.json +15 -15
  5. package/standalone/apps/web/.next/build-manifest.json +2 -2
  6. package/standalone/apps/web/.next/prerender-manifest.json +33 -33
  7. package/standalone/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  8. package/standalone/apps/web/.next/server/app/_not-found.html +2 -2
  9. package/standalone/apps/web/.next/server/app/_not-found.rsc +2 -2
  10. package/standalone/apps/web/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
  11. package/standalone/apps/web/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  12. package/standalone/apps/web/.next/server/app/agents.html +2 -2
  13. package/standalone/apps/web/.next/server/app/agents.rsc +2 -2
  14. package/standalone/apps/web/.next/server/app/api/agents/route.js +1 -1
  15. package/standalone/apps/web/.next/server/app/api/agents/route.js.nft.json +1 -1
  16. package/standalone/apps/web/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
  17. package/standalone/apps/web/.next/server/app/api/chains/[id]/route.js +1 -1
  18. package/standalone/apps/web/.next/server/app/api/chains/[id]/route.js.nft.json +1 -1
  19. package/standalone/apps/web/.next/server/app/api/chains/[id]/route_client-reference-manifest.js +1 -1
  20. package/standalone/apps/web/.next/server/app/api/cleanup/route.js +1 -1
  21. package/standalone/apps/web/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  22. package/standalone/apps/web/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  23. package/standalone/apps/web/.next/server/app/api/config/route.js +1 -1
  24. package/standalone/apps/web/.next/server/app/api/config/route.js.nft.json +1 -1
  25. package/standalone/apps/web/.next/server/app/api/config/route_client-reference-manifest.js +1 -1
  26. package/standalone/apps/web/.next/server/app/api/invoices/route.js +1 -1
  27. package/standalone/apps/web/.next/server/app/api/invoices/route.js.nft.json +1 -1
  28. package/standalone/apps/web/.next/server/app/api/invoices/route_client-reference-manifest.js +1 -1
  29. package/standalone/apps/web/.next/server/app/api/judgments/route.js +1 -1
  30. package/standalone/apps/web/.next/server/app/api/judgments/route.js.nft.json +1 -1
  31. package/standalone/apps/web/.next/server/app/api/judgments/route_client-reference-manifest.js +1 -1
  32. package/standalone/apps/web/.next/server/app/api/memory/audit/route.js +1 -1
  33. package/standalone/apps/web/.next/server/app/api/memory/audit/route.js.nft.json +1 -1
  34. package/standalone/apps/web/.next/server/app/api/memory/audit/route_client-reference-manifest.js +1 -1
  35. package/standalone/apps/web/.next/server/app/api/memory/entities/[id]/route.js +1 -1
  36. package/standalone/apps/web/.next/server/app/api/memory/entities/[id]/route.js.nft.json +1 -1
  37. package/standalone/apps/web/.next/server/app/api/memory/entities/[id]/route_client-reference-manifest.js +1 -1
  38. package/standalone/apps/web/.next/server/app/api/memory/entities/route.js +1 -1
  39. package/standalone/apps/web/.next/server/app/api/memory/entities/route.js.nft.json +1 -1
  40. package/standalone/apps/web/.next/server/app/api/memory/entities/route_client-reference-manifest.js +1 -1
  41. package/standalone/apps/web/.next/server/app/api/memory/forget/route.js +1 -1
  42. package/standalone/apps/web/.next/server/app/api/memory/forget/route.js.nft.json +1 -1
  43. package/standalone/apps/web/.next/server/app/api/memory/forget/route_client-reference-manifest.js +1 -1
  44. package/standalone/apps/web/.next/server/app/api/memory/observe/route.js +1 -1
  45. package/standalone/apps/web/.next/server/app/api/memory/observe/route.js.nft.json +1 -1
  46. package/standalone/apps/web/.next/server/app/api/memory/observe/route_client-reference-manifest.js +1 -1
  47. package/standalone/apps/web/.next/server/app/api/memory/provenance/[obsId]/route.js +1 -1
  48. package/standalone/apps/web/.next/server/app/api/memory/provenance/[obsId]/route.js.nft.json +1 -1
  49. package/standalone/apps/web/.next/server/app/api/memory/provenance/[obsId]/route_client-reference-manifest.js +1 -1
  50. package/standalone/apps/web/.next/server/app/api/memory/recall/route.js +1 -1
  51. package/standalone/apps/web/.next/server/app/api/memory/recall/route.js.nft.json +1 -1
  52. package/standalone/apps/web/.next/server/app/api/memory/recall/route_client-reference-manifest.js +1 -1
  53. package/standalone/apps/web/.next/server/app/api/receipts/[id]/route.js +1 -1
  54. package/standalone/apps/web/.next/server/app/api/receipts/[id]/route.js.nft.json +1 -1
  55. package/standalone/apps/web/.next/server/app/api/receipts/[id]/route_client-reference-manifest.js +1 -1
  56. package/standalone/apps/web/.next/server/app/api/receipts/route.js +1 -1
  57. package/standalone/apps/web/.next/server/app/api/receipts/route.js.nft.json +1 -1
  58. package/standalone/apps/web/.next/server/app/api/receipts/route_client-reference-manifest.js +1 -1
  59. package/standalone/apps/web/.next/server/app/api/search/route.js +1 -1
  60. package/standalone/apps/web/.next/server/app/api/search/route.js.nft.json +1 -1
  61. package/standalone/apps/web/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  62. package/standalone/apps/web/.next/server/app/api/stats/route.js +1 -1
  63. package/standalone/apps/web/.next/server/app/api/stats/route.js.nft.json +1 -1
  64. package/standalone/apps/web/.next/server/app/api/stats/route_client-reference-manifest.js +1 -1
  65. package/standalone/apps/web/.next/server/app/api/verify/route.js +1 -1
  66. package/standalone/apps/web/.next/server/app/api/verify/route.js.nft.json +1 -1
  67. package/standalone/apps/web/.next/server/app/api/verify/route_client-reference-manifest.js +1 -1
  68. package/standalone/apps/web/.next/server/app/chains/[id]/page_client-reference-manifest.js +1 -1
  69. package/standalone/apps/web/.next/server/app/chains/page_client-reference-manifest.js +1 -1
  70. package/standalone/apps/web/.next/server/app/chains.html +2 -2
  71. package/standalone/apps/web/.next/server/app/chains.rsc +2 -2
  72. package/standalone/apps/web/.next/server/app/constraints/page_client-reference-manifest.js +1 -1
  73. package/standalone/apps/web/.next/server/app/constraints.html +2 -2
  74. package/standalone/apps/web/.next/server/app/constraints.rsc +2 -2
  75. package/standalone/apps/web/.next/server/app/get-started/page_client-reference-manifest.js +1 -1
  76. package/standalone/apps/web/.next/server/app/get-started.html +2 -2
  77. package/standalone/apps/web/.next/server/app/get-started.rsc +2 -2
  78. package/standalone/apps/web/.next/server/app/how-it-works/page_client-reference-manifest.js +1 -1
  79. package/standalone/apps/web/.next/server/app/how-it-works.html +2 -2
  80. package/standalone/apps/web/.next/server/app/how-it-works.rsc +2 -2
  81. package/standalone/apps/web/.next/server/app/index.html +2 -2
  82. package/standalone/apps/web/.next/server/app/index.rsc +2 -2
  83. package/standalone/apps/web/.next/server/app/invoices/page_client-reference-manifest.js +1 -1
  84. package/standalone/apps/web/.next/server/app/invoices.html +2 -2
  85. package/standalone/apps/web/.next/server/app/invoices.rsc +2 -2
  86. package/standalone/apps/web/.next/server/app/judgments/page_client-reference-manifest.js +1 -1
  87. package/standalone/apps/web/.next/server/app/judgments.html +2 -2
  88. package/standalone/apps/web/.next/server/app/judgments.rsc +2 -2
  89. package/standalone/apps/web/.next/server/app/memory/[entityId]/page_client-reference-manifest.js +1 -1
  90. package/standalone/apps/web/.next/server/app/memory/audit/page_client-reference-manifest.js +1 -1
  91. package/standalone/apps/web/.next/server/app/memory/audit.html +2 -2
  92. package/standalone/apps/web/.next/server/app/memory/audit.rsc +2 -2
  93. package/standalone/apps/web/.next/server/app/memory/page_client-reference-manifest.js +1 -1
  94. package/standalone/apps/web/.next/server/app/memory.html +2 -2
  95. package/standalone/apps/web/.next/server/app/memory.rsc +2 -2
  96. package/standalone/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
  97. package/standalone/apps/web/.next/server/app/receipts/[id]/page.js +1 -1
  98. package/standalone/apps/web/.next/server/app/receipts/[id]/page_client-reference-manifest.js +1 -1
  99. package/standalone/apps/web/.next/server/app/receipts/page.js +1 -1
  100. package/standalone/apps/web/.next/server/app/receipts/page_client-reference-manifest.js +1 -1
  101. package/standalone/apps/web/.next/server/app/receipts.html +2 -2
  102. package/standalone/apps/web/.next/server/app/receipts.rsc +3 -3
  103. package/standalone/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  104. package/standalone/apps/web/.next/server/app/settings.html +2 -2
  105. package/standalone/apps/web/.next/server/app/settings.rsc +2 -2
  106. package/standalone/apps/web/.next/server/app/verify/page_client-reference-manifest.js +1 -1
  107. package/standalone/apps/web/.next/server/app/verify.html +2 -2
  108. package/standalone/apps/web/.next/server/app/verify.rsc +2 -2
  109. package/standalone/apps/web/.next/server/app-paths-manifest.json +15 -15
  110. package/standalone/apps/web/.next/server/chunks/1725.js +1 -0
  111. package/standalone/apps/web/.next/server/chunks/4099.js +1 -1
  112. package/standalone/apps/web/.next/server/chunks/4886.js +1 -0
  113. package/standalone/apps/web/.next/server/chunks/6803.js +44 -6
  114. package/standalone/apps/web/.next/server/pages/404.html +2 -2
  115. package/standalone/apps/web/.next/server/pages/500.html +1 -1
  116. package/standalone/apps/web/.next/server/pages-manifest.json +1 -1
  117. package/standalone/apps/web/.next/static/chunks/app/receipts/[id]/page-3b95a98a03395684.js +1 -0
  118. package/standalone/apps/web/.next/static/chunks/app/receipts/page-665b6e374ca41d0c.js +1 -0
  119. package/standalone/apps/web/.next/static/css/90a952694ea5745a.css +5 -0
  120. package/standalone/apps/web/src/lib/demo-memory-store.ts +238 -0
  121. package/standalone/packages/crypto/package.json +1 -1
  122. package/standalone/packages/mcp-server/dist/index.js +135 -3
  123. package/standalone/packages/mcp-server/package.json +1 -1
  124. package/standalone/apps/web/.next/static/chunks/app/receipts/[id]/page-779f2c6fdc359351.js +0 -1
  125. package/standalone/apps/web/.next/static/chunks/app/receipts/page-f3df6ceecaff7cce.js +0 -1
  126. package/standalone/apps/web/.next/static/css/415fd9a8d5823143.css +0 -5
  127. /package/standalone/apps/web/.next/static/{BZdBWaTjiqh8Heg1_5h6o → nfGBKWJnAAcZ1it0v5lJ4}/_buildManifest.js +0 -0
  128. /package/standalone/apps/web/.next/static/{BZdBWaTjiqh8Heg1_5h6o → nfGBKWJnAAcZ1it0v5lJ4}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8996],{14246:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(11063).A)("ShieldX",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m14.5 9.5-5 5",key:"17q4r4"}],["path",{d:"m9.5 9.5 5 5",key:"18nt4w"}]])},14874:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(11063).A)("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]])},15088:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>O});var n=s(88111),a=s(55271),r=s(95388),l=s(55935),i=s.n(l),c=s(23176),d=s(85605),o=s(96450),x=s(77311),u=s(62455),m=s(96741);function h(e){let{hash:t,length:s=16,className:a}=e;return(0,n.jsxs)("span",{className:(0,m.cn)("inline-flex items-center gap-1",a),children:[(0,n.jsx)("code",{className:"font-mono text-xs text-text-secondary",children:(0,u.lV)(t,s)}),(0,n.jsx)(x.i,{value:t})]})}var p=s(47126);let g=(0,s(11063).A)("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);var f=s(28826);function j(e){let{data:t,label:s,defaultExpanded:r=!1,className:l}=e,[i,c]=(0,a.useState)(r),d=JSON.stringify(t,null,2);return(0,n.jsxs)("div",{className:(0,m.cn)("card overflow-hidden",l),children:[(0,n.jsxs)("button",{onClick:()=>c(e=>!e),className:"flex items-center gap-2 w-full px-4 py-3 text-sm text-text-secondary hover:bg-bg-secondary transition-colors",children:[i?(0,n.jsx)(g,{className:"w-4 h-4"}):(0,n.jsx)(f.A,{className:"w-4 h-4"}),(0,n.jsx)("span",{className:"font-medium",children:null!=s?s:"View JSON"}),(0,n.jsx)(x.i,{value:d,className:"ml-auto"})]}),i&&(0,n.jsx)("pre",{className:"px-4 py-3 border-t border-border overflow-x-auto text-xs font-mono text-text-secondary bg-bg-secondary max-h-96",children:d})]})}var y=s(46233),b=s(66187),N=s(84109),v=s(69030),w=s(37659),_=s(67998),k=(s(81174),s(14246),s(14874)),A=s(68498);function S(e){let{label:t,children:s,mono:a}=e;return(0,n.jsxs)("div",{className:"flex items-start gap-4 py-2",children:[(0,n.jsx)("span",{className:"text-xs text-text-muted w-28 shrink-0 pt-0.5",children:t}),(0,n.jsx)("div",{className:(0,m.cn)("text-sm text-text-primary min-w-0 flex-1",a&&"font-mono text-xs"),children:s})]})}function M(e){let{title:t,badge:s,children:a}=e;return(0,n.jsxs)("div",{className:"card",children:[(0,n.jsxs)("div",{className:"px-4 py-3 border-b border-border flex items-center justify-between",children:[(0,n.jsx)("h3",{className:"text-sm font-medium text-text-primary",children:t}),s]}),(0,n.jsx)("div",{className:"px-4 py-2",children:a})]})}function C(e){var t;let{metadata:s}=e;if(!(null==s?void 0:s.memory))return null;let a=s.memory,r=String(null!=(t=a.memory_operation)?t:""),l=a.entity_id?String(a.entity_id):null,c=a.observation_id?String(a.observation_id):null,d=a.scope?String(a.scope):null,o=a.confidence?String(a.confidence):null,x=a.query?String(a.query):null,u=null!=a.results_count?String(a.results_count):null;return(0,n.jsxs)(M,{title:"Memory Operation",badge:(0,n.jsxs)("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-purple-100 dark:bg-purple-900/30 text-purple-700 dark:text-purple-300",children:[(0,n.jsx)(v.A,{className:"w-3 h-3"}),r]}),children:[l&&(0,n.jsx)(S,{label:"Entity",children:(0,n.jsx)(i(),{href:"/memory/".concat(l),className:"text-primary hover:underline font-mono text-xs",children:l})}),c&&(0,n.jsx)(S,{label:"Observation",mono:!0,children:c}),d&&(0,n.jsx)(S,{label:"Scope",children:(0,n.jsx)("span",{className:"capitalize",children:d})}),o&&(0,n.jsx)(S,{label:"Confidence",children:(0,n.jsx)("span",{className:"capitalize",children:o})}),x&&(0,n.jsx)(S,{label:"Query",children:(0,n.jsxs)("span",{className:"italic",children:["“",x,"”"]})}),null!==u&&(0,n.jsx)(S,{label:"Results",children:u})]})}function O(e){var t,s,l;let{params:g}=e,{id:f}=(0,a.use)(g),{data:v,error:O,mutate:q}=(0,r.Ay)("receipt-".concat(f),()=>(0,c.Lx)(f),{revalidateOnFocus:!0});if(O)return(0,n.jsx)(y.W,{message:O.message,onRetry:()=>q()});if(!v)return(0,n.jsx)(b.AV,{});let T=v.receipt,D=T.constraint_result;T.constraints;let E=T.metadata,F=null==E?void 0:E.expires_at;return(0,n.jsxs)("div",{className:"space-y-4 max-w-4xl",children:[(0,n.jsxs)(i(),{href:"/receipts",className:"inline-flex items-center gap-1 text-sm text-text-muted hover:text-text-secondary",children:[(0,n.jsx)(w.A,{className:"w-4 h-4"})," Back to Receipts"]}),(0,n.jsxs)("div",{className:"flex flex-col sm:flex-row sm:items-center gap-4",children:[(0,n.jsx)("div",{className:"min-w-0 flex-1",children:(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("code",{className:"font-mono text-lg font-semibold text-text-primary",children:T.receipt_id}),(0,n.jsx)(x.i,{value:T.receipt_id})]})}),(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,n.jsx)(d.W,{status:T.status}),D&&Array.isArray(D.results)&&(0,n.jsx)(o.L,{passed:D.results.filter(e=>e.passed).length,total:D.results.length}),(0,n.jsxs)("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-blue-50 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300 border border-blue-200 dark:border-blue-700",children:[(0,n.jsx)(_.A,{className:"w-3 h-3"}),"Demo Signature"]})]})]}),(0,n.jsxs)(M,{title:"Identity",children:[(0,n.jsx)(S,{label:"Receipt ID",mono:!0,children:(0,n.jsxs)("span",{className:"inline-flex items-center gap-1",children:[T.receipt_id," ",(0,n.jsx)(x.i,{value:T.receipt_id})]})}),(0,n.jsx)(S,{label:"Chain ID",mono:!0,children:T.chain_id?(0,n.jsxs)(i(),{href:"/chains/".concat(T.chain_id),className:"text-primary hover:underline inline-flex items-center gap-1",children:[T.chain_id," ",(0,n.jsx)(x.i,{value:T.chain_id})]}):"—"}),(0,n.jsx)(S,{label:"Parent",mono:!0,children:T.parent_receipt_id?(0,n.jsxs)(i(),{href:"/receipts/".concat(T.parent_receipt_id),className:"text-primary hover:underline inline-flex items-center gap-1",children:[T.parent_receipt_id," ",(0,n.jsx)(x.i,{value:T.parent_receipt_id})]}):"—"}),(0,n.jsx)(S,{label:"Type",children:T.receipt_type}),(0,n.jsx)(S,{label:"Agent",children:(0,n.jsx)(i(),{href:"/agents/".concat(T.agent_id),className:"text-primary hover:underline",children:T.agent_id})}),(0,n.jsx)(S,{label:"Org",children:T.org_id}),(0,n.jsx)(S,{label:"Environment",children:T.environment})]}),(0,n.jsxs)(M,{title:"Timestamps",children:[(0,n.jsx)(S,{label:"Created",children:(0,n.jsxs)("span",{className:"inline-flex items-center gap-2",children:[(0,u.Yq)(T.timestamp),(0,n.jsx)(p.f,{date:T.timestamp,className:"text-xs"})]})}),(0,n.jsx)(S,{label:"Completed",children:T.completed_at?(0,u.Yq)(T.completed_at):"—"}),(0,n.jsx)(S,{label:"Duration",children:(0,u.a3)(T.latency_ms)}),F&&(0,n.jsx)(S,{label:"Expires",children:(0,n.jsxs)("span",{className:(0,m.cn)(new Date(F)<new Date&&"text-danger"),children:[(0,u.Yq)(F)," ",new Date(F)<new Date?"(Expired)":(0,n.jsx)(p.f,{date:F,className:"text-xs"})]})})]}),(0,n.jsxs)(M,{title:"Action",children:[(0,n.jsx)(S,{label:"Action",children:T.action}),(0,n.jsx)(S,{label:"Input Hash",mono:!0,children:T.input_hash?(0,n.jsx)(h,{hash:T.input_hash,length:32}):"—"}),(0,n.jsx)(S,{label:"Output Hash",mono:!0,children:T.output_hash?(0,n.jsx)(h,{hash:T.output_hash,length:32}):"—"}),"string"==typeof T.output_summary&&T.output_summary&&(0,n.jsx)(S,{label:"Output Summary",children:T.output_summary})]}),(0,n.jsxs)(M,{title:"Performance",children:[(0,n.jsx)(S,{label:"Latency",children:null!==T.latency_ms?(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{children:(0,u.a3)(T.latency_ms)}),(0,n.jsx)("div",{className:"flex-1 max-w-32 h-2 bg-bg-tertiary rounded-full overflow-hidden",children:(0,n.jsx)("div",{className:(0,m.cn)("h-full rounded-full",T.latency_ms<1e3?"bg-success":T.latency_ms<5e3?"bg-warning":"bg-danger"),style:{width:"".concat(Math.min(100,T.latency_ms/1e4*100),"%")}})})]}):"—"}),(0,n.jsx)(S,{label:"Cost",children:(0,u.vv)(T.cost_usd)}),(0,n.jsx)(S,{label:"Tokens",children:null!==T.tokens_in||null!==T.tokens_out?"".concat((0,u.ZV)(null!=(t=T.tokens_in)?t:0)," in / ").concat((0,u.ZV)(null!=(s=T.tokens_out)?s:0)," out"):"—"}),(0,n.jsx)(S,{label:"Model",children:null!=(l=T.model)?l:"—"}),(0,n.jsx)(S,{label:"Confidence",children:null!==T.confidence?(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsxs)("span",{children:[(100*T.confidence).toFixed(0),"%"]}),(0,n.jsx)("div",{className:"flex-1 max-w-32 h-2 bg-bg-tertiary rounded-full overflow-hidden",children:(0,n.jsx)("div",{className:"h-full rounded-full bg-primary",style:{width:"".concat(100*T.confidence,"%")}})})]}):"—"}),Array.isArray(T.tool_calls)&&T.tool_calls.length>0&&(0,n.jsx)(S,{label:"Tool Calls",children:(0,n.jsx)("div",{className:"flex flex-wrap gap-1",children:T.tool_calls.map(e=>(0,n.jsx)("code",{className:"px-1.5 py-0.5 text-xs bg-bg-tertiary rounded",children:e},e))})})]}),D&&Array.isArray(D.results)&&D.results.length>0&&(0,n.jsx)(M,{title:"Constraints",badge:(0,n.jsx)(o.L,{passed:D.results.filter(e=>e.passed).length,total:D.results.length}),children:(0,n.jsx)("div",{className:"divide-y divide-border-subtle",children:D.results.map((e,t)=>(0,n.jsxs)("div",{className:"flex items-center gap-3 py-2",children:[e.passed?(0,n.jsx)(k.A,{className:"w-4 h-4 text-success shrink-0"}):(0,n.jsx)(A.A,{className:"w-4 h-4 text-danger shrink-0"}),(0,n.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("code",{className:"text-xs font-medium",children:e.type}),!e.passed&&(0,n.jsx)("span",{className:"text-xs text-danger font-medium",children:"FAILED"})]}),(0,n.jsxs)("div",{className:"text-xs text-text-muted mt-0.5",children:["expected: ",JSON.stringify(e.expected)," — actual: ",JSON.stringify(e.actual),e.message&&(0,n.jsxs)("span",{className:"ml-2",children:["(",e.message,")"]})]})]})]},t))})}),v.judgments&&v.judgments.length>0&&(0,n.jsx)(M,{title:"Judgments",badge:(0,n.jsxs)("span",{className:"text-xs text-text-muted",children:[v.judgments.length," judgment",v.judgments.length>1?"s":""]}),children:(0,n.jsx)("div",{className:"space-y-3 py-2",children:v.judgments.map(e=>{var t,s;let a=e.metadata,r=null==a?void 0:a.verdict,l=null==a?void 0:a.score,c=null==a?void 0:a.reasoning,d=null==a?void 0:a.criteria,o=null!=(t=N.ZT[null!=r?r:""])?t:{bg:"bg-bg-tertiary",text:"text-text-secondary"};return(0,n.jsxs)("div",{className:"border border-border rounded-lg p-3",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,n.jsx)(i(),{href:"/receipts/".concat(e.receipt_id),className:"font-mono text-xs text-primary hover:underline",children:(0,u.Ct)(e.receipt_id)}),(0,n.jsx)("div",{className:"flex items-center gap-2",children:r&&(0,n.jsxs)("span",{className:(0,m.cn)("px-2 py-0.5 rounded-full text-xs font-medium uppercase",o.bg,o.text),children:[r," ",void 0!==l&&"(".concat(l.toFixed(2),")")]})})]}),Array.isArray(d)&&d.length>0&&(0,n.jsx)("div",{className:"space-y-1 mb-2",children:d.map((e,t)=>(0,n.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[e.score>=.7?(0,n.jsx)(k.A,{className:"w-3 h-3 text-success"}):(0,n.jsx)(A.A,{className:"w-3 h-3 text-danger"}),(0,n.jsx)("span",{className:"font-medium w-24",children:e.criterion}),(0,n.jsx)("span",{className:"text-text-muted",children:e.score.toFixed(2)}),(0,n.jsx)("span",{className:"text-text-muted truncate",children:e.reasoning})]},t))}),c&&(0,n.jsx)("p",{className:"text-xs text-text-secondary",children:c}),(0,n.jsxs)("div",{className:"flex items-center gap-3 mt-2 text-xs text-text-muted",children:[(0,n.jsxs)("span",{children:["Judge: ",null!=(s=e.model)?s:"unknown"]}),(0,n.jsx)(p.f,{date:e.timestamp})]})]},e.receipt_id)})})}),(0,n.jsx)(C,{metadata:E}),v.chain&&v.chain.length>1&&(0,n.jsx)(M,{title:"Chain",badge:(0,n.jsxs)("span",{className:"text-xs text-text-muted",children:[v.chain.length," receipts"]}),children:(0,n.jsx)("div",{className:"py-2 space-y-1",children:v.chain.map(e=>{let t=e.receipt_id===T.receipt_id;return(0,n.jsxs)("div",{className:(0,m.cn)("flex items-center gap-3 py-1.5 px-2 rounded",t&&"bg-primary-subtle"),children:[(0,n.jsx)("div",{className:(0,m.cn)("w-2 h-2 rounded-full shrink-0",t?"bg-primary":"bg-text-muted")}),(0,n.jsx)(i(),{href:"/receipts/".concat(e.receipt_id),className:(0,m.cn)("font-mono text-xs",t?"text-primary font-medium":"text-text-secondary hover:text-primary"),children:(0,u.Ct)(e.receipt_id)}),(0,n.jsx)("span",{className:"text-xs text-text-secondary",children:e.action}),(0,n.jsx)(d.W,{status:e.status}),t&&(0,n.jsx)("span",{className:"text-xs text-primary font-medium ml-auto",children:"current"})]},e.receipt_id)})})}),(0,n.jsxs)(M,{title:"Cryptographic Proof",children:[(0,n.jsx)(S,{label:"Signature",mono:!0,children:(0,n.jsx)(h,{hash:T.signature,length:32})}),(0,n.jsx)(S,{label:"Status",children:(0,n.jsxs)("span",{className:"inline-flex items-center gap-1 text-blue-600 dark:text-blue-400",children:[(0,n.jsx)(_.A,{className:"w-4 h-4"}),"Demo signature (placeholder)"]})}),(0,n.jsx)("div",{className:"mt-3 p-3 bg-blue-50 dark:bg-blue-900/20 rounded-lg border border-blue-200 dark:border-blue-700",children:(0,n.jsxs)("p",{className:"text-xs text-blue-700 dark:text-blue-300",children:[(0,n.jsx)("strong",{children:"Demo mode:"})," Signatures in this demo are placeholders. In production, every receipt is signed with Ed25519 cryptography using your private key. Anyone with your public key can verify authenticity — no central authority required."," ",(0,n.jsx)("a",{href:"/how-it-works#cryptographic-proof",className:"underline font-medium",children:"Learn how it works →"})]})})]}),(0,n.jsx)(j,{data:T,label:"View Raw JSON"})]})}},23176:(e,t,s)=>{"use strict";async function n(e,t){let s=await fetch(e,t);if(!s.ok){let e=await s.text().catch(()=>"Unknown error");throw Error("API error ".concat(s.status,": ").concat(e))}return s.json()}function a(e){let t=new URLSearchParams;for(let[s,n]of Object.entries(e))void 0!==n&&""!==n&&t.set(s,String(n));let s=t.toString();return s?"?".concat(s):""}async function r(){return n("/api/stats")}async function l(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return n("/api/receipts".concat(a(e)))}async function i(e){return n("/api/receipts/".concat(e))}async function c(e){return n("/api/chains/".concat(e))}async function d(){return n("/api/agents")}async function o(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return n("/api/judgments".concat(a(e)))}async function x(e,t){return n("/api/verify",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({receipt:e,public_key:t})})}async function u(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return n("/api/cleanup",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({dry_run:e})})}async function m(){return n("/api/config")}async function h(e){return n("/api/config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async function p(e){return n("/api/search".concat(a({q:e})))}async function g(e){return n("/api/invoices",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}s.d(t,{$Q:()=>p,Dz:()=>m,Go:()=>a,Jq:()=>g,Kt:()=>u,Lx:()=>i,MJ:()=>o,YK:()=>r,_R:()=>h,o3:()=>x,oN:()=>c,pQ:()=>d,qb:()=>l})},28826:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(11063).A)("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]])},37659:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(11063).A)("ArrowLeft",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]])},46233:(e,t,s)=>{"use strict";s.d(t,{W:()=>l});var n=s(88111),a=s(94745),r=s(96741);function l(e){let{message:t="Something went wrong",onRetry:s,className:l}=e;return(0,n.jsxs)("div",{className:(0,r.cn)("flex flex-col items-center justify-center py-16 text-center",l),children:[(0,n.jsx)(a.A,{className:"w-12 h-12 text-danger mb-4"}),(0,n.jsx)("h3",{className:"text-sm font-medium text-text-primary mb-1",children:"Error"}),(0,n.jsx)("p",{className:"text-sm text-text-muted max-w-sm mb-4",children:t}),s&&(0,n.jsx)("button",{onClick:s,className:"px-4 py-2 text-sm font-medium bg-primary text-white rounded-md hover:bg-primary-hover transition-colors",children:"Retry"})]})}},47126:(e,t,s)=>{"use strict";s.d(t,{f:()=>l});var n=s(88111),a=s(62455),r=s(96741);function l(e){let{date:t,className:s}=e;return(0,n.jsx)("time",{dateTime:t,title:(0,a.Yq)(t),className:(0,r.cn)("text-text-secondary",s),children:(0,a.fF)(t)})}},62455:(e,t,s)=>{"use strict";function n(e){let t="string"==typeof e?new Date(e):e,s=new Date().getTime()-t.getTime();if(s<0)return"just now";let n=Math.floor(s/1e3);if(n<60)return"".concat(n,"s ago");let a=Math.floor(n/60);if(a<60)return"".concat(a," min ago");let r=Math.floor(a/60);if(r<24)return"".concat(r," hr ago");let l=Math.floor(r/24);if(l<30)return"".concat(l,"d ago");let i=Math.floor(l/30);return"".concat(i,"mo ago")}function a(e){if(null==e)return"—";if(e<1e3)return"".concat(e,"ms");let t=e/1e3;if(t<60)return"".concat(t.toFixed(1),"s");if(t<3600)return"".concat(Math.floor(t/60),"m ").concat(Math.round(t%60),"s");if(t<86400){let e=Math.floor(t/3600),s=Math.floor(t%3600/60);return"".concat(e,"h ").concat(s,"m")}let s=Math.floor(t/86400),n=Math.floor(t%86400/3600);return"".concat(s,"d ").concat(n,"h")}function r(e){return null==e?"—":0===e?"$0.00":e<.01?"$".concat(e.toFixed(4)):"$".concat(e.toFixed(2))}function l(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:12;return e.length<=t?e:"".concat(e.slice(0,t),"...")}function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:16;return e.length<=t?e:"".concat(e.slice(0,t),"...")}function c(e){return e.toLocaleString("en-US")}function d(e){return"".concat((100*e).toFixed(1),"%")}function o(e){return("string"==typeof e?new Date(e):e).toLocaleString("en-US",{month:"short",day:"numeric",year:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"})}s.d(t,{Ct:()=>l,Yq:()=>o,ZV:()=>c,a3:()=>a,fF:()=>n,l9:()=>d,lV:()=>i,vv:()=>r})},66187:(e,t,s)=>{"use strict";s.d(t,{AV:()=>c,Eg:()=>l,F6:()=>i,O0:()=>r});var n=s(88111),a=s(96741);function r(e){let{className:t}=e;return(0,n.jsx)("div",{className:(0,a.cn)("animate-pulse bg-bg-tertiary rounded",t)})}function l(e){let{count:t=6}=e;return(0,n.jsx)("div",{className:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-4",children:Array.from({length:t}).map((e,t)=>(0,n.jsxs)("div",{className:"card p-4",children:[(0,n.jsx)(r,{className:"h-3 w-16 mb-3"}),(0,n.jsx)(r,{className:"h-7 w-20"})]},t))})}function i(e){let{rows:t=5}=e;return(0,n.jsxs)("div",{className:"card overflow-hidden",children:[(0,n.jsx)("div",{className:"border-b border-border p-3",children:(0,n.jsx)(r,{className:"h-4 w-48"})}),Array.from({length:t}).map((e,t)=>(0,n.jsxs)("div",{className:"flex items-center gap-4 p-3 border-b border-border-subtle last:border-0",children:[(0,n.jsx)(r,{className:"h-4 w-24"}),(0,n.jsx)(r,{className:"h-4 w-32"}),(0,n.jsx)(r,{className:"h-4 w-20"}),(0,n.jsx)(r,{className:"h-4 w-16 ml-auto"})]},t))]})}function c(){return(0,n.jsxs)("div",{className:"space-y-6",children:[(0,n.jsx)(r,{className:"h-8 w-48"}),(0,n.jsx)(l,{}),(0,n.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-4",children:[(0,n.jsx)(i,{}),(0,n.jsx)(i,{})]})]})}},67998:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(11063).A)("Info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]])},68498:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(11063).A)("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]])},69030:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(11063).A)("Brain",[["path",{d:"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z",key:"l5xja"}],["path",{d:"M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z",key:"ep3f8r"}],["path",{d:"M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4",key:"1p4c4q"}],["path",{d:"M17.599 6.5a3 3 0 0 0 .399-1.375",key:"tmeiqw"}],["path",{d:"M6.003 5.125A3 3 0 0 0 6.401 6.5",key:"105sqy"}],["path",{d:"M3.477 10.896a4 4 0 0 1 .585-.396",key:"ql3yin"}],["path",{d:"M19.938 10.5a4 4 0 0 1 .585.396",key:"1qfode"}],["path",{d:"M6 18a4 4 0 0 1-1.967-.516",key:"2e4loj"}],["path",{d:"M19.967 17.484A4 4 0 0 1 18 18",key:"159ez6"}]])},74674:(e,t,s)=>{Promise.resolve().then(s.bind(s,15088))},77311:(e,t,s)=>{"use strict";s.d(t,{i:()=>c});var n=s(88111),a=s(55271),r=s(14874),l=s(82539),i=s(96741);function c(e){let{value:t,className:s}=e,[c,d]=(0,a.useState)(!1),o=(0,a.useCallback)(async()=>{try{await navigator.clipboard.writeText(t),d(!0),setTimeout(()=>d(!1),2e3)}catch(e){}},[t]);return(0,n.jsx)("button",{onClick:o,className:(0,i.cn)("p-1 rounded hover:bg-bg-tertiary text-text-muted hover:text-text-secondary transition-colors",s),title:c?"Copied!":"Copy",children:c?(0,n.jsx)(r.A,{className:"w-3.5 h-3.5 text-success"}):(0,n.jsx)(l.A,{className:"w-3.5 h-3.5"})})}},81174:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(11063).A)("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]])},82539:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(11063).A)("Copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]])},84109:(e,t,s)=>{"use strict";s.d(t,{Ez:()=>n,ZT:()=>r,av:()=>l,cZ:()=>a});let n={completed:{bg:"bg-success-subtle",text:"text-success",dot:"bg-success"},failed:{bg:"bg-danger-subtle",text:"text-danger",dot:"bg-danger"},pending:{bg:"bg-warning-subtle",text:"text-warning",dot:"bg-warning"},timeout:{bg:"bg-danger-subtle",text:"text-danger",dot:"bg-danger"}},a={max_latency_ms:"Max Latency",max_cost_usd:"Max Cost",min_confidence:"Min Confidence",required_fields:"Required Fields",status_must_be:"Status Must Be",output_schema:"Output Schema"},r={pass:{bg:"bg-success-subtle",text:"text-success"},fail:{bg:"bg-danger-subtle",text:"text-danger"},partial:{bg:"bg-warning-subtle",text:"text-warning"}},l=1e4},85605:(e,t,s)=>{"use strict";s.d(t,{W:()=>l});var n=s(88111),a=s(96741),r=s(84109);function l(e){var t;let{status:s,className:l}=e,i=null!=(t=r.Ez[s])?t:{bg:"bg-warning-subtle",text:"text-warning",dot:"bg-warning"};return(0,n.jsxs)("span",{className:(0,a.cn)("inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full text-xs font-medium",i.bg,i.text,l),children:[(0,n.jsx)("span",{className:(0,a.cn)("w-1.5 h-1.5 rounded-full",i.dot)}),s]})}},94745:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(11063).A)("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]])},96450:(e,t,s)=>{"use strict";s.d(t,{L:()=>r});var n=s(88111),a=s(96741);function r(e){let{passed:t,total:s,className:r}=e;if(0===s)return(0,n.jsx)("span",{className:"text-text-muted text-xs",children:"—"});let l=t===s;return(0,n.jsxs)("span",{className:(0,a.cn)("inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium",l?"bg-success-subtle text-success":"bg-danger-subtle text-danger",r),children:[t,"/",s," ",l?"✓":"✗"]})}},96741:(e,t,s)=>{"use strict";s.d(t,{cn:()=>r});var n=s(55242),a=s(13065);function r(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];return(0,a.QP)((0,n.$)(t))}}},e=>{e.O(0,[2702,5388,5935,814,9743,7358],()=>e(e.s=74674)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5886],{734:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(11063).A)("Receipt",[["path",{d:"M4 2v20l2-1 2 1 2-1 2 1 2-1 2 1 2-1 2 1V2l-2 1-2-1-2 1-2-1-2 1-2-1-2 1Z",key:"q3az6g"}],["path",{d:"M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8",key:"1h4pet"}],["path",{d:"M12 17.5v-11",key:"1jc1ny"}]])},1082:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(11063).A)("Inbox",[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]])},4627:(e,t,s)=>{"use strict";s.d(t,{b:()=>o});var n=s(88111),a=s(96741),r=s(11063);let i=(0,r.A)("ArrowUp",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]),l=(0,r.A)("ArrowDown",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]),c=(0,r.A)("ArrowUpDown",[["path",{d:"m21 16-4 4-4-4",key:"f6ql7i"}],["path",{d:"M17 20V4",key:"1ejh1v"}],["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}]]);function o(e){let{columns:t,data:s,sortField:r,sortDir:o,onSort:d,onRowClick:u,rowKey:p,className:x}=e;return(0,n.jsx)("div",{className:(0,a.cn)("card overflow-hidden",x),children:(0,n.jsx)("div",{className:"overflow-x-auto",children:(0,n.jsxs)("table",{className:"w-full text-sm",children:[(0,n.jsx)("thead",{children:(0,n.jsx)("tr",{className:"border-b border-border bg-bg-secondary",children:t.map(e=>(0,n.jsx)("th",{className:(0,a.cn)("px-4 py-3 text-left text-xs font-medium text-text-muted uppercase tracking-wider whitespace-nowrap",e.sortable&&"cursor-pointer select-none hover:text-text-secondary",e.className),onClick:e.sortable&&d?()=>d(e.key):void 0,children:(0,n.jsxs)("span",{className:"inline-flex items-center gap-1",children:[e.label,e.sortable&&(r===e.key?"asc"===o?(0,n.jsx)(i,{className:"w-3 h-3"}):(0,n.jsx)(l,{className:"w-3 h-3"}):(0,n.jsx)(c,{className:"w-3 h-3 opacity-30"}))]})},e.key))})}),(0,n.jsx)("tbody",{className:"divide-y divide-border-subtle",children:s.map(e=>(0,n.jsx)("tr",{className:(0,a.cn)("transition-colors",u&&"cursor-pointer hover:bg-bg-secondary"),onClick:u?()=>u(e):void 0,children:t.map(t=>(0,n.jsx)("td",{className:(0,a.cn)("px-4 py-3 whitespace-nowrap",t.className),children:t.render(e)},t.key))},p(e)))})]})})})}},4736:(e,t,s)=>{"use strict";var n=s(11504);s.o(n,"usePathname")&&s.d(t,{usePathname:function(){return n.usePathname}}),s.o(n,"useRouter")&&s.d(t,{useRouter:function(){return n.useRouter}}),s.o(n,"useSearchParams")&&s.d(t,{useSearchParams:function(){return n.useSearchParams}})},6678:(e,t,s)=>{"use strict";s.d(t,{p:()=>i});var n=s(95388),a=s(23176),r=s(89654);function i(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{refreshInterval:t}=(0,r.c)(),s="receipts".concat((0,a.Go)(e));return(0,n.Ay)(s,()=>(0,a.qb)(e),{refreshInterval:t,revalidateOnFocus:!0})}},19593:(e,t,s)=>{"use strict";s.d(t,{d:()=>l});var n=s(88111),a=s(30417),r=s(28826),i=s(96741);function l(e){let{page:t,totalPages:s,onPageChange:l,className:c}=e;if(s<=1)return null;let o=[];if(s<=7)for(let e=1;e<=s;e++)o.push(e);else{o.push(1),t>3&&o.push("ellipsis");for(let e=Math.max(2,t-1);e<=Math.min(s-1,t+1);e++)o.push(e);t<s-2&&o.push("ellipsis"),o.push(s)}return(0,n.jsxs)("div",{className:(0,i.cn)("flex items-center justify-center gap-1",c),children:[(0,n.jsx)("button",{onClick:()=>l(t-1),disabled:t<=1,className:"p-2 rounded-md text-text-muted hover:bg-bg-tertiary disabled:opacity-30 disabled:cursor-not-allowed transition-colors",children:(0,n.jsx)(a.A,{className:"w-4 h-4"})}),o.map((e,s)=>"ellipsis"===e?(0,n.jsx)("span",{className:"px-2 text-text-muted",children:"..."},"e".concat(s)):(0,n.jsx)("button",{onClick:()=>l(e),className:(0,i.cn)("px-3 py-1 rounded-md text-sm transition-colors",e===t?"bg-primary text-white font-medium":"text-text-secondary hover:bg-bg-tertiary"),children:e},e)),(0,n.jsx)("button",{onClick:()=>l(t+1),disabled:t>=s,className:"p-2 rounded-md text-text-muted hover:bg-bg-tertiary disabled:opacity-30 disabled:cursor-not-allowed transition-colors",children:(0,n.jsx)(r.A,{className:"w-4 h-4"})})]})}},23176:(e,t,s)=>{"use strict";async function n(e,t){let s=await fetch(e,t);if(!s.ok){let e=await s.text().catch(()=>"Unknown error");throw Error("API error ".concat(s.status,": ").concat(e))}return s.json()}function a(e){let t=new URLSearchParams;for(let[s,n]of Object.entries(e))void 0!==n&&""!==n&&t.set(s,String(n));let s=t.toString();return s?"?".concat(s):""}async function r(){return n("/api/stats")}async function i(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return n("/api/receipts".concat(a(e)))}async function l(e){return n("/api/receipts/".concat(e))}async function c(e){return n("/api/chains/".concat(e))}async function o(){return n("/api/agents")}async function d(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return n("/api/judgments".concat(a(e)))}async function u(e,t){return n("/api/verify",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({receipt:e,public_key:t})})}async function p(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return n("/api/cleanup",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({dry_run:e})})}async function x(){return n("/api/config")}async function m(e){return n("/api/config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async function h(e){return n("/api/search".concat(a({q:e})))}async function g(e){return n("/api/invoices",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}s.d(t,{$Q:()=>h,Dz:()=>x,Go:()=>a,Jq:()=>g,Kt:()=>p,Lx:()=>l,MJ:()=>d,YK:()=>r,_R:()=>m,o3:()=>u,oN:()=>c,pQ:()=>o,qb:()=>i})},28826:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(11063).A)("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]])},30417:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(11063).A)("ChevronLeft",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]])},37326:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(11063).A)("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]])},44632:(e,t,s)=>{"use strict";s.d(t,{p:()=>i});var n=s(88111),a=s(96741),r=s(1082);function i(e){let{icon:t=r.A,title:s,description:i,action:l,className:c}=e;return(0,n.jsxs)("div",{className:(0,a.cn)("flex flex-col items-center justify-center py-16 text-center",c),children:[(0,n.jsx)(t,{className:"w-12 h-12 text-text-muted mb-4"}),(0,n.jsx)("h3",{className:"text-sm font-medium text-text-primary mb-1",children:s}),i&&(0,n.jsx)("p",{className:"text-sm text-text-muted max-w-sm",children:i}),l&&(0,n.jsx)("div",{className:"mt-4",children:l})]})}},46233:(e,t,s)=>{"use strict";s.d(t,{W:()=>i});var n=s(88111),a=s(94745),r=s(96741);function i(e){let{message:t="Something went wrong",onRetry:s,className:i}=e;return(0,n.jsxs)("div",{className:(0,r.cn)("flex flex-col items-center justify-center py-16 text-center",i),children:[(0,n.jsx)(a.A,{className:"w-12 h-12 text-danger mb-4"}),(0,n.jsx)("h3",{className:"text-sm font-medium text-text-primary mb-1",children:"Error"}),(0,n.jsx)("p",{className:"text-sm text-text-muted max-w-sm mb-4",children:t}),s&&(0,n.jsx)("button",{onClick:s,className:"px-4 py-2 text-sm font-medium bg-primary text-white rounded-md hover:bg-primary-hover transition-colors",children:"Retry"})]})}},47126:(e,t,s)=>{"use strict";s.d(t,{f:()=>i});var n=s(88111),a=s(62455),r=s(96741);function i(e){let{date:t,className:s}=e;return(0,n.jsx)("time",{dateTime:t,title:(0,a.Yq)(t),className:(0,r.cn)("text-text-secondary",s),children:(0,a.fF)(t)})}},58904:(e,t,s)=>{Promise.resolve().then(s.bind(s,98177))},59434:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(11063).A)("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]])},62455:(e,t,s)=>{"use strict";function n(e){let t="string"==typeof e?new Date(e):e,s=new Date().getTime()-t.getTime();if(s<0)return"just now";let n=Math.floor(s/1e3);if(n<60)return"".concat(n,"s ago");let a=Math.floor(n/60);if(a<60)return"".concat(a," min ago");let r=Math.floor(a/60);if(r<24)return"".concat(r," hr ago");let i=Math.floor(r/24);if(i<30)return"".concat(i,"d ago");let l=Math.floor(i/30);return"".concat(l,"mo ago")}function a(e){if(null==e)return"—";if(e<1e3)return"".concat(e,"ms");let t=e/1e3;if(t<60)return"".concat(t.toFixed(1),"s");if(t<3600)return"".concat(Math.floor(t/60),"m ").concat(Math.round(t%60),"s");if(t<86400){let e=Math.floor(t/3600),s=Math.floor(t%3600/60);return"".concat(e,"h ").concat(s,"m")}let s=Math.floor(t/86400),n=Math.floor(t%86400/3600);return"".concat(s,"d ").concat(n,"h")}function r(e){return null==e?"—":0===e?"$0.00":e<.01?"$".concat(e.toFixed(4)):"$".concat(e.toFixed(2))}function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:12;return e.length<=t?e:"".concat(e.slice(0,t),"...")}function l(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:16;return e.length<=t?e:"".concat(e.slice(0,t),"...")}function c(e){return e.toLocaleString("en-US")}function o(e){return"".concat((100*e).toFixed(1),"%")}function d(e){return("string"==typeof e?new Date(e):e).toLocaleString("en-US",{month:"short",day:"numeric",year:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"})}s.d(t,{Ct:()=>i,Yq:()=>d,ZV:()=>c,a3:()=>a,fF:()=>n,l9:()=>o,lV:()=>l,vv:()=>r})},66187:(e,t,s)=>{"use strict";s.d(t,{AV:()=>c,Eg:()=>i,F6:()=>l,O0:()=>r});var n=s(88111),a=s(96741);function r(e){let{className:t}=e;return(0,n.jsx)("div",{className:(0,a.cn)("animate-pulse bg-bg-tertiary rounded",t)})}function i(e){let{count:t=6}=e;return(0,n.jsx)("div",{className:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-4",children:Array.from({length:t}).map((e,t)=>(0,n.jsxs)("div",{className:"card p-4",children:[(0,n.jsx)(r,{className:"h-3 w-16 mb-3"}),(0,n.jsx)(r,{className:"h-7 w-20"})]},t))})}function l(e){let{rows:t=5}=e;return(0,n.jsxs)("div",{className:"card overflow-hidden",children:[(0,n.jsx)("div",{className:"border-b border-border p-3",children:(0,n.jsx)(r,{className:"h-4 w-48"})}),Array.from({length:t}).map((e,t)=>(0,n.jsxs)("div",{className:"flex items-center gap-4 p-3 border-b border-border-subtle last:border-0",children:[(0,n.jsx)(r,{className:"h-4 w-24"}),(0,n.jsx)(r,{className:"h-4 w-32"}),(0,n.jsx)(r,{className:"h-4 w-20"}),(0,n.jsx)(r,{className:"h-4 w-16 ml-auto"})]},t))]})}function c(){return(0,n.jsxs)("div",{className:"space-y-6",children:[(0,n.jsx)(r,{className:"h-8 w-48"}),(0,n.jsx)(i,{}),(0,n.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-4",children:[(0,n.jsx)(l,{}),(0,n.jsx)(l,{})]})]})}},68498:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(11063).A)("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]])},84109:(e,t,s)=>{"use strict";s.d(t,{Ez:()=>n,ZT:()=>r,av:()=>i,cZ:()=>a});let n={completed:{bg:"bg-success-subtle",text:"text-success",dot:"bg-success"},failed:{bg:"bg-danger-subtle",text:"text-danger",dot:"bg-danger"},pending:{bg:"bg-warning-subtle",text:"text-warning",dot:"bg-warning"},timeout:{bg:"bg-danger-subtle",text:"text-danger",dot:"bg-danger"}},a={max_latency_ms:"Max Latency",max_cost_usd:"Max Cost",min_confidence:"Min Confidence",required_fields:"Required Fields",status_must_be:"Status Must Be",output_schema:"Output Schema"},r={pass:{bg:"bg-success-subtle",text:"text-success"},fail:{bg:"bg-danger-subtle",text:"text-danger"},partial:{bg:"bg-warning-subtle",text:"text-warning"}},i=1e4},85605:(e,t,s)=>{"use strict";s.d(t,{W:()=>i});var n=s(88111),a=s(96741),r=s(84109);function i(e){var t;let{status:s,className:i}=e,l=null!=(t=r.Ez[s])?t:{bg:"bg-warning-subtle",text:"text-warning",dot:"bg-warning"};return(0,n.jsxs)("span",{className:(0,a.cn)("inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full text-xs font-medium",l.bg,l.text,i),children:[(0,n.jsx)("span",{className:(0,a.cn)("w-1.5 h-1.5 rounded-full",l.dot)}),s]})}},89654:(e,t,s)=>{"use strict";s.d(t,{c:()=>l});var n=s(55271),a=s(84109);let r="agent-receipts-auto-refresh",i="agent-receipts-refresh-interval";function l(){let[e,t]=(0,n.useState)(!0),[s,l]=(0,n.useState)(a.av);return(0,n.useEffect)(()=>{let e=function(){try{var e;let t="false"!==localStorage.getItem(r),s=parseInt(null!=(e=localStorage.getItem(i))?e:"",10);return{enabled:t,interval:isNaN(s)?a.av:s}}catch(e){return{enabled:!0,interval:a.av}}}();t(e.enabled),l(e.interval)},[]),{enabled:e,interval:s,toggle:(0,n.useCallback)(()=>{t(e=>{let t=!e;try{localStorage.setItem(r,String(t))}catch(e){}return t})},[]),setInterval:(0,n.useCallback)(e=>{l(e);try{localStorage.setItem(i,String(e))}catch(e){}},[]),refreshInterval:e?s:0}}},94745:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(11063).A)("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]])},96450:(e,t,s)=>{"use strict";s.d(t,{L:()=>r});var n=s(88111),a=s(96741);function r(e){let{passed:t,total:s,className:r}=e;if(0===s)return(0,n.jsx)("span",{className:"text-text-muted text-xs",children:"—"});let i=t===s;return(0,n.jsxs)("span",{className:(0,a.cn)("inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium",i?"bg-success-subtle text-success":"bg-danger-subtle text-danger",r),children:[t,"/",s," ",i?"✓":"✗"]})}},96741:(e,t,s)=>{"use strict";s.d(t,{cn:()=>r});var n=s(55242),a=s(13065);function r(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];return(0,a.QP)((0,n.$)(t))}},98177:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>w});var n=s(88111),a=s(4736),r=s(55271),i=s(6678),l=s(4627),c=s(19593),o=s(85605),d=s(96450),u=s(47126),p=s(44632),x=s(46233),m=s(66187),h=s(62455),g=s(68498),b=s(59434),y=s(37326),f=s(734),v=s(55935),j=s.n(v);function N(){var e,t,s,v,N,w,k,A,_,C,S,M,P,R,O,T;let L=(0,a.useSearchParams)(),q=(0,a.useRouter)(),[F,I]=(0,r.useState)(null!=(e=L.get("search"))?e:""),D={page:parseInt(null!=(t=L.get("page"))?t:"1",10),limit:parseInt(null!=(s=L.get("limit"))?s:"50",10),sort:null!=(v=L.get("sort"))?v:"timestamp:desc",agent_id:null!=(N=L.get("agent_id"))?N:void 0,action:null!=(w=L.get("action"))?w:void 0,status:null!=(k=L.get("status"))?k:void 0,constraint_passed:null!=(A=L.get("constraint_passed"))?A:void 0,receipt_type:null!=(_=L.get("receipt_type"))?_:void 0,environment:null!=(C=L.get("environment"))?C:void 0,search:null!=(S=L.get("search"))?S:void 0},{data:E,error:U,isLoading:J,mutate:z}=(0,i.p)(D),V=(0,r.useCallback)(e=>{let t=new URLSearchParams(L.toString());for(let[s,n]of Object.entries(e))n?t.set(s,n):t.delete(s);e.page||t.set("page","1"),q.push("/receipts?".concat(t.toString()))},[L,q]),K=(0,r.useCallback)(()=>{V({search:F||void 0})},[F,V]),$=(0,r.useCallback)(e=>{var t;let[s,n]=(null!=(t=L.get("sort"))?t:"timestamp:desc").split(":");V({sort:"".concat(e,":").concat(s===e&&"desc"===n?"asc":"desc")})},[L,V]),H=(0,r.useCallback)(()=>{q.push("/receipts"),I("")},[q]),W=L.get("agent_id")||L.get("action")||L.get("status")||L.get("constraint_passed")||L.get("receipt_type")||L.get("environment")||L.get("search"),[Z,Q]=(null!=(M=L.get("sort"))?M:"timestamp:desc").split(":"),Y=[{key:"timestamp",label:"Time",sortable:!0,render:e=>(0,n.jsx)(u.f,{date:e.timestamp,className:"text-xs"})},{key:"receipt_id",label:"Receipt ID",render:e=>(0,n.jsx)("code",{className:"font-mono text-xs text-primary",children:(0,h.Ct)(e.receipt_id)})},{key:"agent_id",label:"Agent",sortable:!0,render:e=>(0,n.jsx)(j(),{href:"/agents/".concat(e.agent_id),className:"text-xs text-text-secondary hover:text-primary",onClick:e=>e.stopPropagation(),children:e.agent_id})},{key:"action",label:"Action",sortable:!0,render:e=>(0,n.jsxs)("span",{className:"text-sm flex items-center gap-1.5",children:["memory"===e.receipt_type&&(0,n.jsx)("span",{className:"inline-block w-2 h-2 rounded-full bg-purple-500 shrink-0",title:"Memory receipt"}),e.action]})},{key:"status",label:"Status",sortable:!0,render:e=>(0,n.jsx)(o.W,{status:e.status})},{key:"constraints",label:"Constraints",render:e=>{let t=e.constraint_result;if(!t||!Array.isArray(t.results))return(0,n.jsx)("span",{className:"text-text-muted text-xs",children:"—"});let s=t.results.filter(e=>e.passed).length;return(0,n.jsx)(d.L,{passed:s,total:t.results.length})}},{key:"latency_ms",label:"Latency",sortable:!0,render:e=>(0,n.jsx)("span",{className:"text-xs text-text-secondary",children:(0,h.a3)(e.latency_ms)})},{key:"cost_usd",label:"Cost",sortable:!0,render:e=>(0,n.jsx)("span",{className:"text-xs text-text-secondary",children:(0,h.vv)(e.cost_usd)})},{key:"chain_id",label:"Chain",render:e=>e.chain_id?(0,n.jsx)(j(),{href:"/chains/".concat(e.chain_id),className:"font-mono text-xs text-primary hover:underline",onClick:e=>e.stopPropagation(),children:(0,h.Ct)(e.chain_id,10)}):(0,n.jsx)("span",{className:"text-text-muted text-xs",children:"—"})}],B=(0,r.useCallback)(()=>{if(!E)return;let e=new Blob([JSON.stringify(E.data,null,2)],{type:"application/json"}),t=URL.createObjectURL(e),s=document.createElement("a");s.href=t,s.download="receipts-".concat(new Date().toISOString().slice(0,10),".json"),s.click(),URL.revokeObjectURL(t)},[E]);return(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsx)("div",{className:"flex items-center justify-between",children:(0,n.jsx)("h1",{className:"text-lg font-semibold text-text-primary",children:"Receipts"})}),(0,n.jsx)("div",{className:"card p-4 space-y-3",children:(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,n.jsxs)("select",{value:null!=(P=L.get("status"))?P:"",onChange:e=>V({status:e.target.value||void 0}),className:"px-3 py-1.5 text-sm border border-border rounded-md bg-bg-primary text-text-primary",children:[(0,n.jsx)("option",{value:"",children:"All Status"}),(0,n.jsx)("option",{value:"completed",children:"Completed"}),(0,n.jsx)("option",{value:"failed",children:"Failed"}),(0,n.jsx)("option",{value:"pending",children:"Pending"}),(0,n.jsx)("option",{value:"timeout",children:"Timeout"})]}),(0,n.jsxs)("select",{value:null!=(R=L.get("constraint_passed"))?R:"",onChange:e=>V({constraint_passed:e.target.value||void 0}),className:"px-3 py-1.5 text-sm border border-border rounded-md bg-bg-primary text-text-primary",children:[(0,n.jsx)("option",{value:"",children:"All Constraints"}),(0,n.jsx)("option",{value:"true",children:"Passed"}),(0,n.jsx)("option",{value:"false",children:"Failed"})]}),(0,n.jsxs)("select",{value:null!=(O=L.get("receipt_type"))?O:"",onChange:e=>V({receipt_type:e.target.value||void 0}),className:"px-3 py-1.5 text-sm border border-border rounded-md bg-bg-primary text-text-primary",children:[(0,n.jsx)("option",{value:"",children:"All Types"}),(0,n.jsx)("option",{value:"action",children:"Action"}),(0,n.jsx)("option",{value:"judgment",children:"Judgment"}),(0,n.jsx)("option",{value:"arbitration",children:"Arbitration"}),(0,n.jsx)("option",{value:"memory",children:"Memory"})]}),(0,n.jsxs)("select",{value:null!=(T=L.get("environment"))?T:"",onChange:e=>V({environment:e.target.value||void 0}),className:"px-3 py-1.5 text-sm border border-border rounded-md bg-bg-primary text-text-primary",children:[(0,n.jsx)("option",{value:"",children:"All Environments"}),(0,n.jsx)("option",{value:"development",children:"Development"}),(0,n.jsx)("option",{value:"production",children:"Production"}),(0,n.jsx)("option",{value:"staging",children:"Staging"}),(0,n.jsx)("option",{value:"test",children:"Test"})]}),(0,n.jsx)("div",{className:"flex-1 flex items-center gap-2 min-w-[200px]",children:(0,n.jsx)("input",{type:"text",placeholder:"Search...",value:F,onChange:e=>I(e.target.value),onKeyDown:e=>"Enter"===e.key&&K(),className:"flex-1 px-3 py-1.5 text-sm border border-border rounded-md bg-bg-primary text-text-primary placeholder:text-text-muted"})}),W&&(0,n.jsxs)("button",{onClick:H,className:"flex items-center gap-1 px-3 py-1.5 text-xs text-text-muted hover:text-text-secondary transition-colors",children:[(0,n.jsx)(g.A,{className:"w-3 h-3"})," Clear"]})]})}),E&&(0,n.jsxs)("div",{className:"flex items-center justify-between text-sm",children:[(0,n.jsxs)("span",{className:"text-text-muted",children:["Showing ",(E.pagination.page-1)*E.pagination.limit+1,"–",Math.min(E.pagination.page*E.pagination.limit,E.pagination.total)," of ",E.pagination.total," receipts"]}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsxs)("button",{onClick:B,className:"flex items-center gap-1 px-3 py-1.5 text-xs border border-border rounded-md text-text-secondary hover:bg-bg-secondary transition-colors",children:[(0,n.jsx)(b.A,{className:"w-3 h-3"})," Export"]}),(0,n.jsxs)("button",{onClick:()=>z(),className:"flex items-center gap-1 px-3 py-1.5 text-xs border border-border rounded-md text-text-secondary hover:bg-bg-secondary transition-colors",children:[(0,n.jsx)(y.A,{className:"w-3 h-3"})," Refresh"]})]})]}),U?(0,n.jsx)(x.W,{message:U.message,onRetry:()=>z()}):J?(0,n.jsx)(m.F6,{rows:10}):E&&0!==E.data.length?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(l.b,{columns:Y,data:E.data,sortField:Z,sortDir:Q,onSort:$,onRowClick:e=>q.push("/receipts/".concat(e.receipt_id)),rowKey:e=>e.receipt_id}),(0,n.jsx)(c.d,{page:E.pagination.page,totalPages:E.pagination.total_pages,onPageChange:e=>V({page:String(e)})})]}):(0,n.jsx)(p.p,{icon:f.A,title:"No receipts found",description:W?"Try adjusting your filters":"Create receipts using the MCP server, SDK, or CLI"})]})}function w(){return(0,n.jsx)(r.Suspense,{fallback:(0,n.jsx)(m.F6,{rows:10}),children:(0,n.jsx)(N,{})})}}},e=>{e.O(0,[2702,5388,5935,814,9743,7358],()=>e(e.s=58904)),_N_E=e.O()}]);
@@ -0,0 +1,5 @@
1
+ @import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap");*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246/0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246/0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }
2
+
3
+ /*
4
+ ! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
5
+ */*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:IBM Plex Sans,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:IBM Plex Mono,Fira Code,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}body{background-color:var(--bg-primary);font-family:IBM Plex Sans,system-ui,sans-serif;color:var(--text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::-webkit-scrollbar{height:.5rem;width:.5rem}::-webkit-scrollbar-track{background-color:transparent}::-webkit-scrollbar-thumb{border-radius:9999px;background-color:var(--border-default)}::-webkit-scrollbar-thumb:hover{background-color:var(--text-muted)}.card{border-radius:.5rem;border-width:1px;border-color:var(--border-default);background-color:var(--bg-elevated)}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.bottom-0{bottom:0}.left-0{left:0}.right-0{right:0}.right-3{right:.75rem}.top-0{top:0}.top-3{top:.75rem}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-0\.5{height:.125rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-full{height:100%}.h-screen{height:100vh}.max-h-80{max-height:20rem}.max-h-96{max-height:24rem}.min-h-screen{min-height:100vh}.w-1\.5{width:.375rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-20{width:5rem}.w-24{width:6rem}.w-28{width:7rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-8{width:2rem}.w-full{width:100%}.min-w-0{min-width:0}.min-w-\[120px\]{min-width:120px}.min-w-\[200px\]{min-width:200px}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-2xl{max-width:42rem}.max-w-32{max-width:8rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-y{resize:vertical}.scroll-mt-8{scroll-margin-top:2rem}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border-subtle>:not([hidden])~:not([hidden]){border-color:var(--border-subtle)}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-amber-500\/30{border-color:rgb(245 158 11/.3)}.border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.border-border{border-color:var(--border-default)}.border-border-subtle{border-color:var(--border-subtle)}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.border-gray-800{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity,1))}.bg-amber-500\/10{background-color:rgb(245 158 11/.1)}.bg-bg-elevated{background-color:var(--bg-elevated)}.bg-bg-primary{background-color:var(--bg-primary)}.bg-bg-secondary{background-color:var(--bg-secondary)}.bg-bg-tertiary{background-color:var(--bg-tertiary)}.bg-black\/50{background-color:rgb(0 0 0/.5)}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.bg-border{background-color:var(--border-default)}.bg-danger{background-color:var(--danger)}.bg-danger-subtle{background-color:var(--danger-subtle)}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.bg-gray-950{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.bg-primary{background-color:var(--primary)}.bg-primary-subtle{background-color:var(--primary-subtle)}.bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.bg-success{background-color:var(--success)}.bg-success-subtle{background-color:var(--success-subtle)}.bg-text-muted{background-color:var(--text-muted)}.bg-transparent{background-color:transparent}.bg-warning{background-color:var(--warning)}.bg-warning-subtle{background-color:var(--warning-subtle)}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity,1))}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-2{padding-bottom:.5rem}.pb-20{padding-bottom:5rem}.pr-4{padding-right:1rem}.pt-0\.5{padding-top:.125rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.pt-\[20vh\]{padding-top:20vh}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:IBM Plex Mono,Fira Code,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-relaxed{line-height:1.625}.tracking-wider{letter-spacing:.05em}.text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.text-blue-900{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity,1))}.text-danger{color:var(--danger)}.text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity,1))}.text-primary{color:var(--primary)}.text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.text-success{color:var(--success)}.text-text-muted{color:var(--text-muted)}.text-text-primary{color:var(--text-primary)}.text-text-secondary{color:var(--text-secondary)}.text-warning{color:var(--warning)}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.opacity-30{opacity:.3}.opacity-60{opacity:.6}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgb(0 0 0/0.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-2xl,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgb(0 0 0/0.1),0 4px 6px -4px rgb(0 0 0/0.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.\!filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}:root{--bg-primary:#ffffff;--bg-secondary:#f8fafc;--bg-tertiary:#f1f5f9;--bg-elevated:#ffffff;--border-default:#e2e8f0;--border-subtle:#f1f5f9;--text-primary:#0f172a;--text-secondary:#475569;--text-muted:#94a3b8;--primary:#2563eb;--primary-hover:#1d4ed8;--primary-subtle:#eff6ff;--success:#16a34a;--success-subtle:#f0fdf4;--danger:#dc2626;--danger-subtle:#fef2f2;--warning:#d97706;--warning-subtle:#fffbeb;--info:#2563eb;--info-subtle:#eff6ff}.dark{--bg-primary:#09090b;--bg-secondary:#0f0f12;--bg-tertiary:#18181b;--bg-elevated:#1c1c20;--border-default:#27272a;--border-subtle:#1c1c20;--text-primary:#fafafa;--text-secondary:#a1a1aa;--text-muted:#52525b;--primary:#3b82f6;--primary-hover:#60a5fa;--primary-subtle:#172554;--success:#22c55e;--success-subtle:#052e16;--danger:#ef4444;--danger-subtle:#450a0a;--warning:#f59e0b;--warning-subtle:#451a03}.placeholder\:text-text-muted::-moz-placeholder{color:var(--text-muted)}.placeholder\:text-text-muted::placeholder{color:var(--text-muted)}.last\:border-0:last-child{border-width:0}.hover\:border-primary:hover{border-color:var(--primary)}.hover\:border-text-muted:hover{border-color:var(--text-muted)}.hover\:bg-bg-secondary:hover{background-color:var(--bg-secondary)}.hover\:bg-bg-tertiary:hover{background-color:var(--bg-tertiary)}.hover\:bg-danger-subtle:hover{background-color:var(--danger-subtle)}.hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.hover\:bg-primary-hover:hover{background-color:var(--primary-hover)}.hover\:bg-primary-subtle:hover{background-color:var(--primary-subtle)}.hover\:bg-success-subtle:hover{background-color:var(--success-subtle)}.hover\:text-primary:hover{color:var(--primary)}.hover\:text-text-primary:hover{color:var(--text-primary)}.hover\:text-text-secondary:hover{color:var(--text-secondary)}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-50:disabled{opacity:.5}.dark\:border-amber-400\/30:is(.dark *){border-color:rgb(251 191 36/.3)}.dark\:border-blue-700:is(.dark *){--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity,1))}.dark\:border-blue-800:is(.dark *){--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity,1))}.dark\:border-gray-600:is(.dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.dark\:bg-amber-500\/20:is(.dark *){background-color:rgb(245 158 11/.2)}.dark\:bg-blue-800:is(.dark *){--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity,1))}.dark\:bg-blue-900\/20:is(.dark *){background-color:rgb(30 58 138/.2)}.dark\:bg-blue-900\/30:is(.dark *){background-color:rgb(30 58 138/.3)}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:bg-gray-800\/50:is(.dark *){background-color:rgb(31 41 55/.5)}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.dark\:bg-gray-950:is(.dark *){--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.dark\:bg-purple-900\/30:is(.dark *){background-color:rgb(88 28 135/.3)}.dark\:text-amber-200:is(.dark *){--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity,1))}.dark\:text-amber-300:is(.dark *){--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity,1))}.dark\:text-blue-100:is(.dark *){--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity,1))}.dark\:text-blue-300:is(.dark *){--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.dark\:text-blue-400:is(.dark *){--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.dark\:text-gray-100:is(.dark *){--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.dark\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.dark\:text-gray-500:is(.dark *){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.dark\:text-gray-600:is(.dark *){--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.dark\:text-purple-300:is(.dark *){--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity,1))}.dark\:text-white:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}@media (min-width:640px){.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}}@media (min-width:768px){.md\:flex{display:flex}.md\:inline-flex{display:inline-flex}.md\:hidden{display:none}.md\:w-80{width:20rem}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:p-6{padding:1.5rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:pb-6{padding-bottom:1.5rem}}@media (min-width:1024px){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}
@@ -0,0 +1,238 @@
1
+ import type { Entity, Observation, Relationship, EntityType, MemoryScope } from '@agent-receipts/schema'
2
+ import { DEMO_ENTITIES, DEMO_OBSERVATIONS, DEMO_RELATIONSHIPS } from './demo-memory-data'
3
+
4
+ export interface FindEntitiesQuery {
5
+ entity_type?: EntityType
6
+ scope?: MemoryScope
7
+ query?: string
8
+ include_forgotten?: boolean
9
+ limit?: number
10
+ page?: number
11
+ }
12
+
13
+ export interface Pagination {
14
+ page: number
15
+ limit: number
16
+ total: number
17
+ total_pages: number
18
+ has_next: boolean
19
+ has_prev: boolean
20
+ }
21
+
22
+ export interface PaginatedEntities {
23
+ data: Entity[]
24
+ pagination: Pagination
25
+ }
26
+
27
+ export interface MemoryStats {
28
+ total_entities: number
29
+ total_observations: number
30
+ total_relationships: number
31
+ forgotten_observations: number
32
+ forgotten_entities: number
33
+ by_entity_type: Record<string, number>
34
+ by_operation: Record<string, number>
35
+ }
36
+
37
+ export interface SearchResult {
38
+ entity: Entity
39
+ observation: Observation
40
+ rank: number
41
+ }
42
+
43
+ export interface RecallResult {
44
+ entities: Entity[]
45
+ observations: Observation[]
46
+ total: number
47
+ }
48
+
49
+ export interface ProvenanceResult {
50
+ observation: Observation
51
+ entity: Entity
52
+ receipt_id: string
53
+ chain: Array<{ receipt_id: string; action: string; timestamp: string }>
54
+ }
55
+
56
+ export class DemoMemoryStore {
57
+ private entities: Entity[]
58
+ private observations: Observation[]
59
+ private relationships: Relationship[]
60
+
61
+ constructor() {
62
+ this.entities = DEMO_ENTITIES
63
+ this.observations = DEMO_OBSERVATIONS
64
+ this.relationships = DEMO_RELATIONSHIPS
65
+ }
66
+
67
+ findEntities(query: FindEntitiesQuery): PaginatedEntities {
68
+ const includeForgotten = query.include_forgotten ?? false
69
+ const limit = query.limit ?? 20
70
+ const page = query.page ?? 1
71
+
72
+ let filtered = this.entities.filter(e => {
73
+ if (!includeForgotten && e.forgotten_at !== null) return false
74
+ if (!includeForgotten && e.merged_into !== null) return false
75
+ if (query.entity_type && e.entity_type !== query.entity_type) return false
76
+ if (query.scope && e.scope !== query.scope) return false
77
+ if (query.query) {
78
+ const q = query.query.toLowerCase()
79
+ const nameMatch = e.name.toLowerCase().includes(q)
80
+ const aliasMatch = e.aliases.some(a => a.toLowerCase().includes(q))
81
+ if (!nameMatch && !aliasMatch) return false
82
+ }
83
+ return true
84
+ })
85
+
86
+ const total = filtered.length
87
+ const totalPages = Math.max(1, Math.ceil(total / limit))
88
+ const offset = (page - 1) * limit
89
+ filtered = filtered.slice(offset, offset + limit)
90
+
91
+ return {
92
+ data: filtered,
93
+ pagination: {
94
+ page,
95
+ limit,
96
+ total,
97
+ total_pages: totalPages,
98
+ has_next: page < totalPages,
99
+ has_prev: page > 1,
100
+ },
101
+ }
102
+ }
103
+
104
+ getEntity(id: string): Entity | null {
105
+ return this.entities.find(e => e.entity_id === id) ?? null
106
+ }
107
+
108
+ getObservations(entityId: string, includeForgotten: boolean): Observation[] {
109
+ const now = new Date().toISOString()
110
+ return this.observations.filter(o => {
111
+ if (o.entity_id !== entityId) return false
112
+ if (!includeForgotten && o.forgotten_at !== null) return false
113
+ if (!includeForgotten && o.expires_at && o.expires_at < now) return false
114
+ return true
115
+ }).sort((a, b) => b.observed_at.localeCompare(a.observed_at))
116
+ }
117
+
118
+ getRelationships(entityId: string): Relationship[] {
119
+ return this.relationships.filter(
120
+ r => r.from_entity_id === entityId || r.to_entity_id === entityId
121
+ )
122
+ }
123
+
124
+ getMemoryStats(): MemoryStats {
125
+ const forgottenObs = this.observations.filter(o => o.forgotten_at !== null).length
126
+ const forgottenEnts = this.entities.filter(e => e.forgotten_at !== null).length
127
+
128
+ const byEntityType: Record<string, number> = {}
129
+ for (const e of this.entities) {
130
+ byEntityType[e.entity_type] = (byEntityType[e.entity_type] ?? 0) + 1
131
+ }
132
+
133
+ const byOperation: Record<string, number> = {
134
+ observe: 9,
135
+ recall: 3,
136
+ forget: 2,
137
+ context: 1,
138
+ }
139
+
140
+ return {
141
+ total_entities: this.entities.length,
142
+ total_observations: this.observations.length,
143
+ total_relationships: this.relationships.length,
144
+ forgotten_observations: forgottenObs,
145
+ forgotten_entities: forgottenEnts,
146
+ by_entity_type: byEntityType,
147
+ by_operation: byOperation,
148
+ }
149
+ }
150
+
151
+ search(query: string, filters?: { entity_type?: EntityType; scope?: MemoryScope }): SearchResult[] {
152
+ const q = query.toLowerCase()
153
+ const now = new Date().toISOString()
154
+
155
+ const results: SearchResult[] = []
156
+ let rank = 0
157
+
158
+ for (const obs of this.observations) {
159
+ if (obs.forgotten_at !== null) continue
160
+ if (obs.expires_at && obs.expires_at < now) continue
161
+ if (!obs.content.toLowerCase().includes(q)) continue
162
+
163
+ const entity = this.getEntity(obs.entity_id)
164
+ if (!entity || entity.forgotten_at !== null) continue
165
+
166
+ if (filters?.entity_type && entity.entity_type !== filters.entity_type) continue
167
+ if (filters?.scope && entity.scope !== filters.scope) continue
168
+
169
+ results.push({ entity, observation: obs, rank: rank++ })
170
+ }
171
+
172
+ return results
173
+ }
174
+
175
+ recall(query: FindEntitiesQuery): RecallResult {
176
+ if (query.query) {
177
+ const results = this.search(query.query, {
178
+ entity_type: query.entity_type as EntityType | undefined,
179
+ scope: query.scope as MemoryScope | undefined,
180
+ })
181
+ const entityMap = new Map<string, Entity>()
182
+ const observations: Observation[] = []
183
+ for (const r of results) {
184
+ entityMap.set(r.entity.entity_id, r.entity)
185
+ observations.push(r.observation)
186
+ }
187
+ return {
188
+ entities: Array.from(entityMap.values()),
189
+ observations,
190
+ total: observations.length,
191
+ }
192
+ }
193
+
194
+ const entityResult = this.findEntities(query)
195
+ const observations: Observation[] = []
196
+ for (const entity of entityResult.data) {
197
+ const obs = this.getObservations(entity.entity_id, query.include_forgotten ?? false)
198
+ observations.push(...obs)
199
+ }
200
+
201
+ return {
202
+ entities: entityResult.data,
203
+ observations,
204
+ total: observations.length,
205
+ }
206
+ }
207
+
208
+ getProvenance(obsId: string): ProvenanceResult | null {
209
+ const observation = this.observations.find(o => o.observation_id === obsId)
210
+ if (!observation) return null
211
+
212
+ const entity = this.getEntity(observation.entity_id)
213
+ if (!entity) return null
214
+
215
+ return {
216
+ observation,
217
+ entity,
218
+ receipt_id: observation.source_receipt_id,
219
+ chain: [
220
+ {
221
+ receipt_id: observation.source_receipt_id,
222
+ action: 'memory.observe',
223
+ timestamp: observation.observed_at,
224
+ },
225
+ ],
226
+ }
227
+ }
228
+ }
229
+
230
+ // Singleton instance
231
+ let instance: DemoMemoryStore | null = null
232
+
233
+ export function getDemoMemoryStore(): DemoMemoryStore {
234
+ if (!instance) {
235
+ instance = new DemoMemoryStore()
236
+ }
237
+ return instance
238
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-receipts/crypto",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Ed25519 signing and verification for the Action Receipt Protocol",
5
5
  "license": "MIT",
6
6
  "author": "Amin <amin@webaes.co> (https://webaes.co)",
@@ -524,6 +524,7 @@ var MemoryStore = class {
524
524
  forgotten_at TEXT,
525
525
  forgotten_by TEXT,
526
526
  superseded_by TEXT,
527
+ expires_at TEXT,
527
528
  tags TEXT NOT NULL DEFAULT '[]',
528
529
  metadata TEXT NOT NULL DEFAULT '{}',
529
530
  FOREIGN KEY (entity_id) REFERENCES entities(entity_id)
@@ -534,6 +535,7 @@ var MemoryStore = class {
534
535
  CREATE INDEX IF NOT EXISTS idx_obs_confidence ON observations(confidence);
535
536
  CREATE INDEX IF NOT EXISTS idx_obs_forgotten ON observations(forgotten_at);
536
537
  CREATE INDEX IF NOT EXISTS idx_obs_receipt ON observations(source_receipt_id);
538
+ CREATE INDEX IF NOT EXISTS idx_obs_expires ON observations(expires_at);
537
539
 
538
540
  CREATE TABLE IF NOT EXISTS relationships (
539
541
  relationship_id TEXT PRIMARY KEY,
@@ -553,6 +555,10 @@ var MemoryStore = class {
553
555
  CREATE INDEX IF NOT EXISTS idx_rel_to ON relationships(to_entity_id);
554
556
  CREATE INDEX IF NOT EXISTS idx_rel_type ON relationships(relationship_type);
555
557
  `);
558
+ try {
559
+ this.db.exec("ALTER TABLE observations ADD COLUMN expires_at TEXT");
560
+ } catch {
561
+ }
556
562
  try {
557
563
  this.db.exec(`
558
564
  CREATE VIRTUAL TABLE IF NOT EXISTS observations_fts USING fts5(
@@ -705,10 +711,10 @@ var MemoryStore = class {
705
711
  this.db.prepare(`
706
712
  INSERT INTO observations (observation_id, entity_id, content, confidence,
707
713
  source_receipt_id, source_agent_id, source_context, observed_at,
708
- forgotten_at, forgotten_by, superseded_by, tags, metadata)
714
+ forgotten_at, forgotten_by, superseded_by, expires_at, tags, metadata)
709
715
  VALUES (@observation_id, @entity_id, @content, @confidence,
710
716
  @source_receipt_id, @source_agent_id, @source_context, @observed_at,
711
- @forgotten_at, @forgotten_by, @superseded_by, @tags, @metadata)
717
+ @forgotten_at, @forgotten_by, @superseded_by, @expires_at, @tags, @metadata)
712
718
  `).run({
713
719
  observation_id: obs.observation_id,
714
720
  entity_id: obs.entity_id,
@@ -721,6 +727,7 @@ var MemoryStore = class {
721
727
  forgotten_at: obs.forgotten_at,
722
728
  forgotten_by: obs.forgotten_by,
723
729
  superseded_by: obs.superseded_by,
730
+ expires_at: obs.expires_at ?? null,
724
731
  tags: JSON.stringify(obs.tags),
725
732
  metadata: JSON.stringify(obs.metadata)
726
733
  });
@@ -732,7 +739,7 @@ var MemoryStore = class {
732
739
  return this.rowToObservation(row);
733
740
  }
734
741
  getObservations(entityId, includeForgotten = false) {
735
- const where = includeForgotten ? "WHERE entity_id = ?" : "WHERE entity_id = ? AND forgotten_at IS NULL";
742
+ const where = includeForgotten ? "WHERE entity_id = ?" : "WHERE entity_id = ? AND forgotten_at IS NULL AND (expires_at IS NULL OR expires_at > datetime('now'))";
736
743
  const rows = this.db.prepare(
737
744
  `SELECT * FROM observations ${where} ORDER BY observed_at DESC`
738
745
  ).all(entityId);
@@ -787,6 +794,7 @@ var MemoryStore = class {
787
794
  JOIN observations o ON o.rowid = observations_fts.rowid
788
795
  WHERE observations_fts MATCH ?
789
796
  AND o.forgotten_at IS NULL
797
+ AND (o.expires_at IS NULL OR o.expires_at > datetime('now'))
790
798
  ORDER BY rank
791
799
  LIMIT ?
792
800
  `).all(query, limit);
@@ -803,6 +811,7 @@ var MemoryStore = class {
803
811
  const likeRows = this.db.prepare(`
804
812
  SELECT * FROM observations
805
813
  WHERE content LIKE ? AND forgotten_at IS NULL
814
+ AND (expires_at IS NULL OR expires_at > datetime('now'))
806
815
  ORDER BY observed_at DESC
807
816
  LIMIT ?
808
817
  `).all(`%${query}%`, limit);
@@ -903,6 +912,98 @@ var MemoryStore = class {
903
912
  by_operation: {}
904
913
  };
905
914
  }
915
+ // --- Duplicate detection ---
916
+ findPossibleDuplicates(entityId) {
917
+ const entity = this.getEntity(entityId);
918
+ if (!entity) return [];
919
+ const nameTokens = entity.name.toLowerCase().split(/\s+/).filter((t) => t.length >= 2);
920
+ if (nameTokens.length === 0) return [];
921
+ const conditions = nameTokens.map(() => "(LOWER(name) LIKE ? OR LOWER(aliases) LIKE ?)").join(" OR ");
922
+ const params = [];
923
+ for (const token of nameTokens) {
924
+ params.push(`%${token}%`, `%${token}%`);
925
+ }
926
+ const rows = this.db.prepare(`
927
+ SELECT * FROM entities
928
+ WHERE entity_type = ?
929
+ AND entity_id != ?
930
+ AND forgotten_at IS NULL
931
+ AND merged_into IS NULL
932
+ AND (${conditions})
933
+ `).all(entity.entity_type, entityId, ...params);
934
+ return rows.map((r) => this.rowToEntity(r));
935
+ }
936
+ // --- Context helpers ---
937
+ getTopEntities(limit, scope) {
938
+ const scopeFilter = scope ? "AND e.scope = ?" : "";
939
+ const params = scope ? [scope, limit] : [limit];
940
+ const rows = this.db.prepare(`
941
+ SELECT e.*, COUNT(o.observation_id) as obs_count, MAX(o.observed_at) as latest
942
+ FROM entities e
943
+ LEFT JOIN observations o ON o.entity_id = e.entity_id AND o.forgotten_at IS NULL
944
+ AND (o.expires_at IS NULL OR o.expires_at > datetime('now'))
945
+ WHERE e.forgotten_at IS NULL AND e.merged_into IS NULL ${scopeFilter}
946
+ GROUP BY e.entity_id
947
+ ORDER BY obs_count DESC
948
+ LIMIT ?
949
+ `).all(...params);
950
+ return rows.map((r) => ({
951
+ ...this.rowToEntity(r),
952
+ observation_count: r.obs_count,
953
+ latest_observation: r.latest ?? ""
954
+ }));
955
+ }
956
+ getRecentObservations(limit, agentId) {
957
+ const agentFilter = agentId ? "AND source_agent_id = ?" : "";
958
+ const params = agentId ? [agentId, limit] : [limit];
959
+ const rows = this.db.prepare(`
960
+ SELECT * FROM observations
961
+ WHERE forgotten_at IS NULL
962
+ AND (expires_at IS NULL OR expires_at > datetime('now'))
963
+ ${agentFilter}
964
+ ORDER BY observed_at DESC
965
+ LIMIT ?
966
+ `).all(...params);
967
+ return rows.map((r) => this.rowToObservation(r));
968
+ }
969
+ getActiveRelationships(limit) {
970
+ const rows = this.db.prepare(
971
+ "SELECT * FROM relationships WHERE forgotten_at IS NULL ORDER BY created_at DESC LIMIT ?"
972
+ ).all(limit);
973
+ return rows.map((r) => this.rowToRelationship(r));
974
+ }
975
+ getPreferenceObservations(limit) {
976
+ const rows = this.db.prepare(`
977
+ SELECT o.* FROM observations o
978
+ JOIN entities e ON e.entity_id = o.entity_id
979
+ WHERE e.entity_type = 'preference'
980
+ AND o.forgotten_at IS NULL
981
+ AND (o.expires_at IS NULL OR o.expires_at > datetime('now'))
982
+ ORDER BY o.observed_at DESC
983
+ LIMIT ?
984
+ `).all(limit);
985
+ return rows.map((r) => this.rowToObservation(r));
986
+ }
987
+ getContextStats() {
988
+ const entities = this.db.prepare("SELECT COUNT(*) as cnt FROM entities WHERE forgotten_at IS NULL").get().cnt;
989
+ const observations = this.db.prepare("SELECT COUNT(*) as cnt FROM observations WHERE forgotten_at IS NULL AND (expires_at IS NULL OR expires_at > datetime('now'))").get().cnt;
990
+ const relationships = this.db.prepare("SELECT COUNT(*) as cnt FROM relationships WHERE forgotten_at IS NULL").get().cnt;
991
+ const agentRows = this.db.prepare("SELECT DISTINCT source_agent_id FROM observations WHERE forgotten_at IS NULL").all();
992
+ return {
993
+ total_entities: entities,
994
+ total_observations: observations,
995
+ total_relationships: relationships,
996
+ agents_contributing: agentRows.map((r) => r.source_agent_id)
997
+ };
998
+ }
999
+ // --- Cleanup ---
1000
+ cleanupExpiredObservations() {
1001
+ const result = this.db.prepare(`
1002
+ UPDATE observations SET forgotten_at = datetime('now'), forgotten_by = 'system:cleanup'
1003
+ WHERE expires_at IS NOT NULL AND expires_at <= datetime('now') AND forgotten_at IS NULL
1004
+ `).run();
1005
+ return result.changes;
1006
+ }
906
1007
  // --- Row converters ---
907
1008
  rowToEntity(row) {
908
1009
  return {
@@ -933,6 +1034,7 @@ var MemoryStore = class {
933
1034
  forgotten_at: row.forgotten_at || null,
934
1035
  forgotten_by: row.forgotten_by || null,
935
1036
  superseded_by: row.superseded_by || null,
1037
+ expires_at: row.expires_at || null,
936
1038
  tags: JSON.parse(row.tags || "[]"),
937
1039
  metadata: JSON.parse(row.metadata || "{}")
938
1040
  };
@@ -1665,6 +1767,7 @@ var MemoryEngine = class {
1665
1767
  forgotten_at: null,
1666
1768
  forgotten_by: null,
1667
1769
  superseded_by: null,
1770
+ expires_at: params.ttlSeconds ? new Date(Date.now() + params.ttlSeconds * 1e3).toISOString() : null,
1668
1771
  tags: params.tags ?? [],
1669
1772
  metadata: {}
1670
1773
  });
@@ -1818,6 +1921,35 @@ var MemoryEngine = class {
1818
1921
  memoryAudit(params) {
1819
1922
  return this.memoryStore.getMemoryStats(params.agentId, params.from, params.to);
1820
1923
  }
1924
+ async getContext(params) {
1925
+ const maxEntities = Math.min(params.maxEntities ?? 10, 50);
1926
+ const maxObservations = Math.min(params.maxObservations ?? 20, 100);
1927
+ const entities = this.memoryStore.getTopEntities(maxEntities, params.scope);
1928
+ const recent_observations = this.memoryStore.getRecentObservations(maxObservations, params.agentId);
1929
+ const relationships = this.memoryStore.getActiveRelationships(50);
1930
+ const preferences = this.memoryStore.getPreferenceObservations(20);
1931
+ const stats = this.memoryStore.getContextStats();
1932
+ const receipt = await this.receiptEngine.create({
1933
+ action: "memory.context",
1934
+ receipt_type: "memory",
1935
+ input_hash: hashData({ scope: params.scope, maxEntities, maxObservations }),
1936
+ output_hash: hashData({ entities: entities.length, observations: recent_observations.length }),
1937
+ status: "completed",
1938
+ metadata: {
1939
+ memory: {
1940
+ memory_operation: "recall",
1941
+ entity_id: null,
1942
+ observation_id: null,
1943
+ relationship_id: null,
1944
+ scope: params.scope ?? "agent",
1945
+ query: null,
1946
+ results_count: entities.length + recent_observations.length,
1947
+ confidence: null
1948
+ }
1949
+ }
1950
+ });
1951
+ return { entities, recent_observations, relationships, preferences, stats, receipt };
1952
+ }
1821
1953
  };
1822
1954
 
1823
1955
  // src/engine/invoice-formatters.ts