{"_id":"@elsium-ai/observe","_rev":"32-b405c812a3e2fbf392fc607f0b139f0a","name":"@elsium-ai/observe","dist-tags":{"latest":"0.21.0"},"versions":{"0.1.6":{"name":"@elsium-ai/observe","version":"0.1.6","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.1.6","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"},{"name":"devconcept","email":"devconcept@outlook.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"155d2ceb3fb68751b329c86ba3b1aabf09d60510","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.1.6.tgz","fileCount":18,"integrity":"sha512-8z+e0eI+rEPhbL4QmHdxbNeYReJaiBzkU+PYyJR1xUvjpsl9pkTYfEr2GuNTSEVkurTpw1KX3ncfDhK4uoyEmg==","signatures":[{"sig":"MEUCIQCaCd3OX/hUzGIEZ9hYZz+RU2hpPCdygYRK6MUhCe193AIgEKpQGsvi2LK2H9+wVI/38ZZsAGjzjPDENSpLlhEGmMc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":59101},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"af1935640d581b258b964745649cbfd3e9bb5a02","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target bun && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@elsium-ai/core":"workspace:*"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"^1.3.0","typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.1.6_1772378043163_0.43350558358905733","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@elsium-ai/observe","version":"0.1.7","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.1.7","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"},{"name":"devconcept","email":"devconcept@outlook.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"737910dbb07fa01b6a693c076ecfadc85beb3bb1","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.1.7.tgz","fileCount":19,"integrity":"sha512-hY7F/ipLtaUkF2kJhBHPgl3kZXj+h1FkRZSSaR+9bp5QR5ptDKeigDU10n1yovg8OA28+sprvFT4ImmM2WUO+A==","signatures":[{"sig":"MEUCIQD3a7OnE2UePKcivN9fDzOayQCjwIR5DIVhtrBL5lQKhwIga9P3+JrBZAwTbaBYSfxC8l0quQtsYPAXPG6KX2Xc92g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":60779},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"17172204d2f619d2592b7c4340592efe392f9cb7","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target bun && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@elsium-ai/core":"workspace:*"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"^1.3.0","typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.1.7_1772378920312_0.17444974396668322","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@elsium-ai/observe","version":"0.2.0","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.2.0","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"},{"name":"devconcept","email":"devconcept@outlook.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"fdd8a307c2cb56c2695c12f347fc93d67e1193f2","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.2.0.tgz","fileCount":19,"integrity":"sha512-w/2dPJthyQiS7tIqorQmDLf0J1+jWgCWlDwcIruc+72RNam8S2Gp1FB6C+uo1eFS+o61wQdz7EqnIkHu+qIvTw==","signatures":[{"sig":"MEQCIB0rxqZXM232e5oLi9DQ8nx1a2DZGHvrza3UqBpQj2PbAiABCxLzMtykuNlaSUf28nvjl3CooTZW+eS/TancPTfmNQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":60762},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"225e1d7ea2249df37ae81b8234a75a751649a354","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@elsium-ai/core":"workspace:*"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.2.0_1772402103654_0.42722782130863446","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@elsium-ai/observe","version":"0.2.1","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.2.1","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"},{"name":"devconcept","email":"devconcept@outlook.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"dc0b9d0f5ce21bc3139c2d1b8a8a593aab1a747d","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.2.1.tgz","fileCount":19,"integrity":"sha512-+E0QherqibkaTnxYmYGYjnBYQ1DA252lb868iay2Vyvs4ogSHw1uUh+UDxeDaSVbycsSsQHHVC359S2/KqEpxQ==","signatures":[{"sig":"MEYCIQDL7nghN3mCxRCUek9mHkMltD03frWlczTReNBc9fBYogIhAKGTRrIRlAVGtJ8K/percuOgq6UpGXztC0c6G/4PCz55","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":60846},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"1c077ce84218595d793b200a2ed936b4feb21865","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@elsium-ai/core":"^0.2.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.2.1_1772402851085_0.9530621370385808","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@elsium-ai/observe","version":"0.2.2","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.2.2","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"},{"name":"devconcept","email":"devconcept@outlook.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"ab5cf9b773e2dbf494799c557184784ad8053514","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.2.2.tgz","fileCount":19,"integrity":"sha512-4FNEVr+dBqKJ3zczaH3m2O/U2DPzJE8evaT+ayJopjMy2mnsh2hyto/lpnZRKXt2Xmrly1kaIKnnocxhQZBl7Q==","signatures":[{"sig":"MEYCIQDsdpskkxKtFPsLF5+JkPoOXzPU9zXvw5ua6HVte/6VWwIhAOUj6u75TSxYdbCIpKSIBOddnDJmzFRhCW+l0SouJSLI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":88578},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"4873abc4872d0b381902b5ada0b9ef386e941834","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@elsium-ai/core":"^0.2.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.2.2_1772438724157_0.30890708600157213","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@elsium-ai/observe","version":"0.2.3","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.2.3","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"},{"name":"devconcept","email":"devconcept@outlook.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"bdc084b13083d3663a8c93a4c706035eea0563be","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.2.3.tgz","fileCount":19,"integrity":"sha512-fyBL/rfFUnEC8L0pYkJWgH32P+Csq6P7aZt6Q0XyvblJ0RhOiJyHS10OReUmTe6vkzXn6CL/WEcXOcEzJfIKYw==","signatures":[{"sig":"MEYCIQDwTkVsTSBVfYg0Hg/WMhpD2zy/tKr6/A7Jt/+SbK8aXwIhAKzNYOQ1pUu5shjn2u7uJUcFLzdEWjDpBPZh1OYWTcQY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":89867},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"8e84e130a3300436d1f6c776317c81f90c4dd45d","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@elsium-ai/core":"^0.2.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.2.3_1772461138552_0.2752478806816323","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@elsium-ai/observe","version":"0.3.0","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.3.0","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"},{"name":"devconcept","email":"devconcept@outlook.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"44303eb9c9180bb78de53a2edf05e03dccb9b4c0","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.3.0.tgz","fileCount":21,"integrity":"sha512-IY6pbLWRV1Ixpy51tltN7JP2sy7qo/wNFK1InYjWh2pkaZ2m/5w9HDbR10zAPMuGib4FPCUJ06mDop/zUk87iw==","signatures":[{"sig":"MEUCIAJnA9Eavc8kiIG5tJmJOfxFfx8/xVXMMQ5PWbvTE7kGAiEA0+YFERUuaQWFvWRSvAL68zgZVpjF2Hjf89f6lPs3ZJQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":94269},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"4af6a1cfe14c416a7bc5ab49635f110f71fc9963","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@elsium-ai/core":"^0.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.3.0_1772622942666_0.2752325055104865","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@elsium-ai/observe","version":"0.4.0","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.4.0","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"},{"name":"devconcept","email":"devconcept@outlook.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"86e6674b3c7612051875108839159bf65a6331a5","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.4.0.tgz","fileCount":23,"integrity":"sha512-c1M2dVDQ2J7fEKYDB3Rej87aLiV3kduJUrfprnvOZdiMC5hfWLORitqzZ3zos7KneeDR5mgE+S8IwSqpGi8L6A==","signatures":[{"sig":"MEQCIEiMcg5e/YzxAb25AJOhQPU/7bE3OaYslPimwk2NijckAiAU4Cujl5AOZQGN8D4VYWvRQYGXmLcIW+aEzA4iyp1Cug==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":102792},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"2dc7bb9cdf346e65c3bc927b4a11debe861e9963","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@elsium-ai/core":"^0.4.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.4.0_1772661525016_0.550250276758562","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@elsium-ai/observe","version":"0.4.1","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.4.1","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"},{"name":"devconcept","email":"devconcept@outlook.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"1e9e81c81c13cc65b87152a9d3fc55b268aac4fc","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.4.1.tgz","fileCount":23,"integrity":"sha512-qhZrPLC0snWebb7tWKZ/fzf8OF3HvcOzqy2R2QTrpeF/R1lijG5CsdPbol2Zp5WTkDhoxZSKQGEZBGEBwba5fQ==","signatures":[{"sig":"MEUCIBeR8QifxfCbeIkltEBbQx6Sk9/du1c9LtRPT/ub+sa0AiEAxb4PqX2fts6mjGRWQ0/+CSTdkVMWhSQEVhqo/ccV5vM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":102792},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"7f542330b7fb292523f27045996ab88237071d12","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@elsium-ai/core":"^0.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.4.1_1772662919631_0.5180872978776025","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@elsium-ai/observe","version":"0.4.2","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.4.2","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"},{"name":"devconcept","email":"devconcept@outlook.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"b41c81c9fadd4e6a7d46da1e7a0f7cc2fcbea02a","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.4.2.tgz","fileCount":23,"integrity":"sha512-UrJYFaD+W8tAohHQpchXAZw69+gZz+2A1zTAcujvZXR02YiZ02eepnwcl2QT10vte2m8vfvNvtj7Nw8ZH7xvng==","signatures":[{"sig":"MEUCIQCmf5qyalgquB4FCmDl0OweC6XL57nJnmREh6cHdic/VwIgA11f0vtCstvc6Lzloz4qPqFaYcVXymNeJCn/+LbhYfo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":102792},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"e25a9e96aa757cb5f9394e05618d184818641a97","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@elsium-ai/core":"^0.4.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.4.2_1772700834487_0.8396468592060486","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@elsium-ai/observe","version":"0.4.3","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.4.3","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"},{"name":"devconcept","email":"devconcept@outlook.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"1f27835b6fa5b72f23621a27913fc1ad1f588ae0","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.4.3.tgz","fileCount":23,"integrity":"sha512-O40VQONUlTnHGDpjlp99UNl3Rc3eVJect/laeFcvBoaGpSPM9JEixXA9Ua2D45A5DSh/E+K6ZR0tddXSdafwuQ==","signatures":[{"sig":"MEUCIQDMybCB+DPQlJDCV3Zb3cP3hjp8Y5MGmR432bkS30yAfwIgL5czFs8YYK9JC8Po/u1/JBGQR136iSaMg2wX3KMaZc8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.4.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":102792},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"92f1ff230d5bf010033500af39cc8b3482c269af","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@elsium-ai/core":"^0.4.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.4.3_1772704201346_0.314380597113987","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@elsium-ai/observe","version":"0.5.0","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.5.0","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"},{"name":"devconcept","email":"devconcept@outlook.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"a90f3ce60499c4b3ab9d5bfa9d5976f3010185dc","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.5.0.tgz","fileCount":23,"integrity":"sha512-ih6DrjCC4dFvjppu9liD8V8RxgoqhN5GbQVFFzYH4Kwz2sloJu6cad10jQcuOh+bDKd7eob458BJchPtxa/4tQ==","signatures":[{"sig":"MEUCIHqyLhGxAoRyqep9LpEhF4scD+iy5uOuSjYR3/bTOAraAiEAkMu7WUx69Ttnf73GnEpbTJ1kO3aWROPXlnUqCbbmyVs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":102792},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"faf91562c8e6cc8d22d54f0a79058d7a0f058734","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@elsium-ai/core":"^0.5.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.5.0_1772790088858_0.3201514624844526","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@elsium-ai/observe","version":"0.6.0","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.6.0","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"},{"name":"devconcept","email":"devconcept@outlook.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"588e46bebea779d4600c8fcd79da925517c01269","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.6.0.tgz","fileCount":23,"integrity":"sha512-7Y/WpeW3vobOZRffymHMxqH4kROujYfInZmqUrEMY15V9tHWgNF4wTyZzQ7fwqEf09u5pge6R9BJrlZBYi+KiQ==","signatures":[{"sig":"MEQCIHVlC1EJ9qqBXNmOJ9cSy5fzBraiI1QtDOCTpobd7Kw3AiAg0pWpQaExkJLtviudQeRaav6bpk2Rr87NviwCusDAEg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":102792},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"0019c2bdb87442a68c4625101f78e14d93cd5236","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@elsium-ai/core":"^0.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.6.0_1772808307285_0.0922657959130131","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@elsium-ai/observe","version":"0.7.0","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.7.0","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"},{"name":"devconcept","email":"devconcept@outlook.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"a1ba632095b801515ba1a9a03c680be0af99e6b7","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.7.0.tgz","fileCount":23,"integrity":"sha512-AUxdTd6ulQ1X7rKzk+Wqy8t9yTk4yQWZb81aJnXqA5/R/z1nzyB70cwvgrhGIFAB43S9qd814Bq2977nHe1gGA==","signatures":[{"sig":"MEQCICLrpPxm/jGVP7cgbKfbv5v+G5LZaiYlOKkoI5OL/6xfAiB6zEvXnZtzFnvMO83SfQ+tO7rCm13Vf7PSgYNUg2OhQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":107774},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"922faa5a5222c746845bf0565e03da1b29bc2ff6","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@elsium-ai/core":"^0.7.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.7.0_1773061819698_0.4163464648829045","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@elsium-ai/observe","version":"0.8.0","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.8.0","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"},{"name":"devconcept","email":"devconcept@outlook.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"f0ec190336928f3a81c89e20bc430966dde010e3","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.8.0.tgz","fileCount":23,"integrity":"sha512-WSrbKtNQF7iSWUVjIEnSqhN7is7lZIq/1p2j2UZLO+64sCAhPW9aj2h86j65jDPpBU9F5stfB9bK6VPwhOQxaw==","signatures":[{"sig":"MEYCIQDb12igVFErDiy4YTvr8X4LyFheyBaDVvprNjm8/V/MlgIhAI396XFvTFF6v3blEpG5KoUp2q82e6l+hGPbvC9XyK9c","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":107774},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"927ea4aea85cc22b9288e46e8e1c4dea02578a71","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@elsium-ai/core":"^0.8.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.8.0_1773136134819_0.33505172494009505","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@elsium-ai/observe","version":"0.9.0","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.9.0","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"},{"name":"devconcept","email":"devconcept@outlook.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"ad64eb895e135f791879ea70102dd71c34865698","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.9.0.tgz","fileCount":33,"integrity":"sha512-7UNIzTQQq6iHZ9+fHAQ2uhj9iTLM0893dkNxHsTcg9seX2gtwsTaGQ2skNt7oIFiPKIvi5L7A94xKQL3//n4KA==","signatures":[{"sig":"MEYCIQDq9re+Bp6R8XGPGSReNro/WNFFVSROOBhLfpyHMW+F7AIhALjKWzGRn6vfrQKvlGbSLrGL5kHmlWBfSxDJpJpaD+JY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":135795},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"2f09d411f22c888a78b62dfd05aaaec33fc79556","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.1","dependencies":{"@elsium-ai/core":"^0.9.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.9.0_1773923163975_0.6036131049318205","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"@elsium-ai/observe","version":"0.9.1","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.9.1","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"},{"name":"devconcept","email":"devconcept@outlook.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"bd92593287fa04f6aa222cc902082288d56f1826","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.9.1.tgz","fileCount":33,"integrity":"sha512-Tl+oJDNNN2O80+yArwe88FvPXBI9cNAqvL96ZVkVWgYZ8EcBJyk6+dXdnmUilUTHVFSrXIuf3qX/Gh1Sz64zZA==","signatures":[{"sig":"MEYCIQDU9YiyykOVvUIIJWhvNufJvoRVxU6FpO2lyUxhoMWa5QIhALdnLBj7ucg32qRg6dFZK0J2xtq+hZpsDe46TSP17GjA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.9.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":135795},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"82b2112700109fae8cd161da4084a66d2cf9a4cf","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.1","dependencies":{"@elsium-ai/core":"^0.9.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.9.1_1773925900196_0.05747512204221783","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@elsium-ai/observe","version":"0.10.0","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.10.0","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"},{"name":"devconcept","email":"devconcept@outlook.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"761c918cbb62984c267c70c282f74e94f5a0ee50","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.10.0.tgz","fileCount":35,"integrity":"sha512-7lTntyFdu0UruvA3MtuLhbqXy3vfrhSPy3kE2sGJdvGKmzhFEPf+tshsfVelcdbK3dDAruFWsit5gMlZ3o9H1Q==","signatures":[{"sig":"MEQCIE1YNt5hdF/t33kfudzhbvD9Bq/xLuccRVPzkEV3YizJAiBMitYOpD/cBRVk0LsSwIW76pM8IHU0Kdj65oxZUwYyTA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":151692},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"82afe2660e7f66fc14f22161ef0e873cb7ae99dd","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@elsium-ai/core":"^0.10.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.10.0_1776100452695_0.3699159339189182","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@elsium-ai/observe","version":"0.11.0","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.11.0","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"},{"name":"devconcept","email":"devconcept@outlook.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"fe925336b393ad7f444196b1dbb57874532ef609","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.11.0.tgz","fileCount":37,"integrity":"sha512-LQ0a1jDI91VKmZb+vZdWa7qvJ96pNIyjyPyndjLuVN4OhaOXeL+ra2JS8JtOekarAJ/y1Yc9COeurojAo9BdyQ==","signatures":[{"sig":"MEQCIEXsdi67SkkboZ7H5VaCX8/K2bbYahusH5IZ7irgXNfkAiB+N2ZpIhalFk3BF+JPf8FtMQN/XE/RrEZoHmcYlZ2CVw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":154013},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d4b7c9d4bfee862a0e512e0e0c46940eaefef66c","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@elsium-ai/core":"^0.11.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.11.0_1778238330386_0.7614259836835169","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@elsium-ai/observe","version":"0.12.0","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.12.0","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"},{"name":"devconcept","email":"devconcept@outlook.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"5de7efb40417c9b6f1f6b51cac30dc4c41028580","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.12.0.tgz","fileCount":37,"integrity":"sha512-X1fkoPHAtob/icfT/ll45ceHX6RwXxv5YZPaB01v+OiK5Y2FUEvogIkoSqwH2wwC6Nir8R9jNLDuwvuoQmZAeg==","signatures":[{"sig":"MEUCIHwM2G8/XicUytPVBIE3T94iM6dyDmWMDbhIC2pClNdGAiEAoEo/7CVNyjioj+M97mVxVI1guSacmItUZf+rurFOdME=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":154013},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"9a080e1dcf4f6723505405ba044b7ac3341d8edc","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@elsium-ai/core":"^0.12.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.12.0_1778239824521_0.1886993917374622","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"@elsium-ai/observe","version":"0.12.1","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.12.1","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"},{"name":"devconcept","email":"devconcept@outlook.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"89cefbac86a78d6ec1daaf5e8dfd95d821f78fa5","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.12.1.tgz","fileCount":37,"integrity":"sha512-TusPgyaRAfAPDNEp0x4vd4dNEBQVTxyD3vzHzGqsU4V6iwZyUW1pg2QgIdTn3/R4H9M5ZNWZ1PjH1uA6fzKrtQ==","signatures":[{"sig":"MEYCIQDGO+dHZLdd3qI7O/hF3/B4COorRvTm98jIMijQQwqpQwIhAKsqZf4RVB84dH8YHRuuPcOiJa5ETnsN/bu6j10pHkHo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.12.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":154013},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"f823d0f0a5b3b35dcbb804eb0c653e0094ab6fda","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@elsium-ai/core":"^0.12.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.12.1_1778242491384_0.3315361502079073","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@elsium-ai/observe","version":"0.13.0","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.13.0","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"},{"name":"devconcept","email":"devconcept@outlook.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"26a4da61f697c5f33c411644dddb97255e2b6e1c","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.13.0.tgz","fileCount":45,"integrity":"sha512-Z1Q9Nh2Fq15DjiBsaA+YLXgT2vZuMt9uTjjjVWPiMtFjyvsfxdNhDiUh8fo+fFS0LBLxA4/+xz/64wLxD5zSSw==","signatures":[{"sig":"MEQCIB4m8s+awJzW9cGrDseCnGlSbeh7MR4C3xiHTbD6hjamAiARtBBOaM6chVXkIHxhTurKRDQbOmigwfSpvtiLfXrD7A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":154192},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d526d095cadbf3944f85b8b45ab300f2187cb35f","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node --minify && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@elsium-ai/core":"^0.13.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.13.0_1778587291899_0.8586210153053435","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@elsium-ai/observe","version":"0.14.0","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.14.0","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"5943bdc91616f135d7bfc1606a3d0232a6fdfa00","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.14.0.tgz","fileCount":45,"integrity":"sha512-3DZD4fmIWOT3HYyZ+pMjQonrfb2J3KboFdI5zYiDBcL2VoMpxGYam5cdDA3WyW4efdd6L/aJRYbOilYpJWHH4Q==","signatures":[{"sig":"MEQCIEWOzCg4f9dsWJCLRtiSl48wBwc2GJJH5uwbzk+ZbokRAiBpMcEdj6BzXCvN7+VtF31IWagE1m4Hlm0YAXamG1XJ0w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":154192},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"14dd3f6e1e053c138b832cffbb93b09ca489de05","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node --minify && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@elsium-ai/core":"^0.14.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.14.0_1778610433575_0.059488269443085384","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@elsium-ai/observe","version":"0.15.0","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.15.0","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"bf1c58a87770fb6ab95b3ded2de53d1d44029baa","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.15.0.tgz","fileCount":53,"integrity":"sha512-xqCvOPVNExIdMUIgTyF9Zz8rPtv4PJCnXLnZxw2rQHjzP7Mf8lmQQCOnJGDJNkZaHO6d0pWUAJ4IAeXdclKWzQ==","signatures":[{"sig":"MEUCIHNPJOlE4FUro305rayGAm3Yt6sg3mXcWLdDumdz6yH4AiEAxZhDbTKfbnr+fG3u6GRs+07SfayehtM08E/lLWDvwdk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":176562},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d49277a8ba80582a7ae8fcdee27e3769a2899b4b","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node --minify && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@elsium-ai/core":"^0.15.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.15.0_1779695802744_0.19022186832563182","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@elsium-ai/observe","version":"0.16.0","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.16.0","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"72b519dd5a6fab317cf7d7046149730972214986","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.16.0.tgz","fileCount":53,"integrity":"sha512-1g4wiunlgtZPSCp0/3BYoei1qSoeCMSc9NQGyw6euIOWyDE5rnBtqloixpcHvEh/zU2nogt02wV8Dw06iiJZ4A==","signatures":[{"sig":"MEUCIBUzIhdF/rJWsNrsSvc7lRB351yWt0wnRjGpHlUTBS0bAiEAo7gE2CtQ82j9F4z6yUi/VuIAZ4v3mZUEqxQmI8cpego=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":176562},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"6f811486ad01872c1e8f70d990c223371b7e36b9","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node --minify && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@elsium-ai/core":"^0.16.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.16.0_1779703873354_0.812964705204752","host":"s3://npm-registry-packages-npm-production"}},"0.16.1":{"name":"@elsium-ai/observe","version":"0.16.1","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.16.1","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"febae3e0b934aa039a728e2bbc447b7bcd3acf82","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.16.1.tgz","fileCount":53,"integrity":"sha512-Du4+EKILWL0plyoHJED1H6SYoywAkQNRlKOF00hl57elXI3YZF0hdomI5514ZiHubZbLEHRlfAAEzmeg3U90Yg==","signatures":[{"sig":"MEQCIA8uzzpE4nwExv5kHM9pmdZIhPqhlkmqEIwn+BXH7JTWAiAZHshVlVkYhzw2zcX17jgYuyeS7dyokHjXSBTbbad2Mg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.16.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":176621},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"7f00de957d1a9cb25fe04e62408dcb2530e19444","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node --minify && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@elsium-ai/core":"^0.16.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.16.1_1779745126810_0.4895597208021436","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@elsium-ai/observe","version":"0.17.0","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.17.0","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"d42c671667efd7114639592cb55ed7cea4110e08","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.17.0.tgz","fileCount":53,"integrity":"sha512-Z6d9ZAi1d4Gs6e75nuCTAiwX1DzGlzMigDAHIPEVxI2ymQxJcFXjPJTZ7hS48wIu5V7Zt4tI+681rLe2RkwNWQ==","signatures":[{"sig":"MEQCIA9d1g2aw3IdiVuIZfDsOS0AOCPLKbAwqFzcKEB6sAGUAiBbNkmUFaX5apRcehrasENybm5W4CsgYu74Ms/TuVVlyg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":176621},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"767ca0fb0d276abc945bf5a2a1b8ae0dd3f6991d","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node --minify && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@elsium-ai/core":"^0.17.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.17.0_1782510522498_0.0022555686902168137","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"@elsium-ai/observe","version":"0.18.0","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.18.0","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"ebe3ef26a056f4e5db3c646f0e30833f0cfbcfca","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.18.0.tgz","fileCount":53,"integrity":"sha512-VcPFP0yCW53P+XhUTQjWjzoGhFNTjlW66ItMGVk3V+4BiH2HvJyw97AYjxjIxwTZX1x5igpOqJO3KZSF0HABAA==","signatures":[{"sig":"MEUCIQDOWP8d1yPcNJVpAXdhY4Cp2ogD/77VtB2z2RkotXmMdQIga6611dI+9DKYFYEx31vWpQPs5NyF7CET0yCojL85ea8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":176621},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"c9b0da8a9e7f6a9a059be56ffe9d80b3298114f6","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node --minify && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@elsium-ai/core":"^0.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.18.0_1782762838301_0.00983067745737487","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"@elsium-ai/observe","version":"0.19.0","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.19.0","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"b8a9dce12210f705e1a493f9178131b2ed0493ea","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.19.0.tgz","fileCount":65,"integrity":"sha512-BZiV8jm4CXtr7q1kk0oT/ZUMjIgS06349dyN+LasswL9PUH6bDsmfsqkTvk/+rp/kKwXLLdswc4fhfm+lm947A==","signatures":[{"sig":"MEQCIA6qWivCYlvqxkptoEh8ebEF+8wZIkjYT/FTEWR7/rQ8AiAsWR3bSKs8GQnuhBAj3AFXLHxQc4z3ISB7owqFQ+A4mg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":205898},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"6dd5854549f5078462d1a03e4aaa10316989bd3b","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node --minify && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"ebutrera","email":"ebutrera910322@gmail.com"},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"10.8.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@elsium-ai/core":"^0.19.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.19.0_1785928498335_0.7824391661342305","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"@elsium-ai/observe","version":"0.20.0","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","_id":"@elsium-ai/observe@0.20.0","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"}],"homepage":"https://github.com/elsium-ai/elsium-ai#readme","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"dist":{"shasum":"14744aef77f08a476c0120162388d9bee9ab02c5","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.20.0.tgz","fileCount":73,"integrity":"sha512-XU+blyhahwfrrRMmwv3yq9Z4d28HrS3KVbFLgpdgM5AhV22cz4ZfBKyEzWD2JmWa3sCpnd3rP5NBVBbjmGdEqg==","signatures":[{"sig":"MEQCICMkkjIhQlInEKaWvVK34gprpATBPNBmtjKy0CO/qq0EAiAOVD2jj45TXSA9WDQSVOYGdw6PMe+3KH29okHBc8hjjw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":218264},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"ebef3ad8b9a806269d56b89f4e23a1f0ce62ada6","scripts":{"dev":"bun --watch src/index.ts","build":"bun build ./src/index.ts --outdir ./dist --target node --minify && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a07f8357-6be1-4301-bfac-b3c29fc70c9b"}},"repository":{"url":"git+https://github.com/elsium-ai/elsium-ai.git","type":"git","directory":"packages/observe"},"_npmVersion":"12.0.2","description":"Observability, tracing, and cost tracking for ElsiumAI","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@elsium-ai/core":"^0.20.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/observe_0.20.0_1785935889203_0.5484846164652131","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"@elsium-ai/observe","version":"0.21.0","description":"Observability, tracing, and cost tracking for ElsiumAI","license":"MIT","author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/elsium-ai/elsium-ai.git","directory":"packages/observe"},"type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"scripts":{"build":"bun build ./src/index.ts --outdir ./dist --target node --minify && bun x tsc -p tsconfig.build.json --emitDeclarationOnly","dev":"bun --watch src/index.ts"},"dependencies":{"@elsium-ai/core":"^0.21.0"},"devDependencies":{"typescript":"^5.7.0"},"publishConfig":{"registry":"https://registry.npmjs.org","access":"public"},"gitHead":"cd7a5e1dd0bbd23265f41cb752d060cc132fc481","_id":"@elsium-ai/observe@0.21.0","bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"homepage":"https://github.com/elsium-ai/elsium-ai#readme","_nodeVersion":"22.23.1","_npmVersion":"12.0.2","dist":{"integrity":"sha512-wX2bBg9yZSAnLRiH0NdalHCHsHksSxzqNPClG5uBlKsRYNqKUku1+HAZ4WqLtQC3JYvT72Fjx85Ktb9tTqrKCQ==","shasum":"9ff850dfc0eaec021e55a74eaeef71c7a4d07a9a","tarball":"https://registry.npmjs.org/@elsium-ai/observe/-/observe-0.21.0.tgz","fileCount":77,"unpackedSize":228016,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elsium-ai%2fobserve@0.21.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAmyDMSY7g4cyebDpvViC5Gq8U+2uBQRU7DBFY74eeCbAiEA+ELuvkSP65D3Gxjan4AArC8J9cJbJFdxl+aYAilqK+M="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a07f8357-6be1-4301-bfac-b3c29fc70c9b"}},"directories":{},"maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/observe_0.21.0_1785939823531_0.907129327169518"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-01T15:14:03.082Z","modified":"2026-08-05T14:23:43.999Z","0.1.6":"2026-03-01T15:14:03.303Z","0.1.7":"2026-03-01T15:28:40.456Z","0.2.0":"2026-03-01T21:55:03.811Z","0.2.1":"2026-03-01T22:07:31.217Z","0.2.2":"2026-03-02T08:05:24.305Z","0.2.3":"2026-03-02T14:18:58.694Z","0.3.0":"2026-03-04T11:15:42.800Z","0.4.0":"2026-03-04T21:58:45.173Z","0.4.1":"2026-03-04T22:21:59.820Z","0.4.2":"2026-03-05T08:53:54.665Z","0.4.3":"2026-03-05T09:50:01.499Z","0.5.0":"2026-03-06T09:41:29.036Z","0.6.0":"2026-03-06T14:45:07.457Z","0.7.0":"2026-03-09T13:10:19.878Z","0.8.0":"2026-03-10T09:48:54.955Z","0.9.0":"2026-03-19T12:26:04.121Z","0.9.1":"2026-03-19T13:11:40.358Z","0.10.0":"2026-04-13T17:14:12.843Z","0.11.0":"2026-05-08T11:05:30.574Z","0.12.0":"2026-05-08T11:30:24.671Z","0.12.1":"2026-05-08T12:14:51.563Z","0.13.0":"2026-05-12T12:01:32.094Z","0.14.0":"2026-05-12T18:27:13.715Z","0.15.0":"2026-05-25T07:56:42.891Z","0.16.0":"2026-05-25T10:11:13.511Z","0.16.1":"2026-05-25T21:38:46.959Z","0.17.0":"2026-06-26T21:48:42.634Z","0.18.0":"2026-06-29T19:53:58.435Z","0.19.0":"2026-08-05T11:14:58.471Z","0.20.0":"2026-08-05T13:18:09.348Z","0.21.0":"2026-08-05T14:23:43.674Z"},"bugs":{"url":"https://github.com/elsium-ai/elsium-ai/issues"},"author":{"name":"Eric Utrera","email":"ebutrera9103@gmail.com"},"license":"MIT","homepage":"https://github.com/elsium-ai/elsium-ai#readme","repository":{"type":"git","url":"git+https://github.com/elsium-ai/elsium-ai.git","directory":"packages/observe"},"description":"Observability, tracing, and cost tracking for ElsiumAI","maintainers":[{"name":"ebutrera","email":"ebutrera910322@gmail.com"}],"readme":"# @elsium-ai/observe\n\nObservability, tracing, cost intelligence, metrics, audit trails, provenance tracking, and OpenTelemetry compatibility for [ElsiumAI](https://github.com/elsium-ai/elsium-ai).\n\n[![npm](https://img.shields.io/npm/v/@elsium-ai/observe.svg)](https://www.npmjs.com/package/@elsium-ai/observe)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/elsium-ai/elsium-ai/blob/main/LICENSE)\n\n## Install\n\n```bash\nnpm install @elsium-ai/observe @elsium-ai/core\n```\n\n## What's Inside\n\n| Category | Exports | Description |\n|---|---|---|\n| **Spans** | `createSpan`, `Span`, `SpanData`, `SpanEvent`, `SpanKind`, `SpanStatus`, `SpanHandler` | Low-level span creation with nested context propagation |\n| **Cost Engine** | `createCostEngine`, `registerModelTier`, `CostEngine`, `CostEngineConfig`, `BudgetConfig`, `LoopDetectionConfig`, `CostAlert`, `CostDimension`, `CostIntelligenceReport`, `ModelSuggestion`, `ModelTierEntry` | Budget enforcement, cost projections, loop detection, and model optimization suggestions |\n| **Tracer** | `observe`, `Tracer`, `TracerConfig`, `TracerOutput`, `TracerExporter`, `CostReport` | High-level tracing with sampling, console output, and custom exporters |\n| **Metrics** | `createMetrics`, `MetricsCollector`, `MetricEntry` | Counters, gauges, and histograms for application-level metrics |\n| **Audit Trail** | `createAuditTrail`, `auditMiddleware`, `auditStreamMiddleware`, `AuditEventType`, `AuditEvent`, `AuditStorageAdapter`, `AuditQueryFilter`, `AuditIntegrityResult`, `AuditTrailConfig`, `AuditTrail` | SHA-256 hash-chained audit events with tamper detection, middleware for both completion and streaming calls |\n| **Audit Sinks** | `createSinkManager`, `createWebhookSink`, `createSplunkSink`, `createDatadogSink`, `AuditSink`, `AuditSinkRetryConfig`, `SinkManagerConfig`, `SinkManager`, `WebhookSinkConfig`, `SplunkSinkConfig`, `DatadogSinkConfig` | Export audit events to external systems (webhooks, Splunk, Datadog) with batching, retry, per-sink filtering, and dead letter queue |\n| **Provenance** | `createProvenanceTracker`, `ProvenanceRecord`, `ProvenanceTracker` | Full lineage tracking per output: prompt, model, config, input, output |\n| **Verifiable Agent Execution** | `createProofRecorder`, `verifyProof`, `compareProofs`, `ProofRecorder`, `ProofSession`, `ExecutionProof`, `ProofEvent`, `VerifyProofResult`, `ReplayDiff`, `ReplayStrategy` | Signed per-run execution proofs with hash-chained events. Build on `@elsium-ai/core` Ed25519 + `WriteOnceStore`. Third parties verify proofs offline with just the public key, and `compareProofs(a, b, { strategy })` diffs two proofs for reproducibility. CLI: `elsium verify` and `elsium replay`. |\n| **AI-BOM** | `generateAiBom`, `verifyAiBom`, `diffAiBom`, `passesGate`, `serializeAiBom`, `AiBom`, `AiBomInput`, `AiBomDiff`, `ComponentDrift`, `DriftSeverity`, `VerifyAiBomResult` | Ed25519-signed manifest of what an agent is made of — models, prompts, tools (with sandbox capabilities), MCP servers, eval datasets, policies, thresholds. Deterministic and order-independent; `diffAiBom` ranks composition drift by whether the blast radius grew. Where a proof records one run, a BOM records the composition every run inherits. CLI: `elsium bom verify` and `elsium bom diff`. |\n| **Studio Exporter** | `createStudioExporter`, `StudioExporter`, `StudioExporterConfig` | Write traces, X-Ray, and costs to `.elsium/` for the `elsium studio` dashboard |\n| **OpenTelemetry** | `toOTelSpan`, `toOTelExportRequest`, `toTraceparent`, `parseTraceparent`, `injectTraceContext`, `extractTraceContext`, `createOTLPExporter`, `OTelSpan`, `OTelSpanKind`, `OTelStatusCode`, `OTelAttribute`, `OTelAttributeValue`, `OTelEvent`, `OTelResource`, `OTelExportRequest`, `TraceContext`, `OTLPExporterConfig` | W3C Trace Context propagation, OTel span conversion, and OTLP JSON export |\n\n---\n\n## Spans\n\nLow-level building blocks for distributed tracing. Each span records a named operation with timing, metadata, events, and parent-child relationships.\n\n### `SpanKind`\n\n```ts\ntype SpanKind = 'llm' | 'tool' | 'agent' | 'workflow' | 'custom'\n```\n\n### `SpanStatus`\n\n```ts\ntype SpanStatus = 'running' | 'ok' | 'error'\n```\n\n### `SpanEvent`\n\n```ts\ninterface SpanEvent {\n  name: string\n  timestamp: number\n  data?: Record<string, unknown>\n}\n```\n\n### `SpanData`\n\nThe serializable representation of a span, returned by `span.toJSON()`.\n\n```ts\ninterface SpanData {\n  id: string\n  traceId: string\n  parentId?: string\n  name: string\n  kind: SpanKind\n  status: SpanStatus\n  startTime: number\n  endTime?: number\n  durationMs?: number\n  metadata: Record<string, unknown>\n  events: SpanEvent[]\n}\n```\n\n### `Span`\n\nThe live span interface used during operation execution.\n\n```ts\ninterface Span {\n  readonly id: string\n  readonly traceId: string\n  readonly name: string\n  readonly kind: SpanKind\n\n  addEvent(name: string, data?: Record<string, unknown>): void\n  setMetadata(key: string, value: unknown): void\n  end(result?: { status?: SpanStatus; metadata?: Record<string, unknown> }): void\n  child(name: string, kind?: SpanKind): Span\n  toJSON(): SpanData\n}\n```\n\n### `SpanHandler`\n\nCallback invoked when a span ends.\n\n```ts\ntype SpanHandler = (span: SpanData) => void\n```\n\n### `createSpan()`\n\nCreates a new span for tracing an operation.\n\n```ts\nfunction createSpan(\n  name: string,\n  options?: {\n    traceId?: string\n    parentId?: string\n    kind?: SpanKind\n    onEnd?: SpanHandler\n  },\n): Span\n```\n\n| Parameter | Type | Default | Description |\n|---|---|---|---|\n| `name` | `string` | -- | Human-readable name for the operation |\n| `options.traceId` | `string` | auto-generated | Trace ID to group related spans |\n| `options.parentId` | `string` | `undefined` | Parent span ID for nesting |\n| `options.kind` | `SpanKind` | `'custom'` | Category of work being performed |\n| `options.onEnd` | `SpanHandler` | `undefined` | Callback fired when `span.end()` is called |\n\n**Returns:** `Span`\n\n```ts\nimport { createSpan } from '@elsium-ai/observe'\n\nconst span = createSpan('generate-summary', { kind: 'llm' })\nspan.setMetadata('model', 'gpt-4o')\nspan.addEvent('prompt-sent', { tokens: 120 })\n\n// Create a child span for a sub-operation\nconst child = span.child('embed-context', 'tool')\nchild.end()\n\nspan.end({ status: 'ok', metadata: { outputTokens: 350 } })\n\nconsole.log(span.toJSON())\n```\n\n---\n\n## Cost Engine\n\nBudget enforcement and cost intelligence for LLM usage. Tracks spend across models, agents, users, and features. Detects runaway loops and suggests cheaper model alternatives.\n\n### `BudgetConfig`\n\n```ts\ninterface BudgetConfig {\n  totalBudget?: number\n  dailyBudget?: number\n  perUser?: number\n  perFeature?: number\n  perAgent?: number\n}\n```\n\n### `LoopDetectionConfig`\n\n```ts\ninterface LoopDetectionConfig {\n  maxCallsPerMinute?: number\n  maxCostPerMinute?: number\n}\n```\n\n### `CostAlert`\n\n```ts\ninterface CostAlert {\n  type: 'threshold' | 'loop_detected' | 'budget_exceeded' | 'projection_warning'\n  dimension: string\n  currentValue: number\n  limit: number\n  message: string\n  timestamp: number\n}\n```\n\n### `CostDimension`\n\nAggregated cost data for a single dimension (model, agent, user, or feature).\n\n```ts\ninterface CostDimension {\n  totalCost: number\n  totalTokens: number\n  callCount: number\n  firstCallAt: number\n  lastCallAt: number\n}\n```\n\n### `CostIntelligenceReport`\n\nFull cost intelligence report with projections and recommendations.\n\n```ts\ninterface CostIntelligenceReport {\n  totalSpend: number\n  totalTokens: number\n  totalCalls: number\n  projectedDailySpend: number\n  projectedMonthlySpend: number\n  byModel: Record<string, CostDimension>\n  byAgent: Record<string, CostDimension>\n  byUser: Record<string, CostDimension>\n  byFeature: Record<string, CostDimension>\n  recommendations: string[]\n  alerts: CostAlert[]\n}\n```\n\n### `ModelSuggestion`\n\nA recommendation to switch to a cheaper model.\n\n```ts\ninterface ModelSuggestion {\n  currentModel: string\n  suggestedModel: string\n  estimatedSavings: number\n  reason: string\n}\n```\n\n### `ModelTierEntry`\n\nDefines the pricing tier for a model.\n\n```ts\ninterface ModelTierEntry {\n  tier: 'low' | 'mid' | 'high'\n  costPerMToken: number\n}\n```\n\n### `CostEngineConfig`\n\n```ts\ninterface CostEngineConfig {\n  totalBudget?: number\n  dailyBudget?: number\n  perUser?: number\n  perFeature?: number\n  perAgent?: number\n  loopDetection?: LoopDetectionConfig\n  onAlert?: (alert: CostAlert) => void\n  alertThresholds?: number[]\n}\n```\n\n### `CostEngine`\n\n```ts\ninterface CostEngine {\n  middleware(): Middleware\n  getReport(): CostIntelligenceReport\n  suggestModel(currentModel: string, inputTokens: number): ModelSuggestion | null\n  trackCall(\n    response: LLMResponse,\n    dimensions?: { agent?: string; user?: string; feature?: string },\n  ): void\n  reset(): void\n}\n```\n\n### `createCostEngine()`\n\nCreates a cost engine with budget enforcement, alerting, and cost intelligence.\n\n```ts\nfunction createCostEngine(config?: CostEngineConfig): CostEngine\n```\n\n| Parameter | Type | Default | Description |\n|---|---|---|---|\n| `config.totalBudget` | `number` | `undefined` | Maximum total spend before calls are rejected |\n| `config.dailyBudget` | `number` | `undefined` | Maximum daily spend rate before alerts fire |\n| `config.perUser` | `number` | `undefined` | Per-user budget limit |\n| `config.perFeature` | `number` | `undefined` | Per-feature budget limit |\n| `config.perAgent` | `number` | `undefined` | Per-agent budget limit |\n| `config.loopDetection` | `LoopDetectionConfig` | `undefined` | Thresholds for detecting runaway loops |\n| `config.onAlert` | `(alert: CostAlert) => void` | `undefined` | Callback for every alert |\n| `config.alertThresholds` | `number[]` | `undefined` | Budget percentage thresholds that trigger alerts (e.g. `[0.5, 0.8, 0.95]`) |\n\n**Returns:** `CostEngine`\n\n```ts\nimport { createCostEngine } from '@elsium-ai/observe'\n\nconst engine = createCostEngine({\n  totalBudget: 50.0,\n  dailyBudget: 5.0,\n  perAgent: 10.0,\n  loopDetection: { maxCallsPerMinute: 60, maxCostPerMinute: 1.0 },\n  alertThresholds: [0.5, 0.8, 0.95],\n  onAlert: (alert) => console.warn(alert.message),\n})\n\n// Use as middleware in an ElsiumAI gateway\n// gateway.use(engine.middleware())\n\n// Or track calls manually\n// engine.trackCall(response, { agent: 'summarizer', user: 'user-123' })\n\n// Get a full intelligence report\nconst report = engine.getReport()\nconsole.log('Projected monthly spend:', report.projectedMonthlySpend)\nconsole.log('Recommendations:', report.recommendations)\n\n// Get model optimization suggestions\nconst suggestion = engine.suggestModel('claude-opus-4-6', 200)\nif (suggestion) {\n  console.log(`Switch to ${suggestion.suggestedModel} for ${suggestion.estimatedSavings.toFixed(0)}% savings`)\n}\n```\n\n### `registerModelTier()`\n\nRegisters a custom model with its pricing tier so the cost engine can track it.\n\n```ts\nfunction registerModelTier(model: string, entry: ModelTierEntry): void\n```\n\n| Parameter | Type | Description |\n|---|---|---|\n| `model` | `string` | The model identifier |\n| `entry` | `ModelTierEntry` | The tier classification and cost per million tokens |\n\n```ts\nimport { registerModelTier } from '@elsium-ai/observe'\n\nregisterModelTier('my-custom-model', { tier: 'mid', costPerMToken: 1.5 })\n```\n\nThe cost engine ships with built-in tiers for common models including GPT-4o, GPT-4.1, GPT-5, Claude Sonnet 4.6, Claude Opus 4.6, Claude Haiku 4.5, Gemini 2.0 Flash, Gemini 2.5 Pro, o1, o3, o4-mini, and more.\n\n---\n\n## Tracer\n\nHigh-level tracing API that wraps spans with sampling, console output, cost tracking, and pluggable exporters.\n\n### `TracerOutput`\n\n```ts\ntype TracerOutput = 'console' | 'json-file' | TracerExporter\n```\n\n### `TracerExporter`\n\nInterface for custom span exporters.\n\n```ts\ninterface TracerExporter {\n  name: string\n  export(spans: SpanData[]): void | Promise<void>\n}\n```\n\n### `TracerConfig`\n\n```ts\ninterface TracerConfig {\n  output?: TracerOutput[]\n  costTracking?: boolean\n  samplingRate?: number\n  maxSpans?: number\n}\n```\n\n### `CostReport`\n\n```ts\ninterface CostReport {\n  totalCost: number\n  totalTokens: number\n  totalInputTokens: number\n  totalOutputTokens: number\n  callCount: number\n  byModel: Record<\n    string,\n    {\n      cost: number\n      tokens: number\n      calls: number\n    }\n  >\n}\n```\n\n### `Tracer`\n\n```ts\ninterface Tracer {\n  startSpan(name: string, kind?: SpanKind): Span\n  getSpans(): SpanData[]\n  getCostReport(): CostReport\n  trackLLMCall(data: {\n    model: string\n    inputTokens: number\n    outputTokens: number\n    cost: number\n    latencyMs: number\n  }): void\n  reset(): void\n  flush(): Promise<void>\n}\n```\n\n### `observe()`\n\nCreates a tracer instance for recording spans and LLM call costs.\n\n```ts\nfunction observe(config?: TracerConfig): Tracer\n```\n\n| Parameter | Type | Default | Description |\n|---|---|---|---|\n| `config.output` | `TracerOutput[]` | `['console']` | Where to send completed spans |\n| `config.costTracking` | `boolean` | `true` | Whether `trackLLMCall` records data |\n| `config.samplingRate` | `number` | `1.0` | Fraction of spans to sample (0.0 to 1.0) |\n| `config.maxSpans` | `number` | `10000` | Maximum spans held in memory before oldest are evicted |\n\n**Returns:** `Tracer`\n\n```ts\nimport { observe } from '@elsium-ai/observe'\n\nconst tracer = observe({\n  output: ['console'],\n  samplingRate: 1.0,\n  costTracking: true,\n})\n\n// Start a span\nconst span = tracer.startSpan('chat-completion', 'llm')\nspan.setMetadata('model', 'gpt-4o')\nspan.end()\n\n// Track an LLM call for cost reporting\ntracer.trackLLMCall({\n  model: 'gpt-4o',\n  inputTokens: 500,\n  outputTokens: 200,\n  cost: 0.0035,\n  latencyMs: 1200,\n})\n\n// Get cost report\nconst report = tracer.getCostReport()\nconsole.log('Total cost:', report.totalCost)\n\n// Flush spans to all exporters\nawait tracer.flush()\n```\n\nYou can provide a custom exporter:\n\n```ts\nimport { observe } from '@elsium-ai/observe'\nimport type { TracerExporter } from '@elsium-ai/observe'\n\nconst myExporter: TracerExporter = {\n  name: 'my-backend',\n  async export(spans) {\n    await fetch('https://my-telemetry.example.com/spans', {\n      method: 'POST',\n      body: JSON.stringify(spans),\n    })\n  },\n}\n\nconst tracer = observe({ output: [myExporter] })\n```\n\n---\n\n## Metrics\n\nGeneral-purpose metrics collection with counters, gauges, and histograms.\n\n### `MetricEntry`\n\n```ts\ninterface MetricEntry {\n  name: string\n  type: 'counter' | 'gauge' | 'histogram'\n  value: number\n  tags: Record<string, string>\n  timestamp: number\n}\n```\n\n### `MetricsCollector`\n\n```ts\ninterface MetricsCollector {\n  increment(name: string, value?: number, tags?: Record<string, string>): void\n  gauge(name: string, value: number, tags?: Record<string, string>): void\n  histogram(name: string, value: number, tags?: Record<string, string>): void\n  getMetrics(): MetricEntry[]\n  reset(): void\n}\n```\n\n### `createMetrics()`\n\nCreates a metrics collector for counters, gauges, and histograms.\n\n```ts\nfunction createMetrics(options?: { maxEntries?: number }): MetricsCollector\n```\n\n| Parameter | Type | Default | Description |\n|---|---|---|---|\n| `options.maxEntries` | `number` | `50000` | Maximum metric entries held in memory |\n\n**Returns:** `MetricsCollector`\n\n```ts\nimport { createMetrics } from '@elsium-ai/observe'\n\nconst metrics = createMetrics()\n\n// Increment a counter (default increment is 1)\nmetrics.increment('llm.calls', 1, { model: 'gpt-4o' })\n\n// Set a gauge to a current value\nmetrics.gauge('queue.depth', 42, { queue: 'embeddings' })\n\n// Record a histogram observation\nmetrics.histogram('llm.latency_ms', 1200, { model: 'gpt-4o' })\n\n// Retrieve all recorded entries\nconst entries = metrics.getMetrics()\nconsole.log(`Recorded ${entries.length} metric entries`)\n\n// Reset all state\nmetrics.reset()\n```\n\n---\n\n## Audit Trail\n\nTamper-evident audit logging with SHA-256 hash-chaining. Every event is linked to the previous one via its hash, enabling integrity verification of the full event history.\n\n### `AuditEventType`\n\n```ts\ntype AuditEventType =\n  | 'llm_call'\n  | 'tool_execution'\n  | 'security_violation'\n  | 'budget_alert'\n  | 'policy_violation'\n  | 'auth_event'\n  | 'approval_request'\n  | 'approval_decision'\n  | 'config_change'\n  | 'provider_failover'\n  | 'circuit_breaker_state_change'\n```\n\n### `AuditEvent`\n\n```ts\ninterface AuditEvent {\n  id: string\n  sequenceId: number\n  type: AuditEventType\n  timestamp: number\n  actor?: string\n  traceId?: string\n  data: Record<string, unknown>\n  hash: string\n  previousHash: string\n}\n```\n\n### `AuditStorageAdapter`\n\nInterface for custom audit storage backends (database, file system, etc.).\n\n```ts\ninterface AuditStorageAdapter {\n  append(event: AuditEvent): void | Promise<void>\n  query(filter: AuditQueryFilter): AuditEvent[] | Promise<AuditEvent[]>\n  count(): number | Promise<number>\n  verifyIntegrity(): AuditIntegrityResult | Promise<AuditIntegrityResult>\n  getLastHash?(): string | Promise<string>\n}\n```\n\n### `AuditQueryFilter`\n\n```ts\ninterface AuditQueryFilter {\n  type?: AuditEventType | AuditEventType[]\n  actor?: string\n  traceId?: string\n  fromTimestamp?: number\n  toTimestamp?: number\n  limit?: number\n  offset?: number\n}\n```\n\n### `AuditIntegrityResult`\n\n```ts\ninterface AuditIntegrityResult {\n  valid: boolean\n  totalEvents: number\n  brokenAt?: number\n  chainComplete?: boolean\n}\n```\n\n### `AuditBatchConfig`\n\n```ts\ninterface AuditBatchConfig {\n  size?: number\n  intervalMs?: number\n}\n```\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `size` | `number` | `100` | Flush the buffer when it reaches this many events. |\n| `intervalMs` | `number` | `50` | Flush the buffer on this interval (ms), regardless of size. |\n\n### `AuditTrailConfig`\n\n```ts\ninterface AuditTrailConfig {\n  storage?: AuditStorageAdapter | 'memory'\n  hashChain?: boolean\n  maxEvents?: number\n  batch?: AuditBatchConfig\n  sinks?: AuditSink[] | SinkManagerConfig\n  context?: Record<string, unknown>\n  onError?: (error: unknown) => void\n}\n```\n\n### `AuditTrail`\n\n```ts\ninterface AuditTrail {\n  log(\n    type: AuditEventType,\n    data: Record<string, unknown>,\n    options?: { actor?: string; traceId?: string },\n  ): void\n  ready(): Promise<void>\n  query(filter: AuditQueryFilter): Promise<AuditEvent[]>\n  verifyIntegrity(): Promise<AuditIntegrityResult>\n  flush(): Promise<void>\n  dispose(): Promise<void>\n  readonly count: number\n  readonly pending: number\n}\n```\n\n| Member | Description |\n|---|---|\n| `log()` | Append an event. In batched mode, this buffers the event without hashing — zero CPU on the hot path. |\n| `ready()` | Resolves once async initialization (e.g. `getLastHash`) has completed. |\n| `query()` | Query events by type, actor, traceId, or timestamp range. Auto-flushes pending events in batched mode. |\n| `verifyIntegrity()` | Verify the hash chain has not been tampered with. Auto-flushes pending events in batched mode. |\n| `flush()` | Drain all pending events — computes hashes and writes to storage. No-op when not in batched mode. |\n| `dispose()` | Stop the flush timer, drain remaining events, await pending storage writes, and shut down sinks. Returns a promise — await it on shutdown. |\n| `count` | Total events (stored + pending). |\n| `pending` | Number of buffered events not yet flushed (0 when not in batched mode). |\n\n### `createAuditTrail()`\n\nCreates a hash-chained audit trail for tamper-evident event logging.\n\n```ts\nfunction createAuditTrail(config?: AuditTrailConfig): AuditTrail\n```\n\n| Parameter | Type | Default | Description |\n|---|---|---|---|\n| `config.storage` | `AuditStorageAdapter \\| 'memory'` | `'memory'` | Storage backend for audit events |\n| `config.hashChain` | `boolean` | `true` | Enable SHA-256 hash chaining for tamper detection |\n| `config.maxEvents` | `number` | `10000` | Maximum events retained (ring buffer — O(1) eviction) |\n| `config.batch` | `AuditBatchConfig` | `undefined` | Enable batched mode for high-volume scenarios |\n| `config.sinks` | `AuditSink[] \\| SinkManagerConfig` | `undefined` | Export events to external systems (webhooks, SIEM, etc.) |\n| `config.context` | `Record<string, unknown>` | `undefined` | Global fields merged into every event's `data` (e.g. environment, service name, version) |\n| `config.onError` | `(error: unknown) => void` | `undefined` | Error handler for async storage failures |\n\n**Returns:** `AuditTrail`\n\n```ts\nimport { createAuditTrail } from '@elsium-ai/observe'\n\nconst audit = createAuditTrail({ hashChain: true })\n\n// Log events\naudit.log('llm_call', {\n  model: 'gpt-4o',\n  inputTokens: 500,\n  outputTokens: 200,\n  cost: 0.0035,\n}, { actor: 'user-123', traceId: 'trc_abc' })\n\naudit.log('tool_execution', {\n  tool: 'web-search',\n  query: 'latest news',\n  resultCount: 10,\n})\n\n// Query events\nconst llmEvents = await audit.query({ type: 'llm_call', limit: 50 })\nconsole.log(`Found ${llmEvents.length} LLM call events`)\n\n// Verify the hash chain has not been tampered with\nconst integrity = await audit.verifyIntegrity()\nconsole.log('Audit chain valid:', integrity.valid)\nconsole.log('Total events:', integrity.totalEvents)\n```\n\n#### Batched mode (high-volume)\n\nIn high-volume scenarios, `log()` computes a SHA-256 hash on every call — blocking the hot path. Batched mode moves hashing off the critical path: `log()` buffers raw event data, and hashing + storage writes happen asynchronously on flush.\n\n```ts\nimport { createAuditTrail } from '@elsium-ai/observe'\n\nconst audit = createAuditTrail({\n  batch: {\n    size: 500,         // Flush after 500 events\n    intervalMs: 100,   // Or every 100ms, whichever comes first\n  },\n  maxEvents: 100_000,\n})\n\n// log() is now near-zero cost — just pushes to an internal buffer\naudit.log('llm_call', { model: 'gpt-4o', tokens: 100 })\n\n// Force-flush before reading (query/verifyIntegrity auto-flush)\nawait audit.flush()\n\n// Clean up on shutdown (awaits pending writes and sink delivery)\nprocess.on('SIGTERM', async () => await audit.dispose())\n```\n\nHash chain integrity is fully preserved — events are hashed sequentially during flush, not during `log()`.\n\n#### Context enrichment\n\nAdd global fields to every event without repeating them at each call site:\n\n```ts\nconst audit = createAuditTrail({\n  context: {\n    env: 'production',\n    service: 'my-ai-service',\n    version: '1.2.0',\n    region: 'us-east-1',\n  },\n})\n\naudit.log('llm_call', { model: 'gpt-4o', tokens: 100 })\n// event.data → { env: 'production', service: 'my-ai-service', version: '1.2.0', region: 'us-east-1', model: 'gpt-4o', tokens: 100 }\n```\n\nEvent-specific data always takes precedence over global context fields.\n\n### `auditMiddleware()`\n\nCreates an ElsiumAI middleware that automatically logs every LLM call (success or failure) to the given audit trail.\n\n```ts\nfunction auditMiddleware(auditTrail: AuditTrail): Middleware\n```\n\n| Parameter | Type | Description |\n|---|---|---|\n| `auditTrail` | `AuditTrail` | The audit trail instance to log events to |\n\n**Returns:** `Middleware` (from `@elsium-ai/core`)\n\n```ts\nimport { createAuditTrail, auditMiddleware } from '@elsium-ai/observe'\n\nconst audit = createAuditTrail({ hashChain: true })\nconst middleware = auditMiddleware(audit)\n\n// Use with an ElsiumAI gateway\n// gateway.use(middleware)\n```\n\nThe middleware automatically records `llm_call` events containing `provider`, `model`, `inputTokens`, `outputTokens`, `totalTokens`, `cost`, `latencyMs`, and `stopReason`. On errors, it records the error message and `success: false`.\n\n### `auditStreamMiddleware()`\n\nCreates a `StreamMiddleware` that audits streaming LLM calls. Intercepts `message_end` events to capture token usage and latency, and `error` events to capture failures — all without buffering or blocking the stream.\n\n```ts\nfunction auditStreamMiddleware(auditTrail: AuditTrail): StreamMiddleware\n```\n\n| Parameter | Type | Description |\n|---|---|---|\n| `auditTrail` | `AuditTrail` | The audit trail instance to log events to |\n\n**Returns:** `StreamMiddleware` (from `@elsium-ai/core`)\n\n```ts\nimport { createAuditTrail, auditStreamMiddleware } from '@elsium-ai/observe'\n\nconst audit = createAuditTrail({ hashChain: true })\nconst streamMw = auditStreamMiddleware(audit)\n\n// Use with an ElsiumAI gateway\n// gateway.use({ streamMiddleware: [streamMw] })\n```\n\nThe middleware records `llm_call` events with `provider`, `model`, `inputTokens`, `outputTokens`, `totalTokens`, `latencyMs`, `stopReason`, and `streaming: true`. On errors, it records the error message and `success: false`.\n\n---\n\n## Audit Sinks\n\nExport audit events to external observability and governance systems. Sinks receive finalized `AuditEvent` objects after they are hashed and stored — a sink failure never blocks the audit trail or other sinks.\n\n### `AuditSink`\n\n```ts\ninterface AuditSink {\n  name: string\n  filter?: (event: AuditEvent) => boolean\n  send(events: AuditEvent[]): Promise<void>\n  shutdown?(): Promise<void>\n}\n```\n\nThe optional `filter` function controls which events a sink receives. When set, only events for which the filter returns `true` are sent to that sink. Sinks without a filter receive all events.\n\n### `SinkManagerConfig`\n\n```ts\ninterface SinkManagerConfig {\n  sinks: AuditSink[]\n  batch?: {\n    size?: number          // default: 50\n    intervalMs?: number    // default: 5000\n  }\n  retry?: AuditSinkRetryConfig\n  maxBufferSize?: number   // default: 10000\n  deadLetterSink?: AuditSink\n  onError?: (sinkName: string, error: unknown) => void\n}\n```\n\nThe `deadLetterSink` receives events that a sink failed to deliver after all retry attempts. This prevents data loss for compliance-critical audit events.\n\n### `AuditSinkRetryConfig`\n\n```ts\ninterface AuditSinkRetryConfig {\n  maxRetries?: number      // default: 3\n  baseDelayMs?: number     // default: 1000\n  maxDelayMs?: number      // default: 30000\n}\n```\n\n### Quick start\n\nPass sinks directly to `createAuditTrail()`:\n\n```ts\nimport { createAuditTrail, createWebhookSink, createSplunkSink } from '@elsium-ai/observe'\n\nconst audit = createAuditTrail({\n  sinks: [\n    createWebhookSink({ url: 'https://hooks.example.com/audit' }),\n    createSplunkSink({\n      url: 'https://splunk:8088/services/collector',\n      token: 'your-hec-token',\n    }),\n  ],\n})\n\naudit.log('security_violation', { threat: 'prompt_injection', score: 0.95 })\n```\n\nFor advanced configuration, pass a `SinkManagerConfig`:\n\n```ts\nconst audit = createAuditTrail({\n  sinks: {\n    sinks: [createWebhookSink({ url: 'https://hooks.example.com/audit' })],\n    batch: { size: 100, intervalMs: 10_000 },\n    retry: { maxRetries: 5, baseDelayMs: 2000 },\n    maxBufferSize: 50_000,\n    onError: (sinkName, error) => {\n      console.error(`Sink ${sinkName} failed:`, error)\n    },\n  },\n})\n```\n\n#### Per-sink filtering\n\nRoute different event types to different destinations:\n\n```ts\nimport { createAuditTrail, createSplunkSink, createDatadogSink } from '@elsium-ai/observe'\n\nconst audit = createAuditTrail({\n  sinks: [\n    {\n      ...createSplunkSink({ url: 'https://splunk:8088/services/collector', token: 'tok' }),\n      filter: (event) => event.type === 'security_violation' || event.type === 'auth_event',\n    },\n    createDatadogSink({ apiKey: process.env.DD_API_KEY! }),\n  ],\n})\n```\n\nThe Splunk sink only receives security and auth events; the Datadog sink receives everything.\n\n#### Dead letter queue\n\nPrevent data loss when sinks fail after all retry attempts:\n\n```ts\nconst audit = createAuditTrail({\n  sinks: {\n    sinks: [createWebhookSink({ url: 'https://hooks.example.com/audit' })],\n    deadLetterSink: createWebhookSink({ url: 'https://dlq.example.com/audit-dlq' }),\n    retry: { maxRetries: 3 },\n  },\n})\n```\n\nEvents that cannot be delivered after exhausting retries are sent to the dead letter sink for later replay.\n\n### `createWebhookSink()`\n\nGeneric HTTP webhook sink. Sends `{ events: AuditEvent[] }` as JSON.\n\n```ts\nfunction createWebhookSink(config: WebhookSinkConfig): AuditSink\n```\n\n```ts\ninterface WebhookSinkConfig {\n  url: string\n  headers?: Record<string, string>\n  method?: 'POST' | 'PUT'\n  timeoutMs?: number        // default: 10000\n}\n```\n\n```ts\ncreateWebhookSink({\n  url: 'https://hooks.example.com/audit',\n  headers: { Authorization: 'Bearer token123' },\n})\n```\n\n### `createSplunkSink()`\n\nSends events to Splunk HTTP Event Collector (HEC) as newline-delimited JSON.\n\n```ts\nfunction createSplunkSink(config: SplunkSinkConfig): AuditSink\n```\n\n```ts\ninterface SplunkSinkConfig {\n  url: string\n  token: string\n  index?: string\n  source?: string            // default: 'elsium-ai'\n  sourcetype?: string        // default: 'elsium:audit'\n  timeoutMs?: number         // default: 10000\n}\n```\n\n```ts\ncreateSplunkSink({\n  url: 'https://splunk:8088/services/collector',\n  token: 'your-hec-token',\n  index: 'ai_audit',\n})\n```\n\n### `createDatadogSink()`\n\nSends events to the Datadog Log Intake API (v2).\n\n```ts\nfunction createDatadogSink(config: DatadogSinkConfig): AuditSink\n```\n\n```ts\ninterface DatadogSinkConfig {\n  apiKey: string\n  site?: string              // default: 'datadoghq.com'\n  service?: string           // default: 'elsium-ai'\n  source?: string            // default: 'elsium-ai-audit'\n  tags?: Record<string, string>\n  timeoutMs?: number         // default: 10000\n}\n```\n\n```ts\ncreateDatadogSink({\n  apiKey: process.env.DD_API_KEY!,\n  site: 'datadoghq.eu',\n  tags: { env: 'production', team: 'platform' },\n})\n```\n\n### Custom sinks\n\nImplement the `AuditSink` interface to send events anywhere:\n\n```ts\nimport type { AuditSink, AuditEvent } from '@elsium-ai/observe'\n\nconst kafkaSink: AuditSink = {\n  name: 'kafka',\n  async send(events: AuditEvent[]) {\n    await producer.send({\n      topic: 'audit-events',\n      messages: events.map(e => ({ value: JSON.stringify(e) })),\n    })\n  },\n  async shutdown() {\n    await producer.disconnect()\n  },\n}\n```\n\n---\n\n## Provenance\n\nTracks the full lineage of every AI-generated output by hashing the prompt, model, config, input, and output. Enables reproducibility audits and output-to-source tracing.\n\n### `ProvenanceRecord`\n\n```ts\ninterface ProvenanceRecord {\n  id: string\n  outputHash: string\n  promptVersion: string\n  modelVersion: string\n  configHash: string\n  inputHash: string\n  timestamp: number\n  traceId?: string\n  metadata?: Record<string, unknown>\n}\n```\n\nAll hash fields (`outputHash`, `promptVersion`, `modelVersion`, `configHash`, `inputHash`) are SHA-256 hex digests of their respective inputs.\n\n### `ProvenanceTracker`\n\n```ts\ninterface ProvenanceTracker {\n  record(data: {\n    prompt: string\n    model: string\n    config: Record<string, unknown>\n    input: string\n    output: string\n    traceId?: string\n    metadata?: Record<string, unknown>\n  }): ProvenanceRecord\n  query(filter: {\n    outputHash?: string\n    promptVersion?: string\n    modelVersion?: string\n    traceId?: string\n  }): ProvenanceRecord[]\n  getLineage(outputHash: string): ProvenanceRecord[]\n  readonly count: number\n  clear(): void\n}\n```\n\n### `createProvenanceTracker()`\n\nCreates a provenance tracker for recording and querying output lineage.\n\n```ts\nfunction createProvenanceTracker(options?: {\n  maxRecords?: number\n}): ProvenanceTracker\n```\n\n| Parameter | Type | Default | Description |\n|---|---|---|---|\n| `options.maxRecords` | `number` | `10000` | Maximum records held in memory |\n\n**Returns:** `ProvenanceTracker`\n\n```ts\nimport { createProvenanceTracker } from '@elsium-ai/observe'\n\nconst provenance = createProvenanceTracker()\n\n// Record a generation\nconst record = provenance.record({\n  prompt: 'Summarize the following article...',\n  model: 'gpt-4o',\n  config: { temperature: 0.7, maxTokens: 500 },\n  input: 'The article text here...',\n  output: 'A concise summary of the article.',\n  traceId: 'trc_abc',\n})\n\nconsole.log('Output hash:', record.outputHash)\n\n// Query records by output hash\nconst matches = provenance.query({ outputHash: record.outputHash })\n\n// Get the full lineage for a given output (all records sharing the same traceId)\nconst lineage = provenance.getLineage(record.outputHash)\nconsole.log(`Lineage has ${lineage.length} steps`)\n\n// Check count and clear\nconsole.log('Total records:', provenance.count)\nprovenance.clear()\n```\n\n---\n\n## OpenTelemetry\n\nCompatibility layer for converting ElsiumAI spans to the OpenTelemetry format, propagating W3C Trace Context headers, and exporting via OTLP JSON to any OTel-compatible backend (Jaeger, Grafana Tempo, Datadog, Honeycomb, etc.).\n\n### `OTelSpanKind`\n\n```ts\ntype OTelSpanKind = 0 | 1 | 2 | 3 | 4 | 5\n// 0 = UNSPECIFIED, 1 = INTERNAL, 2 = SERVER, 3 = CLIENT, 4 = PRODUCER, 5 = CONSUMER\n```\n\n### `OTelStatusCode`\n\n```ts\ntype OTelStatusCode = 0 | 1 | 2\n// 0 = UNSET, 1 = OK, 2 = ERROR\n```\n\n### `OTelAttributeValue`\n\n```ts\ninterface OTelAttributeValue {\n  stringValue?: string\n  intValue?: number\n  doubleValue?: number\n  boolValue?: boolean\n  arrayValue?: { values: OTelAttributeValue[] }\n}\n```\n\n### `OTelAttribute`\n\n```ts\ninterface OTelAttribute {\n  key: string\n  value: OTelAttributeValue\n}\n```\n\n### `OTelEvent`\n\n```ts\ninterface OTelEvent {\n  name: string\n  timeUnixNano: string\n  attributes: OTelAttribute[]\n}\n```\n\n### `OTelSpan`\n\nThe OpenTelemetry-compatible span representation.\n\n```ts\ninterface OTelSpan {\n  traceId: string\n  spanId: string\n  parentSpanId?: string\n  name: string\n  kind: OTelSpanKind\n  startTimeUnixNano: string\n  endTimeUnixNano: string\n  attributes: OTelAttribute[]\n  events: OTelEvent[]\n  status: {\n    code: OTelStatusCode\n    message?: string\n  }\n}\n```\n\n### `OTelResource`\n\n```ts\ninterface OTelResource {\n  attributes: OTelAttribute[]\n}\n```\n\n### `OTelExportRequest`\n\nThe full OTLP JSON export payload structure.\n\n```ts\ninterface OTelExportRequest {\n  resourceSpans: Array<{\n    resource: OTelResource\n    scopeSpans: Array<{\n      scope: {\n        name: string\n        version: string\n      }\n      spans: OTelSpan[]\n    }>\n  }>\n}\n```\n\n### `TraceContext`\n\nParsed W3C Trace Context.\n\n```ts\ninterface TraceContext {\n  traceId: string\n  spanId: string\n  traceFlags: number\n  traceState?: string\n}\n```\n\n### `OTLPExporterConfig`\n\n```ts\ninterface OTLPExporterConfig {\n  /** OTLP endpoint URL (e.g. http://localhost:4318/v1/traces) */\n  endpoint: string\n  /** Optional headers (e.g. for auth) */\n  headers?: Record<string, string>\n  /** Service name for resource attributes */\n  serviceName?: string\n  /** Service version */\n  serviceVersion?: string\n  /** Batch size before sending */\n  batchSize?: number\n  /** Flush interval in ms */\n  flushIntervalMs?: number\n}\n```\n\n### `toOTelSpan()`\n\nConverts an ElsiumAI `SpanData` to an OpenTelemetry-compatible span.\n\n```ts\nfunction toOTelSpan(span: SpanData): OTelSpan\n```\n\n| Parameter | Type | Description |\n|---|---|---|\n| `span` | `SpanData` | The ElsiumAI span to convert |\n\n**Returns:** `OTelSpan`\n\n```ts\nimport { createSpan, toOTelSpan } from '@elsium-ai/observe'\n\nconst span = createSpan('my-operation', { kind: 'llm' })\nspan.end()\n\nconst otelSpan = toOTelSpan(span.toJSON())\nconsole.log(otelSpan.traceId, otelSpan.spanId)\n```\n\nElsiumAI span kinds are mapped as follows: `llm` to CLIENT (3), `tool`/`agent`/`workflow` to INTERNAL (1), `custom` to UNSPECIFIED (0).\n\n### `toOTelExportRequest()`\n\nBuilds a full OTLP JSON export request from a batch of spans.\n\n```ts\nfunction toOTelExportRequest(\n  spans: SpanData[],\n  options?: {\n    serviceName?: string\n    serviceVersion?: string\n  },\n): OTelExportRequest\n```\n\n| Parameter | Type | Default | Description |\n|---|---|---|---|\n| `spans` | `SpanData[]` | -- | Batch of spans to export |\n| `options.serviceName` | `string` | `'elsium-ai'` | Service name in resource attributes |\n| `options.serviceVersion` | `string` | `'0.1.0'` | Service version in resource attributes |\n\n**Returns:** `OTelExportRequest`\n\n```ts\nimport { observe, toOTelExportRequest } from '@elsium-ai/observe'\n\nconst tracer = observe({ output: [] })\nconst span = tracer.startSpan('process-request', 'agent')\nspan.end()\n\nconst payload = toOTelExportRequest(tracer.getSpans(), {\n  serviceName: 'my-ai-service',\n  serviceVersion: '1.0.0',\n})\n\n// Send to any OTLP-compatible endpoint\nawait fetch('http://localhost:4318/v1/traces', {\n  method: 'POST',\n  headers: { 'Content-Type': 'application/json' },\n  body: JSON.stringify(payload),\n})\n```\n\n### `toTraceparent()`\n\nCreates a W3C `traceparent` header value from a span.\n\n```ts\nfunction toTraceparent(span: SpanData): string\n```\n\n| Parameter | Type | Description |\n|---|---|---|\n| `span` | `SpanData` | The span to derive the traceparent from |\n\n**Returns:** `string` -- Format: `00-{traceId}-{spanId}-01`\n\n```ts\nimport { createSpan, toTraceparent } from '@elsium-ai/observe'\n\nconst span = createSpan('outgoing-call', { kind: 'llm' })\nspan.end()\n\nconst header = toTraceparent(span.toJSON())\n// e.g. \"00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01\"\n```\n\n### `parseTraceparent()`\n\nParses a W3C `traceparent` header string into a `TraceContext`.\n\n```ts\nfunction parseTraceparent(header: string): TraceContext | null\n```\n\n| Parameter | Type | Description |\n|---|---|---|\n| `header` | `string` | The traceparent header value |\n\n**Returns:** `TraceContext | null` -- Returns `null` if the header is malformed or uses an unsupported version.\n\n```ts\nimport { parseTraceparent } from '@elsium-ai/observe'\n\nconst ctx = parseTraceparent('00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01')\nif (ctx) {\n  console.log('Trace ID:', ctx.traceId)\n  console.log('Span ID:', ctx.spanId)\n  console.log('Sampled:', ctx.traceFlags === 1)\n}\n```\n\n### `injectTraceContext()`\n\nInjects the `traceparent` header into an outgoing HTTP headers object for distributed trace propagation.\n\n```ts\nfunction injectTraceContext(\n  span: SpanData,\n  headers?: Record<string, string>,\n): Record<string, string>\n```\n\n| Parameter | Type | Default | Description |\n|---|---|---|---|\n| `span` | `SpanData` | -- | The span whose trace context to inject |\n| `headers` | `Record<string, string>` | `{}` | Existing headers to merge with |\n\n**Returns:** `Record<string, string>` -- A new headers object with `traceparent` set.\n\n```ts\nimport { createSpan, injectTraceContext } from '@elsium-ai/observe'\n\nconst span = createSpan('api-call', { kind: 'llm' })\nconst headers = injectTraceContext(span.toJSON(), {\n  'Content-Type': 'application/json',\n  Authorization: 'Bearer token',\n})\n// headers now includes { traceparent: '00-...-...-01', ... }\n\nawait fetch('https://api.example.com/generate', { headers })\nspan.end()\n```\n\n### `extractTraceContext()`\n\nExtracts a `TraceContext` from incoming HTTP headers. Checks both `traceparent` and `Traceparent` keys.\n\n```ts\nfunction extractTraceContext(\n  headers: Record<string, string | undefined>,\n): TraceContext | null\n```\n\n| Parameter | Type | Description |\n|---|---|---|\n| `headers` | `Record<string, string \\| undefined>` | Incoming HTTP headers |\n\n**Returns:** `TraceContext | null`\n\n```ts\nimport { extractTraceContext, createSpan } from '@elsium-ai/observe'\n\n// In an HTTP handler\nfunction handleRequest(req: { headers: Record<string, string> }) {\n  const parentCtx = extractTraceContext(req.headers)\n\n  const span = createSpan('handle-request', {\n    traceId: parentCtx?.traceId,\n    parentId: parentCtx?.spanId,\n    kind: 'agent',\n  })\n\n  // ... process request ...\n  span.end()\n}\n```\n\n### `createOTLPExporter()`\n\nCreates an OTLP JSON exporter that sends spans to any OTel-compatible backend. Supports batching and automatic periodic flushing.\n\n```ts\nfunction createOTLPExporter(config: OTLPExporterConfig): TracerExporter\n```\n\n| Parameter | Type | Default | Description |\n|---|---|---|---|\n| `config.endpoint` | `string` | -- | OTLP endpoint URL (e.g. `http://localhost:4318/v1/traces`) |\n| `config.headers` | `Record<string, string>` | `{}` | Optional HTTP headers (e.g. for authentication) |\n| `config.serviceName` | `string` | `undefined` | Service name for resource attributes |\n| `config.serviceVersion` | `string` | `undefined` | Service version for resource attributes |\n| `config.batchSize` | `number` | `100` | Number of spans to buffer before sending a batch |\n| `config.flushIntervalMs` | `number` | `5000` | Automatic flush interval in milliseconds |\n\n**Returns:** `TracerExporter`\n\n```ts\nimport { observe, createOTLPExporter } from '@elsium-ai/observe'\n\nconst exporter = createOTLPExporter({\n  endpoint: 'http://localhost:4318/v1/traces',\n  serviceName: 'my-ai-service',\n  serviceVersion: '1.0.0',\n  headers: { Authorization: 'Bearer my-token' },\n  batchSize: 50,\n  flushIntervalMs: 10000,\n})\n\nconst tracer = observe({ output: [exporter] })\n\nconst span = tracer.startSpan('generate', 'llm')\nspan.end()\n\n// Spans are batched and sent automatically, or flush manually:\nawait tracer.flush()\n```\n\n---\n\n## Experiments Persistence\n\n### `createFileExperimentStore`\n\nCreates a file-based storage adapter for saving and loading experiment results to disk. Experiment data is serialized as JSON files in the specified directory.\n\n```ts\nfunction createFileExperimentStore(dir: string): ExperimentStore\n```\n\n| Parameter | Type | Description |\n|---|---|---|\n| `dir` | `string` | Directory path where experiment result files will be stored |\n\n**Returns:** `ExperimentStore`\n\n```ts\ninterface ExperimentStore {\n  save(experiment: ExperimentResults): Promise<void>\n  load(experimentId: string): Promise<ExperimentResults | null>\n  list(): Promise<string[]>\n}\n```\n\n```ts\nimport { createExperiment, createFileExperimentStore } from '@elsium-ai/observe'\n\nconst store = createFileExperimentStore('./experiments')\n\nconst experiment = createExperiment({\n  name: 'prompt-comparison',\n  variants: [\n    { name: 'concise', config: { system: 'Be brief.' } },\n    { name: 'detailed', config: { system: 'Be thorough.' } },\n  ],\n})\n\nconst results = await experiment.run(evaluator)\n\n// Persist results to disk\nawait store.save(results)\n\n// Load results later\nconst loaded = await store.load(results.id)\n```\n\n---\n\n## Studio Exporter\n\nBridges the observe system to the `.elsium/` directory so the `elsium studio` dashboard can display live traces, X-Ray data, and costs.\n\n### `createStudioExporter()`\n\n```ts\nfunction createStudioExporter(config?: StudioExporterConfig): StudioExporter\n```\n\n```ts\ninterface StudioExporterConfig {\n  dir?: string  // default: '.elsium'\n}\n\ninterface StudioExporter extends TracerExporter {\n  writeXRayEntry(entry: Record<string, unknown>): void\n  writeCostReport(report: CostReport): void\n}\n```\n\n| Parameter | Type | Default | Description |\n|---|---|---|---|\n| `config.dir` | `string` | `'.elsium'` | Directory where trace, X-Ray, and cost files are written |\n\n**Returns:** `StudioExporter` (implements `TracerExporter` + X-Ray/cost writers)\n\n```ts\nimport { observe, createStudioExporter } from '@elsium-ai/observe'\n\nconst studio = createStudioExporter()\n\nconst tracer = observe({ output: [studio] })\n\nconst span = tracer.startSpan('my-operation', 'llm')\nspan.end()\nawait tracer.flush()\n\nstudio.writeXRayEntry({ traceId: 'trc_123', provider: 'anthropic', model: 'claude-sonnet-4-6' })\nstudio.writeCostReport(tracer.getCostReport())\n```\n\nThen run `elsium studio` in another terminal to see the data in the web dashboard.\n\n---\n\n## Auto-Instrumentation\n\n### `instrumentComplete`\n\nWraps an LLM completion function with automatic span creation. Every call produces a span with model, token, cost, and latency metadata.\n\n```ts\nfunction instrumentComplete(\n  complete: (request: CompletionRequest) => Promise<LLMResponse>,\n  tracer: Tracer,\n): (request: CompletionRequest) => Promise<LLMResponse>\n```\n\n| Parameter | Type | Description |\n|---|---|---|\n| `complete` | `(request: CompletionRequest) => Promise<LLMResponse>` | The LLM completion function to instrument |\n| `tracer` | `Tracer` | The tracer instance to record spans to |\n\n**Returns:** A wrapped completion function with the same signature.\n\n```ts\nimport { observe, instrumentComplete } from '@elsium-ai/observe'\n\nconst tracer = observe()\n\nconst tracedComplete = instrumentComplete(\n  (req) => llm.complete(req),\n  tracer,\n)\n\n// Every call now creates an 'llm' span automatically\nconst response = await tracedComplete({ model: 'gpt-4o', messages })\n```\n\n### `instrumentAgent`\n\nWraps an agent's `run` method with automatic span creation. Produces an `agent` span that captures the agent name, input, output, token usage, and tool calls.\n\n```ts\nfunction instrumentAgent(\n  agent: Agent,\n  tracer: Tracer,\n): Agent\n```\n\n| Parameter | Type | Description |\n|---|---|---|\n| `agent` | `Agent` | The agent to instrument |\n| `tracer` | `Tracer` | The tracer instance to record spans to |\n\n**Returns:** A new `Agent` with the same interface, where `run` and `chat` are automatically traced.\n\n```ts\nimport { observe, instrumentAgent } from '@elsium-ai/observe'\nimport { defineAgent } from '@elsium-ai/agents'\n\nconst tracer = observe()\n\nconst agent = defineAgent(\n  { name: 'assistant', system: 'You are helpful.' },\n  { complete: (req) => llm.complete(req) },\n)\n\nconst tracedAgent = instrumentAgent(agent, tracer)\n\n// Every run/chat call now creates an 'agent' span automatically\nconst result = await tracedAgent.run('Hello')\n```\n\n---\n\n## Verifiable Agent Execution\n\n`createProofRecorder` produces signed `ExecutionProof` documents for each agent run. A third party with just the public key can verify offline that the recorded sequence of LLM calls, tool calls, RAG retrievals, and policy decisions actually occurred — and that no event was tampered with after the fact.\n\n### How it works\n\n- Every event is hashed (SHA-256 of canonical JSON) and chained to the previous event's hash.\n- On `finalize()`, the recorder signs the `chainHead` with Ed25519 and produces an `ExecutionProof`.\n- Optional persistence to a `WriteOnceStore` (in-memory or file-system with O_EXCL) makes the artifact tamper-evident at rest.\n- `recorder.verify(proof, keyRegistry)` recomputes the entire chain and validates the signature.\n\n### End-to-end example\n\n```ts\nimport {\n  generateEd25519KeyPair,\n  createEd25519Signer,\n  createKeyRegistry,\n  createFileWriteOnceStore,\n} from '@elsium-ai/core'\nimport { createProofRecorder, PROOF_SESSION_METADATA_KEY } from '@elsium-ai/observe'\nimport { gateway } from '@elsium-ai/gateway'\n\nconst pair = generateEd25519KeyPair()\nconst signer = createEd25519Signer({ privateKey: pair.privateKey, keyId: 'org-aperion-k7' })\nconst recorder = createProofRecorder({ signer })\n\nconst llm = gateway({\n  provider: 'anthropic',\n  apiKey: process.env.ANTHROPIC_API_KEY!,\n  middleware: [recorder.middleware()],\n})\n\nconst session = recorder.startSession({\n  agentId: 'invoice-extractor',\n  agentVersion: '1.2.3',\n  inputs: { messages: [{ role: 'user', content: 'Extract this invoice…' }] },\n})\n\nconst response = await llm.complete({\n  messages: [{ role: 'user', content: 'Extract this invoice…' }],\n  metadata: { [PROOF_SESSION_METADATA_KEY]: session.proofId },\n})\n\nsession.recordToolCall({ tool: 'parse_invoice', inputHash: 'h1', outputHash: 'h2' })\nsession.recordPolicyDecision({ rule: 'pii-allowed', result: 'allow' })\n\nconst store = createFileWriteOnceStore({ dir: './proofs' })\nconst proof = await session.finalize({ finalOutput: { invoiceTotal: 1234 }, store })\n// → ./proofs/proof_<id>.json, signed with org-aperion-k7\n```\n\n### Verifying on another machine\n\nThe verifier needs only the public key and the proof file — no signer, no API keys:\n\n```ts\nimport { createKeyRegistry } from '@elsium-ai/core'\nimport { verifyProof } from '@elsium-ai/observe'\nimport { readFileSync } from 'node:fs'\n\nconst registry = createKeyRegistry({\n  trustRoots: [{ keyId: 'org-aperion-k7', publicKey: ORG_PUBLIC_KEY_PEM }],\n})\n\nconst proof = JSON.parse(readFileSync('./proofs/proof_abc.json', 'utf8'))\nconst result = verifyProof(proof, registry)\n// result.valid === true   if signature and full hash chain check out\n// result.chainBrokenAt    when an event was mutated after signing\n```\n\n### When to record what\n\n| Method | Use for |\n|---|---|\n| `recordLLMCall(summary)` | Manually capture an LLM call. Auto-recorded by the middleware when `metadata.proofSessionId` is set. |\n| `recordToolCall(summary)` | Every tool invocation. Hash inputs/outputs to keep proof size bounded. |\n| `recordRagRetrieve(summary)` | Documents retrieved from a vector store. Captures `id` + score for each. |\n| `recordPolicyDecision(summary)` | Allow/deny outcome from a policy evaluator. |\n| `recordCustom(data)` | Anything domain-specific (e.g. external API call hashes). |\n\nThe proof shape is `version: 'elsium-proof/v1'` and the signing payload is `${version}\\n${proofId}\\n${chainHead}` — both pinned constants so verifiers can rely on stable framing.\n\n---\n\n## Part of ElsiumAI\n\nThis package is the observability layer of the [ElsiumAI](https://github.com/elsium-ai/elsium-ai) framework. See the [full documentation](https://github.com/elsium-ai/elsium-ai) for guides and examples.\n\n## License\n\n[MIT](https://github.com/elsium-ai/elsium-ai/blob/main/LICENSE)\n","readmeFilename":"README.md"}