@agent-receipts/dashboard 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) 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 +54 -54
  4. package/standalone/apps/web/.next/app-path-routes-manifest.json +13 -13
  5. package/standalone/apps/web/.next/build-manifest.json +2 -2
  6. package/standalone/apps/web/.next/prerender-manifest.json +34 -34
  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 +1 -1
  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 +1 -1
  14. package/standalone/apps/web/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
  15. package/standalone/apps/web/.next/server/app/api/chains/[id]/route_client-reference-manifest.js +1 -1
  16. package/standalone/apps/web/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  17. package/standalone/apps/web/.next/server/app/api/config/route_client-reference-manifest.js +1 -1
  18. package/standalone/apps/web/.next/server/app/api/invoices/route_client-reference-manifest.js +1 -1
  19. package/standalone/apps/web/.next/server/app/api/judgments/route_client-reference-manifest.js +1 -1
  20. package/standalone/apps/web/.next/server/app/api/memory/audit/route_client-reference-manifest.js +1 -1
  21. package/standalone/apps/web/.next/server/app/api/memory/entities/[id]/route_client-reference-manifest.js +1 -1
  22. package/standalone/apps/web/.next/server/app/api/memory/entities/route_client-reference-manifest.js +1 -1
  23. package/standalone/apps/web/.next/server/app/api/memory/forget/route_client-reference-manifest.js +1 -1
  24. package/standalone/apps/web/.next/server/app/api/memory/observe/route_client-reference-manifest.js +1 -1
  25. package/standalone/apps/web/.next/server/app/api/memory/provenance/[obsId]/route_client-reference-manifest.js +1 -1
  26. package/standalone/apps/web/.next/server/app/api/memory/recall/route_client-reference-manifest.js +1 -1
  27. package/standalone/apps/web/.next/server/app/api/receipts/[id]/route_client-reference-manifest.js +1 -1
  28. package/standalone/apps/web/.next/server/app/api/receipts/route_client-reference-manifest.js +1 -1
  29. package/standalone/apps/web/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  30. package/standalone/apps/web/.next/server/app/api/stats/route_client-reference-manifest.js +1 -1
  31. package/standalone/apps/web/.next/server/app/api/verify/route_client-reference-manifest.js +1 -1
  32. package/standalone/apps/web/.next/server/app/chains/[id]/page_client-reference-manifest.js +1 -1
  33. package/standalone/apps/web/.next/server/app/chains/page_client-reference-manifest.js +1 -1
  34. package/standalone/apps/web/.next/server/app/chains.html +2 -2
  35. package/standalone/apps/web/.next/server/app/chains.rsc +1 -1
  36. package/standalone/apps/web/.next/server/app/constraints/page_client-reference-manifest.js +1 -1
  37. package/standalone/apps/web/.next/server/app/constraints.html +2 -2
  38. package/standalone/apps/web/.next/server/app/constraints.rsc +1 -1
  39. package/standalone/apps/web/.next/server/app/get-started/page_client-reference-manifest.js +1 -1
  40. package/standalone/apps/web/.next/server/app/get-started.html +2 -2
  41. package/standalone/apps/web/.next/server/app/get-started.rsc +1 -1
  42. package/standalone/apps/web/.next/server/app/how-it-works/page_client-reference-manifest.js +1 -1
  43. package/standalone/apps/web/.next/server/app/how-it-works.html +2 -2
  44. package/standalone/apps/web/.next/server/app/how-it-works.rsc +1 -1
  45. package/standalone/apps/web/.next/server/app/index.html +2 -2
  46. package/standalone/apps/web/.next/server/app/index.rsc +1 -1
  47. package/standalone/apps/web/.next/server/app/invoices/page_client-reference-manifest.js +1 -1
  48. package/standalone/apps/web/.next/server/app/invoices.html +3 -3
  49. package/standalone/apps/web/.next/server/app/invoices.rsc +1 -1
  50. package/standalone/apps/web/.next/server/app/judgments/page_client-reference-manifest.js +1 -1
  51. package/standalone/apps/web/.next/server/app/judgments.html +2 -2
  52. package/standalone/apps/web/.next/server/app/judgments.rsc +1 -1
  53. package/standalone/apps/web/.next/server/app/memory/[entityId]/page_client-reference-manifest.js +1 -1
  54. package/standalone/apps/web/.next/server/app/memory/audit/page_client-reference-manifest.js +1 -1
  55. package/standalone/apps/web/.next/server/app/memory/audit.html +2 -2
  56. package/standalone/apps/web/.next/server/app/memory/audit.rsc +1 -1
  57. package/standalone/apps/web/.next/server/app/memory/page_client-reference-manifest.js +1 -1
  58. package/standalone/apps/web/.next/server/app/memory.html +2 -2
  59. package/standalone/apps/web/.next/server/app/memory.rsc +1 -1
  60. package/standalone/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
  61. package/standalone/apps/web/.next/server/app/receipts/[id]/page_client-reference-manifest.js +1 -1
  62. package/standalone/apps/web/.next/server/app/receipts/page_client-reference-manifest.js +1 -1
  63. package/standalone/apps/web/.next/server/app/receipts.html +2 -2
  64. package/standalone/apps/web/.next/server/app/receipts.rsc +1 -1
  65. package/standalone/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  66. package/standalone/apps/web/.next/server/app/settings.html +2 -2
  67. package/standalone/apps/web/.next/server/app/settings.rsc +1 -1
  68. package/standalone/apps/web/.next/server/app/verify/page_client-reference-manifest.js +1 -1
  69. package/standalone/apps/web/.next/server/app/verify.html +2 -2
  70. package/standalone/apps/web/.next/server/app/verify.rsc +1 -1
  71. package/standalone/apps/web/.next/server/app-paths-manifest.json +13 -13
  72. package/standalone/apps/web/.next/server/chunks/6803.js +26 -26
  73. package/standalone/apps/web/.next/server/chunks/808.js +1 -1
  74. package/standalone/apps/web/.next/server/pages/404.html +2 -2
  75. package/standalone/apps/web/.next/server/pages/500.html +1 -1
  76. package/standalone/apps/web/.next/server/pages-manifest.json +1 -1
  77. package/standalone/packages/crypto/package.json +1 -1
  78. package/standalone/packages/mcp-server/dist/index.js +163 -26
  79. package/standalone/packages/mcp-server/package.json +1 -1
  80. /package/standalone/apps/web/.next/static/{4imcQFGwcLOgYedAyPG7i → bPnZEfk42BH5O3uBqRDmu}/_buildManifest.js +0 -0
  81. /package/standalone/apps/web/.next/static/{4imcQFGwcLOgYedAyPG7i → bPnZEfk42BH5O3uBqRDmu}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- "use strict";exports.id=6803,exports.ids=[6803],exports.modules={6170:(a,b,c)=>{c.d(b,{TZ:()=>j,W_:()=>g,XF:()=>i,o3:()=>h,sP:()=>k});var d=c(23993),e=c(38884);function f(a){let b=Object.keys(a).sort();return JSON.stringify(a,b)}function g(a){return{receipt_id:a.receipt_id,chain_id:a.chain_id,receipt_type:a.receipt_type,agent_id:a.agent_id,org_id:a.org_id,action:a.action,input_hash:a.input_hash,output_hash:a.output_hash,status:a.status,timestamp:a.timestamp,completed_at:a.completed_at,environment:a.environment}}function h(a,b){var c;let e=f(a),g=new TextEncoder().encode(e),h=d.jn.hexToBytes(b),i=(0,d._S)(g,h);return`ed25519:${c=i,Buffer.from(c).toString("base64")}`}function i(a,b,c){try{var e;if(!b.startsWith("ed25519:"))return!1;let g=f(a),h=new TextEncoder().encode(g),i=(e=b.slice(8),new Uint8Array(Buffer.from(e,"base64"))),j=d.jn.hexToBytes(c);return(0,d.MX)(i,h,j)}catch{return!1}}function j(){let a=d.Wp.randomPrivateKey(),b=(0,d.lG)(a);return{privateKey:d.jn.bytesToHex(a),publicKey:d.jn.bytesToHex(b)}}function k(a){let b=d.jn.hexToBytes(a),c=(0,d.lG)(b);return d.jn.bytesToHex(c)}d.jn.sha512Sync=(...a)=>(0,e.Zf)(d.jn.concatBytes(...a))},96803:(a,b,c)=>{c.d(b,{mf:()=>D,t5:()=>B,wT:()=>M,ny:()=>F,x:()=>L,Ap:()=>A,formatInvoiceCSV:()=>O,formatInvoiceHTML:()=>R,formatInvoiceJSON:()=>N,formatInvoiceMarkdown:()=>Q,generateInvoice:()=>K});var d=c(79748),e=c(33873),f=c(31940),g=c(55511),h=c(6170),i=c(21820),j=c(18103),k=c(68798),l=k.k5(["pending","completed","failed","timeout"]),m=k.k5(["action","verification","judgment","arbitration","memory"]),n=k.k5(["development","production","staging","test"]),o=k.k5(["UNAUTHORIZED","KEY_REVOKED","FORBIDDEN","RECEIPT_NOT_FOUND","CHAIN_NOT_FOUND","AGENT_NOT_FOUND","RECEIPT_NOT_PENDING","RECEIPT_IMMUTABLE","RATE_LIMIT_EXCEEDED","VALIDATION_ERROR","INTERNAL_ERROR"]);k.Ik({receipt_id:k.Yj(),chain_id:k.Yj(),receipt_type:m,agent_id:k.Yj(),org_id:k.Yj(),action:k.Yj(),input_hash:k.Yj(),output_hash:k.Yj().nullable(),status:l,timestamp:k.Yj().datetime(),completed_at:k.Yj().datetime().nullable(),environment:n});var p=k.Ik({receipt_id:k.Yj(),parent_receipt_id:k.Yj().nullable(),chain_id:k.Yj(),receipt_type:m,agent_id:k.Yj(),org_id:k.Yj(),action:k.Yj(),input_hash:k.Yj(),output_hash:k.Yj().nullable(),output_summary:k.Yj().nullable(),model:k.Yj().nullable(),tokens_in:k.ai().int().nonnegative().nullable(),tokens_out:k.ai().int().nonnegative().nullable(),cost_usd:k.ai().nonnegative().nullable(),latency_ms:k.ai().int().nonnegative().nullable(),tool_calls:k.YO(k.Yj()).nullable(),timestamp:k.Yj().datetime(),completed_at:k.Yj().datetime().nullable(),status:l,error:k.g1(k.L5()).nullable(),environment:n,tags:k.YO(k.Yj()).nullable(),constraints:k.g1(k.L5()).nullable(),constraint_result:k.g1(k.L5()).nullable(),signature:k.Yj(),verify_url:k.Yj().url(),callback_verified:k.zM().nullable(),confidence:k.ai().min(0).max(1).nullable(),metadata:k.g1(k.L5())}),q=k.Ik({type:k.Yj().min(1),value:k.L5(),message:k.Yj().optional()}),r=k.Ik({type:k.Yj(),passed:k.zM(),expected:k.L5(),actual:k.L5(),message:k.Yj().optional()});k.Ik({passed:k.zM(),results:k.YO(r),evaluated_at:k.Yj().datetime()}),k.YO(q);var s=k.Ik({name:k.Yj().min(1),description:k.Yj().min(1),weight:k.ai().min(0).max(1),passing_threshold:k.ai().min(0).max(1).optional(),examples:k.Ik({good:k.YO(k.Yj()).optional(),bad:k.YO(k.Yj()).optional()}).optional()});k.Ik({version:k.Yj().default("1.0"),criteria:k.YO(s).min(1),passing_threshold:k.ai().min(0).max(1).default(.7),require_all:k.zM().default(!1)});var t=k.Ik({criterion:k.Yj(),score:k.ai().min(0).max(1),passed:k.zM(),reasoning:k.Yj()});k.Ik({verdict:k.k5(["pass","fail","partial"]),score:k.ai().min(0).max(1),criteria_results:k.YO(t),overall_reasoning:k.Yj(),rubric_version:k.Yj()}),k.Ik({agent_id:k.Yj().min(1),action:k.Yj().min(1),input_hash:k.Yj().min(1),receipt_type:m.default("action"),status:l.default("pending"),environment:n.default("production"),parent_receipt_id:k.Yj().nullable().optional(),output_hash:k.Yj().nullable().optional(),output_summary:k.Yj().nullable().optional(),model:k.Yj().nullable().optional(),tokens_in:k.ai().int().nonnegative().nullable().optional(),tokens_out:k.ai().int().nonnegative().nullable().optional(),cost_usd:k.ai().nonnegative().nullable().optional(),latency_ms:k.ai().int().nonnegative().nullable().optional(),tool_calls:k.YO(k.Yj()).nullable().optional(),tags:k.YO(k.Yj()).nullable().optional(),confidence:k.ai().min(0).max(1).nullable().optional(),callback_verified:k.zM().nullable().optional(),metadata:k.g1(k.L5()).optional()}),k.Ik({status:k.k5(["completed","failed","timeout"]),output_hash:k.Yj().nullable().optional(),output_summary:k.Yj().nullable().optional(),model:k.Yj().nullable().optional(),tokens_in:k.ai().int().nonnegative().nullable().optional(),tokens_out:k.ai().int().nonnegative().nullable().optional(),cost_usd:k.ai().nonnegative().nullable().optional(),latency_ms:k.ai().int().nonnegative().nullable().optional(),tool_calls:k.YO(k.Yj()).nullable().optional(),confidence:k.ai().min(0).max(1).nullable().optional(),callback_verified:k.zM().nullable().optional(),error:k.g1(k.L5()).nullable().optional()}),k.Ik({verified:k.zM(),receipt:k.Ik({receipt_id:k.Yj(),chain_id:k.Yj(),receipt_type:m,agent_id:k.Yj(),action:k.Yj(),status:l,input_hash:k.Yj(),output_hash:k.Yj().nullable(),signature:k.Yj(),timestamp:k.Yj().datetime(),completed_at:k.Yj().datetime().nullable(),environment:n,latency_ms:k.ai().int().nonnegative().nullable()}),signature_valid:k.zM(),chain_length:k.ai().int().nonnegative(),public_key_url:k.Yj().url()}),k.Ik({page:k.au.number().int().positive().default(1),limit:k.au.number().int().positive().max(100).default(50),agent_id:k.Yj().optional(),action:k.Yj().optional(),status:l.optional(),environment:n.optional(),receipt_type:m.optional(),chain_id:k.Yj().optional(),tag:k.Yj().optional(),from:k.Yj().datetime().optional(),to:k.Yj().datetime().optional(),sort:k.Yj().regex(/^(created_at|completed_at|latency_ms|cost_usd):(asc|desc)$/).default("created_at:desc")}),k.Ik({page:k.ai().int().positive(),limit:k.ai().int().positive(),total:k.ai().int().nonnegative(),total_pages:k.ai().int().nonnegative(),has_next:k.zM(),has_prev:k.zM()}),k.Ik({error:k.Ik({code:o,message:k.Yj(),status:k.ai().int()})});var u=k.k5(["person","project","organization","preference","fact","context","tool","custom"]),v=k.k5(["observe","create","merge","forget","forget_entity","recall","update"]),w=k.k5(["agent","user","team","global"]),x=k.k5(["certain","high","medium","low","deprecated"]);k.Ik({observation_id:k.Yj(),entity_id:k.Yj(),content:k.Yj(),confidence:x.default("medium"),source_receipt_id:k.Yj(),source_agent_id:k.Yj(),source_context:k.Yj().nullable(),observed_at:k.Yj().datetime(),forgotten_at:k.Yj().datetime().nullable(),forgotten_by:k.Yj().nullable(),superseded_by:k.Yj().nullable(),expires_at:k.Yj().datetime().nullable().default(null),tags:k.YO(k.Yj()).default([]),metadata:k.g1(k.L5()).default({})}),k.Ik({relationship_id:k.Yj(),from_entity_id:k.Yj(),to_entity_id:k.Yj(),relationship_type:k.Yj(),strength:x.default("medium"),source_receipt_id:k.Yj(),created_at:k.Yj().datetime(),forgotten_at:k.Yj().datetime().nullable(),metadata:k.g1(k.L5()).default({})}),k.Ik({entity_id:k.Yj(),entity_type:u,name:k.Yj(),aliases:k.YO(k.Yj()).default([]),scope:w.default("agent"),created_at:k.Yj().datetime(),created_by_agent:k.Yj(),created_by_receipt:k.Yj(),forgotten_at:k.Yj().datetime().nullable(),merged_into:k.Yj().nullable(),attributes:k.g1(k.L5()).default({}),metadata:k.g1(k.L5()).default({})}),k.Ik({memory_operation:v,entity_id:k.Yj().nullable(),observation_id:k.Yj().nullable(),relationship_id:k.Yj().nullable(),scope:w,query:k.Yj().nullable(),results_count:k.ai().int().nullable(),confidence:x.nullable()}),k.Ik({query:k.Yj().optional(),entity_type:u.optional(),entity_id:k.Yj().optional(),scope:w.optional(),agent_id:k.Yj().optional(),confidence_min:x.optional(),include_forgotten:k.zM().default(!1),tags:k.YO(k.Yj()).optional(),limit:k.ai().int().min(1).max(100).default(20),page:k.ai().int().min(1).default(1)});var y=(a=>"undefined"!=typeof require?require:"undefined"!=typeof Proxy?new Proxy(a,{get:(a,b)=>("undefined"!=typeof require?require:a)[b]}):a)(function(a){if("undefined"!=typeof require)return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')}),z=new Set(["timestamp","completed_at","cost_usd","latency_ms","tokens_in","tokens_out","confidence"]),A=class{constructor(a){this.dataDir=a,this.dbPath=(0,e.join)(a,"receipts.db"),this.receiptsDir=(0,e.join)(a,"receipts")}async init(){await (0,d.mkdir)(this.dataDir,{recursive:!0}),this.db=new f(this.dbPath),this.db.pragma("journal_mode = WAL"),this.db.pragma("foreign_keys = ON"),this.db.exec(`
1
+ "use strict";exports.id=6803,exports.ids=[6803],exports.modules={6170:(a,b,c)=>{c.d(b,{TZ:()=>j,W_:()=>g,XF:()=>i,o3:()=>h,sP:()=>k});var d=c(23993),e=c(38884);function f(a){let b=Object.keys(a).sort();return JSON.stringify(a,b)}function g(a){return{receipt_id:a.receipt_id,chain_id:a.chain_id,receipt_type:a.receipt_type,agent_id:a.agent_id,org_id:a.org_id,action:a.action,input_hash:a.input_hash,output_hash:a.output_hash,status:a.status,timestamp:a.timestamp,completed_at:a.completed_at,environment:a.environment}}function h(a,b){var c;let e=f(a),g=new TextEncoder().encode(e),h=d.jn.hexToBytes(b),i=(0,d._S)(g,h);return`ed25519:${c=i,Buffer.from(c).toString("base64")}`}function i(a,b,c){try{var e;if(!b.startsWith("ed25519:"))return!1;let g=f(a),h=new TextEncoder().encode(g),i=(e=b.slice(8),new Uint8Array(Buffer.from(e,"base64"))),j=d.jn.hexToBytes(c);return(0,d.MX)(i,h,j)}catch{return!1}}function j(){let a=d.Wp.randomPrivateKey(),b=(0,d.lG)(a);return{privateKey:d.jn.bytesToHex(a),publicKey:d.jn.bytesToHex(b)}}function k(a){let b=d.jn.hexToBytes(a),c=(0,d.lG)(b);return d.jn.bytesToHex(c)}d.jn.sha512Sync=(...a)=>(0,e.Zf)(d.jn.concatBytes(...a))},96803:(a,b,c)=>{c.d(b,{mf:()=>G,t5:()=>E,wT:()=>P,ny:()=>I,x:()=>O,Ap:()=>D,formatInvoiceCSV:()=>R,formatInvoiceHTML:()=>U,formatInvoiceJSON:()=>Q,formatInvoiceMarkdown:()=>T,generateInvoice:()=>N});var d=c(79748),e=c(33873),f=c(31940),g=c(55511),h=c(6170),i=c(21820),j=c(18103),k=c(68798),l=k.k5(["pending","completed","failed","timeout"]),m=k.k5(["action","verification","judgment","arbitration","memory"]),n=k.k5(["development","production","staging","test"]),o=k.k5(["UNAUTHORIZED","KEY_REVOKED","FORBIDDEN","RECEIPT_NOT_FOUND","CHAIN_NOT_FOUND","AGENT_NOT_FOUND","RECEIPT_NOT_PENDING","RECEIPT_IMMUTABLE","RATE_LIMIT_EXCEEDED","VALIDATION_ERROR","INTERNAL_ERROR"]);k.Ik({receipt_id:k.Yj(),chain_id:k.Yj(),receipt_type:m,agent_id:k.Yj(),org_id:k.Yj(),action:k.Yj(),input_hash:k.Yj(),output_hash:k.Yj().nullable(),status:l,timestamp:k.Yj().datetime(),completed_at:k.Yj().datetime().nullable(),environment:n});var p=k.Ik({receipt_id:k.Yj(),parent_receipt_id:k.Yj().nullable(),chain_id:k.Yj(),receipt_type:m,agent_id:k.Yj(),org_id:k.Yj(),action:k.Yj(),input_hash:k.Yj(),output_hash:k.Yj().nullable(),output_summary:k.Yj().nullable(),model:k.Yj().nullable(),tokens_in:k.ai().int().nonnegative().nullable(),tokens_out:k.ai().int().nonnegative().nullable(),cost_usd:k.ai().nonnegative().nullable(),latency_ms:k.ai().int().nonnegative().nullable(),tool_calls:k.YO(k.Yj()).nullable(),timestamp:k.Yj().datetime(),completed_at:k.Yj().datetime().nullable(),status:l,error:k.g1(k.L5()).nullable(),environment:n,tags:k.YO(k.Yj()).nullable(),constraints:k.g1(k.L5()).nullable(),constraint_result:k.g1(k.L5()).nullable(),signature:k.Yj(),verify_url:k.Yj().url(),callback_verified:k.zM().nullable(),confidence:k.ai().min(0).max(1).nullable(),metadata:k.g1(k.L5())}),q=k.Ik({type:k.Yj().min(1),value:k.L5(),message:k.Yj().optional()}),r=k.Ik({type:k.Yj(),passed:k.zM(),expected:k.L5(),actual:k.L5(),message:k.Yj().optional()});k.Ik({passed:k.zM(),results:k.YO(r),evaluated_at:k.Yj().datetime()}),k.YO(q);var s=k.Ik({name:k.Yj().min(1),description:k.Yj().min(1),weight:k.ai().min(0).max(1),passing_threshold:k.ai().min(0).max(1).optional(),examples:k.Ik({good:k.YO(k.Yj()).optional(),bad:k.YO(k.Yj()).optional()}).optional()});k.Ik({version:k.Yj().default("1.0"),criteria:k.YO(s).min(1),passing_threshold:k.ai().min(0).max(1).default(.7),require_all:k.zM().default(!1)});var t=k.Ik({criterion:k.Yj(),score:k.ai().min(0).max(1),passed:k.zM(),reasoning:k.Yj()});k.Ik({verdict:k.k5(["pass","fail","partial"]),score:k.ai().min(0).max(1),criteria_results:k.YO(t),overall_reasoning:k.Yj(),rubric_version:k.Yj()}),k.Ik({agent_id:k.Yj().min(1),action:k.Yj().min(1),input_hash:k.Yj().min(1),receipt_type:m.default("action"),status:l.default("pending"),environment:n.default("production"),parent_receipt_id:k.Yj().nullable().optional(),output_hash:k.Yj().nullable().optional(),output_summary:k.Yj().nullable().optional(),model:k.Yj().nullable().optional(),tokens_in:k.ai().int().nonnegative().nullable().optional(),tokens_out:k.ai().int().nonnegative().nullable().optional(),cost_usd:k.ai().nonnegative().nullable().optional(),latency_ms:k.ai().int().nonnegative().nullable().optional(),tool_calls:k.YO(k.Yj()).nullable().optional(),tags:k.YO(k.Yj()).nullable().optional(),confidence:k.ai().min(0).max(1).nullable().optional(),callback_verified:k.zM().nullable().optional(),metadata:k.g1(k.L5()).optional()}),k.Ik({status:k.k5(["completed","failed","timeout"]),output_hash:k.Yj().nullable().optional(),output_summary:k.Yj().nullable().optional(),model:k.Yj().nullable().optional(),tokens_in:k.ai().int().nonnegative().nullable().optional(),tokens_out:k.ai().int().nonnegative().nullable().optional(),cost_usd:k.ai().nonnegative().nullable().optional(),latency_ms:k.ai().int().nonnegative().nullable().optional(),tool_calls:k.YO(k.Yj()).nullable().optional(),confidence:k.ai().min(0).max(1).nullable().optional(),callback_verified:k.zM().nullable().optional(),error:k.g1(k.L5()).nullable().optional()}),k.Ik({verified:k.zM(),receipt:k.Ik({receipt_id:k.Yj(),chain_id:k.Yj(),receipt_type:m,agent_id:k.Yj(),action:k.Yj(),status:l,input_hash:k.Yj(),output_hash:k.Yj().nullable(),signature:k.Yj(),timestamp:k.Yj().datetime(),completed_at:k.Yj().datetime().nullable(),environment:n,latency_ms:k.ai().int().nonnegative().nullable()}),signature_valid:k.zM(),chain_length:k.ai().int().nonnegative(),public_key_url:k.Yj().url()}),k.Ik({page:k.au.number().int().positive().default(1),limit:k.au.number().int().positive().max(100).default(50),agent_id:k.Yj().optional(),action:k.Yj().optional(),status:l.optional(),environment:n.optional(),receipt_type:m.optional(),chain_id:k.Yj().optional(),tag:k.Yj().optional(),from:k.Yj().datetime().optional(),to:k.Yj().datetime().optional(),sort:k.Yj().regex(/^(created_at|completed_at|latency_ms|cost_usd):(asc|desc)$/).default("created_at:desc")}),k.Ik({page:k.ai().int().positive(),limit:k.ai().int().positive(),total:k.ai().int().nonnegative(),total_pages:k.ai().int().nonnegative(),has_next:k.zM(),has_prev:k.zM()}),k.Ik({error:k.Ik({code:o,message:k.Yj(),status:k.ai().int()})});var u=k.k5(["person","project","organization","preference","fact","context","tool","custom"]),v=k.k5(["observe","create","merge","forget","forget_entity","recall","update"]),w=k.k5(["agent","user","team","global"]),x=k.k5(["certain","high","medium","low","deprecated"]),y=k.Ik({observation_id:k.Yj(),entity_id:k.Yj(),content:k.Yj(),confidence:x.default("medium"),source_receipt_id:k.Yj(),source_agent_id:k.Yj(),source_context:k.Yj().nullable(),observed_at:k.Yj().datetime(),forgotten_at:k.Yj().datetime().nullable(),forgotten_by:k.Yj().nullable(),superseded_by:k.Yj().nullable(),expires_at:k.Yj().datetime().nullable().default(null),tags:k.YO(k.Yj()).default([]),metadata:k.g1(k.L5()).default({})}),z=k.Ik({relationship_id:k.Yj(),from_entity_id:k.Yj(),to_entity_id:k.Yj(),relationship_type:k.Yj(),strength:x.default("medium"),source_receipt_id:k.Yj(),created_at:k.Yj().datetime(),forgotten_at:k.Yj().datetime().nullable(),metadata:k.g1(k.L5()).default({})}),A=k.Ik({entity_id:k.Yj(),entity_type:u,name:k.Yj(),aliases:k.YO(k.Yj()).default([]),scope:w.default("agent"),created_at:k.Yj().datetime(),created_by_agent:k.Yj(),created_by_receipt:k.Yj(),forgotten_at:k.Yj().datetime().nullable(),merged_into:k.Yj().nullable(),attributes:k.g1(k.L5()).default({}),metadata:k.g1(k.L5()).default({})});k.Ik({memory_operation:v,entity_id:k.Yj().nullable(),observation_id:k.Yj().nullable(),relationship_id:k.Yj().nullable(),scope:w,query:k.Yj().nullable(),results_count:k.ai().int().nullable(),confidence:x.nullable()}),k.Ik({query:k.Yj().optional(),entity_type:u.optional(),entity_id:k.Yj().optional(),scope:w.optional(),agent_id:k.Yj().optional(),confidence_min:x.optional(),include_forgotten:k.zM().default(!1),tags:k.YO(k.Yj()).optional(),limit:k.ai().int().min(1).max(100).default(20),page:k.ai().int().min(1).default(1)}),k.Ik({bundle_id:k.Yj(),bundle_version:k.eu("1.0"),created_at:k.Yj().datetime(),created_by_agent:k.Yj(),description:k.Yj().nullable().default(null),public_key:k.Yj(),entities:k.YO(A),observations:k.YO(y),relationships:k.YO(z),receipts:k.YO(k.g1(k.L5())),checksum:k.Yj(),stats:k.Ik({entity_count:k.ai().int(),observation_count:k.ai().int(),relationship_count:k.ai().int(),receipt_count:k.ai().int(),agents:k.YO(k.Yj()),date_range:k.Ik({earliest:k.Yj().datetime(),latest:k.Yj().datetime()})})});var B=(a=>"undefined"!=typeof require?require:"undefined"!=typeof Proxy?new Proxy(a,{get:(a,b)=>("undefined"!=typeof require?require:a)[b]}):a)(function(a){if("undefined"!=typeof require)return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')}),C=new Set(["timestamp","completed_at","cost_usd","latency_ms","tokens_in","tokens_out","confidence"]),D=class{constructor(a){this.dataDir=a,this.dbPath=(0,e.join)(a,"receipts.db"),this.receiptsDir=(0,e.join)(a,"receipts")}async init(){await (0,d.mkdir)(this.dataDir,{recursive:!0}),this.db=new f(this.dbPath),this.db.pragma("journal_mode = WAL"),this.db.pragma("foreign_keys = ON"),this.db.exec(`
2
2
  CREATE TABLE IF NOT EXISTS receipts (
3
3
  receipt_id TEXT PRIMARY KEY,
4
4
  chain_id TEXT NOT NULL,
@@ -43,7 +43,7 @@
43
43
  @action, @status, @environment, @input_hash, @output_hash, @model,
44
44
  @tokens_in, @tokens_out, @cost_usd, @latency_ms, @confidence,
45
45
  @timestamp, @completed_at, @expires_at, @tags, @data
46
- )`),f=0;this.db.transaction(()=>{for(let a of b)try{let b=y("fs").readFileSync((0,e.join)(this.receiptsDir,a),"utf-8"),d=JSON.parse(b);c.run(this.toRow(d)),f++}catch{}})(),f>0&&console.log(`Migrated ${f} receipts from JSON files to SQLite`)}toRow(a){let b=a.metadata;return{receipt_id:a.receipt_id,chain_id:a.chain_id,parent_receipt_id:a.parent_receipt_id,receipt_type:a.receipt_type,agent_id:a.agent_id,org_id:a.org_id,action:a.action,status:a.status,environment:a.environment,input_hash:a.input_hash,output_hash:a.output_hash,model:a.model,tokens_in:a.tokens_in,tokens_out:a.tokens_out,cost_usd:a.cost_usd,latency_ms:a.latency_ms,confidence:a.confidence,timestamp:a.timestamp,completed_at:a.completed_at,expires_at:b?.expires_at??null,tags:a.tags?JSON.stringify(a.tags):null,data:JSON.stringify(a)}}getDb(){return this.db}async save(a){let b=this.toRow(a);this.db.prepare(`INSERT OR REPLACE INTO receipts (
46
+ )`),f=0;this.db.transaction(()=>{for(let a of b)try{let b=B("fs").readFileSync((0,e.join)(this.receiptsDir,a),"utf-8"),d=JSON.parse(b);c.run(this.toRow(d)),f++}catch{}})(),f>0&&console.log(`Migrated ${f} receipts from JSON files to SQLite`)}toRow(a){let b=a.metadata;return{receipt_id:a.receipt_id,chain_id:a.chain_id,parent_receipt_id:a.parent_receipt_id,receipt_type:a.receipt_type,agent_id:a.agent_id,org_id:a.org_id,action:a.action,status:a.status,environment:a.environment,input_hash:a.input_hash,output_hash:a.output_hash,model:a.model,tokens_in:a.tokens_in,tokens_out:a.tokens_out,cost_usd:a.cost_usd,latency_ms:a.latency_ms,confidence:a.confidence,timestamp:a.timestamp,completed_at:a.completed_at,expires_at:b?.expires_at??null,tags:a.tags?JSON.stringify(a.tags):null,data:JSON.stringify(a)}}getDb(){return this.db}async save(a){let b=this.toRow(a);this.db.prepare(`INSERT OR REPLACE INTO receipts (
47
47
  receipt_id, chain_id, parent_receipt_id, receipt_type, agent_id, org_id,
48
48
  action, status, environment, input_hash, output_hash, model,
49
49
  tokens_in, tokens_out, cost_usd, latency_ms, confidence,
@@ -53,7 +53,7 @@
53
53
  @action, @status, @environment, @input_hash, @output_hash, @model,
54
54
  @tokens_in, @tokens_out, @cost_usd, @latency_ms, @confidence,
55
55
  @timestamp, @completed_at, @expires_at, @tags, @data
56
- )`).run(b)}async get(a){let b=this.db.prepare("SELECT data FROM receipts WHERE receipt_id = ?").get(a);return b?JSON.parse(b.data):null}async exists(a){return void 0!==this.db.prepare("SELECT 1 FROM receipts WHERE receipt_id = ?").get(a)}async list(a,b=1,c=50,d="timestamp:desc"){let{where:e,params:f}=this.buildWhere(a),g=this.db.prepare(`SELECT COUNT(*) as cnt FROM receipts ${e}`).get(...f).cnt,[h,i]=d.split(":"),j="created_at"===h?"timestamp":h,k=z.has(j)?j:"timestamp",l=`ORDER BY CASE WHEN ${k} IS NULL THEN 1 ELSE 0 END, ${k} ${"asc"===i?"ASC":"DESC"}`,m=this.db.prepare(`SELECT data FROM receipts ${e} ${l} LIMIT ? OFFSET ?`).all(...f,c,(b-1)*c),n=Math.max(1,Math.ceil(g/c));return{data:m.map(a=>JSON.parse(a.data)),pagination:{page:b,limit:c,total:g,total_pages:n,has_next:b<n,has_prev:b>1}}}async getChain(a){return(await this.list({chain_id:a},1,1e3,"timestamp:asc")).data}async count(a){let{where:b,params:c}=this.buildWhere(a);return this.db.prepare(`SELECT COUNT(*) as cnt FROM receipts ${b}`).get(...c).cnt}async delete(a){return this.db.prepare("DELETE FROM receipts WHERE receipt_id = ?").run(a).changes>0}async cleanup(){let a=new Date().toISOString(),b=this.db.prepare("SELECT COUNT(*) as cnt FROM receipts").get().cnt;return{deleted:this.db.prepare("DELETE FROM receipts WHERE expires_at IS NOT NULL AND expires_at < ?").run(a).changes,total:b}}buildWhere(a){if(!a)return{where:"",params:[]};let b=[],c=[];return(a.agent_id&&(b.push("agent_id = ?"),c.push(a.agent_id)),a.action&&(b.push("action = ?"),c.push(a.action)),a.status&&(b.push("status = ?"),c.push(a.status)),a.environment&&(b.push("environment = ?"),c.push(a.environment)),a.receipt_type&&(b.push("receipt_type = ?"),c.push(a.receipt_type)),a.chain_id&&(b.push("chain_id = ?"),c.push(a.chain_id)),a.parent_receipt_id&&(b.push("parent_receipt_id = ?"),c.push(a.parent_receipt_id)),a.tag&&(b.push("tags LIKE ?"),c.push(`%"${a.tag}"%`)),a.from&&(b.push("timestamp >= ?"),c.push(a.from)),a.to&&(b.push("timestamp <= ?"),c.push(a.to)),0===b.length)?{where:"",params:[]}:{where:`WHERE ${b.join(" AND ")}`,params:c}}},B=class{constructor(a){this.privateKey=null,this.publicKey=null,this.keysDir=(0,e.join)(a,"keys")}async init(){await (0,d.mkdir)(this.keysDir,{recursive:!0}),await this.loadKeys()}async loadKeys(){let a=process.env.RECEIPT_SIGNING_PRIVATE_KEY;if(a){this.privateKey=a,this.publicKey=(0,h.sP)(a);return}let b=(0,e.join)(this.keysDir,"private.key");try{this.privateKey=(await (0,d.readFile)(b,"utf-8")).trim(),this.publicKey=(0,h.sP)(this.privateKey);return}catch{}let c=(0,h.TZ)();this.privateKey=c.privateKey,this.publicKey=c.publicKey,await (0,d.writeFile)(b,this.privateKey,{encoding:"utf-8",mode:384}),await (0,d.chmod)(b,384);let f=(0,e.join)(this.keysDir,"public.key");await (0,d.writeFile)(f,this.publicKey,"utf-8")}getPrivateKey(){if(!this.privateKey)throw Error("KeyManager not initialized — call init() first");return this.privateKey}getPublicKey(){if(!this.publicKey)throw Error("KeyManager not initialized — call init() first");return this.publicKey}},C={agentId:"local-agent",orgId:"local-org",environment:"production"},D=class{constructor(a){this.config={...C},this.configPath=(0,e.join)(a,"config.json")}async init(){await (0,d.mkdir)((0,e.dirname)(this.configPath),{recursive:!0}),await this.load()}async load(){try{let a=await (0,d.readFile)(this.configPath,"utf-8"),b=JSON.parse(a);this.config={...C,...b}}catch{}let a=process.env.AGENT_RECEIPTS_AGENT_ID;a&&(this.config.agentId=a);let b=process.env.AGENT_RECEIPTS_ORG_ID;b&&(this.config.orgId=b);let c=process.env.AGENT_RECEIPTS_ENVIRONMENT;("development"===c||"production"===c||"staging"===c||"test"===c)&&(this.config.environment=c)}async save(){await (0,d.mkdir)((0,e.dirname)(this.configPath),{recursive:!0}),await (0,d.writeFile)(this.configPath,JSON.stringify(this.config,null,2),"utf-8")}getConfig(){return{...this.config}}async update(a){this.config={...this.config,...a},await this.save()}static getDefaultDataDir(){return process.env.AGENT_RECEIPTS_DATA_DIR??(0,e.join)((0,i.homedir)(),".agent-receipts")}},E={certain:5,high:4,medium:3,low:2,deprecated:1},F=class{constructor(a){this.db=a}init(){this.db.exec(`
56
+ )`).run(b)}async get(a){let b=this.db.prepare("SELECT data FROM receipts WHERE receipt_id = ?").get(a);return b?JSON.parse(b.data):null}async exists(a){return void 0!==this.db.prepare("SELECT 1 FROM receipts WHERE receipt_id = ?").get(a)}async list(a,b=1,c=50,d="timestamp:desc"){let{where:e,params:f}=this.buildWhere(a),g=this.db.prepare(`SELECT COUNT(*) as cnt FROM receipts ${e}`).get(...f).cnt,[h,i]=d.split(":"),j="created_at"===h?"timestamp":h,k=C.has(j)?j:"timestamp",l=`ORDER BY CASE WHEN ${k} IS NULL THEN 1 ELSE 0 END, ${k} ${"asc"===i?"ASC":"DESC"}`,m=this.db.prepare(`SELECT data FROM receipts ${e} ${l} LIMIT ? OFFSET ?`).all(...f,c,(b-1)*c),n=Math.max(1,Math.ceil(g/c));return{data:m.map(a=>JSON.parse(a.data)),pagination:{page:b,limit:c,total:g,total_pages:n,has_next:b<n,has_prev:b>1}}}async getChain(a){return(await this.list({chain_id:a},1,1e3,"timestamp:asc")).data}async count(a){let{where:b,params:c}=this.buildWhere(a);return this.db.prepare(`SELECT COUNT(*) as cnt FROM receipts ${b}`).get(...c).cnt}async delete(a){return this.db.prepare("DELETE FROM receipts WHERE receipt_id = ?").run(a).changes>0}async cleanup(){let a=new Date().toISOString(),b=this.db.prepare("SELECT COUNT(*) as cnt FROM receipts").get().cnt;return{deleted:this.db.prepare("DELETE FROM receipts WHERE expires_at IS NOT NULL AND expires_at < ?").run(a).changes,total:b}}buildWhere(a){if(!a)return{where:"",params:[]};let b=[],c=[];return(a.agent_id&&(b.push("agent_id = ?"),c.push(a.agent_id)),a.action&&(b.push("action = ?"),c.push(a.action)),a.status&&(b.push("status = ?"),c.push(a.status)),a.environment&&(b.push("environment = ?"),c.push(a.environment)),a.receipt_type&&(b.push("receipt_type = ?"),c.push(a.receipt_type)),a.chain_id&&(b.push("chain_id = ?"),c.push(a.chain_id)),a.parent_receipt_id&&(b.push("parent_receipt_id = ?"),c.push(a.parent_receipt_id)),a.tag&&(b.push("tags LIKE ?"),c.push(`%"${a.tag}"%`)),a.from&&(b.push("timestamp >= ?"),c.push(a.from)),a.to&&(b.push("timestamp <= ?"),c.push(a.to)),0===b.length)?{where:"",params:[]}:{where:`WHERE ${b.join(" AND ")}`,params:c}}},E=class{constructor(a){this.privateKey=null,this.publicKey=null,this.keysDir=(0,e.join)(a,"keys")}async init(){await (0,d.mkdir)(this.keysDir,{recursive:!0}),await this.loadKeys()}async loadKeys(){let a=process.env.RECEIPT_SIGNING_PRIVATE_KEY;if(a){this.privateKey=a,this.publicKey=(0,h.sP)(a);return}let b=(0,e.join)(this.keysDir,"private.key");try{this.privateKey=(await (0,d.readFile)(b,"utf-8")).trim(),this.publicKey=(0,h.sP)(this.privateKey);return}catch{}let c=(0,h.TZ)();this.privateKey=c.privateKey,this.publicKey=c.publicKey,await (0,d.writeFile)(b,this.privateKey,{encoding:"utf-8",mode:384}),await (0,d.chmod)(b,384);let f=(0,e.join)(this.keysDir,"public.key");await (0,d.writeFile)(f,this.publicKey,"utf-8")}getPrivateKey(){if(!this.privateKey)throw Error("KeyManager not initialized — call init() first");return this.privateKey}getPublicKey(){if(!this.publicKey)throw Error("KeyManager not initialized — call init() first");return this.publicKey}},F={agentId:"local-agent",orgId:"local-org",environment:"production"},G=class{constructor(a){this.config={...F},this.configPath=(0,e.join)(a,"config.json")}async init(){await (0,d.mkdir)((0,e.dirname)(this.configPath),{recursive:!0}),await this.load()}async load(){try{let a=await (0,d.readFile)(this.configPath,"utf-8"),b=JSON.parse(a);this.config={...F,...b}}catch{}let a=process.env.AGENT_RECEIPTS_AGENT_ID;a&&(this.config.agentId=a);let b=process.env.AGENT_RECEIPTS_ORG_ID;b&&(this.config.orgId=b);let c=process.env.AGENT_RECEIPTS_ENVIRONMENT;("development"===c||"production"===c||"staging"===c||"test"===c)&&(this.config.environment=c)}async save(){await (0,d.mkdir)((0,e.dirname)(this.configPath),{recursive:!0}),await (0,d.writeFile)(this.configPath,JSON.stringify(this.config,null,2),"utf-8")}getConfig(){return{...this.config}}async update(a){this.config={...this.config,...a},await this.save()}static getDefaultDataDir(){return process.env.AGENT_RECEIPTS_DATA_DIR??(0,e.join)((0,i.homedir)(),".agent-receipts")}},H={certain:5,high:4,medium:3,low:2,deprecated:1},I=class{constructor(a){this.db=a}init(){this.db.exec(`
57
57
  CREATE TABLE IF NOT EXISTS entities (
58
58
  entity_id TEXT PRIMARY KEY,
59
59
  entity_type TEXT NOT NULL,
@@ -175,7 +175,7 @@
175
175
  AND (expires_at IS NULL OR expires_at > datetime('now'))
176
176
  ORDER BY observed_at DESC
177
177
  LIMIT ?
178
- `).all(`%${a}%`,d).map((a,b)=>{let c=this.rowToObservation(a);return{entity:this.getEntity(c.entity_id),observation:c,rank:b}}).filter(a=>null!==a.entity)}if(b?.entity_type&&(c=c.filter(a=>a.entity.entity_type===b.entity_type)),b?.scope&&(c=c.filter(a=>a.entity.scope===b.scope)),b?.confidence_min){let a=E[b.confidence_min]??0;c=c.filter(b=>(E[b.observation.confidence]??0)>=a)}return c}recall(a){if(a.query){let b=this.search(a.query,a),c=new Map,d=[];for(let a of b)c.set(a.entity.entity_id,a.entity),d.push(a.observation);return{entities:Array.from(c.values()),observations:d,total:d.length}}let b=this.findEntities(a),c=[];for(let d of b.data){let b=this.getObservations(d.entity_id,a.include_forgotten);c.push(...b)}return{entities:b.data,observations:c,total:c.length}}getEntityHistory(a){return this.db.prepare("SELECT * FROM observations WHERE entity_id = ? ORDER BY observed_at ASC").all(a).map(a=>this.rowToObservation(a))}getMemoryProvenance(a){let b=this.getObservation(a);if(!b)return null;let c=this.getEntity(b.entity_id);return c?{observation:b,entity:c,receipt_id:b.source_receipt_id,chain:[]}:null}getMemoryStats(a,b,c){let d=[],e=[];a&&(d.push("created_by_agent = ?"),e.push("source_agent_id = ?"),[].push(a));let f=d.length>0?`WHERE ${d.join(" AND ")}`:"",g=e.length>0?`WHERE ${e.join(" AND ")}`:"",h=this.db.prepare(`SELECT COUNT(*) as cnt FROM entities ${f}`).get(...a?[a]:[]).cnt,i=this.db.prepare(`SELECT COUNT(*) as cnt FROM observations ${g}`).get(...a?[a]:[]).cnt,j=this.db.prepare("SELECT COUNT(*) as cnt FROM relationships").get().cnt,k=this.db.prepare(`SELECT COUNT(*) as cnt FROM observations WHERE forgotten_at IS NOT NULL ${a?"AND source_agent_id = ?":""}`).get(...a?[a]:[]).cnt,l=this.db.prepare(`SELECT COUNT(*) as cnt FROM entities WHERE forgotten_at IS NOT NULL ${a?"AND created_by_agent = ?":""}`).get(...a?[a]:[]).cnt,m=this.db.prepare("SELECT entity_type, COUNT(*) as cnt FROM entities GROUP BY entity_type").all(),n={};for(let a of m)n[a.entity_type]=a.cnt;return{total_entities:h,total_observations:i,total_relationships:j,forgotten_observations:k,forgotten_entities:l,by_entity_type:n,by_operation:{}}}findPossibleDuplicates(a){let b=this.getEntity(a);if(!b)return[];let c=b.name.toLowerCase().split(/\s+/).filter(a=>a.length>=2);if(0===c.length)return[];let d=c.map(()=>"(LOWER(name) LIKE ? OR LOWER(aliases) LIKE ?)").join(" OR "),e=[];for(let a of c)e.push(`%${a}%`,`%${a}%`);return this.db.prepare(`
178
+ `).all(`%${a}%`,d).map((a,b)=>{let c=this.rowToObservation(a);return{entity:this.getEntity(c.entity_id),observation:c,rank:b}}).filter(a=>null!==a.entity)}if(b?.entity_type&&(c=c.filter(a=>a.entity.entity_type===b.entity_type)),b?.scope&&(c=c.filter(a=>a.entity.scope===b.scope)),b?.confidence_min){let a=H[b.confidence_min]??0;c=c.filter(b=>(H[b.observation.confidence]??0)>=a)}return c}recall(a){if(a.query){let b=this.search(a.query,a),c=new Map,d=[];for(let a of b)c.set(a.entity.entity_id,a.entity),d.push(a.observation);return{entities:Array.from(c.values()),observations:d,total:d.length}}let b=this.findEntities(a),c=[];for(let d of b.data){let b=this.getObservations(d.entity_id,a.include_forgotten);c.push(...b)}return{entities:b.data,observations:c,total:c.length}}getEntityHistory(a){return this.db.prepare("SELECT * FROM observations WHERE entity_id = ? ORDER BY observed_at ASC").all(a).map(a=>this.rowToObservation(a))}getMemoryProvenance(a){let b=this.getObservation(a);if(!b)return null;let c=this.getEntity(b.entity_id);return c?{observation:b,entity:c,receipt_id:b.source_receipt_id,chain:[]}:null}getMemoryStats(a,b,c){let d=[],e=[];a&&(d.push("created_by_agent = ?"),e.push("source_agent_id = ?"),[].push(a));let f=d.length>0?`WHERE ${d.join(" AND ")}`:"",g=e.length>0?`WHERE ${e.join(" AND ")}`:"",h=this.db.prepare(`SELECT COUNT(*) as cnt FROM entities ${f}`).get(...a?[a]:[]).cnt,i=this.db.prepare(`SELECT COUNT(*) as cnt FROM observations ${g}`).get(...a?[a]:[]).cnt,j=this.db.prepare("SELECT COUNT(*) as cnt FROM relationships").get().cnt,k=this.db.prepare(`SELECT COUNT(*) as cnt FROM observations WHERE forgotten_at IS NOT NULL ${a?"AND source_agent_id = ?":""}`).get(...a?[a]:[]).cnt,l=this.db.prepare(`SELECT COUNT(*) as cnt FROM entities WHERE forgotten_at IS NOT NULL ${a?"AND created_by_agent = ?":""}`).get(...a?[a]:[]).cnt,m=this.db.prepare("SELECT entity_type, COUNT(*) as cnt FROM entities GROUP BY entity_type").all(),n={};for(let a of m)n[a.entity_type]=a.cnt;return{total_entities:h,total_observations:i,total_relationships:j,forgotten_observations:k,forgotten_entities:l,by_entity_type:n,by_operation:{}}}findPossibleDuplicates(a){let b=this.getEntity(a);if(!b)return[];let c=b.name.toLowerCase().split(/\s+/).filter(a=>a.length>=2);if(0===c.length)return[];let d=c.map(()=>"(LOWER(name) LIKE ? OR LOWER(aliases) LIKE ?)").join(" OR "),e=[];for(let a of c)e.push(`%${a}%`,`%${a}%`);return this.db.prepare(`
179
179
  SELECT * FROM entities
180
180
  WHERE entity_type = ?
181
181
  AND entity_id != ?
@@ -209,21 +209,21 @@
209
209
  `).all(a).map(a=>this.rowToObservation(a))}getContextStats(){let a=this.db.prepare("SELECT COUNT(*) as cnt FROM entities WHERE forgotten_at IS NULL").get().cnt,b=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;return{total_entities:a,total_observations:b,total_relationships:this.db.prepare("SELECT COUNT(*) as cnt FROM relationships WHERE forgotten_at IS NULL").get().cnt,agents_contributing:this.db.prepare("SELECT DISTINCT source_agent_id FROM observations WHERE forgotten_at IS NULL").all().map(a=>a.source_agent_id)}}cleanupExpiredObservations(){return this.db.prepare(`
210
210
  UPDATE observations SET forgotten_at = datetime('now'), forgotten_by = 'system:cleanup'
211
211
  WHERE expires_at IS NOT NULL AND expires_at <= datetime('now') AND forgotten_at IS NULL
212
- `).run().changes}rowToEntity(a){return{entity_id:a.entity_id,entity_type:a.entity_type,name:a.name,aliases:JSON.parse(a.aliases||"[]"),scope:a.scope,created_at:a.created_at,created_by_agent:a.created_by_agent,created_by_receipt:a.created_by_receipt,forgotten_at:a.forgotten_at||null,merged_into:a.merged_into||null,attributes:JSON.parse(a.attributes||"{}"),metadata:JSON.parse(a.metadata||"{}")}}rowToObservation(a){return{observation_id:a.observation_id,entity_id:a.entity_id,content:a.content,confidence:a.confidence,source_receipt_id:a.source_receipt_id,source_agent_id:a.source_agent_id,source_context:a.source_context||null,observed_at:a.observed_at,forgotten_at:a.forgotten_at||null,forgotten_by:a.forgotten_by||null,superseded_by:a.superseded_by||null,expires_at:a.expires_at||null,tags:JSON.parse(a.tags||"[]"),metadata:JSON.parse(a.metadata||"{}")}}rowToRelationship(a){return{relationship_id:a.relationship_id,from_entity_id:a.from_entity_id,to_entity_id:a.to_entity_id,relationship_type:a.relationship_type,strength:a.strength,source_receipt_id:a.source_receipt_id,created_at:a.created_at,forgotten_at:a.forgotten_at||null,metadata:JSON.parse(a.metadata||"{}")}}};function G(a){let b=JSON.stringify(function a(b){if(null==b)return b;if(Array.isArray(b))return b.map(a);if("object"==typeof b){let c={};for(let d of Object.keys(b).sort())c[d]=a(b[d]);return c}return b}(a))??"null",c=(0,g.createHash)("sha256").update(b).digest("hex");return`sha256:${c}`}var H=new Set(["receipt_id","parent_receipt_id","chain_id","receipt_type","agent_id","org_id","action","input_hash","output_hash","output_summary","model","tokens_in","tokens_out","cost_usd","latency_ms","tool_calls","timestamp","completed_at","status","error","environment","tags","constraints","constraint_result","signature","verify_url","callback_verified","confidence","metadata"]);function I(a,b,c){if(0===b.length)return{passed:!0,results:[],evaluated_at:new Date().toISOString()};let d=[];for(let e of b){let b;switch(e.type){case"max_latency_ms":b=function(a,b){let c=b.value,d=a.latency_ms;return null==d?{type:b.type,passed:!1,expected:c,actual:null,message:b.message??"latency_ms is null"}:{type:b.type,passed:d<=c,expected:c,actual:d,message:b.message}}(a,e);break;case"max_cost_usd":b=function(a,b){let c=b.value,d=a.cost_usd;return null==d?{type:b.type,passed:!1,expected:c,actual:null,message:b.message??"cost_usd is null"}:{type:b.type,passed:d<=c,expected:c,actual:d,message:b.message}}(a,e);break;case"min_confidence":b=function(a,b){let c=b.value,d=a.confidence;return null==d?{type:b.type,passed:!1,expected:c,actual:null,message:b.message??"confidence is null"}:{type:b.type,passed:d>=c,expected:c,actual:d,message:b.message}}(a,e);break;case"required_fields":b=function(a,b){let c=b.value;if(!Array.isArray(c))return{type:b.type,passed:!1,expected:c,actual:null,message:b.message??"value must be an array of field names"};let d=[],e=[];for(let b of c)H.has(b)?(null===a[b]||void 0===a[b])&&d.push(b):e.push(b);return e.length>0?{type:b.type,passed:!1,expected:c,actual:e,message:b.message??`Unknown field(s): ${e.join(", ")}`}:{type:b.type,passed:0===d.length,expected:c,actual:d.length>0?d:c,message:b.message??(d.length>0?`Missing field(s): ${d.join(", ")}`:void 0)}}(a,e);break;case"status_must_be":b=function(a,b){let c=b.value,d=a.status,e=Array.isArray(c)?c:[c];return{type:b.type,passed:e.includes(d),expected:c,actual:d,message:b.message}}(a,e);break;case"output_schema":b=function(a,b){if(void 0===b)return{type:"output_schema",passed:!1,expected:a.value,actual:null,message:a.message??"output_schema requires raw output data — only available during track() or create()"};let c=a.value,d=function a(b,c,d=""){let e=[];if(0===Object.keys(c).length)return e;if(void 0!==c.type){let a=c.type;if(!function(a,b){switch(b){case"string":return"string"==typeof a;case"number":return"number"==typeof a;case"integer":return"number"==typeof a&&Number.isInteger(a);case"boolean":return"boolean"==typeof a;case"object":return"object"==typeof a&&null!==a&&!Array.isArray(a);case"array":return Array.isArray(a);case"null":return null===a;default:return!1}}(b,a)){var f;return e.push(`${d||"."}: expected type ${a}, got ${null===(f=b)?"null":Array.isArray(f)?"array":typeof f}`),e}}if(void 0!==c.enum){let a=c.enum;a.some(a=>JSON.stringify(a)===JSON.stringify(b))||e.push(`${d||"."}: value ${JSON.stringify(b)} not in enum ${JSON.stringify(a)}`)}if("string"==typeof b&&(void 0!==c.minLength&&b.length<c.minLength&&e.push(`${d||"."}: string length ${b.length} < minLength ${c.minLength}`),void 0!==c.maxLength&&b.length>c.maxLength&&e.push(`${d||"."}: string length ${b.length} > maxLength ${c.maxLength}`),void 0!==c.pattern&&(new RegExp(c.pattern).test(b)||e.push(`${d||"."}: string does not match pattern ${c.pattern}`))),"number"==typeof b&&(void 0!==c.minimum&&b<c.minimum&&e.push(`${d||"."}: ${b} < minimum ${c.minimum}`),void 0!==c.maximum&&b>c.maximum&&e.push(`${d||"."}: ${b} > maximum ${c.maximum}`)),"object"==typeof b&&null!==b&&!Array.isArray(b)){if(void 0!==c.required)for(let a of c.required)a in b||e.push(`${d||"."}: missing required property "${a}"`);if(void 0!==c.properties){for(let[f,g]of Object.entries(c.properties))if(f in b){let c=a(b[f],g,`${d}.${f}`);e.push(...c)}}if(!1===c.additionalProperties&&void 0!==c.properties){let a=new Set(Object.keys(c.properties));for(let c of Object.keys(b))a.has(c)||e.push(`${d||"."}: additional property "${c}" not allowed`)}}if(Array.isArray(b)&&(void 0!==c.minItems&&b.length<c.minItems&&e.push(`${d||"."}: array length ${b.length} < minItems ${c.minItems}`),void 0!==c.maxItems&&b.length>c.maxItems&&e.push(`${d||"."}: array length ${b.length} > maxItems ${c.maxItems}`),void 0!==c.items)){let f=c.items;for(let c=0;c<b.length;c++){let g=a(b[c],f,`${d}[${c}]`);e.push(...g)}}return e}(b,c);return{type:"output_schema",passed:0===d.length,expected:c,actual:d.length>0?d:b,message:d.length>0?a.message??`Schema validation failed: ${d.join(", ")}`:void 0}}(e,c?.rawOutput);break;default:b={type:e.type,passed:!1,expected:e.value,actual:null,message:e.message??`Unknown constraint type: ${e.type}`}}d.push(b)}return{passed:d.every(a=>a.passed),results:d,evaluated_at:new Date().toISOString()}}function J(a){let b=a.constraint_result;return{receipt_id:a.receipt_id,action:a.action,agent_id:a.agent_id,timestamp:a.timestamp,description:a.output_summary??`${a.action} by ${a.agent_id}`,cost_usd:a.cost_usd,latency_ms:a.latency_ms,model:a.model,tokens_in:a.tokens_in,tokens_out:a.tokens_out,constraints_passed:b&&"boolean"==typeof b.passed?b.passed:null,receipt:a}}async function K(a,b,c){let d=(await a.list({from:c.from,to:c.to,status:"completed"},1,1e5,"timestamp:asc")).data;if(c.agent_ids&&c.agent_ids.length>0){let a=new Set(c.agent_ids);d=d.filter(b=>a.has(b.agent_id))}if(c.actions&&c.actions.length>0){let a=new Set(c.actions);d=d.filter(b=>a.has(b.action))}c.constraints_passed_only&&(d=d.filter(a=>{let b=a.constraint_result;return!b||!1!==b.passed}));let e=d.map(J),f=function(a,b){if("none"===b){let b=a.reduce((a,b)=>a+(b.cost_usd??0),0);return[{label:"All Items",items:a,subtotal_usd:b,count:a.length}]}let c=new Map;for(let d of a){let a;a="action"===b?d.action:"agent"===b?d.agent_id:d.timestamp.slice(0,10);let e=c.get(a)??[];e.push(d),c.set(a,e)}let d=[];for(let[a,b]of c){let c=b.reduce((a,b)=>a+(b.cost_usd??0),0);d.push({label:a,items:b,subtotal_usd:c,count:b.length})}return d.sort((a,b)=>a.label.localeCompare(b.label))}(e,c.group_by??"none"),g=function(a){let b=0,c=0,d=0,e=0,f=0,g=0,h=0;for(let i of a)b+=i.cost_usd??0,c+=i.tokens_in??0,d+=i.tokens_out??0,e+=i.latency_ms??0,null!==i.constraints_passed&&(f++,i.constraints_passed?g++:h++);return{total_receipts:a.length,total_cost_usd:b,avg_cost_usd:a.length>0?b/a.length:0,total_tokens_in:c,total_tokens_out:d,total_latency_ms:e,avg_latency_ms:a.length>0?e/a.length:0,constraints_evaluated:f,constraints_passed:g,constraints_failed:h}}(e),h=b.getPublicKey();return{invoice_number:function(){let a=new Date,b=a.getFullYear(),c=String(a.getMonth()+1).padStart(2,"0"),d=String(a.getDate()).padStart(2,"0"),e="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",f="";for(let a=0;a<4;a++)f+=e[Math.floor(Math.random()*e.length)];return`AR-${b}${c}${d}-${f}`}(),generated_at:new Date().toISOString(),period:{from:c.from,to:c.to},client:c.client,provider:c.provider,groups:f,summary:g,public_key:h,notes:c.notes,payment_terms:c.payment_terms}}var L=class{constructor(a,b,c){this.store=a,this.keyManager=b,this.configManager=c}async create(a){let b=this.configManager.getConfig(),c=`rcpt_${(0,j.Ak)(12)}`,d=a.chain_id??`chain_${(0,j.Ak)(8)}`,e=new Date().toISOString(),f=a.constraints&&a.constraints.length>0?a.constraints:null,g=a.expires_at;!g&&a.ttl_ms&&(g=new Date(Date.now()+a.ttl_ms).toISOString());let i={...a.metadata??{}};g&&(i.expires_at=g);let k={receipt_id:c,parent_receipt_id:a.parent_receipt_id??null,chain_id:d,receipt_type:a.receipt_type??"action",agent_id:b.agentId,org_id:b.orgId,action:a.action,input_hash:a.input_hash,output_hash:a.output_hash??null,output_summary:a.output_summary??null,model:a.model??null,tokens_in:a.tokens_in??null,tokens_out:a.tokens_out??null,cost_usd:a.cost_usd??null,latency_ms:a.latency_ms??null,tool_calls:a.tool_calls??null,timestamp:e,completed_at:"completed"===a.status?e:null,status:a.status??"pending",error:null,environment:b.environment,tags:a.tags??null,constraints:f?{definitions:f}:null,constraint_result:null,signature:"",verify_url:`local://verify/${c}`,callback_verified:null,confidence:a.confidence??null,metadata:i};"completed"===k.status&&f&&(k.constraint_result=I(k,f,{rawOutput:a._rawOutput}));let l=(0,h.W_)(k);k.signature=(0,h.o3)(l,this.keyManager.getPrivateKey());let m=p.parse(k);return await this.store.save(m),m}async complete(a,b){let c=await this.store.get(a);if(!c)throw Error(`Receipt not found: ${a}`);if("pending"!==c.status)throw Error(`Receipt ${a} is not pending (status: ${c.status})`);let d=new Date().toISOString(),e={...c,status:b.status,completed_at:d,output_hash:b.output_hash??c.output_hash,output_summary:b.output_summary??c.output_summary,model:b.model??c.model,tokens_in:b.tokens_in??c.tokens_in,tokens_out:b.tokens_out??c.tokens_out,cost_usd:b.cost_usd??c.cost_usd,latency_ms:b.latency_ms??c.latency_ms,tool_calls:b.tool_calls??c.tool_calls,confidence:b.confidence??c.confidence,callback_verified:b.callback_verified??c.callback_verified,error:b.error??c.error,metadata:b.metadata?{...c.metadata,...b.metadata}:c.metadata,constraint_result:c.constraint_result},f=c.constraints,g=f?.definitions??null;Array.isArray(g)&&g.length>0&&(e.constraint_result=I(e,g));let i=(0,h.W_)(e);e.signature=(0,h.o3)(i,this.keyManager.getPrivateKey());let j=p.parse(e);return await this.store.save(j),j}async track(a){let b=G(a.input),c=void 0!==a.output?G(a.output):null;return this.create({action:a.action,input_hash:b,output_hash:c,output_summary:a.output_summary??null,model:a.model??null,tokens_in:a.tokens_in??null,tokens_out:a.tokens_out??null,cost_usd:a.cost_usd??null,latency_ms:a.latency_ms??null,tool_calls:a.tool_calls??null,tags:a.tags??null,confidence:a.confidence??null,metadata:a.metadata??{},parent_receipt_id:a.parent_receipt_id??null,chain_id:a.chain_id,status:"completed",constraints:a.constraints,expires_at:a.expires_at,ttl_ms:a.ttl_ms,_rawOutput:a.output})}async verify(a){let b=await this.store.get(a);if(!b)throw Error(`Receipt not found: ${a}`);let c=(0,h.W_)(b);return{verified:(0,h.XF)(c,b.signature,this.keyManager.getPublicKey()),receipt:b}}async get(a){return this.store.get(a)}async list(a,b,c,d){return this.store.list(a,b,c,d)}async getChain(a){return this.store.getChain(a)}async getJudgments(a){return(await this.store.list({parent_receipt_id:a,receipt_type:"judgment"})).data}async cleanup(){let a=await this.store.cleanup();return{deleted:a.deleted,remaining:a.total-a.deleted}}getPublicKey(){return this.keyManager.getPublicKey()}async generateInvoice(a){return K(this.store,this.keyManager,a)}},M=class{constructor(a,b){this.receiptEngine=a,this.memoryStore=b}async observe(a){let b=a.scope??"agent",c=a.confidence??"medium",d=!1,e=this.memoryStore.findEntityByName(a.entityName,a.entityType),f=await this.receiptEngine.create({action:"memory.observe",receipt_type:"memory",input_hash:G({entityName:a.entityName,content:a.content}),status:"completed",metadata:{memory:{memory_operation:"observe",entity_id:e?.entity_id??null,observation_id:null,relationship_id:null,scope:b,query:null,results_count:null,confidence:c}}});e||(e=this.memoryStore.createEntity({entity_id:`ent_${(0,j.Ak)(12)}`,entity_type:a.entityType,name:a.entityName,aliases:[],scope:b,created_at:new Date().toISOString(),created_by_agent:a.agentId,created_by_receipt:f.receipt_id,forgotten_at:null,merged_into:null,attributes:{},metadata:{}}),d=!0);let g=this.memoryStore.addObservation({observation_id:`obs_${(0,j.Ak)(12)}`,entity_id:e.entity_id,content:a.content,confidence:c,source_receipt_id:f.receipt_id,source_agent_id:a.agentId,source_context:a.context??null,observed_at:new Date().toISOString(),forgotten_at:null,forgotten_by:null,superseded_by:null,expires_at:a.ttlSeconds?new Date(Date.now()+1e3*a.ttlSeconds).toISOString():null,tags:a.tags??[],metadata:{}});return{entity:e,observation:g,receipt:f,created_entity:d}}async recall(a){let b={query:a.query,entity_type:a.entityType,entity_id:a.entityId,scope:a.scope,limit:a.limit??20,include_forgotten:!1,page:1},c=this.memoryStore.recall(b),d=await this.receiptEngine.create({action:"memory.recall",receipt_type:"memory",input_hash:G({query:a.query,entityType:a.entityType,entityId:a.entityId}),output_hash:G({entities:c.entities.length,observations:c.observations.length}),status:"completed",metadata:{memory:{memory_operation:"recall",entity_id:a.entityId??null,observation_id:null,relationship_id:null,scope:a.scope??"agent",query:a.query??null,results_count:c.total,confidence:null}}});return{entities:c.entities,observations:c.observations,receipt:d}}async forget(a){let b=a.entityId?"memory.forget_entity":"memory.forget";if(a.entityId)this.memoryStore.forgetEntity(a.entityId,a.agentId);else if(a.observationId)this.memoryStore.forgetObservation(a.observationId,a.agentId);else throw Error("Either entityId or observationId must be provided");return{receipt:await this.receiptEngine.create({action:b,receipt_type:"memory",input_hash:G({entityId:a.entityId,observationId:a.observationId,reason:a.reason}),status:"completed",metadata:{memory:{memory_operation:a.entityId?"forget_entity":"forget",entity_id:a.entityId??null,observation_id:a.observationId??null,relationship_id:null,scope:"agent",query:null,results_count:null,confidence:null},reason:a.reason}})}}async relate(a){let b=await this.receiptEngine.create({action:"memory.relate",receipt_type:"memory",input_hash:G({from:a.fromEntityId,to:a.toEntityId,type:a.relationshipType}),status:"completed",metadata:{memory:{memory_operation:"observe",entity_id:a.fromEntityId,observation_id:null,relationship_id:null,scope:"agent",query:null,results_count:null,confidence:a.strength??"medium"}}});return{relationship:this.memoryStore.addRelationship({relationship_id:`rel_${(0,j.Ak)(12)}`,from_entity_id:a.fromEntityId,to_entity_id:a.toEntityId,relationship_type:a.relationshipType,strength:a.strength??"medium",source_receipt_id:b.receipt_id,created_at:new Date().toISOString(),forgotten_at:null,metadata:a.context?{context:a.context}:{}}),receipt:b}}async merge(a){let b=this.memoryStore.mergeEntities(a.sourceEntityId,a.targetEntityId),c=await this.receiptEngine.create({action:"memory.merge",receipt_type:"memory",input_hash:G({source:a.sourceEntityId,target:a.targetEntityId}),output_hash:G(b),status:"completed",metadata:{memory:{memory_operation:"merge",entity_id:a.targetEntityId,observation_id:null,relationship_id:null,scope:b.scope,query:null,results_count:null,confidence:null}}});return{mergedEntity:b,receipt:c}}provenance(a){return this.memoryStore.getMemoryProvenance(a)}entityTimeline(a){let b=this.memoryStore.getEntityHistory(a),c=this.memoryStore.getRelationships(a),d=[];for(let a of b)d.push({type:a.forgotten_at?"forget":"observation",timestamp:a.observed_at,data:a});for(let a of c)d.push({type:"relationship",timestamp:a.created_at,data:a});return d.sort((a,b)=>a.timestamp.localeCompare(b.timestamp)),d}memoryAudit(a){return this.memoryStore.getMemoryStats(a.agentId,a.from,a.to)}async getContext(a){let b=Math.min(a.maxEntities??10,50),c=Math.min(a.maxObservations??20,100),d=this.memoryStore.getTopEntities(b,a.scope),e=this.memoryStore.getRecentObservations(c,a.agentId),f=this.memoryStore.getActiveRelationships(50),g=this.memoryStore.getPreferenceObservations(20),h=this.memoryStore.getContextStats(),i=await this.receiptEngine.create({action:"memory.context",receipt_type:"memory",input_hash:G({scope:a.scope,maxEntities:b,maxObservations:c}),output_hash:G({entities:d.length,observations:e.length}),status:"completed",metadata:{memory:{memory_operation:"recall",entity_id:null,observation_id:null,relationship_id:null,scope:a.scope??"agent",query:null,results_count:d.length+e.length,confidence:null}}});return{entities:d,recent_observations:e,relationships:f,preferences:g,stats:h,receipt:i}}};function N(a,b=!1){return b?JSON.stringify(a,null,2):JSON.stringify({...a,groups:a.groups.map(a=>({...a,items:a.items.map(({receipt:a,...b})=>b)}))},null,2)}function O(a){let b=[];for(let c of(b.push("receipt_id,action,agent_id,timestamp,description,cost_usd,latency_ms,model,tokens_in,tokens_out,constraints_passed,group"),a.groups))for(let a of c.items)b.push([P(a.receipt_id),P(a.action),P(a.agent_id),P(a.timestamp),P(a.description),a.cost_usd??"",a.latency_ms??"",P(a.model??""),a.tokens_in??"",a.tokens_out??"",a.constraints_passed??"",P(c.label)].join(","));return b.push(""),b.push(`# Invoice: ${a.invoice_number}`),b.push(`# Period: ${a.period.from} to ${a.period.to}`),b.push(`# Total Receipts: ${a.summary.total_receipts}`),b.push(`# Total Cost: $${a.summary.total_cost_usd.toFixed(4)}`),b.join("\n")}function P(a){return a.includes(",")||a.includes('"')||a.includes("\n")?`"${a.replace(/"/g,'""')}"`:a}function Q(a){let b=[];for(let c of(b.push(`# Invoice ${a.invoice_number}`),b.push(""),b.push(`**Generated:** ${a.generated_at}`),b.push(`**Period:** ${a.period.from} to ${a.period.to}`),b.push(""),a.provider&&(b.push("## Provider"),b.push(`**${a.provider.name}**`),a.provider.email&&b.push(`Email: ${a.provider.email}`),a.provider.address&&b.push(`Address: ${a.provider.address}`),b.push("")),a.client&&(b.push("## Bill To"),b.push(`**${a.client.name}**`),a.client.email&&b.push(`Email: ${a.client.email}`),a.client.address&&b.push(`Address: ${a.client.address}`),b.push("")),b.push("---"),b.push(""),a.groups)){for(let a of(b.push(`### ${c.label}`),b.push(""),b.push("| Receipt ID | Action | Agent | Description | Cost |"),b.push("|------------|--------|-------|-------------|------|"),c.items)){let c=null!==a.cost_usd?`$${a.cost_usd.toFixed(4)}`:"-",d=a.description.length>50?a.description.slice(0,47)+"...":a.description;b.push(`| \`${a.receipt_id}\` | ${a.action} | ${a.agent_id} | ${d} | ${c} |`)}b.push(""),b.push(`**Subtotal:** $${c.subtotal_usd.toFixed(4)} (${c.count} items)`),b.push("")}return b.push("---"),b.push(""),b.push("## Summary"),b.push(""),b.push("| Metric | Value |"),b.push("|--------|-------|"),b.push(`| Total Receipts | ${a.summary.total_receipts} |`),b.push(`| Total Cost | $${a.summary.total_cost_usd.toFixed(4)} |`),b.push(`| Avg Cost | $${a.summary.avg_cost_usd.toFixed(4)} |`),b.push(`| Total Tokens (in) | ${a.summary.total_tokens_in} |`),b.push(`| Total Tokens (out) | ${a.summary.total_tokens_out} |`),b.push(`| Avg Latency | ${Math.round(a.summary.avg_latency_ms)}ms |`),a.summary.constraints_evaluated>0&&b.push(`| Constraints Passed | ${a.summary.constraints_passed}/${a.summary.constraints_evaluated} |`),b.push(""),a.notes&&(b.push("## Notes"),b.push(""),b.push(a.notes),b.push("")),a.payment_terms&&(b.push("## Payment Terms"),b.push(""),b.push(a.payment_terms),b.push("")),b.push("---"),b.push(""),b.push("## Verification"),b.push(""),b.push("Every line item is a cryptographically signed receipt that can be independently verified."),b.push(""),b.push(`**Public Key:** \`${a.public_key}\``),b.push(""),b.join("\n")}function R(a){let b=a.provider?`
212
+ `).run().changes}rowToEntity(a){return{entity_id:a.entity_id,entity_type:a.entity_type,name:a.name,aliases:JSON.parse(a.aliases||"[]"),scope:a.scope,created_at:a.created_at,created_by_agent:a.created_by_agent,created_by_receipt:a.created_by_receipt,forgotten_at:a.forgotten_at||null,merged_into:a.merged_into||null,attributes:JSON.parse(a.attributes||"{}"),metadata:JSON.parse(a.metadata||"{}")}}rowToObservation(a){return{observation_id:a.observation_id,entity_id:a.entity_id,content:a.content,confidence:a.confidence,source_receipt_id:a.source_receipt_id,source_agent_id:a.source_agent_id,source_context:a.source_context||null,observed_at:a.observed_at,forgotten_at:a.forgotten_at||null,forgotten_by:a.forgotten_by||null,superseded_by:a.superseded_by||null,expires_at:a.expires_at||null,tags:JSON.parse(a.tags||"[]"),metadata:JSON.parse(a.metadata||"{}")}}rowToRelationship(a){return{relationship_id:a.relationship_id,from_entity_id:a.from_entity_id,to_entity_id:a.to_entity_id,relationship_type:a.relationship_type,strength:a.strength,source_receipt_id:a.source_receipt_id,created_at:a.created_at,forgotten_at:a.forgotten_at||null,metadata:JSON.parse(a.metadata||"{}")}}};function J(a){let b=JSON.stringify(function a(b){if(null==b)return b;if(Array.isArray(b))return b.map(a);if("object"==typeof b){let c={};for(let d of Object.keys(b).sort())c[d]=a(b[d]);return c}return b}(a))??"null",c=(0,g.createHash)("sha256").update(b).digest("hex");return`sha256:${c}`}var K=new Set(["receipt_id","parent_receipt_id","chain_id","receipt_type","agent_id","org_id","action","input_hash","output_hash","output_summary","model","tokens_in","tokens_out","cost_usd","latency_ms","tool_calls","timestamp","completed_at","status","error","environment","tags","constraints","constraint_result","signature","verify_url","callback_verified","confidence","metadata"]);function L(a,b,c){if(0===b.length)return{passed:!0,results:[],evaluated_at:new Date().toISOString()};let d=[];for(let e of b){let b;switch(e.type){case"max_latency_ms":b=function(a,b){let c=b.value,d=a.latency_ms;return null==d?{type:b.type,passed:!1,expected:c,actual:null,message:b.message??"latency_ms is null"}:{type:b.type,passed:d<=c,expected:c,actual:d,message:b.message}}(a,e);break;case"max_cost_usd":b=function(a,b){let c=b.value,d=a.cost_usd;return null==d?{type:b.type,passed:!1,expected:c,actual:null,message:b.message??"cost_usd is null"}:{type:b.type,passed:d<=c,expected:c,actual:d,message:b.message}}(a,e);break;case"min_confidence":b=function(a,b){let c=b.value,d=a.confidence;return null==d?{type:b.type,passed:!1,expected:c,actual:null,message:b.message??"confidence is null"}:{type:b.type,passed:d>=c,expected:c,actual:d,message:b.message}}(a,e);break;case"required_fields":b=function(a,b){let c=b.value;if(!Array.isArray(c))return{type:b.type,passed:!1,expected:c,actual:null,message:b.message??"value must be an array of field names"};let d=[],e=[];for(let b of c)K.has(b)?(null===a[b]||void 0===a[b])&&d.push(b):e.push(b);return e.length>0?{type:b.type,passed:!1,expected:c,actual:e,message:b.message??`Unknown field(s): ${e.join(", ")}`}:{type:b.type,passed:0===d.length,expected:c,actual:d.length>0?d:c,message:b.message??(d.length>0?`Missing field(s): ${d.join(", ")}`:void 0)}}(a,e);break;case"status_must_be":b=function(a,b){let c=b.value,d=a.status,e=Array.isArray(c)?c:[c];return{type:b.type,passed:e.includes(d),expected:c,actual:d,message:b.message}}(a,e);break;case"output_schema":b=function(a,b){if(void 0===b)return{type:"output_schema",passed:!1,expected:a.value,actual:null,message:a.message??"output_schema requires raw output data — only available during track() or create()"};let c=a.value,d=function a(b,c,d=""){let e=[];if(0===Object.keys(c).length)return e;if(void 0!==c.type){let a=c.type;if(!function(a,b){switch(b){case"string":return"string"==typeof a;case"number":return"number"==typeof a;case"integer":return"number"==typeof a&&Number.isInteger(a);case"boolean":return"boolean"==typeof a;case"object":return"object"==typeof a&&null!==a&&!Array.isArray(a);case"array":return Array.isArray(a);case"null":return null===a;default:return!1}}(b,a)){var f;return e.push(`${d||"."}: expected type ${a}, got ${null===(f=b)?"null":Array.isArray(f)?"array":typeof f}`),e}}if(void 0!==c.enum){let a=c.enum;a.some(a=>JSON.stringify(a)===JSON.stringify(b))||e.push(`${d||"."}: value ${JSON.stringify(b)} not in enum ${JSON.stringify(a)}`)}if("string"==typeof b&&(void 0!==c.minLength&&b.length<c.minLength&&e.push(`${d||"."}: string length ${b.length} < minLength ${c.minLength}`),void 0!==c.maxLength&&b.length>c.maxLength&&e.push(`${d||"."}: string length ${b.length} > maxLength ${c.maxLength}`),void 0!==c.pattern&&(new RegExp(c.pattern).test(b)||e.push(`${d||"."}: string does not match pattern ${c.pattern}`))),"number"==typeof b&&(void 0!==c.minimum&&b<c.minimum&&e.push(`${d||"."}: ${b} < minimum ${c.minimum}`),void 0!==c.maximum&&b>c.maximum&&e.push(`${d||"."}: ${b} > maximum ${c.maximum}`)),"object"==typeof b&&null!==b&&!Array.isArray(b)){if(void 0!==c.required)for(let a of c.required)a in b||e.push(`${d||"."}: missing required property "${a}"`);if(void 0!==c.properties){for(let[f,g]of Object.entries(c.properties))if(f in b){let c=a(b[f],g,`${d}.${f}`);e.push(...c)}}if(!1===c.additionalProperties&&void 0!==c.properties){let a=new Set(Object.keys(c.properties));for(let c of Object.keys(b))a.has(c)||e.push(`${d||"."}: additional property "${c}" not allowed`)}}if(Array.isArray(b)&&(void 0!==c.minItems&&b.length<c.minItems&&e.push(`${d||"."}: array length ${b.length} < minItems ${c.minItems}`),void 0!==c.maxItems&&b.length>c.maxItems&&e.push(`${d||"."}: array length ${b.length} > maxItems ${c.maxItems}`),void 0!==c.items)){let f=c.items;for(let c=0;c<b.length;c++){let g=a(b[c],f,`${d}[${c}]`);e.push(...g)}}return e}(b,c);return{type:"output_schema",passed:0===d.length,expected:c,actual:d.length>0?d:b,message:d.length>0?a.message??`Schema validation failed: ${d.join(", ")}`:void 0}}(e,c?.rawOutput);break;default:b={type:e.type,passed:!1,expected:e.value,actual:null,message:e.message??`Unknown constraint type: ${e.type}`}}d.push(b)}return{passed:d.every(a=>a.passed),results:d,evaluated_at:new Date().toISOString()}}function M(a){let b=a.constraint_result;return{receipt_id:a.receipt_id,action:a.action,agent_id:a.agent_id,timestamp:a.timestamp,description:a.output_summary??`${a.action} by ${a.agent_id}`,cost_usd:a.cost_usd,latency_ms:a.latency_ms,model:a.model,tokens_in:a.tokens_in,tokens_out:a.tokens_out,constraints_passed:b&&"boolean"==typeof b.passed?b.passed:null,receipt:a}}async function N(a,b,c){let d=(await a.list({from:c.from,to:c.to,status:"completed"},1,1e5,"timestamp:asc")).data;if(c.agent_ids&&c.agent_ids.length>0){let a=new Set(c.agent_ids);d=d.filter(b=>a.has(b.agent_id))}if(c.actions&&c.actions.length>0){let a=new Set(c.actions);d=d.filter(b=>a.has(b.action))}c.constraints_passed_only&&(d=d.filter(a=>{let b=a.constraint_result;return!b||!1!==b.passed}));let e=d.map(M),f=function(a,b){if("none"===b){let b=a.reduce((a,b)=>a+(b.cost_usd??0),0);return[{label:"All Items",items:a,subtotal_usd:b,count:a.length}]}let c=new Map;for(let d of a){let a;a="action"===b?d.action:"agent"===b?d.agent_id:d.timestamp.slice(0,10);let e=c.get(a)??[];e.push(d),c.set(a,e)}let d=[];for(let[a,b]of c){let c=b.reduce((a,b)=>a+(b.cost_usd??0),0);d.push({label:a,items:b,subtotal_usd:c,count:b.length})}return d.sort((a,b)=>a.label.localeCompare(b.label))}(e,c.group_by??"none"),g=function(a){let b=0,c=0,d=0,e=0,f=0,g=0,h=0;for(let i of a)b+=i.cost_usd??0,c+=i.tokens_in??0,d+=i.tokens_out??0,e+=i.latency_ms??0,null!==i.constraints_passed&&(f++,i.constraints_passed?g++:h++);return{total_receipts:a.length,total_cost_usd:b,avg_cost_usd:a.length>0?b/a.length:0,total_tokens_in:c,total_tokens_out:d,total_latency_ms:e,avg_latency_ms:a.length>0?e/a.length:0,constraints_evaluated:f,constraints_passed:g,constraints_failed:h}}(e),h=b.getPublicKey();return{invoice_number:function(){let a=new Date,b=a.getFullYear(),c=String(a.getMonth()+1).padStart(2,"0"),d=String(a.getDate()).padStart(2,"0"),e="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",f="";for(let a=0;a<4;a++)f+=e[Math.floor(Math.random()*e.length)];return`AR-${b}${c}${d}-${f}`}(),generated_at:new Date().toISOString(),period:{from:c.from,to:c.to},client:c.client,provider:c.provider,groups:f,summary:g,public_key:h,notes:c.notes,payment_terms:c.payment_terms}}var O=class{constructor(a,b,c){this.store=a,this.keyManager=b,this.configManager=c}async create(a){let b=this.configManager.getConfig(),c=`rcpt_${(0,j.Ak)(12)}`,d=a.chain_id??`chain_${(0,j.Ak)(8)}`,e=new Date().toISOString(),f=a.constraints&&a.constraints.length>0?a.constraints:null,g=a.expires_at;!g&&a.ttl_ms&&(g=new Date(Date.now()+a.ttl_ms).toISOString());let i={...a.metadata??{}};g&&(i.expires_at=g);let k={receipt_id:c,parent_receipt_id:a.parent_receipt_id??null,chain_id:d,receipt_type:a.receipt_type??"action",agent_id:b.agentId,org_id:b.orgId,action:a.action,input_hash:a.input_hash,output_hash:a.output_hash??null,output_summary:a.output_summary??null,model:a.model??null,tokens_in:a.tokens_in??null,tokens_out:a.tokens_out??null,cost_usd:a.cost_usd??null,latency_ms:a.latency_ms??null,tool_calls:a.tool_calls??null,timestamp:e,completed_at:"completed"===a.status?e:null,status:a.status??"pending",error:null,environment:b.environment,tags:a.tags??null,constraints:f?{definitions:f}:null,constraint_result:null,signature:"",verify_url:`local://verify/${c}`,callback_verified:null,confidence:a.confidence??null,metadata:i};"completed"===k.status&&f&&(k.constraint_result=L(k,f,{rawOutput:a._rawOutput}));let l=(0,h.W_)(k);k.signature=(0,h.o3)(l,this.keyManager.getPrivateKey());let m=p.parse(k);return await this.store.save(m),m}async complete(a,b){let c=await this.store.get(a);if(!c)throw Error(`Receipt not found: ${a}`);if("pending"!==c.status)throw Error(`Receipt ${a} is not pending (status: ${c.status})`);let d=new Date().toISOString(),e={...c,status:b.status,completed_at:d,output_hash:b.output_hash??c.output_hash,output_summary:b.output_summary??c.output_summary,model:b.model??c.model,tokens_in:b.tokens_in??c.tokens_in,tokens_out:b.tokens_out??c.tokens_out,cost_usd:b.cost_usd??c.cost_usd,latency_ms:b.latency_ms??c.latency_ms,tool_calls:b.tool_calls??c.tool_calls,confidence:b.confidence??c.confidence,callback_verified:b.callback_verified??c.callback_verified,error:b.error??c.error,metadata:b.metadata?{...c.metadata,...b.metadata}:c.metadata,constraint_result:c.constraint_result},f=c.constraints,g=f?.definitions??null;Array.isArray(g)&&g.length>0&&(e.constraint_result=L(e,g));let i=(0,h.W_)(e);e.signature=(0,h.o3)(i,this.keyManager.getPrivateKey());let j=p.parse(e);return await this.store.save(j),j}async track(a){let b=J(a.input),c=void 0!==a.output?J(a.output):null;return this.create({action:a.action,input_hash:b,output_hash:c,output_summary:a.output_summary??null,model:a.model??null,tokens_in:a.tokens_in??null,tokens_out:a.tokens_out??null,cost_usd:a.cost_usd??null,latency_ms:a.latency_ms??null,tool_calls:a.tool_calls??null,tags:a.tags??null,confidence:a.confidence??null,metadata:a.metadata??{},parent_receipt_id:a.parent_receipt_id??null,chain_id:a.chain_id,status:"completed",constraints:a.constraints,expires_at:a.expires_at,ttl_ms:a.ttl_ms,_rawOutput:a.output})}async verify(a){let b=await this.store.get(a);if(!b)throw Error(`Receipt not found: ${a}`);let c=(0,h.W_)(b);return{verified:(0,h.XF)(c,b.signature,this.keyManager.getPublicKey()),receipt:b}}async get(a){return this.store.get(a)}async list(a,b,c,d){return this.store.list(a,b,c,d)}async getChain(a){return this.store.getChain(a)}async getJudgments(a){return(await this.store.list({parent_receipt_id:a,receipt_type:"judgment"})).data}async cleanup(){let a=await this.store.cleanup();return{deleted:a.deleted,remaining:a.total-a.deleted}}getPublicKey(){return this.keyManager.getPublicKey()}async generateInvoice(a){return N(this.store,this.keyManager,a)}},P=class{constructor(a,b){this.receiptEngine=a,this.memoryStore=b}async observe(a){let b=a.scope??"agent",c=a.confidence??"medium",d=!1,e=this.memoryStore.findEntityByName(a.entityName,a.entityType),f=await this.receiptEngine.create({action:"memory.observe",receipt_type:"memory",input_hash:J({entityName:a.entityName,content:a.content}),status:"completed",metadata:{memory:{memory_operation:"observe",entity_id:e?.entity_id??null,observation_id:null,relationship_id:null,scope:b,query:null,results_count:null,confidence:c}}});e||(e=this.memoryStore.createEntity({entity_id:`ent_${(0,j.Ak)(12)}`,entity_type:a.entityType,name:a.entityName,aliases:[],scope:b,created_at:new Date().toISOString(),created_by_agent:a.agentId,created_by_receipt:f.receipt_id,forgotten_at:null,merged_into:null,attributes:{},metadata:{}}),d=!0);let g=this.memoryStore.addObservation({observation_id:`obs_${(0,j.Ak)(12)}`,entity_id:e.entity_id,content:a.content,confidence:c,source_receipt_id:f.receipt_id,source_agent_id:a.agentId,source_context:a.context??null,observed_at:new Date().toISOString(),forgotten_at:null,forgotten_by:null,superseded_by:null,expires_at:a.ttlSeconds?new Date(Date.now()+1e3*a.ttlSeconds).toISOString():null,tags:a.tags??[],metadata:{}});return{entity:e,observation:g,receipt:f,created_entity:d}}async recall(a){let b={query:a.query,entity_type:a.entityType,entity_id:a.entityId,scope:a.scope,limit:a.limit??20,include_forgotten:!1,page:1},c=this.memoryStore.recall(b),d=null;return a.audited&&(d=await this.receiptEngine.create({action:"memory.recall",receipt_type:"memory",input_hash:J({query:a.query,entityType:a.entityType,entityId:a.entityId}),output_hash:J({entities:c.entities.length,observations:c.observations.length}),status:"completed",metadata:{memory:{memory_operation:"recall",entity_id:a.entityId??null,observation_id:null,relationship_id:null,scope:a.scope??"agent",query:a.query??null,results_count:c.total,confidence:null}}})),{entities:c.entities,observations:c.observations,receipt:d}}async forget(a){let b=a.entityId?"memory.forget_entity":"memory.forget";if(a.entityId)this.memoryStore.forgetEntity(a.entityId,a.agentId);else if(a.observationId)this.memoryStore.forgetObservation(a.observationId,a.agentId);else throw Error("Either entityId or observationId must be provided");return{receipt:await this.receiptEngine.create({action:b,receipt_type:"memory",input_hash:J({entityId:a.entityId,observationId:a.observationId,reason:a.reason}),status:"completed",metadata:{memory:{memory_operation:a.entityId?"forget_entity":"forget",entity_id:a.entityId??null,observation_id:a.observationId??null,relationship_id:null,scope:"agent",query:null,results_count:null,confidence:null},reason:a.reason}})}}async relate(a){let b=await this.receiptEngine.create({action:"memory.relate",receipt_type:"memory",input_hash:J({from:a.fromEntityId,to:a.toEntityId,type:a.relationshipType}),status:"completed",metadata:{memory:{memory_operation:"observe",entity_id:a.fromEntityId,observation_id:null,relationship_id:null,scope:"agent",query:null,results_count:null,confidence:a.strength??"medium"}}});return{relationship:this.memoryStore.addRelationship({relationship_id:`rel_${(0,j.Ak)(12)}`,from_entity_id:a.fromEntityId,to_entity_id:a.toEntityId,relationship_type:a.relationshipType,strength:a.strength??"medium",source_receipt_id:b.receipt_id,created_at:new Date().toISOString(),forgotten_at:null,metadata:a.context?{context:a.context}:{}}),receipt:b}}async merge(a){let b=this.memoryStore.mergeEntities(a.sourceEntityId,a.targetEntityId),c=await this.receiptEngine.create({action:"memory.merge",receipt_type:"memory",input_hash:J({source:a.sourceEntityId,target:a.targetEntityId}),output_hash:J(b),status:"completed",metadata:{memory:{memory_operation:"merge",entity_id:a.targetEntityId,observation_id:null,relationship_id:null,scope:b.scope,query:null,results_count:null,confidence:null}}});return{mergedEntity:b,receipt:c}}provenance(a){return this.memoryStore.getMemoryProvenance(a)}entityTimeline(a){let b=this.memoryStore.getEntityHistory(a),c=this.memoryStore.getRelationships(a),d=[];for(let a of b)d.push({type:a.forgotten_at?"forget":"observation",timestamp:a.observed_at,data:a});for(let a of c)d.push({type:"relationship",timestamp:a.created_at,data:a});return d.sort((a,b)=>a.timestamp.localeCompare(b.timestamp)),d}memoryAudit(a){return this.memoryStore.getMemoryStats(a.agentId,a.from,a.to)}async getContext(a){let b=Math.min(a.maxEntities??10,50),c=Math.min(a.maxObservations??20,100),d=this.memoryStore.getTopEntities(b,a.scope),e=this.memoryStore.getRecentObservations(c,a.agentId),f=this.memoryStore.getActiveRelationships(50),g=this.memoryStore.getPreferenceObservations(20),h=this.memoryStore.getContextStats(),i=null;return a.audited&&(i=await this.receiptEngine.create({action:"memory.context",receipt_type:"memory",input_hash:J({scope:a.scope,maxEntities:b,maxObservations:c}),output_hash:J({entities:d.length,observations:e.length}),status:"completed",metadata:{memory:{memory_operation:"recall",entity_id:null,observation_id:null,relationship_id:null,scope:a.scope??"agent",query:null,results_count:d.length+e.length,confidence:null}}})),{entities:d,recent_observations:e,relationships:f,preferences:g,stats:h,receipt:i}}async exportBundle(a){let{entityIds:b,includeReceipts:c=!0,includeForgotten:d=!1,description:e=null}=a??{},f=b?b.map(a=>this.memoryStore.getEntity(a)).filter(a=>null!==a):this.memoryStore.findEntities({include_forgotten:d,limit:100,page:1}).data,g=[];for(let a of f){let b=this.memoryStore.getObservations(a.entity_id,d);g.push(...b)}let h=new Set,i=[];for(let a of f)for(let b of this.memoryStore.getRelationships(a.entity_id))h.has(b.relationship_id)||(h.add(b.relationship_id),i.push(b));let k=[];if(c){let a=new Set;for(let b of g)a.add(b.source_receipt_id);for(let b of f)a.add(b.created_by_receipt);for(let b of i)a.add(b.source_receipt_id);for(let b of a){let a=await this.receiptEngine.get(b);a&&k.push(a)}}let l=J(JSON.stringify({entities:[...f].sort((a,b)=>a.entity_id.localeCompare(b.entity_id)),observations:[...g].sort((a,b)=>a.observation_id.localeCompare(b.observation_id)),relationships:[...i].sort((a,b)=>a.relationship_id.localeCompare(b.relationship_id))})),m=this.receiptEngine.getPublicKey(),n=new Set;g.forEach(a=>n.add(a.source_agent_id));let o=g.map(a=>a.observed_at).sort(),p=new Date().toISOString();return{bundle_id:`bndl_${(0,j.Ak)(12)}`,bundle_version:"1.0",created_at:p,created_by_agent:"system",description:e,public_key:m,entities:f,observations:g,relationships:i,receipts:k,checksum:l,stats:{entity_count:f.length,observation_count:g.length,relationship_count:i.length,receipt_count:k.length,agents:Array.from(n),date_range:{earliest:o[0]??p,latest:o[o.length-1]??p}}}}async importBundle(a,b){let{skipExisting:c=!0}=b??{};if(J(JSON.stringify({entities:[...a.entities].sort((a,b)=>a.entity_id.localeCompare(b.entity_id)),observations:[...a.observations].sort((a,b)=>a.observation_id.localeCompare(b.observation_id)),relationships:[...a.relationships].sort((a,b)=>a.relationship_id.localeCompare(b.relationship_id))}))!==a.checksum)throw Error("Bundle checksum mismatch — data may have been tampered with");let d={entities:0,observations:0,relationships:0},e={entities:0,observations:0,relationships:0};for(let b of a.entities){let a=this.memoryStore.getEntity(b.entity_id);if(a&&c){e.entities++;continue}!a&&(this.memoryStore.createEntity(b),d.entities++)}for(let b of a.observations){let a=this.memoryStore.getObservation(b.observation_id);if(a&&c){e.observations++;continue}!a&&(this.memoryStore.addObservation(b),d.observations++)}for(let b of a.relationships)try{this.memoryStore.addRelationship(b),d.relationships++}catch{e.relationships++}let f=await this.receiptEngine.create({action:"memory.import_bundle",receipt_type:"memory",input_hash:J({bundle_id:a.bundle_id}),output_hash:J(d),status:"completed",metadata:{memory:{memory_operation:"create",entity_id:null,observation_id:null,relationship_id:null,scope:"user",query:null,results_count:d.entities+d.observations+d.relationships,confidence:null},bundle_id:a.bundle_id}});return{imported:d,skipped:e,receipt:f}}};function Q(a,b=!1){return b?JSON.stringify(a,null,2):JSON.stringify({...a,groups:a.groups.map(a=>({...a,items:a.items.map(({receipt:a,...b})=>b)}))},null,2)}function R(a){let b=[];for(let c of(b.push("receipt_id,action,agent_id,timestamp,description,cost_usd,latency_ms,model,tokens_in,tokens_out,constraints_passed,group"),a.groups))for(let a of c.items)b.push([S(a.receipt_id),S(a.action),S(a.agent_id),S(a.timestamp),S(a.description),a.cost_usd??"",a.latency_ms??"",S(a.model??""),a.tokens_in??"",a.tokens_out??"",a.constraints_passed??"",S(c.label)].join(","));return b.push(""),b.push(`# Invoice: ${a.invoice_number}`),b.push(`# Period: ${a.period.from} to ${a.period.to}`),b.push(`# Total Receipts: ${a.summary.total_receipts}`),b.push(`# Total Cost: $${a.summary.total_cost_usd.toFixed(4)}`),b.join("\n")}function S(a){return a.includes(",")||a.includes('"')||a.includes("\n")?`"${a.replace(/"/g,'""')}"`:a}function T(a){let b=[];for(let c of(b.push(`# Invoice ${a.invoice_number}`),b.push(""),b.push(`**Generated:** ${a.generated_at}`),b.push(`**Period:** ${a.period.from} to ${a.period.to}`),b.push(""),a.provider&&(b.push("## Provider"),b.push(`**${a.provider.name}**`),a.provider.email&&b.push(`Email: ${a.provider.email}`),a.provider.address&&b.push(`Address: ${a.provider.address}`),b.push("")),a.client&&(b.push("## Bill To"),b.push(`**${a.client.name}**`),a.client.email&&b.push(`Email: ${a.client.email}`),a.client.address&&b.push(`Address: ${a.client.address}`),b.push("")),b.push("---"),b.push(""),a.groups)){for(let a of(b.push(`### ${c.label}`),b.push(""),b.push("| Receipt ID | Action | Agent | Description | Cost |"),b.push("|------------|--------|-------|-------------|------|"),c.items)){let c=null!==a.cost_usd?`$${a.cost_usd.toFixed(4)}`:"-",d=a.description.length>50?a.description.slice(0,47)+"...":a.description;b.push(`| \`${a.receipt_id}\` | ${a.action} | ${a.agent_id} | ${d} | ${c} |`)}b.push(""),b.push(`**Subtotal:** $${c.subtotal_usd.toFixed(4)} (${c.count} items)`),b.push("")}return b.push("---"),b.push(""),b.push("## Summary"),b.push(""),b.push("| Metric | Value |"),b.push("|--------|-------|"),b.push(`| Total Receipts | ${a.summary.total_receipts} |`),b.push(`| Total Cost | $${a.summary.total_cost_usd.toFixed(4)} |`),b.push(`| Avg Cost | $${a.summary.avg_cost_usd.toFixed(4)} |`),b.push(`| Total Tokens (in) | ${a.summary.total_tokens_in} |`),b.push(`| Total Tokens (out) | ${a.summary.total_tokens_out} |`),b.push(`| Avg Latency | ${Math.round(a.summary.avg_latency_ms)}ms |`),a.summary.constraints_evaluated>0&&b.push(`| Constraints Passed | ${a.summary.constraints_passed}/${a.summary.constraints_evaluated} |`),b.push(""),a.notes&&(b.push("## Notes"),b.push(""),b.push(a.notes),b.push("")),a.payment_terms&&(b.push("## Payment Terms"),b.push(""),b.push(a.payment_terms),b.push("")),b.push("---"),b.push(""),b.push("## Verification"),b.push(""),b.push("Every line item is a cryptographically signed receipt that can be independently verified."),b.push(""),b.push(`**Public Key:** \`${a.public_key}\``),b.push(""),b.join("\n")}function U(a){let b=a.provider?`
213
213
  <div class="party">
214
214
  <h3>From</h3>
215
- <p class="party-name">${S(a.provider.name)}</p>
216
- ${a.provider.email?`<p>${S(a.provider.email)}</p>`:""}
217
- ${a.provider.address?`<p>${S(a.provider.address)}</p>`:""}
215
+ <p class="party-name">${V(a.provider.name)}</p>
216
+ ${a.provider.email?`<p>${V(a.provider.email)}</p>`:""}
217
+ ${a.provider.address?`<p>${V(a.provider.address)}</p>`:""}
218
218
  </div>`:"",c=a.client?`
219
219
  <div class="party">
220
220
  <h3>Bill To</h3>
221
- <p class="party-name">${S(a.client.name)}</p>
222
- ${a.client.email?`<p>${S(a.client.email)}</p>`:""}
223
- ${a.client.address?`<p>${S(a.client.address)}</p>`:""}
221
+ <p class="party-name">${V(a.client.name)}</p>
222
+ ${a.client.email?`<p>${V(a.client.email)}</p>`:""}
223
+ ${a.client.address?`<p>${V(a.client.address)}</p>`:""}
224
224
  </div>`:"",d=a.groups.map(a=>`
225
225
  <div class="group">
226
- <h3>${S(a.label)}</h3>
226
+ <h3>${V(a.label)}</h3>
227
227
  <table>
228
228
  <thead>
229
229
  <tr>
@@ -236,12 +236,12 @@
236
236
  </tr>
237
237
  </thead>
238
238
  <tbody>
239
- ${a.items.map(a=>(function(a){let b=null!==a.cost_usd?`$${a.cost_usd.toFixed(4)}`:"-",c=a.description.length>60?a.description.slice(0,57)+"...":a.description,d=T(a.timestamp);return` <tr>
240
- <td class="receipt-id">${S(a.receipt_id)}</td>
241
- <td>${S(a.action)}</td>
242
- <td>${S(a.agent_id)}</td>
243
- <td>${S(c)}</td>
244
- <td>${S(d)}</td>
239
+ ${a.items.map(a=>(function(a){let b=null!==a.cost_usd?`$${a.cost_usd.toFixed(4)}`:"-",c=a.description.length>60?a.description.slice(0,57)+"...":a.description,d=W(a.timestamp);return` <tr>
240
+ <td class="receipt-id">${V(a.receipt_id)}</td>
241
+ <td>${V(a.action)}</td>
242
+ <td>${V(a.agent_id)}</td>
243
+ <td>${V(c)}</td>
244
+ <td>${V(d)}</td>
245
245
  <td class="num">${b}</td>
246
246
  </tr>`})(a)).join("\n")}
247
247
  </tbody>
@@ -252,12 +252,12 @@
252
252
  </tr>
253
253
  </tfoot>
254
254
  </table>
255
- </div>`).join("\n"),e=a.summary.constraints_evaluated>0?`<tr><td>Constraints Passed</td><td>${a.summary.constraints_passed}/${a.summary.constraints_evaluated}</td></tr>`:"",f=a.notes?`<div class="section"><h3>Notes</h3><p>${S(a.notes)}</p></div>`:"",g=a.payment_terms?`<div class="section"><h3>Payment Terms</h3><p>${S(a.payment_terms)}</p></div>`:"";return`<!DOCTYPE html>
255
+ </div>`).join("\n"),e=a.summary.constraints_evaluated>0?`<tr><td>Constraints Passed</td><td>${a.summary.constraints_passed}/${a.summary.constraints_evaluated}</td></tr>`:"",f=a.notes?`<div class="section"><h3>Notes</h3><p>${V(a.notes)}</p></div>`:"",g=a.payment_terms?`<div class="section"><h3>Payment Terms</h3><p>${V(a.payment_terms)}</p></div>`:"";return`<!DOCTYPE html>
256
256
  <html lang="en">
257
257
  <head>
258
258
  <meta charset="UTF-8">
259
259
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
260
- <title>Invoice ${S(a.invoice_number)}</title>
260
+ <title>Invoice ${V(a.invoice_number)}</title>
261
261
  <style>
262
262
  * { margin: 0; padding: 0; box-sizing: border-box; }
263
263
  body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; color: #1a1a1a; line-height: 1.5; padding: 40px; max-width: 1000px; margin: 0 auto; }
@@ -305,11 +305,11 @@
305
305
  <div class="header">
306
306
  <div>
307
307
  <h1>Invoice</h1>
308
- <div class="invoice-number">${S(a.invoice_number)}</div>
308
+ <div class="invoice-number">${V(a.invoice_number)}</div>
309
309
  </div>
310
310
  <div class="meta">
311
- <div>Generated: ${S(T(a.generated_at))}</div>
312
- <div>Period: ${S(T(a.period.from))} &mdash; ${S(T(a.period.to))}</div>
311
+ <div>Generated: ${V(W(a.generated_at))}</div>
312
+ <div>Period: ${V(W(a.period.from))} &mdash; ${V(W(a.period.to))}</div>
313
313
  </div>
314
314
  </div>
315
315
 
@@ -335,11 +335,11 @@
335
335
  <div class="verification">
336
336
  <h3>Verification</h3>
337
337
  <p>Every line item is a cryptographically signed receipt that can be independently verified.</p>
338
- <p style="margin-top: 6px;">Public Key: <code>${S(a.public_key)}</code></p>
338
+ <p style="margin-top: 6px;">Public Key: <code>${V(a.public_key)}</code></p>
339
339
  </div>
340
340
 
341
341
  <div class="footer">
342
- Generated by Agent Receipts &mdash; ${S(a.invoice_number)}
342
+ Generated by Agent Receipts &mdash; ${V(a.invoice_number)}
343
343
  </div>
344
344
  </body>
345
- </html>`}function S(a){return a.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function T(a){try{return new Date(a).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"})}catch{return a}}}};
345
+ </html>`}function V(a){return a.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function W(a){try{return new Date(a).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"})}catch{return a}}}};