{"_id":"@dude1wudv/pi-agent-core","_rev":"9-8af3d8729338cf7c31020a0fa355eed8","name":"@dude1wudv/pi-agent-core","dist-tags":{"latest":"20.1.9"},"versions":{"20.1.0":{"name":"@dude1wudv/pi-agent-core","version":"20.1.0","keywords":["ai","agent","llm","transport","state-management"],"author":{"name":"Can Boluk"},"license":"MIT","_id":"@dude1wudv/pi-agent-core@20.1.0","maintainers":[{"name":"dude1wudv","email":"1602858215@qq.com"}],"contributors":[{"name":"Mario Zechner"}],"homepage":"https://omp.sh","bugs":{"url":"https://github.com/can1357/oh-my-pi/issues"},"dist":{"shasum":"01fa5c72a0a8faa00ee622447601c7f8b7f9be9c","tarball":"https://registry.npmjs.org/@dude1wudv/pi-agent-core/-/pi-agent-core-20.1.0.tgz","fileCount":71,"integrity":"sha512-A8VMIRKdAdBlT7NKzXo1nqLRuwkMtFccO5RlVBbIjC1kvPwm+Nmm1DfdmagCXz3M4KNxN52S1+AsFLGz6xq8yw==","signatures":[{"sig":"MEUCIGourCbykosLlID2TqZ0ozdmev0CiFI54fPXg/zqBn27AiEAwraDFuQYmeU3l6j0VbnuiYIsSJ82TsOSF/dae8hIFnw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":844042},"main":"./src/index.ts","type":"module","_from":"file:C:/Users/sun/AppData/Local/Temp/omp-pack-BOtHWB/dude1wudv-pi-agent-core-20.1.0.tgz","types":"./dist/types/index.d.ts","engines":{"bun":">=1.3.14"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./src/index.ts"},"./*":{"types":"./dist/types/*.d.ts","import":"./src/*.ts"},"./compaction":{"types":"./dist/types/compaction.d.ts","import":"./src/compaction.ts"},"./compaction/*":{"types":"./dist/types/compaction/*.d.ts","import":"./src/compaction/*.ts"}},"scripts":{"fix":"biome check --write --unsafe .","fmt":"biome format --write .","lint":"biome lint .","test":"bun test --parallel","check":"biome check . && bun run check:types","check:types":"tsgo -p tsconfig.json --noEmit"},"_npmUser":{"name":"dude1wudv","email":"1602858215@qq.com"},"_resolved":"C:\\Users\\sun\\AppData\\Local\\Temp\\omp-pack-BOtHWB\\dude1wudv-pi-agent-core-20.1.0.tgz","_integrity":"sha512-A8VMIRKdAdBlT7NKzXo1nqLRuwkMtFccO5RlVBbIjC1kvPwm+Nmm1DfdmagCXz3M4KNxN52S1+AsFLGz6xq8yw==","repository":{"url":"git+https://github.com/can1357/oh-my-pi.git","type":"git","directory":"packages/agent"},"_npmVersion":"11.12.1","description":"General-purpose agent with transport abstraction, state management, and attachment support","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@dude1wudv/pi-ai":"20.1.0","@dude1wudv/pi-wire":"20.1.0","@opentelemetry/api":"^1.9.1","@dude1wudv/pi-utils":"20.1.0","@dude1wudv/pi-catalog":"20.1.0","@dude1wudv/pi-natives":"20.1.0","@dude1wudv/snapcompact":"20.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","@dude1wudv/omptype":"20.1.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-agent-core_20.1.0_1786730841929_0.06462191449996002","host":"s3://npm-registry-packages-npm-production"}},"20.1.2":{"name":"@dude1wudv/pi-agent-core","version":"20.1.2","keywords":["ai","agent","llm","transport","state-management"],"author":{"name":"Can Boluk"},"license":"MIT","_id":"@dude1wudv/pi-agent-core@20.1.2","maintainers":[{"name":"dude1wudv","email":"1602858215@qq.com"}],"contributors":[{"name":"Mario Zechner"}],"homepage":"https://omp.sh","bugs":{"url":"https://github.com/can1357/oh-my-pi/issues"},"dist":{"shasum":"4617dc8384aff62270ec049ecfd69b8fb156694c","tarball":"https://registry.npmjs.org/@dude1wudv/pi-agent-core/-/pi-agent-core-20.1.2.tgz","fileCount":71,"integrity":"sha512-uGELgvxxbY0+yKfYo5y5l9B4e1Bg1GY3Ldf+Curoh68FZSZu9j47XO7UG2PVX6RfVQWw0cUQA98pJICrFQwzJg==","signatures":[{"sig":"MEUCIQDj3SDdAbfzyuzMF3o/NVTzhi76fviPEG2CVXqBWBDNYgIgNhcFU5AwKsELNQwSYHHo77KqomIL9KkOcNaRNca8/XY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":844042},"main":"./src/index.ts","type":"module","_from":"file:C:/Users/sun/AppData/Local/Temp/omp-pack-jM1Jxk/dude1wudv-pi-agent-core-20.1.2.tgz","types":"./dist/types/index.d.ts","engines":{"bun":">=1.3.14"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./src/index.ts"},"./*":{"types":"./dist/types/*.d.ts","import":"./src/*.ts"},"./compaction":{"types":"./dist/types/compaction.d.ts","import":"./src/compaction.ts"},"./compaction/*":{"types":"./dist/types/compaction/*.d.ts","import":"./src/compaction/*.ts"}},"scripts":{"fix":"biome check --write --unsafe .","fmt":"biome format --write .","lint":"biome lint .","test":"bun test --parallel","check":"biome check . && bun run check:types","check:types":"tsgo -p tsconfig.json --noEmit"},"_npmUser":{"name":"dude1wudv","email":"1602858215@qq.com"},"_resolved":"C:\\Users\\sun\\AppData\\Local\\Temp\\omp-pack-jM1Jxk\\dude1wudv-pi-agent-core-20.1.2.tgz","_integrity":"sha512-uGELgvxxbY0+yKfYo5y5l9B4e1Bg1GY3Ldf+Curoh68FZSZu9j47XO7UG2PVX6RfVQWw0cUQA98pJICrFQwzJg==","repository":{"url":"git+https://github.com/can1357/oh-my-pi.git","type":"git","directory":"packages/agent"},"_npmVersion":"11.12.1","description":"General-purpose agent with transport abstraction, state management, and attachment support","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@dude1wudv/pi-ai":"20.1.2","@dude1wudv/pi-wire":"20.1.2","@opentelemetry/api":"^1.9.1","@dude1wudv/pi-utils":"20.1.2","@dude1wudv/pi-catalog":"20.1.2","@dude1wudv/pi-natives":"20.1.2","@dude1wudv/snapcompact":"20.1.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","@dude1wudv/omptype":"20.1.2","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-agent-core_20.1.2_1786776456214_0.08121835878615324","host":"s3://npm-registry-packages-npm-production"}},"20.1.3":{"name":"@dude1wudv/pi-agent-core","version":"20.1.3","keywords":["ai","agent","llm","transport","state-management"],"author":{"name":"Can Boluk"},"license":"MIT","_id":"@dude1wudv/pi-agent-core@20.1.3","maintainers":[{"name":"dude1wudv","email":"1602858215@qq.com"}],"contributors":[{"name":"Mario Zechner"}],"homepage":"https://omp.sh","bugs":{"url":"https://github.com/can1357/oh-my-pi/issues"},"dist":{"shasum":"129ee16129ecf8bcda65447167d3aea59429fe3e","tarball":"https://registry.npmjs.org/@dude1wudv/pi-agent-core/-/pi-agent-core-20.1.3.tgz","fileCount":71,"integrity":"sha512-lTf7vJ5vELXROEythadgpIijmS4zbgzJTdCYRziF3PpijzCjoahxr+GE9n9ZfI6TQc2h5NLx1Tg2i1ymkxNMFg==","signatures":[{"sig":"MEUCIF9GxizUNYWVhMDhznrd+4zImXPj7lo2xmM0mHSiZP3MAiEAuzehYSymFKI4BsmuqfGnJzEjNIoa/nrcgjMInOeF/Cg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":844042},"main":"./src/index.ts","type":"module","_from":"file:C:/Users/RUNNER~1/AppData/Local/Temp/omp-pack-SPt2rq/dude1wudv-pi-agent-core-20.1.3.tgz","types":"./dist/types/index.d.ts","engines":{"bun":">=1.3.14"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./src/index.ts"},"./*":{"types":"./dist/types/*.d.ts","import":"./src/*.ts"},"./compaction":{"types":"./dist/types/compaction.d.ts","import":"./src/compaction.ts"},"./compaction/*":{"types":"./dist/types/compaction/*.d.ts","import":"./src/compaction/*.ts"}},"scripts":{"fix":"biome check --write --unsafe .","fmt":"biome format --write .","lint":"biome lint .","test":"bun test --parallel","check":"biome check . && bun run check:types","check:types":"tsgo -p tsconfig.json --noEmit"},"_npmUser":{"name":"dude1wudv","email":"1602858215@qq.com"},"_resolved":"C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\omp-pack-SPt2rq\\dude1wudv-pi-agent-core-20.1.3.tgz","_integrity":"sha512-lTf7vJ5vELXROEythadgpIijmS4zbgzJTdCYRziF3PpijzCjoahxr+GE9n9ZfI6TQc2h5NLx1Tg2i1ymkxNMFg==","repository":{"url":"git+https://github.com/can1357/oh-my-pi.git","type":"git","directory":"packages/agent"},"_npmVersion":"10.9.8","description":"General-purpose agent with transport abstraction, state management, and attachment support","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@dude1wudv/pi-ai":"20.1.3","@dude1wudv/pi-wire":"20.1.3","@opentelemetry/api":"^1.9.1","@dude1wudv/pi-utils":"20.1.3","@dude1wudv/pi-catalog":"20.1.3","@dude1wudv/pi-natives":"20.1.3","@dude1wudv/snapcompact":"20.1.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","@dude1wudv/omptype":"20.1.3","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-agent-core_20.1.3_1786786437833_0.7872897303943611","host":"s3://npm-registry-packages-npm-production"}},"20.1.4":{"name":"@dude1wudv/pi-agent-core","version":"20.1.4","keywords":["ai","agent","llm","transport","state-management"],"author":{"name":"Can Boluk"},"license":"MIT","_id":"@dude1wudv/pi-agent-core@20.1.4","maintainers":[{"name":"dude1wudv","email":"1602858215@qq.com"}],"contributors":[{"name":"Mario Zechner"}],"homepage":"https://omp.sh","bugs":{"url":"https://github.com/can1357/oh-my-pi/issues"},"dist":{"shasum":"7c755d80a1f4a04ca57c05f5b319637da473af93","tarball":"https://registry.npmjs.org/@dude1wudv/pi-agent-core/-/pi-agent-core-20.1.4.tgz","fileCount":71,"integrity":"sha512-YItQWpq2jUjGaiicdzVZH13SJ7+2YFo4ksvHIn5+OXNb7OUbLvEyHK1xKJBAW/hRJ1UGd2kb1xbJVc2gd0R7qQ==","signatures":[{"sig":"MEUCIQDyOqgTtoePF9/yjzhGB0dz9qrU9lhmFChby44sv4wXzgIgC4JDaS8iz6pqkqN1IRuc24jxa56Ljp9tpIR4zNEK9JQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":844042},"main":"./src/index.ts","type":"module","_from":"file:C:/Users/RUNNER~1/AppData/Local/Temp/omp-pack-0IExxS/dude1wudv-pi-agent-core-20.1.4.tgz","types":"./dist/types/index.d.ts","engines":{"bun":">=1.3.14"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./src/index.ts"},"./*":{"types":"./dist/types/*.d.ts","import":"./src/*.ts"},"./compaction":{"types":"./dist/types/compaction.d.ts","import":"./src/compaction.ts"},"./compaction/*":{"types":"./dist/types/compaction/*.d.ts","import":"./src/compaction/*.ts"}},"scripts":{"fix":"biome check --write --unsafe .","fmt":"biome format --write .","lint":"biome lint .","test":"bun test --parallel","check":"biome check . && bun run check:types","check:types":"tsgo -p tsconfig.json --noEmit"},"_npmUser":{"name":"dude1wudv","email":"1602858215@qq.com"},"_resolved":"C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\omp-pack-0IExxS\\dude1wudv-pi-agent-core-20.1.4.tgz","_integrity":"sha512-YItQWpq2jUjGaiicdzVZH13SJ7+2YFo4ksvHIn5+OXNb7OUbLvEyHK1xKJBAW/hRJ1UGd2kb1xbJVc2gd0R7qQ==","repository":{"url":"git+https://github.com/can1357/oh-my-pi.git","type":"git","directory":"packages/agent"},"_npmVersion":"10.9.8","description":"General-purpose agent with transport abstraction, state management, and attachment support","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@dude1wudv/pi-ai":"20.1.4","@dude1wudv/pi-wire":"20.1.4","@opentelemetry/api":"^1.9.1","@dude1wudv/pi-utils":"20.1.4","@dude1wudv/pi-catalog":"20.1.4","@dude1wudv/pi-natives":"20.1.4","@dude1wudv/snapcompact":"20.1.4"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","@dude1wudv/omptype":"20.1.4","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-agent-core_20.1.4_1786817624507_0.037928991665727496","host":"s3://npm-registry-packages-npm-production"}},"20.1.5":{"name":"@dude1wudv/pi-agent-core","version":"20.1.5","keywords":["ai","agent","llm","transport","state-management"],"author":{"name":"Can Boluk"},"license":"MIT","_id":"@dude1wudv/pi-agent-core@20.1.5","maintainers":[{"name":"dude1wudv","email":"1602858215@qq.com"}],"contributors":[{"name":"Mario Zechner"}],"homepage":"https://omp.sh","bugs":{"url":"https://github.com/can1357/oh-my-pi/issues"},"dist":{"shasum":"3c64be3ee4345779bd42730b34e1353c756da03d","tarball":"https://registry.npmjs.org/@dude1wudv/pi-agent-core/-/pi-agent-core-20.1.5.tgz","fileCount":71,"integrity":"sha512-nHEn91jsq2Ycf0zuib4JuhfvW+1KyMXfDYHPJ4Mj6AEUCxEKCJ8TIrpTqXuzOiMcQFlExYvslB/i9LUbK0SRyg==","signatures":[{"sig":"MEUCIQDOtAohbs91ingCp9b45PxFz1a5oCcg+Nt0gjJeiC/iuAIgeHsYJ6lGYy3fUpSt5mv/kqrLM8zXwAQjQ7YgXEmiR40=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":844042},"main":"./src/index.ts","type":"module","_from":"file:C:/Users/RUNNER~1/AppData/Local/Temp/omp-pack-YN4V9J/dude1wudv-pi-agent-core-20.1.5.tgz","types":"./dist/types/index.d.ts","engines":{"bun":">=1.3.14"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./src/index.ts"},"./*":{"types":"./dist/types/*.d.ts","import":"./src/*.ts"},"./compaction":{"types":"./dist/types/compaction.d.ts","import":"./src/compaction.ts"},"./compaction/*":{"types":"./dist/types/compaction/*.d.ts","import":"./src/compaction/*.ts"}},"scripts":{"fix":"biome check --write --unsafe .","fmt":"biome format --write .","lint":"biome lint .","test":"bun test --parallel","check":"biome check . && bun run check:types","check:types":"tsgo -p tsconfig.json --noEmit"},"_npmUser":{"name":"dude1wudv","email":"1602858215@qq.com"},"_resolved":"C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\omp-pack-YN4V9J\\dude1wudv-pi-agent-core-20.1.5.tgz","_integrity":"sha512-nHEn91jsq2Ycf0zuib4JuhfvW+1KyMXfDYHPJ4Mj6AEUCxEKCJ8TIrpTqXuzOiMcQFlExYvslB/i9LUbK0SRyg==","repository":{"url":"git+https://github.com/can1357/oh-my-pi.git","type":"git","directory":"packages/agent"},"_npmVersion":"10.9.8","description":"General-purpose agent with transport abstraction, state management, and attachment support","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@dude1wudv/pi-ai":"20.1.5","@dude1wudv/pi-wire":"20.1.5","@opentelemetry/api":"^1.9.1","@dude1wudv/pi-utils":"20.1.5","@dude1wudv/pi-catalog":"20.1.5","@dude1wudv/pi-natives":"20.1.5","@dude1wudv/snapcompact":"20.1.5"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","@dude1wudv/omptype":"20.1.5","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-agent-core_20.1.5_1786864055277_0.07226082370464493","host":"s3://npm-registry-packages-npm-production"}},"20.1.6":{"name":"@dude1wudv/pi-agent-core","version":"20.1.6","keywords":["ai","agent","llm","transport","state-management"],"author":{"name":"Can Boluk"},"license":"MIT","_id":"@dude1wudv/pi-agent-core@20.1.6","maintainers":[{"name":"dude1wudv","email":"1602858215@qq.com"}],"contributors":[{"name":"Mario Zechner"}],"homepage":"https://omp.sh","bugs":{"url":"https://github.com/can1357/oh-my-pi/issues"},"dist":{"shasum":"766f91ca744dd707e1beed6b87d0a021d27e0bf3","tarball":"https://registry.npmjs.org/@dude1wudv/pi-agent-core/-/pi-agent-core-20.1.6.tgz","fileCount":71,"integrity":"sha512-B/s51Qqvb0XAX0qD/hXxoQMKaLVuyNP5Q2kpARY4QGITnTHvjNODY6DSs0KW07fnFElkaxjtzomPsiexyFnXjQ==","signatures":[{"sig":"MEUCIQDLYynKtQ5hoSXfll4zavIMIOMtqTfCpF0BGzyBJDt3gQIgYtXdiqDukZ97PttXMWntJUol3l2lHqZQhPj4Y60PFf4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":844042},"main":"./src/index.ts","type":"module","_from":"file:C:/Users/RUNNER~1/AppData/Local/Temp/omp-pack-NQlTUX/dude1wudv-pi-agent-core-20.1.6.tgz","types":"./dist/types/index.d.ts","engines":{"bun":">=1.3.14"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./src/index.ts"},"./*":{"types":"./dist/types/*.d.ts","import":"./src/*.ts"},"./compaction":{"types":"./dist/types/compaction.d.ts","import":"./src/compaction.ts"},"./compaction/*":{"types":"./dist/types/compaction/*.d.ts","import":"./src/compaction/*.ts"}},"scripts":{"fix":"biome check --write --unsafe .","fmt":"biome format --write .","lint":"biome lint .","test":"bun test --parallel","check":"biome check . && bun run check:types","check:types":"tsgo -p tsconfig.json --noEmit"},"_npmUser":{"name":"dude1wudv","email":"1602858215@qq.com"},"_resolved":"C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\omp-pack-NQlTUX\\dude1wudv-pi-agent-core-20.1.6.tgz","_integrity":"sha512-B/s51Qqvb0XAX0qD/hXxoQMKaLVuyNP5Q2kpARY4QGITnTHvjNODY6DSs0KW07fnFElkaxjtzomPsiexyFnXjQ==","repository":{"url":"git+https://github.com/can1357/oh-my-pi.git","type":"git","directory":"packages/agent"},"_npmVersion":"10.9.8","description":"General-purpose agent with transport abstraction, state management, and attachment support","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@dude1wudv/pi-ai":"20.1.6","@dude1wudv/pi-wire":"20.1.6","@opentelemetry/api":"^1.9.1","@dude1wudv/pi-utils":"20.1.6","@dude1wudv/pi-catalog":"20.1.6","@dude1wudv/pi-natives":"20.1.6","@dude1wudv/snapcompact":"20.1.6"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","@dude1wudv/omptype":"20.1.6","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-agent-core_20.1.6_1786872916848_0.23678040388027743","host":"s3://npm-registry-packages-npm-production"}},"20.1.7":{"name":"@dude1wudv/pi-agent-core","version":"20.1.7","keywords":["ai","agent","llm","transport","state-management"],"author":{"name":"Can Boluk"},"license":"MIT","_id":"@dude1wudv/pi-agent-core@20.1.7","maintainers":[{"name":"dude1wudv","email":"1602858215@qq.com"}],"contributors":[{"name":"Mario Zechner"}],"homepage":"https://omp.sh","bugs":{"url":"https://github.com/can1357/oh-my-pi/issues"},"dist":{"shasum":"ce8102cc4e92df1a024da70e3ad94e5ccac01e74","tarball":"https://registry.npmjs.org/@dude1wudv/pi-agent-core/-/pi-agent-core-20.1.7.tgz","fileCount":71,"integrity":"sha512-bULFKjtCUujx5ogkYjRJwzClaYsLUNFuRaBBfVqkfHm5ViRaV6y876/91ULpBDtvhOLxnmcT7VPP2hMNfCgnfg==","signatures":[{"sig":"MEUCIHa6qaU932lhIKknIyExDW9T68bdpkqhIE1e56Ojj13nAiEAj78V18H3U/ybqRU4LYo7LpziinbByJ4dn+N8HacNxzQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":849085},"main":"./src/index.ts","type":"module","_from":"file:C:/Users/RUNNER~1/AppData/Local/Temp/omp-pack-WPuKEG/dude1wudv-pi-agent-core-20.1.7.tgz","types":"./dist/types/index.d.ts","engines":{"bun":">=1.3.14"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./src/index.ts"},"./*":{"types":"./dist/types/*.d.ts","import":"./src/*.ts"},"./compaction":{"types":"./dist/types/compaction.d.ts","import":"./src/compaction.ts"},"./compaction/*":{"types":"./dist/types/compaction/*.d.ts","import":"./src/compaction/*.ts"}},"scripts":{"fix":"biome check --write --unsafe .","fmt":"biome format --write .","lint":"biome lint .","test":"bun test --parallel","check":"biome check . && bun run check:types","check:types":"tsgo -p tsconfig.json --noEmit"},"_npmUser":{"name":"dude1wudv","email":"1602858215@qq.com"},"_resolved":"C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\omp-pack-WPuKEG\\dude1wudv-pi-agent-core-20.1.7.tgz","_integrity":"sha512-bULFKjtCUujx5ogkYjRJwzClaYsLUNFuRaBBfVqkfHm5ViRaV6y876/91ULpBDtvhOLxnmcT7VPP2hMNfCgnfg==","repository":{"url":"git+https://github.com/can1357/oh-my-pi.git","type":"git","directory":"packages/agent"},"_npmVersion":"10.9.8","description":"General-purpose agent with transport abstraction, state management, and attachment support","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@dude1wudv/pi-ai":"20.1.7","@dude1wudv/pi-wire":"20.1.7","@opentelemetry/api":"^1.9.1","@dude1wudv/pi-utils":"20.1.7","@dude1wudv/pi-catalog":"20.1.7","@dude1wudv/pi-natives":"20.1.7","@dude1wudv/snapcompact":"20.1.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","@dude1wudv/omptype":"20.1.7","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-agent-core_20.1.7_1787078959436_0.248506110019735","host":"s3://npm-registry-packages-npm-production"}},"20.1.8":{"name":"@dude1wudv/pi-agent-core","version":"20.1.8","keywords":["ai","agent","llm","transport","state-management"],"author":{"name":"Stencil Labs, Inc."},"license":"MIT","_id":"@dude1wudv/pi-agent-core@20.1.8","maintainers":[{"name":"dude1wudv","email":"1602858215@qq.com"}],"contributors":[{"name":"Mario Zechner"}],"homepage":"https://omp.sh","bugs":{"url":"https://github.com/can1357/oh-my-pi/issues"},"dist":{"shasum":"d05742e90421afc178cac184b9e90d0ac8febeec","tarball":"https://registry.npmjs.org/@dude1wudv/pi-agent-core/-/pi-agent-core-20.1.8.tgz","fileCount":75,"integrity":"sha512-90WnG/hrgpar4DCfNzqnhmfssOyhqRbbxsBIe7pscDXlcnFJBBQBVryRv2eJok3hqHyuFhJv8z+EacbmdEh7Ig==","signatures":[{"sig":"MEQCIB6fx/t7blrwtAo4HRO9SGz5pmudkadvvPbR1bA7A1vgAiBH1ZekJNLtXjBiSwAqy4J9YwRsBJA27APLouwtqSIo/w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dude1wudv%2fpi-agent-core@20.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1964294},"main":"./src/index.ts","type":"module","_from":"file:C:/Users/RUNNER~1/AppData/Local/Temp/omp-pack-D7xshv/dude1wudv-pi-agent-core-20.1.8.tgz","types":"./dist/types/index.d.ts","engines":{"bun":">=1.3.14"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./src/index.ts"},"./*":{"types":"./dist/types/*.d.ts","import":"./src/*.ts"},"./compaction":{"types":"./dist/types/compaction.d.ts","import":"./src/compaction.ts"},"./compaction/*":{"types":"./dist/types/compaction/*.d.ts","import":"./src/compaction/*.ts"}},"scripts":{"fix":"biome check --write --unsafe .","fmt":"biome format --write .","lint":"biome lint .","test":"bun test --parallel","check":"biome check . && bun run check:types","check:types":"tsgo -p tsconfig.json --noEmit"},"_npmUser":{"name":"dude1wudv","email":"1602858215@qq.com"},"_resolved":"C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\omp-pack-D7xshv\\dude1wudv-pi-agent-core-20.1.8.tgz","_integrity":"sha512-90WnG/hrgpar4DCfNzqnhmfssOyhqRbbxsBIe7pscDXlcnFJBBQBVryRv2eJok3hqHyuFhJv8z+EacbmdEh7Ig==","repository":{"url":"git+https://github.com/dude1wudv/oh-my-pi.git","type":"git"},"_npmVersion":"10.9.8","description":"General-purpose agent with transport abstraction, state management, and attachment support","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@dude1wudv/pi-ai":"20.1.8","@dude1wudv/pi-wire":"20.1.8","@opentelemetry/api":"^1.9.1","@dude1wudv/pi-utils":"20.1.8","@dude1wudv/pi-catalog":"20.1.8","@dude1wudv/pi-natives":"20.1.8","@dude1wudv/snapcompact":"20.1.8"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","@dude1wudv/omptype":"20.1.8","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/context-async-hooks":"^2.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-agent-core_20.1.8_1787329703320_0.8259658417194102","host":"s3://npm-registry-packages-npm-production"}},"20.1.9":{"type":"module","name":"@dude1wudv/pi-agent-core","version":"20.1.9","description":"General-purpose agent with transport abstraction, state management, and attachment support","homepage":"https://omp.sh","author":{"name":"Stencil Labs, Inc."},"contributors":[{"name":"Mario Zechner"}],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/dude1wudv/oh-my-pi.git"},"bugs":{"url":"https://github.com/can1357/oh-my-pi/issues"},"keywords":["ai","agent","llm","transport","state-management"],"main":"./src/index.ts","types":"./dist/types/index.d.ts","scripts":{"check":"biome check . && bun run check:types","check:types":"tsgo -p tsconfig.json --noEmit","lint":"biome lint .","test":"bun test --parallel","fix":"biome check --write --unsafe .","fmt":"biome format --write ."},"dependencies":{"@dude1wudv/pi-ai":"20.1.9","@dude1wudv/pi-catalog":"20.1.9","@dude1wudv/pi-natives":"20.1.9","@dude1wudv/pi-utils":"20.1.9","@dude1wudv/pi-wire":"20.1.9","@dude1wudv/snapcompact":"20.1.9","@opentelemetry/api":"^1.9.1"},"devDependencies":{"@dude1wudv/omptype":"20.1.9","@opentelemetry/context-async-hooks":"^2.9.0","@opentelemetry/sdk-trace-base":"^2.9.0","@types/bun":"^1.3.14"},"engines":{"bun":">=1.3.14"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./src/index.ts"},"./compaction":{"types":"./dist/types/compaction.d.ts","import":"./src/compaction.ts"},"./compaction/*":{"types":"./dist/types/compaction/*.d.ts","import":"./src/compaction/*.ts"},"./*":{"types":"./dist/types/*.d.ts","import":"./src/*.ts"}},"_id":"@dude1wudv/pi-agent-core@20.1.9","_integrity":"sha512-+r1/kQ9/J6NT/bT7uJ5TQDrBZWP1BxzTdbTQ1Je/qZ/iSqFaUX/wAsOY+Lp+uzQCls7tMpmH3XQ3oF2AS91jqg==","_resolved":"C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\omp-pack-FbXZuG\\dude1wudv-pi-agent-core-20.1.9.tgz","_from":"file:C:/Users/RUNNER~1/AppData/Local/Temp/omp-pack-FbXZuG/dude1wudv-pi-agent-core-20.1.9.tgz","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-+r1/kQ9/J6NT/bT7uJ5TQDrBZWP1BxzTdbTQ1Je/qZ/iSqFaUX/wAsOY+Lp+uzQCls7tMpmH3XQ3oF2AS91jqg==","shasum":"522b7bc027f64d5c4eba7fb3df8d5a4d219e0cc2","tarball":"https://registry.npmjs.org/@dude1wudv/pi-agent-core/-/pi-agent-core-20.1.9.tgz","fileCount":75,"unpackedSize":1964294,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dude1wudv%2fpi-agent-core@20.1.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDlcdWQlbXQRdgYFrvJFwUuOec4pIoe/bMUvDI7Pm0n8AIhAMCfvBoy+b++nXYdxL712VnVZNAQY3kSzCCoTARyuNj/"}]},"_npmUser":{"name":"dude1wudv","email":"1602858215@qq.com"},"directories":{},"maintainers":[{"name":"dude1wudv","email":"1602858215@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-agent-core_20.1.9_1787369226742_0.6761099310171115"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-14T18:07:21.694Z","modified":"2026-08-22T03:27:07.271Z","20.1.0":"2026-08-14T18:07:22.088Z","20.1.2":"2026-08-15T06:47:36.364Z","20.1.3":"2026-08-15T09:33:57.973Z","20.1.4":"2026-08-15T18:13:44.657Z","20.1.5":"2026-08-16T07:07:35.412Z","20.1.6":"2026-08-16T09:35:17.001Z","20.1.7":"2026-08-18T18:49:19.589Z","20.1.8":"2026-08-21T16:28:23.495Z","20.1.9":"2026-08-22T03:27:06.906Z"},"bugs":{"url":"https://github.com/can1357/oh-my-pi/issues"},"author":{"name":"Stencil Labs, Inc."},"license":"MIT","homepage":"https://omp.sh","keywords":["ai","agent","llm","transport","state-management"],"repository":{"type":"git","url":"git+https://github.com/dude1wudv/oh-my-pi.git"},"description":"General-purpose agent with transport abstraction, state management, and attachment support","contributors":[{"name":"Mario Zechner"}],"maintainers":[{"name":"dude1wudv","email":"1602858215@qq.com"}],"readme":"# @dude1wudv/pi-agent\n\nStateful agent with tool execution and event streaming. Built on `@dude1wudv/pi-ai`.\n\n## Installation\n\n```bash\nnpm install @dude1wudv/pi-agent\n```\n\n## Quick Start\n\n```typescript\nimport { Agent } from \"@dude1wudv/pi-agent\";\nimport { getModel } from \"@dude1wudv/pi-ai\";\n\nconst agent = new Agent({\n\tinitialState: {\n\t\tsystemPrompt: [\"You are a helpful assistant.\"],\n\t\tmodel: getModel(\"anthropic\", \"claude-sonnet-4-20250514\"),\n\t},\n});\n\nagent.subscribe((event) => {\n\tif (event.type === \"message_update\" && event.assistantMessageEvent.type === \"text_delta\") {\n\t\t// Stream just the new text chunk\n\t\tprocess.stdout.write(event.assistantMessageEvent.delta);\n\t}\n});\n\nawait agent.prompt(\"Hello!\");\n```\n\n## Core Concepts\n\n### AgentMessage vs LLM Message\n\nThe agent works with `AgentMessage`, a flexible type that can include:\n\n- Standard LLM messages (`user`, `assistant`, `toolResult`)\n- Custom app-specific message types via declaration merging\n\nLLMs only understand `user`, `assistant`, and `toolResult`. The `convertToLlm` function bridges this gap by filtering and transforming messages before each LLM call.\n\n### Message Flow\n\n```\nAgentMessage[] → transformContext() → AgentMessage[] → convertToLlm() → Message[] → LLM\n                    (optional)                           (required)\n```\n\n1. **transformContext**: Prune old messages, inject external context\n2. **convertToLlm**: Filter out UI-only messages, convert custom types to LLM format\n\n## Event Flow\n\nThe agent emits events for UI updates. Understanding the event sequence helps build responsive interfaces.\n\n### prompt() Event Sequence\n\nWhen you call `prompt(\"Hello\")`:\n\n```\nprompt(\"Hello\")\n├─ agent_start\n├─ turn_start\n├─ message_start   { message: userMessage }      // Your prompt\n├─ message_end     { message: userMessage }\n├─ message_start   { message: assistantMessage } // LLM starts responding\n├─ message_update  { message: partial... }       // Streaming chunks\n├─ message_update  { message: partial... }\n├─ message_end     { message: assistantMessage } // Complete response\n├─ turn_end        { message, toolResults: [] }\n└─ agent_end       { messages: [...] }\n```\n\n### With Tool Calls\n\nIf the assistant calls tools, the loop continues:\n\n```\nprompt(\"Read config.json\")\n├─ agent_start\n├─ turn_start\n├─ message_start/end  { userMessage }\n├─ message_start      { assistantMessage with toolCall }\n├─ message_update...\n├─ message_end        { assistantMessage }\n├─ tool_execution_start  { toolCallId, toolName, args }\n├─ tool_execution_update { partialResult }           // If tool streams\n├─ tool_execution_end    { toolCallId, result }\n├─ message_start/end  { toolResultMessage }\n├─ turn_end           { message, toolResults: [toolResult] }\n│\n├─ turn_start                                        // Next turn\n├─ message_start      { assistantMessage }           // LLM responds to tool result\n├─ message_update...\n├─ message_end\n├─ turn_end\n└─ agent_end\n```\n\n### continue() Event Sequence\n\n`continue()` resumes from existing context without adding a new message. Use it for retries after errors.\n\n```typescript\n// After an error, retry from current state\nawait agent.continue();\n```\n\nThe last message in context must be `user` or `toolResult` (not `assistant`).\n\n### Event Types\n\n| Event                   | Description                                                     |\n| ----------------------- | --------------------------------------------------------------- |\n| `agent_start`           | Agent begins processing                                         |\n| `agent_end`             | Agent completes with all new messages                           |\n| `turn_start`            | New turn begins (one LLM call + tool executions)                |\n| `turn_end`              | Turn completes with assistant message and tool results          |\n| `message_start`         | Any message begins (user, assistant, toolResult)                |\n| `message_update`        | **Assistant only.** Includes `assistantMessageEvent` with delta |\n| `message_end`           | Message completes                                               |\n| `tool_execution_start`  | Tool begins                                                     |\n| `tool_execution_update` | Tool streams progress                                           |\n| `tool_execution_end`    | Tool completes                                                  |\n\n## Agent Options\n\n```typescript\nconst agent = new Agent({\n  // Initial state\n  initialState: {\n    systemPrompt: string[],\n    model: Model,\n    thinkingLevel: \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\",\n    tools: AgentTool<any>[],\n    messages: AgentMessage[],\n  },\n\n  // Convert AgentMessage[] to LLM Message[] (required for custom message types)\n  convertToLlm: (messages) => messages.filter(...),\n\n  // Transform context before convertToLlm (for pruning, compaction)\n  transformContext: async (messages, signal) => pruneOldMessages(messages),\n\n  // How to handle queued messages: \"one-at-a-time\" (default) or \"all\"\n  queueMode: \"one-at-a-time\",\n\n  // Custom stream function (for proxy backends)\n  streamFn: streamProxy,\n\n  // Dynamic model-scoped API key resolution (for expiring OAuth tokens)\n  getApiKey: async (model) => tokenForModel(model),\n\n  // Tool execution context (late-bound UI/session access)\n  getToolContext: () => ({ /* app-defined */ }),\n});\n```\n\n## Agent State\n\n```typescript\ninterface AgentState {\n\tsystemPrompt: string[];\n\tmodel: Model;\n\tthinkingLevel: ThinkingLevel;\n\ttools: AgentTool<any>[];\n\tmessages: AgentMessage[];\n\tisStreaming: boolean;\n\tstreamMessage: AgentMessage | null; // Current partial during streaming\n\tpendingToolCalls: Set<string>;\n\terror?: string;\n}\n```\n\nAccess via `agent.state`. During streaming, `streamMessage` contains the partial assistant message.\n\n## Methods\n\n### Prompting\n\n```typescript\n// Text prompt\nawait agent.prompt(\"Hello\");\n\n// With images\nawait agent.prompt(\"What's in this image?\", [{ type: \"image\", data: base64Data, mimeType: \"image/jpeg\" }]);\n\n// AgentMessage directly\nawait agent.prompt({ role: \"user\", content: \"Hello\", timestamp: Date.now() });\n\n// Continue from current context (last message must be user or toolResult)\nawait agent.continue();\n```\n\n### State Management\n\n```typescript\nagent.setSystemPrompt(\"New prompt\");\nagent.setModel(getModel(\"openai\", \"gpt-4o\"));\nagent.setThinkingLevel(\"medium\");\nagent.setTools([myTool]);\nagent.replaceMessages(newMessages);\nagent.appendMessage(message);\nagent.clearMessages();\nagent.reset(); // Clear everything\n```\n\n### Control\n\n```typescript\nagent.abort(); // Cancel current operation\nawait agent.waitForIdle(); // Wait for completion\n```\n\n### Events\n\n```typescript\nconst unsubscribe = agent.subscribe((event) => {\n\tconsole.log(event.type);\n});\nunsubscribe();\n```\n\n## Steering & Follow-up\n\nQueue messages to inject during tool execution (steering) or after the agent would otherwise stop (follow-up):\n\n```typescript\nagent.setSteeringMode(\"one-at-a-time\");\nagent.setInterruptMode(\"immediate\");\n\n// While agent is running tools\nagent.steer({\n\trole: \"user\",\n\tcontent: \"Stop! Do this instead.\",\n\ttimestamp: Date.now(),\n});\n\n// Queue a follow-up to run after the current turn completes\nagent.followUp({\n\trole: \"user\",\n\tcontent: \"After that, summarize the changes.\",\n\ttimestamp: Date.now(),\n});\n```\n\nSteering messages are checked after each tool call by default. Set `interruptMode` to `\"wait\"` to defer\nsteering until the current turn completes.\n\n## Custom Message Types\n\nExtend `AgentMessage` via declaration merging:\n\n```typescript\ndeclare module \"@dude1wudv/pi-agent\" {\n\tinterface CustomAgentMessages {\n\t\tnotification: { role: \"notification\"; text: string; timestamp: number };\n\t}\n}\n\n// Now valid\nconst msg: AgentMessage = { role: \"notification\", text: \"Info\", timestamp: Date.now() };\n```\n\nHandle custom types in `convertToLlm`:\n\n```typescript\nconst agent = new Agent({\n\tconvertToLlm: (messages) =>\n\t\tmessages.flatMap((m) => {\n\t\t\tif (m.role === \"notification\") return []; // Filter out\n\t\t\treturn [m];\n\t\t}),\n});\n```\n\n## Tools\n\nDefine tools using `AgentTool` with an omptype parameter schema.\n\n```typescript\nimport { type } from \"@dude1wudv/omptype\";\n\nconst readFileTool: AgentTool = {\n\tname: \"read_file\",\n\tlabel: \"Read File\", // For UI display\n\tdescription: \"Read a file's contents\",\n\tparameters: type({\n\t\tpath: type(\"string\").describe(\"File path\"),\n\t}),\n\texecute: async (toolCallId, params, signal, onUpdate, context) => {\n\t\tconst content = await fs.readFile(params.path, \"utf-8\");\n\n\t\t// Optional: stream progress\n\t\tonUpdate?.({ content: [{ type: \"text\", text: \"Reading...\" }], details: {} });\n\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: content }],\n\t\t\tdetails: { path: params.path, size: content.length },\n\t\t};\n\t},\n};\n\nagent.setTools([readFileTool]);\n```\n\n### Error Handling\n\n**Throw an error** when a tool fails. Do not return error messages as content.\n\n```typescript\nexecute: async (toolCallId, params, signal, onUpdate) => {\n\tif (!fs.existsSync(params.path)) {\n\t\tthrow new Error(`File not found: ${params.path}`);\n\t}\n\t// Return content only on success\n\treturn { content: [{ type: \"text\", text: \"...\" }] };\n};\n```\n\nThrown errors are caught by the agent and reported to the LLM as tool errors with `isError: true`.\n\n## Proxy Usage\n\nFor browser apps that proxy through a backend:\n\n```typescript\nimport { Agent, streamProxy } from \"@dude1wudv/pi-agent\";\n\nconst agent = new Agent({\n\tstreamFn: (model, context, options) =>\n\t\tstreamProxy(model, context, {\n\t\t\t...options,\n\t\t\tauthToken: \"...\",\n\t\t\tproxyUrl: \"https://your-server.com\",\n\t\t}),\n});\n```\n\n## Low-Level API\n\nFor direct control without the Agent class:\n\n```typescript\nimport { agentLoop, agentLoopContinue } from \"@dude1wudv/pi-agent\";\n\nconst context: AgentContext = {\n\tsystemPrompt: [\"You are helpful.\"],\n\tmessages: [],\n\ttools: [],\n};\n\nconst config: AgentLoopConfig = {\n\tmodel: getModel(\"openai\", \"gpt-4o\"),\n\tconvertToLlm: (msgs) => msgs.filter((m) => [\"user\", \"assistant\", \"toolResult\"].includes(m.role)),\n};\n\nconst userMessage = { role: \"user\", content: \"Hello\", timestamp: Date.now() };\n\nfor await (const event of agentLoop([userMessage], context, config)) {\n\tconsole.log(event.type);\n}\n\n// Continue from existing context\nfor await (const event of agentLoopContinue(context, config)) {\n\tconsole.log(event.type);\n}\n```\n\n## Run-level telemetry\nEvery `invoke_agent` produces two values alongside the OTEL spans:\n\n- **`AgentRunSummary`** — chat / tool / usage / cost / error counters bucketed\n  by status, with per-tool-name breakdowns. Pure aggregation, safe to\n  persist, diff, or assert.\n- **`AgentRunCoverage`** — sorted+deduped `toolsAvailable` / `toolsInvoked` /\n  `toolsUnused` / `modelsUsed` / `providersUsed` arrays. Stable for snapshot\n  tests.\n\nThree delivery channels (use whichever fits):\n\n### `agent_end` event (additive)\n\n```typescript\nfor await (const event of agentLoop([userMessage], context, {\n\t...config,\n\ttelemetry: {},\n})) {\n\tif (event.type === \"agent_end\" && event.telemetry) {\n\t\tconsole.log(\"tokens:\", event.telemetry.usage.totalTokens);\n\t\tconsole.log(\"unused tools:\", event.coverage?.toolsUnused);\n\t}\n}\n```\n\nThe `messages` field is unchanged. Consumers that ignore `telemetry`/\n`coverage` continue to work.\n\n### `onRunEnd` hook (non-fatal)\n\n```typescript\nconst stream = agentLoop([userMessage], context, {\n\t...config,\n\ttelemetry: {\n\t\tonRunEnd: (summary, coverage) => {\n\t\t\tawait persistRunSummary(summary, coverage);\n\t\t},\n\t},\n});\n```\n\nExceptions thrown from `onRunEnd` are caught and logged via `console.warn`;\na misbehaving telemetry consumer can **never** turn a successful agent run\ninto a failed one.\n\n### `agentLoopDetailed` (typed `detailed()` result)\n\nConvenience wrapper that preserves the existing stream API and exposes the\nrollup as a typed value:\n\n```typescript\nconst { stream, detailed } = agentLoopDetailed([userMessage], context, {\n\t...config,\n\ttelemetry: {}, // required to populate telemetry/coverage\n});\n\nfor await (const event of stream) {\n\t// existing event handling\n}\n\nconst { messages, telemetry, coverage } = await detailed();\n```\n\n`stream.result()` still resolves to `AgentMessage[]` — no breaking change.\n\n### Multi-run aggregation\n\nCallers that drive the loop multiple times (verify pass, benchmark harness)\nfold N summaries with `aggregateAgentRunSummaries` / `aggregateAgentRunCoverage`:\n\n```typescript\nimport {\n\taggregateAgentRunSummaries,\n\taggregateAgentRunCoverage,\n} from \"@dude1wudv/pi-agent\";\n\nconst summaries: AgentRunSummary[] = [];\nconst coverages: AgentRunCoverage[] = [];\nfor (const target of targets) {\n\tconst { detailed } = agentLoopDetailed(/* ... */);\n\tconst result = await detailed();\n\tif (result.telemetry) summaries.push(result.telemetry);\n\tif (result.coverage) coverages.push(result.coverage);\n}\nconst runSummary = aggregateAgentRunSummaries(summaries);\nconst runCoverage = aggregateAgentRunCoverage(coverages);\n```\n\n### Tool status reporting\n\n`execute_tool` spans carry `pi.gen_ai.tool.status` ∈\n`\"ok\" | \"error\" | \"skipped\" | \"blocked\" | \"timeout\" | \"aborted\"`.\n`beforeToolCall` blocks throw a distinguishable `ToolCallBlockedError`\ninternally; the catch path reports `status: \"blocked\"` instead of conflating\nwith generic tool errors. Pre-run interrupts and tail-sweep skips are\nrecorded as `\"skipped\"` even though they never start a span.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}