{"_id":"@awesome-agent/agent-core","_rev":"22-3ebce424709df88dd85e6a3491fa76fe","name":"@awesome-agent/agent-core","dist-tags":{"latest":"0.6.0"},"versions":{"0.1.0":{"name":"@awesome-agent/agent-core","version":"0.1.0","keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"author":{"name":"Kaan Bingol","email":"kaanbingol@outlook.com"},"license":"Apache-2.0","_id":"@awesome-agent/agent-core@0.1.0","maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"homepage":"https://github.com/awesome-agent/awesome-agent-sdk#readme","bugs":{"url":"https://github.com/awesome-agent/awesome-agent-sdk/issues"},"dist":{"shasum":"9b10b0575562798d51b4bfc911539ad4773e9b64","tarball":"https://registry.npmjs.org/@awesome-agent/agent-core/-/agent-core-0.1.0.tgz","fileCount":231,"integrity":"sha512-QMdZA9t4mVuFA0iybwv9NERCxdPP7shlTC1kIHTGGhU1Rdg4UrQcGOAPblRaTLbLMPmn9ej6hCbAm4YFfLU3hQ==","signatures":[{"sig":"MEQCIAVIqilVwPmSEbHGodYUO/hvxCtweNaYkBV7TqcPJMbWAiAaa+iqPjCUJnqt+C8Yv+E0PefhiJH/nT1UbNnh53vW2g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":301393},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","import":"./dist/llm/index.js","default":"./dist/llm/index.js"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js","default":"./dist/mcp/index.js"},"./hook":{"types":"./dist/hook/index.d.ts","import":"./dist/hook/index.js","default":"./dist/hook/index.js"},"./loop":{"types":"./dist/loop/index.d.ts","import":"./dist/loop/index.js","default":"./dist/loop/index.js"},"./tool":{"types":"./dist/tool/index.d.ts","import":"./dist/tool/index.js","default":"./dist/tool/index.js"},"./agent":{"types":"./dist/agent/index.d.ts","import":"./dist/agent/index.js","default":"./dist/agent/index.js"},"./skill":{"types":"./dist/skill/index.d.ts","import":"./dist/skill/index.js","default":"./dist/skill/index.js"},"./memory":{"types":"./dist/memory/index.d.ts","import":"./dist/memory/index.js","default":"./dist/memory/index.js"},"./context":{"types":"./dist/context/index.d.ts","import":"./dist/context/index.js","default":"./dist/context/index.js"}},"gitHead":"5253cbc5cd51ec012d1382391cd112c86e19f562","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","clean":"rm -rf dist","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"kaanbingol","email":"kaanbingol@outlook.com"},"repository":{"url":"git+https://github.com/awesome-agent/awesome-agent-sdk.git","type":"git","directory":"packages/core"},"_npmVersion":"11.8.0","description":"Agentic loop core library — provider-agnostic, server-independent","directories":{},"sideEffects":false,"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.1.0_1773575537085_0.789895192380752","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@awesome-agent/agent-core","version":"0.2.0","keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"author":{"name":"Kaan Bingol","email":"kaanbingol@outlook.com"},"license":"Apache-2.0","_id":"@awesome-agent/agent-core@0.2.0","maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"homepage":"https://github.com/awesome-agent/awesome-agent-sdk#readme","bugs":{"url":"https://github.com/awesome-agent/awesome-agent-sdk/issues"},"dist":{"shasum":"3fb808c0e96a8d5f7d67b3ca3fe35a6a747a59b2","tarball":"https://registry.npmjs.org/@awesome-agent/agent-core/-/agent-core-0.2.0.tgz","fileCount":231,"integrity":"sha512-1aCRG4SLmD30+KhvaEPsj+/HueReSLC41v0ZfoQ3iaqJqNFraNSGIVuNC7MVRWrcgzsnyN1n4DlndD4d1oSXCg==","signatures":[{"sig":"MEUCIETJ4Y0OvxKg3QZP1khyROlrozO9FNjOC5tH3744Ye9LAiEAu5+65WZSNMp28gM7/ox989slQHsFruLFdQoh4msvI98=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":303344},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","import":"./dist/llm/index.js","default":"./dist/llm/index.js"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js","default":"./dist/mcp/index.js"},"./hook":{"types":"./dist/hook/index.d.ts","import":"./dist/hook/index.js","default":"./dist/hook/index.js"},"./loop":{"types":"./dist/loop/index.d.ts","import":"./dist/loop/index.js","default":"./dist/loop/index.js"},"./tool":{"types":"./dist/tool/index.d.ts","import":"./dist/tool/index.js","default":"./dist/tool/index.js"},"./agent":{"types":"./dist/agent/index.d.ts","import":"./dist/agent/index.js","default":"./dist/agent/index.js"},"./skill":{"types":"./dist/skill/index.d.ts","import":"./dist/skill/index.js","default":"./dist/skill/index.js"},"./memory":{"types":"./dist/memory/index.d.ts","import":"./dist/memory/index.js","default":"./dist/memory/index.js"},"./context":{"types":"./dist/context/index.d.ts","import":"./dist/context/index.js","default":"./dist/context/index.js"}},"gitHead":"09d682716cde5c3872b0c4c82e55df8c87f6c685","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","clean":"rm -rf dist","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"kaanbingol","email":"kaanbingol@outlook.com"},"repository":{"url":"git+https://github.com/awesome-agent/awesome-agent-sdk.git","type":"git","directory":"packages/core"},"_npmVersion":"11.8.0","description":"Agentic loop core library — provider-agnostic, server-independent","directories":{},"sideEffects":false,"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.2.0_1773730665704_0.9450482233737092","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@awesome-agent/agent-core","version":"0.2.1","keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"author":{"name":"Algomim"},"license":"MIT","_id":"@awesome-agent/agent-core@0.2.1","maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"homepage":"https://github.com/algomim/agent-core#readme","bugs":{"url":"https://github.com/algomim/agent-core/issues"},"dist":{"shasum":"9ab62ac80f0666d918694a5f8c1d321a6523cb9d","tarball":"https://registry.npmjs.org/@awesome-agent/agent-core/-/agent-core-0.2.1.tgz","fileCount":223,"integrity":"sha512-CTNUE//llr3clTaPh5y2kWNzEpPFAmye+Ej6y/pnDfHn6kSljMDw2bpX4BswjTgE4iN2cQMISOGmiNMDWVDuwg==","signatures":[{"sig":"MEUCIQCUFw1ud84DPGmybKNmemo0PEI2JPEe18yJRykDMHXKyAIgOjkarig7Mxeia7zCY92nr+4BfOOI7brSbxHbRliMPFY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":290162},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","import":"./dist/llm/index.js"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js"},"./hook":{"types":"./dist/hook/index.d.ts","import":"./dist/hook/index.js"},"./loop":{"types":"./dist/loop/index.d.ts","import":"./dist/loop/index.js"},"./tool":{"types":"./dist/tool/index.d.ts","import":"./dist/tool/index.js"},"./agent":{"types":"./dist/agent/index.d.ts","import":"./dist/agent/index.js"},"./skill":{"types":"./dist/skill/index.d.ts","import":"./dist/skill/index.js"},"./memory":{"types":"./dist/memory/index.d.ts","import":"./dist/memory/index.js"},"./context":{"types":"./dist/context/index.d.ts","import":"./dist/context/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"}},"gitHead":"cef5d77975e04cb59e4ba421f50b380502cddef0","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"kaanbingol","email":"kaanbingol@outlook.com"},"repository":{"url":"git+https://github.com/algomim/agent-core.git","type":"git"},"_npmVersion":"11.8.0","description":"Agentic loop core library — provider-agnostic, server-independent","directories":{},"sideEffects":false,"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.2.1_1774349729532_0.40193357625736414","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@awesome-agent/agent-core","version":"0.2.2","keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"author":{"name":"Algomim"},"license":"MIT","_id":"@awesome-agent/agent-core@0.2.2","maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"homepage":"https://github.com/algomim/agent-core#readme","bugs":{"url":"https://github.com/algomim/agent-core/issues"},"dist":{"shasum":"360a782917e8f994e13dd6a5b740f15833f466a5","tarball":"https://registry.npmjs.org/@awesome-agent/agent-core/-/agent-core-0.2.2.tgz","fileCount":227,"integrity":"sha512-QfXyScCGQwQuGkUP2GVCMVpQhVdeAsEijTdUXJ6PTjEBb61niRCFWZ35mHwKmm9Kgp5aksayVRZNRH0OBaLBWw==","signatures":[{"sig":"MEUCICrAy2bd5mePY2mhqXpoWdPtauuPC+gI1hoPjCNwTfepAiEA+kzo7CKLH/mgLo/zJmF/LiWwKkyIY6j0olYC6JmOOe8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":292042},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","import":"./dist/llm/index.js"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js"},"./hook":{"types":"./dist/hook/index.d.ts","import":"./dist/hook/index.js"},"./loop":{"types":"./dist/loop/index.d.ts","import":"./dist/loop/index.js"},"./tool":{"types":"./dist/tool/index.d.ts","import":"./dist/tool/index.js"},"./agent":{"types":"./dist/agent/index.d.ts","import":"./dist/agent/index.js"},"./skill":{"types":"./dist/skill/index.d.ts","import":"./dist/skill/index.js"},"./memory":{"types":"./dist/memory/index.d.ts","import":"./dist/memory/index.js"},"./context":{"types":"./dist/context/index.d.ts","import":"./dist/context/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"}},"gitHead":"56fe70160a77915f631ee4f50377ca29ee22fad0","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"kaanbingol","email":"kaanbingol@outlook.com"},"repository":{"url":"git+https://github.com/algomim/agent-core.git","type":"git"},"_npmVersion":"11.8.0","description":"Agentic loop core library — provider-agnostic, server-independent","directories":{},"sideEffects":false,"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.2.2_1774353162092_0.3623937777514772","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@awesome-agent/agent-core","version":"0.3.0","keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"author":{"name":"Algomim"},"license":"MIT","_id":"@awesome-agent/agent-core@0.3.0","maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"homepage":"https://github.com/algomim/agent-core#readme","bugs":{"url":"https://github.com/algomim/agent-core/issues"},"dist":{"shasum":"d5d4b7728c8825d1e619d958f897458988bf1f56","tarball":"https://registry.npmjs.org/@awesome-agent/agent-core/-/agent-core-0.3.0.tgz","fileCount":227,"integrity":"sha512-PL1pHvFQzt3yu5++yMP2jBk/UpSc+UVHzJvAymYRC6eavsKUE48MyBaYfzdk9MJwP4y8i3T+0LynLBEkorrBkw==","signatures":[{"sig":"MEUCIBJneBE2BmdADi+gxs8iLlyhWoVxyUGUc434VGKS3f4jAiEA3TlNjGRHadipM28K7bjatgTMz6xO/lFm5DyYOuinVtE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":289828},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","import":"./dist/llm/index.js"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js"},"./hook":{"types":"./dist/hook/index.d.ts","import":"./dist/hook/index.js"},"./loop":{"types":"./dist/loop/index.d.ts","import":"./dist/loop/index.js"},"./tool":{"types":"./dist/tool/index.d.ts","import":"./dist/tool/index.js"},"./agent":{"types":"./dist/agent/index.d.ts","import":"./dist/agent/index.js"},"./skill":{"types":"./dist/skill/index.d.ts","import":"./dist/skill/index.js"},"./memory":{"types":"./dist/memory/index.d.ts","import":"./dist/memory/index.js"},"./context":{"types":"./dist/context/index.d.ts","import":"./dist/context/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"}},"gitHead":"de83e57d84a9ba6f558a9ecd91e20bcf553ae613","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"kaanbingol","email":"kaanbingol@outlook.com"},"repository":{"url":"git+https://github.com/algomim/agent-core.git","type":"git"},"_npmVersion":"11.8.0","description":"Agentic loop core library — provider-agnostic, server-independent","directories":{},"sideEffects":false,"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.3.0_1774358527968_0.8875654462656228","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@awesome-agent/agent-core","version":"0.3.1","keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"author":{"name":"Algomim"},"license":"MIT","_id":"@awesome-agent/agent-core@0.3.1","maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"homepage":"https://github.com/algomim/agent-core#readme","bugs":{"url":"https://github.com/algomim/agent-core/issues"},"dist":{"shasum":"10dd55d07d454e596e6d4fa3ec0675165ccfb309","tarball":"https://registry.npmjs.org/@awesome-agent/agent-core/-/agent-core-0.3.1.tgz","fileCount":227,"integrity":"sha512-mzqDHEmlSD6PTfOoWRIW4EypM4xpLn3AY1CgZlIrbE5wlzDlB0wKjlGt8qMqNWt4IfHmH+xBi9GUU5gPQ58y0A==","signatures":[{"sig":"MEUCIQCEmjyQs42iAzwlyk+7RIa5ELquc6NhstHQCqXPIRxp2wIgRjeJQX/7AmR3vqPUuAYLwzEZugxdA0ZIba+uvlXNI60=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":291062},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","import":"./dist/llm/index.js"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js"},"./hook":{"types":"./dist/hook/index.d.ts","import":"./dist/hook/index.js"},"./loop":{"types":"./dist/loop/index.d.ts","import":"./dist/loop/index.js"},"./tool":{"types":"./dist/tool/index.d.ts","import":"./dist/tool/index.js"},"./agent":{"types":"./dist/agent/index.d.ts","import":"./dist/agent/index.js"},"./skill":{"types":"./dist/skill/index.d.ts","import":"./dist/skill/index.js"},"./memory":{"types":"./dist/memory/index.d.ts","import":"./dist/memory/index.js"},"./context":{"types":"./dist/context/index.d.ts","import":"./dist/context/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"}},"gitHead":"7880002823bdc5ee596a9c5cc1d09aa53c7afea2","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"kaanbingol","email":"kaanbingol@outlook.com"},"repository":{"url":"git+https://github.com/algomim/agent-core.git","type":"git"},"_npmVersion":"11.8.0","description":"Agentic loop core library — provider-agnostic, server-independent","directories":{},"sideEffects":false,"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.3.1_1774358941309_0.7672476144519347","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@awesome-agent/agent-core","version":"0.3.2","keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"author":{"name":"Algomim"},"license":"MIT","_id":"@awesome-agent/agent-core@0.3.2","maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"homepage":"https://github.com/algomim/agent-core#readme","bugs":{"url":"https://github.com/algomim/agent-core/issues"},"dist":{"shasum":"379d4861d9ecabbb4505150c9a79155dfef5e810","tarball":"https://registry.npmjs.org/@awesome-agent/agent-core/-/agent-core-0.3.2.tgz","fileCount":227,"integrity":"sha512-PTXQsXVpVVXIqrzAoRxiS9OYY5KGlHVR/7n/SSqOgehFeBTRdXC9Uv05qWOM5RDXpuOssmu14J5g8DXT/DmjBA==","signatures":[{"sig":"MEQCIFxpWiFFl+DdS0ZTvEinmXLDTEvX7nZ0g3NkShUs6sihAiBqnSYhYUrjarn64+3oWja8b52UtA+Ugozm4OQDtm/eBA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":291663},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","import":"./dist/llm/index.js"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js"},"./hook":{"types":"./dist/hook/index.d.ts","import":"./dist/hook/index.js"},"./loop":{"types":"./dist/loop/index.d.ts","import":"./dist/loop/index.js"},"./tool":{"types":"./dist/tool/index.d.ts","import":"./dist/tool/index.js"},"./agent":{"types":"./dist/agent/index.d.ts","import":"./dist/agent/index.js"},"./skill":{"types":"./dist/skill/index.d.ts","import":"./dist/skill/index.js"},"./memory":{"types":"./dist/memory/index.d.ts","import":"./dist/memory/index.js"},"./context":{"types":"./dist/context/index.d.ts","import":"./dist/context/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"}},"gitHead":"ffa863a761584982a15ae0545ca8d90319c73718","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"kaanbingol","email":"kaanbingol@outlook.com"},"repository":{"url":"git+https://github.com/algomim/agent-core.git","type":"git"},"_npmVersion":"11.8.0","description":"Agentic loop core library — provider-agnostic, server-independent","directories":{},"sideEffects":false,"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.3.2_1774359937327_0.7517394830647439","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@awesome-agent/agent-core","version":"0.3.3","keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"author":{"name":"Algomim"},"license":"MIT","_id":"@awesome-agent/agent-core@0.3.3","maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"homepage":"https://github.com/algomim/agent-core#readme","bugs":{"url":"https://github.com/algomim/agent-core/issues"},"dist":{"shasum":"9642d3f9df3f3e10108e2110f9171f1b6337822e","tarball":"https://registry.npmjs.org/@awesome-agent/agent-core/-/agent-core-0.3.3.tgz","fileCount":227,"integrity":"sha512-Kq0/wlM69dYsWJu/HgCFyjLkGtefnn62X3IxYIuCB2kFznkAHAz384uaGO0pjp2V1rMsKNj6EuIAwfFxS10y+w==","signatures":[{"sig":"MEQCIA5GNEK4X1FuFNl1OM/cbivch6YwnRjOtVmo7BNVihdKAiB4Z7kjWOq12d1pfKmcrb0ODa86Yta9WVK6fk0QG6hTjA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":291589},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","import":"./dist/llm/index.js"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js"},"./hook":{"types":"./dist/hook/index.d.ts","import":"./dist/hook/index.js"},"./loop":{"types":"./dist/loop/index.d.ts","import":"./dist/loop/index.js"},"./tool":{"types":"./dist/tool/index.d.ts","import":"./dist/tool/index.js"},"./agent":{"types":"./dist/agent/index.d.ts","import":"./dist/agent/index.js"},"./skill":{"types":"./dist/skill/index.d.ts","import":"./dist/skill/index.js"},"./memory":{"types":"./dist/memory/index.d.ts","import":"./dist/memory/index.js"},"./context":{"types":"./dist/context/index.d.ts","import":"./dist/context/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"}},"gitHead":"4d8c4e0072343c5af624366154d4266df2b784f2","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"kaanbingol","email":"kaanbingol@outlook.com"},"repository":{"url":"git+https://github.com/algomim/agent-core.git","type":"git"},"_npmVersion":"11.8.0","description":"Agentic loop core library — provider-agnostic, server-independent","directories":{},"sideEffects":false,"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.3.3_1774360259084_0.2308969521264248","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@awesome-agent/agent-core","version":"0.3.4","keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"author":{"name":"Algomim"},"license":"MIT","_id":"@awesome-agent/agent-core@0.3.4","maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"homepage":"https://github.com/algomim/agent-core#readme","bugs":{"url":"https://github.com/algomim/agent-core/issues"},"dist":{"shasum":"adb2a93cb05558b499212e80ba3f6ae25391c11d","tarball":"https://registry.npmjs.org/@awesome-agent/agent-core/-/agent-core-0.3.4.tgz","fileCount":227,"integrity":"sha512-acXPTjlc1YEs+062NO9RqkzCY6GmzArjRRT4/X4lkpXTHrtn02x2zOETpzbpr5yIExS/rFoZUL691f0RV6F9Cg==","signatures":[{"sig":"MEQCIB9zmrxkSoSINsKvF7+BK9b2+OFGoW8/HCHeyqylsLYpAiALD36PdSajavQTjnBy+qQdSRDjrgrkHthsmKoxcMHMrw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":291817},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","import":"./dist/llm/index.js"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js"},"./hook":{"types":"./dist/hook/index.d.ts","import":"./dist/hook/index.js"},"./loop":{"types":"./dist/loop/index.d.ts","import":"./dist/loop/index.js"},"./tool":{"types":"./dist/tool/index.d.ts","import":"./dist/tool/index.js"},"./agent":{"types":"./dist/agent/index.d.ts","import":"./dist/agent/index.js"},"./skill":{"types":"./dist/skill/index.d.ts","import":"./dist/skill/index.js"},"./memory":{"types":"./dist/memory/index.d.ts","import":"./dist/memory/index.js"},"./context":{"types":"./dist/context/index.d.ts","import":"./dist/context/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"}},"gitHead":"8c5087939516586a86162c27df9cc63afc907426","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"kaanbingol","email":"kaanbingol@outlook.com"},"repository":{"url":"git+https://github.com/algomim/agent-core.git","type":"git"},"_npmVersion":"11.8.0","description":"Agentic loop core library — provider-agnostic, server-independent","directories":{},"sideEffects":false,"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.3.4_1774361542852_0.20083835083146506","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@awesome-agent/agent-core","version":"0.3.5","keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"author":{"name":"Algomim"},"license":"MIT","_id":"@awesome-agent/agent-core@0.3.5","maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"homepage":"https://github.com/algomim/agent-core#readme","bugs":{"url":"https://github.com/algomim/agent-core/issues"},"dist":{"shasum":"90044bae96c5be506bcb972f38ad66bca1ef3cc6","tarball":"https://registry.npmjs.org/@awesome-agent/agent-core/-/agent-core-0.3.5.tgz","fileCount":227,"integrity":"sha512-l3mCWyhn7PFcYGPEpq48O+gI6WUCNexVkbO/MOHRTRCpZUvRfpqYljgjDrTmw2JbwXBHGt83pcy+uy4KCzmROw==","signatures":[{"sig":"MEUCIGpaxltW3yFJ6PQB61wvs+aEgmnCAJSnld2fnJ3Mm9n2AiEAxlPQL3779S/+h/CrcF6F+W5k9afPJkfuGMifX8SrF/c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":292011},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","import":"./dist/llm/index.js"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js"},"./hook":{"types":"./dist/hook/index.d.ts","import":"./dist/hook/index.js"},"./loop":{"types":"./dist/loop/index.d.ts","import":"./dist/loop/index.js"},"./tool":{"types":"./dist/tool/index.d.ts","import":"./dist/tool/index.js"},"./agent":{"types":"./dist/agent/index.d.ts","import":"./dist/agent/index.js"},"./skill":{"types":"./dist/skill/index.d.ts","import":"./dist/skill/index.js"},"./memory":{"types":"./dist/memory/index.d.ts","import":"./dist/memory/index.js"},"./context":{"types":"./dist/context/index.d.ts","import":"./dist/context/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"}},"gitHead":"8c5087939516586a86162c27df9cc63afc907426","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"kaanbingol","email":"kaanbingol@outlook.com"},"repository":{"url":"git+https://github.com/algomim/agent-core.git","type":"git"},"_npmVersion":"11.8.0","description":"Agentic loop core library — provider-agnostic, server-independent","directories":{},"sideEffects":false,"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.3.5_1774382487892_0.04086340669298871","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"@awesome-agent/agent-core","version":"0.3.6","keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"author":{"name":"Algomim"},"license":"MIT","_id":"@awesome-agent/agent-core@0.3.6","maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"homepage":"https://github.com/algomim/agent-core#readme","bugs":{"url":"https://github.com/algomim/agent-core/issues"},"dist":{"shasum":"06e318d260a689db8273e4564650fd9617c70c4e","tarball":"https://registry.npmjs.org/@awesome-agent/agent-core/-/agent-core-0.3.6.tgz","fileCount":227,"integrity":"sha512-cV1ThGwFRmtVHIftDxEjROi847c8HMwMwzVplxWXU8RrpKVKyusP/rxtSJCSE65lGNGfnHxXkmxABf49uss8pQ==","signatures":[{"sig":"MEYCIQDzWRzGZKFFqlfSevZIrXNKCLkBCNahgQCmBWfXEr/R9gIhANVa9qWR+WJ4S4A+SAuqqbeN3hhOXAEzo0UXCwyW7vaj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":292069},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","import":"./dist/llm/index.js"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js"},"./hook":{"types":"./dist/hook/index.d.ts","import":"./dist/hook/index.js"},"./loop":{"types":"./dist/loop/index.d.ts","import":"./dist/loop/index.js"},"./tool":{"types":"./dist/tool/index.d.ts","import":"./dist/tool/index.js"},"./agent":{"types":"./dist/agent/index.d.ts","import":"./dist/agent/index.js"},"./skill":{"types":"./dist/skill/index.d.ts","import":"./dist/skill/index.js"},"./memory":{"types":"./dist/memory/index.d.ts","import":"./dist/memory/index.js"},"./context":{"types":"./dist/context/index.d.ts","import":"./dist/context/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"}},"gitHead":"8c5087939516586a86162c27df9cc63afc907426","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"kaanbingol","email":"kaanbingol@outlook.com"},"repository":{"url":"git+https://github.com/algomim/agent-core.git","type":"git"},"_npmVersion":"11.8.0","description":"Agentic loop core library — provider-agnostic, server-independent","directories":{},"sideEffects":false,"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.3.6_1774383015307_0.42400969349298334","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"@awesome-agent/agent-core","version":"0.3.7","keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"author":{"name":"Algomim"},"license":"MIT","_id":"@awesome-agent/agent-core@0.3.7","maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"homepage":"https://github.com/algomim/agent-core#readme","bugs":{"url":"https://github.com/algomim/agent-core/issues"},"dist":{"shasum":"db36e6157013cb0b26b747d0b312dc712f61625e","tarball":"https://registry.npmjs.org/@awesome-agent/agent-core/-/agent-core-0.3.7.tgz","fileCount":227,"integrity":"sha512-CSqVIQ6+z22kcB2OEbaEFO8iHFUHSnLgjW1KNLjf+L48l0ZgEWwfmmYr75R+owdsVULWsm7Ai0HBVP8sNLRxuw==","signatures":[{"sig":"MEYCIQDBjvhVPxnN9MZbJwwoFihsbzL5ot0t2Td+I1YBeIn/dwIhAMJf4//X1LMpTryjuADv7wftBhAigSIGqOZWSLO18oAT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":293228},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","import":"./dist/llm/index.js"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js"},"./hook":{"types":"./dist/hook/index.d.ts","import":"./dist/hook/index.js"},"./loop":{"types":"./dist/loop/index.d.ts","import":"./dist/loop/index.js"},"./tool":{"types":"./dist/tool/index.d.ts","import":"./dist/tool/index.js"},"./agent":{"types":"./dist/agent/index.d.ts","import":"./dist/agent/index.js"},"./skill":{"types":"./dist/skill/index.d.ts","import":"./dist/skill/index.js"},"./memory":{"types":"./dist/memory/index.d.ts","import":"./dist/memory/index.js"},"./context":{"types":"./dist/context/index.d.ts","import":"./dist/context/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"}},"gitHead":"fc872f2d77dc76074b8b85a42b50c362cc923767","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"kaanbingol","email":"kaanbingol@outlook.com"},"repository":{"url":"git+https://github.com/algomim/agent-core.git","type":"git"},"_npmVersion":"11.8.0","description":"Agentic loop core library — provider-agnostic, server-independent","directories":{},"sideEffects":false,"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.3.7_1774423623133_0.2534581573832453","host":"s3://npm-registry-packages-npm-production"}},"0.3.8":{"name":"@awesome-agent/agent-core","version":"0.3.8","keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"author":{"name":"Algomim"},"license":"MIT","_id":"@awesome-agent/agent-core@0.3.8","maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"homepage":"https://github.com/algomim/agent-core#readme","bugs":{"url":"https://github.com/algomim/agent-core/issues"},"dist":{"shasum":"c9ac4b32b20d1090a462ab15a3fae5365737e33a","tarball":"https://registry.npmjs.org/@awesome-agent/agent-core/-/agent-core-0.3.8.tgz","fileCount":227,"integrity":"sha512-KXtOi6Vp9pASLS+QZuVQ80rGb2+y5MY/SP7B39eVp3zAto10lTyAVC6zRknUjAuLiQjH/ViON6VsN6o/s0cxTg==","signatures":[{"sig":"MEUCIQCKUCZkRsRlCrumzPJq7fCaECMbgI22Ye+4y2RIIEko2QIgNzOUmEgTLjpDHlDGV9BS0HV2e0tmX5FnDSV4v5DSRNk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":293305},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","import":"./dist/llm/index.js"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js"},"./hook":{"types":"./dist/hook/index.d.ts","import":"./dist/hook/index.js"},"./loop":{"types":"./dist/loop/index.d.ts","import":"./dist/loop/index.js"},"./tool":{"types":"./dist/tool/index.d.ts","import":"./dist/tool/index.js"},"./agent":{"types":"./dist/agent/index.d.ts","import":"./dist/agent/index.js"},"./skill":{"types":"./dist/skill/index.d.ts","import":"./dist/skill/index.js"},"./memory":{"types":"./dist/memory/index.d.ts","import":"./dist/memory/index.js"},"./context":{"types":"./dist/context/index.d.ts","import":"./dist/context/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"}},"gitHead":"135d99c4c99b922fae99210591117f5760322be4","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"kaanbingol","email":"kaanbingol@outlook.com"},"repository":{"url":"git+https://github.com/algomim/agent-core.git","type":"git"},"_npmVersion":"11.8.0","description":"Agentic loop core library — provider-agnostic, server-independent","directories":{},"sideEffects":false,"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.3.8_1774424601112_0.5920107455554773","host":"s3://npm-registry-packages-npm-production"}},"0.3.9":{"name":"@awesome-agent/agent-core","version":"0.3.9","keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"author":{"name":"Algomim"},"license":"MIT","_id":"@awesome-agent/agent-core@0.3.9","maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"homepage":"https://github.com/algomim/agent-core#readme","bugs":{"url":"https://github.com/algomim/agent-core/issues"},"dist":{"shasum":"7540e75e51d1397ec73bcfdf6b79532c789a0e1f","tarball":"https://registry.npmjs.org/@awesome-agent/agent-core/-/agent-core-0.3.9.tgz","fileCount":227,"integrity":"sha512-5PiP9imFNbQChVmOa9XQVWSASmYDf1duddVgJ5+iFcpcEPqERs6Wke8k4B/Myx9Uu1HlvtlpU1VNKoF6Vt2+4w==","signatures":[{"sig":"MEUCIBeGXfwsDmUCFOeTo1MOEkbqyBJ9qCyzBYlOh7of1PH5AiEAiMa14vR8SjG1WWgofTw6+Elf/hKhJ3b9Q/fkXtlM56M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":294928},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","import":"./dist/llm/index.js"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js"},"./hook":{"types":"./dist/hook/index.d.ts","import":"./dist/hook/index.js"},"./loop":{"types":"./dist/loop/index.d.ts","import":"./dist/loop/index.js"},"./tool":{"types":"./dist/tool/index.d.ts","import":"./dist/tool/index.js"},"./agent":{"types":"./dist/agent/index.d.ts","import":"./dist/agent/index.js"},"./skill":{"types":"./dist/skill/index.d.ts","import":"./dist/skill/index.js"},"./memory":{"types":"./dist/memory/index.d.ts","import":"./dist/memory/index.js"},"./context":{"types":"./dist/context/index.d.ts","import":"./dist/context/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"}},"gitHead":"b7246f2bc12bd5f00640037cc07e7628dd2a8e08","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"kaanbingol","email":"kaanbingol@outlook.com"},"repository":{"url":"git+https://github.com/algomim/agent-core.git","type":"git"},"_npmVersion":"11.8.0","description":"Agentic loop core library — provider-agnostic, server-independent","directories":{},"sideEffects":false,"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.3.9_1774468178723_0.47396304614042073","host":"s3://npm-registry-packages-npm-production"}},"0.3.10":{"name":"@awesome-agent/agent-core","version":"0.3.10","keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"author":{"name":"Kaan Bingol","email":"kaanbingol@outlook.com"},"license":"Apache-2.0","_id":"@awesome-agent/agent-core@0.3.10","maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"homepage":"https://github.com/awesome-agent/awesome-agent-sdk#readme","bugs":{"url":"https://github.com/awesome-agent/awesome-agent-sdk/issues"},"dist":{"shasum":"82cb0b0a13c7518ccff1aa6fd682e1227198f196","tarball":"https://registry.npmjs.org/@awesome-agent/agent-core/-/agent-core-0.3.10.tgz","fileCount":251,"integrity":"sha512-95v9cePNt3Snh68j3qdzCSoPDC5z27MXIZ5Z+us2bsWmk1HdkCQMJPV/6FSXX99OYAEbLUx/f12T3wjNt75Sfg==","signatures":[{"sig":"MEQCIC1KGCKgY5CH56dsqweKeFu3Rt9uV78QZexXd3VYVYZNAiB1ck+YUpKPROhw0Yf+iNRzpTyx3KJj8mkPAKWiz9TXXQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":326801},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","import":"./dist/llm/index.js","default":"./dist/llm/index.js"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js","default":"./dist/mcp/index.js"},"./hook":{"types":"./dist/hook/index.d.ts","import":"./dist/hook/index.js","default":"./dist/hook/index.js"},"./loop":{"types":"./dist/loop/index.d.ts","import":"./dist/loop/index.js","default":"./dist/loop/index.js"},"./tool":{"types":"./dist/tool/index.d.ts","import":"./dist/tool/index.js","default":"./dist/tool/index.js"},"./agent":{"types":"./dist/agent/index.d.ts","import":"./dist/agent/index.js","default":"./dist/agent/index.js"},"./skill":{"types":"./dist/skill/index.d.ts","import":"./dist/skill/index.js","default":"./dist/skill/index.js"},"./memory":{"types":"./dist/memory/index.d.ts","import":"./dist/memory/index.js","default":"./dist/memory/index.js"},"./context":{"types":"./dist/context/index.d.ts","import":"./dist/context/index.js","default":"./dist/context/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js","default":"./dist/storage/index.js"}},"gitHead":"cee484f5eedf1c6b4eabdfb872fa74333977e8b8","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","clean":"rm -rf dist","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"kaanbingol","email":"kaanbingol@outlook.com"},"repository":{"url":"git+https://github.com/awesome-agent/awesome-agent-sdk.git","type":"git","directory":"packages/core"},"_npmVersion":"11.8.0","description":"Agentic loop core library — provider-agnostic, server-independent","directories":{},"sideEffects":false,"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.3.10_1774595941901_0.11403648442266756","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@awesome-agent/agent-core","version":"0.4.0","keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"author":{"name":"Kaan Bingol","email":"kaanbingol@outlook.com"},"license":"Apache-2.0","_id":"@awesome-agent/agent-core@0.4.0","maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"homepage":"https://github.com/awesome-agent/awesome-agent-sdk#readme","bugs":{"url":"https://github.com/awesome-agent/awesome-agent-sdk/issues"},"dist":{"shasum":"53bb6980261c7aa608e376450d035bca654af833","tarball":"https://registry.npmjs.org/@awesome-agent/agent-core/-/agent-core-0.4.0.tgz","fileCount":251,"integrity":"sha512-q7fAl7fJ+d1YbegYC3R/ajuJyIr0ReSIkIJ2JTirUsngOKdzrl9v80250EpjHXkvT+r7M5olViOo/O1uSCkakw==","signatures":[{"sig":"MEUCIQDLq21p3/ftdaMQ9cRVF5AQ+/GErweOiO9M/NXb12OQ3wIgSWVD1fg12tYIh7kX25JqBFu6RXFfkSC6yDiU/WPMIWw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":326992},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","import":"./dist/llm/index.js","default":"./dist/llm/index.js"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js","default":"./dist/mcp/index.js"},"./hook":{"types":"./dist/hook/index.d.ts","import":"./dist/hook/index.js","default":"./dist/hook/index.js"},"./loop":{"types":"./dist/loop/index.d.ts","import":"./dist/loop/index.js","default":"./dist/loop/index.js"},"./tool":{"types":"./dist/tool/index.d.ts","import":"./dist/tool/index.js","default":"./dist/tool/index.js"},"./agent":{"types":"./dist/agent/index.d.ts","import":"./dist/agent/index.js","default":"./dist/agent/index.js"},"./skill":{"types":"./dist/skill/index.d.ts","import":"./dist/skill/index.js","default":"./dist/skill/index.js"},"./memory":{"types":"./dist/memory/index.d.ts","import":"./dist/memory/index.js","default":"./dist/memory/index.js"},"./context":{"types":"./dist/context/index.d.ts","import":"./dist/context/index.js","default":"./dist/context/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js","default":"./dist/storage/index.js"}},"gitHead":"d17872814277e238a7d4bb3b94f99e34b9b19a46","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","clean":"rm -rf dist","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"kaanbingol","email":"kaanbingol@outlook.com"},"repository":{"url":"git+https://github.com/awesome-agent/awesome-agent-sdk.git","type":"git","directory":"packages/core"},"_npmVersion":"11.8.0","description":"Agentic loop core library — provider-agnostic, server-independent","directories":{},"sideEffects":false,"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.4.0_1774599520131_0.5108231546995203","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@awesome-agent/agent-core","version":"0.4.1","keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"author":{"name":"Kaan Bingol","email":"kaanbingol@outlook.com"},"license":"Apache-2.0","_id":"@awesome-agent/agent-core@0.4.1","maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"homepage":"https://github.com/awesome-agent/awesome-agent-sdk#readme","bugs":{"url":"https://github.com/awesome-agent/awesome-agent-sdk/issues"},"dist":{"shasum":"499004be478b360b18010601fddacd7607e1e6e6","tarball":"https://registry.npmjs.org/@awesome-agent/agent-core/-/agent-core-0.4.1.tgz","fileCount":251,"integrity":"sha512-+vinDf1kH095HgFQaYmHhRI1xj5Y6Ymqh5KKOMEEXecLaOjXY6FyIeaF9CfKP6qPvrrskQ/2VCyshpGdAbyuTA==","signatures":[{"sig":"MEYCIQCjSUIrELWSq9LmYDQBhaKSaR/CqqMfgNtnYj5jl7W3ygIhAIR/e+TmCrJ/8nPi4isXSfapd46pcjNd9Xe26syNS9vQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":327628},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","import":"./dist/llm/index.js","default":"./dist/llm/index.js"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js","default":"./dist/mcp/index.js"},"./hook":{"types":"./dist/hook/index.d.ts","import":"./dist/hook/index.js","default":"./dist/hook/index.js"},"./loop":{"types":"./dist/loop/index.d.ts","import":"./dist/loop/index.js","default":"./dist/loop/index.js"},"./tool":{"types":"./dist/tool/index.d.ts","import":"./dist/tool/index.js","default":"./dist/tool/index.js"},"./agent":{"types":"./dist/agent/index.d.ts","import":"./dist/agent/index.js","default":"./dist/agent/index.js"},"./skill":{"types":"./dist/skill/index.d.ts","import":"./dist/skill/index.js","default":"./dist/skill/index.js"},"./memory":{"types":"./dist/memory/index.d.ts","import":"./dist/memory/index.js","default":"./dist/memory/index.js"},"./context":{"types":"./dist/context/index.d.ts","import":"./dist/context/index.js","default":"./dist/context/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js","default":"./dist/storage/index.js"}},"gitHead":"c4c8d2c750be7273b1d98cbbbd430a50580db0ec","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","clean":"rm -rf dist","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"kaanbingol","email":"kaanbingol@outlook.com"},"repository":{"url":"git+https://github.com/awesome-agent/awesome-agent-sdk.git","type":"git","directory":"packages/core"},"_npmVersion":"11.8.0","description":"Agentic loop core library — provider-agnostic, server-independent","directories":{},"sideEffects":false,"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.4.1_1774684130653_0.36056506082033635","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@awesome-agent/agent-core","version":"0.5.0","keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"author":{"name":"Kaan Bingol","email":"kaanbingol@outlook.com"},"license":"Apache-2.0","_id":"@awesome-agent/agent-core@0.5.0","maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"homepage":"https://github.com/awesome-agent/awesome-agent-sdk#readme","bugs":{"url":"https://github.com/awesome-agent/awesome-agent-sdk/issues"},"dist":{"shasum":"e8349918e8009f4b800e5ecf99ed950abb169654","tarball":"https://registry.npmjs.org/@awesome-agent/agent-core/-/agent-core-0.5.0.tgz","fileCount":251,"integrity":"sha512-xgt9/YPOePAktZQ1TmcXYGhvNItGsJrRNcKkCC4uXzLFg2Db404sEWqU8j0vp019a/HxNG9PEOQCMxH4CJOPIg==","signatures":[{"sig":"MEQCIBIf8zxbLbBzHPaUcXfPIGH8YS+o6gEqeQdwHfjyBcrFAiB5coYoElWmMugkOBoIO40hmBAhbyJgf9JCGpl4ASZo3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":329209},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","import":"./dist/llm/index.js","default":"./dist/llm/index.js"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js","default":"./dist/mcp/index.js"},"./hook":{"types":"./dist/hook/index.d.ts","import":"./dist/hook/index.js","default":"./dist/hook/index.js"},"./loop":{"types":"./dist/loop/index.d.ts","import":"./dist/loop/index.js","default":"./dist/loop/index.js"},"./tool":{"types":"./dist/tool/index.d.ts","import":"./dist/tool/index.js","default":"./dist/tool/index.js"},"./agent":{"types":"./dist/agent/index.d.ts","import":"./dist/agent/index.js","default":"./dist/agent/index.js"},"./skill":{"types":"./dist/skill/index.d.ts","import":"./dist/skill/index.js","default":"./dist/skill/index.js"},"./memory":{"types":"./dist/memory/index.d.ts","import":"./dist/memory/index.js","default":"./dist/memory/index.js"},"./context":{"types":"./dist/context/index.d.ts","import":"./dist/context/index.js","default":"./dist/context/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js","default":"./dist/storage/index.js"}},"gitHead":"60c15512c681251ac6d631e277e01123efd56220","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","clean":"rm -rf dist","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"kaanbingol","email":"kaanbingol@outlook.com"},"repository":{"url":"git+https://github.com/awesome-agent/awesome-agent-sdk.git","type":"git","directory":"packages/core"},"_npmVersion":"11.8.0","description":"Agentic loop core library — provider-agnostic, server-independent","directories":{},"sideEffects":false,"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.5.0_1774687564385_0.01726029639160287","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@awesome-agent/agent-core","version":"0.5.1","keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"author":{"name":"Kaan Bingol","email":"kaanbingol@outlook.com"},"license":"Apache-2.0","_id":"@awesome-agent/agent-core@0.5.1","maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"homepage":"https://github.com/awesome-agent/awesome-agent-sdk#readme","bugs":{"url":"https://github.com/awesome-agent/awesome-agent-sdk/issues"},"dist":{"shasum":"c473efd614d0146c048daebb087419c6a7a29c43","tarball":"https://registry.npmjs.org/@awesome-agent/agent-core/-/agent-core-0.5.1.tgz","fileCount":251,"integrity":"sha512-GXnm4OYMvp2eHqBVqXYuBU1cMXF0QcAWM3OdoL3o89R7B1SKk/wQF5zUcAiYQ8aKm5pNrkkQdC+/fBhgrztzAg==","signatures":[{"sig":"MEYCIQDGd79+hGtb6SpfLZe8xGs7icmiSlu+Kd72N0enB4QXMgIhAO/AhNtRkInPpvZ2O3iPTDTdD8WZybzMEeZddEgeDUia","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":329315},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","import":"./dist/llm/index.js","default":"./dist/llm/index.js"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js","default":"./dist/mcp/index.js"},"./hook":{"types":"./dist/hook/index.d.ts","import":"./dist/hook/index.js","default":"./dist/hook/index.js"},"./loop":{"types":"./dist/loop/index.d.ts","import":"./dist/loop/index.js","default":"./dist/loop/index.js"},"./tool":{"types":"./dist/tool/index.d.ts","import":"./dist/tool/index.js","default":"./dist/tool/index.js"},"./agent":{"types":"./dist/agent/index.d.ts","import":"./dist/agent/index.js","default":"./dist/agent/index.js"},"./skill":{"types":"./dist/skill/index.d.ts","import":"./dist/skill/index.js","default":"./dist/skill/index.js"},"./memory":{"types":"./dist/memory/index.d.ts","import":"./dist/memory/index.js","default":"./dist/memory/index.js"},"./context":{"types":"./dist/context/index.d.ts","import":"./dist/context/index.js","default":"./dist/context/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js","default":"./dist/storage/index.js"}},"gitHead":"02e5667b0e3430bd1eb6f3b6b1accc08b7a198d7","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","clean":"rm -rf dist","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"kaanbingol","email":"kaanbingol@outlook.com"},"repository":{"url":"git+https://github.com/awesome-agent/awesome-agent-sdk.git","type":"git","directory":"packages/core"},"_npmVersion":"11.8.0","description":"Agentic loop core library — provider-agnostic, server-independent","directories":{},"sideEffects":false,"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.5.1_1774732861089_0.1682780224292022","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@awesome-agent/agent-core","version":"0.5.2","keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"author":{"name":"Kaan Bingol","email":"kaanbingol@outlook.com"},"license":"Apache-2.0","_id":"@awesome-agent/agent-core@0.5.2","maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"homepage":"https://github.com/awesome-agent/awesome-agent-sdk#readme","bugs":{"url":"https://github.com/awesome-agent/awesome-agent-sdk/issues"},"dist":{"shasum":"edd890c72ff0bf6a7828b6727d8d73cc05c6156d","tarball":"https://registry.npmjs.org/@awesome-agent/agent-core/-/agent-core-0.5.2.tgz","fileCount":251,"integrity":"sha512-0juOjHxbilaCoX5RFk2/OYq0pXXRiZq+FhKsoBhvmhvzc28xAoGqH9kwC/rcePL6+TMlpoLcX+hB473yIvFgJw==","signatures":[{"sig":"MEQCIHvI7+F0gjzIF4uEZfJmJRxprXDwxabCGf1g61J1nP9cAiB1M9CKDl2Fzl/GwfkPV7/fyBQP5khe3Em0EiE4p+zqoA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":329974},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","import":"./dist/llm/index.js","default":"./dist/llm/index.js"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js","default":"./dist/mcp/index.js"},"./hook":{"types":"./dist/hook/index.d.ts","import":"./dist/hook/index.js","default":"./dist/hook/index.js"},"./loop":{"types":"./dist/loop/index.d.ts","import":"./dist/loop/index.js","default":"./dist/loop/index.js"},"./tool":{"types":"./dist/tool/index.d.ts","import":"./dist/tool/index.js","default":"./dist/tool/index.js"},"./agent":{"types":"./dist/agent/index.d.ts","import":"./dist/agent/index.js","default":"./dist/agent/index.js"},"./skill":{"types":"./dist/skill/index.d.ts","import":"./dist/skill/index.js","default":"./dist/skill/index.js"},"./memory":{"types":"./dist/memory/index.d.ts","import":"./dist/memory/index.js","default":"./dist/memory/index.js"},"./context":{"types":"./dist/context/index.d.ts","import":"./dist/context/index.js","default":"./dist/context/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js","default":"./dist/storage/index.js"}},"gitHead":"259452c40af7aa97e706b0da9a565aaac74db82a","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","clean":"rm -rf dist","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"kaanbingol","email":"kaanbingol@outlook.com"},"repository":{"url":"git+https://github.com/awesome-agent/awesome-agent-sdk.git","type":"git","directory":"packages/core"},"_npmVersion":"11.8.0","description":"Agentic loop core library — provider-agnostic, server-independent","directories":{},"sideEffects":false,"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.5.2_1774938480067_0.33031194248108986","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"@awesome-agent/agent-core","version":"0.5.3","keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"author":{"name":"Kaan Bingol","email":"kaanbingol@outlook.com"},"license":"Apache-2.0","_id":"@awesome-agent/agent-core@0.5.3","maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"homepage":"https://github.com/awesome-agent/awesome-agent-sdk#readme","bugs":{"url":"https://github.com/awesome-agent/awesome-agent-sdk/issues"},"dist":{"shasum":"d11b6cd1e039956f7467e0f2024fcf13201d3e7b","tarball":"https://registry.npmjs.org/@awesome-agent/agent-core/-/agent-core-0.5.3.tgz","fileCount":251,"integrity":"sha512-ryVRYjFe3fW0O7iKXmgTegLlGGHbHSycVUaZNes2xu0mmuA8uoEBcF+j6YtiheCsJ0iQTvyJzyOHQlTOYiuVgQ==","signatures":[{"sig":"MEUCIFN8qYx5uf8tFqwWtDlIOi5aFf0Cui07kHDK6nwgdYdwAiEAxsShUHgeuiJj3yfbAAa4exULZOB7KJPdWZ5UHlkOCbs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":329828},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","import":"./dist/llm/index.js","default":"./dist/llm/index.js"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js","default":"./dist/mcp/index.js"},"./hook":{"types":"./dist/hook/index.d.ts","import":"./dist/hook/index.js","default":"./dist/hook/index.js"},"./loop":{"types":"./dist/loop/index.d.ts","import":"./dist/loop/index.js","default":"./dist/loop/index.js"},"./tool":{"types":"./dist/tool/index.d.ts","import":"./dist/tool/index.js","default":"./dist/tool/index.js"},"./agent":{"types":"./dist/agent/index.d.ts","import":"./dist/agent/index.js","default":"./dist/agent/index.js"},"./skill":{"types":"./dist/skill/index.d.ts","import":"./dist/skill/index.js","default":"./dist/skill/index.js"},"./memory":{"types":"./dist/memory/index.d.ts","import":"./dist/memory/index.js","default":"./dist/memory/index.js"},"./context":{"types":"./dist/context/index.d.ts","import":"./dist/context/index.js","default":"./dist/context/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js","default":"./dist/storage/index.js"}},"gitHead":"259452c40af7aa97e706b0da9a565aaac74db82a","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","clean":"rm -rf dist","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"kaanbingol","email":"kaanbingol@outlook.com"},"repository":{"url":"git+https://github.com/awesome-agent/awesome-agent-sdk.git","type":"git","directory":"packages/core"},"_npmVersion":"11.8.0","description":"Agentic loop core library — provider-agnostic, server-independent","directories":{},"sideEffects":false,"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.5.3_1774938724239_0.40558570625426493","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@awesome-agent/agent-core","version":"0.6.0","description":"Agentic loop core library — provider-agnostic, server-independent","type":"module","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","import":"./dist/llm/index.js","default":"./dist/llm/index.js"},"./tool":{"types":"./dist/tool/index.d.ts","import":"./dist/tool/index.js","default":"./dist/tool/index.js"},"./hook":{"types":"./dist/hook/index.d.ts","import":"./dist/hook/index.js","default":"./dist/hook/index.js"},"./context":{"types":"./dist/context/index.d.ts","import":"./dist/context/index.js","default":"./dist/context/index.js"},"./skill":{"types":"./dist/skill/index.d.ts","import":"./dist/skill/index.js","default":"./dist/skill/index.js"},"./agent":{"types":"./dist/agent/index.d.ts","import":"./dist/agent/index.js","default":"./dist/agent/index.js"},"./memory":{"types":"./dist/memory/index.d.ts","import":"./dist/memory/index.js","default":"./dist/memory/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js","default":"./dist/storage/index.js"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js","default":"./dist/mcp/index.js"},"./loop":{"types":"./dist/loop/index.d.ts","import":"./dist/loop/index.js","default":"./dist/loop/index.js"}},"scripts":{"build":"tsc","dev":"tsc --watch","test":"vitest run","test:watch":"vitest","clean":"rm -rf dist","prepublishOnly":"npm run build"},"keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"author":{"name":"Kaan Bingol","email":"kaanbingol@outlook.com"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/awesome-agent/awesome-agent-sdk.git","directory":"packages/core"},"homepage":"https://github.com/awesome-agent/awesome-agent-sdk#readme","engines":{"node":">=18.0.0"},"sideEffects":false,"devDependencies":{"typescript":"^5.9.3","vitest":"^4.1.0"},"gitHead":"8f5e1a735f784b276dc9d8b248b3b125520c01ea","_id":"@awesome-agent/agent-core@0.6.0","bugs":{"url":"https://github.com/awesome-agent/awesome-agent-sdk/issues"},"_nodeVersion":"25.6.0","_npmVersion":"11.8.0","dist":{"integrity":"sha512-vlIwJDP0ZV7GKbwtWhAnjA+c+tfpiQOuO3quqtUR2pG1DZbowMtmOwOB1o7cN6og2WpJZeJjRf9AtQx02MF+tQ==","shasum":"96692548b5174bc287654a03ae113da4b6816154","tarball":"https://registry.npmjs.org/@awesome-agent/agent-core/-/agent-core-0.6.0.tgz","fileCount":251,"unpackedSize":332654,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBuAxAbuEZG2T8IMSGV1BOpkW2BoWeiSwpx0chpzy4xRAiEAt9S2itmfK9gLvBFk0srb4Rlpx4lFJ14fGVhxhGCyp6g="}]},"_npmUser":{"name":"kaanbingol","email":"kaanbingol@outlook.com"},"directories":{},"maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/agent-core_0.6.0_1776723822542_0.3127024425558056"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-15T11:52:16.992Z","modified":"2026-04-20T22:23:42.823Z","0.1.0":"2026-03-15T11:52:17.223Z","0.2.0":"2026-03-17T06:57:45.860Z","0.2.1":"2026-03-24T10:55:29.865Z","0.2.2":"2026-03-24T11:52:42.301Z","0.3.0":"2026-03-24T13:22:08.167Z","0.3.1":"2026-03-24T13:29:01.455Z","0.3.2":"2026-03-24T13:45:37.483Z","0.3.3":"2026-03-24T13:50:59.226Z","0.3.4":"2026-03-24T14:12:22.993Z","0.3.5":"2026-03-24T20:01:28.066Z","0.3.6":"2026-03-24T20:10:15.457Z","0.3.7":"2026-03-25T07:27:03.277Z","0.3.8":"2026-03-25T07:43:21.287Z","0.3.9":"2026-03-25T19:49:38.875Z","0.3.10":"2026-03-27T07:19:02.058Z","0.4.0":"2026-03-27T08:18:40.278Z","0.4.1":"2026-03-28T07:48:50.920Z","0.5.0":"2026-03-28T08:46:04.528Z","0.5.1":"2026-03-28T21:21:01.269Z","0.5.2":"2026-03-31T06:28:00.214Z","0.5.3":"2026-03-31T06:32:04.380Z","0.6.0":"2026-04-20T22:23:42.685Z"},"bugs":{"url":"https://github.com/awesome-agent/awesome-agent-sdk/issues"},"author":{"name":"Kaan Bingol","email":"kaanbingol@outlook.com"},"license":"Apache-2.0","homepage":"https://github.com/awesome-agent/awesome-agent-sdk#readme","keywords":["agent","agentic","llm","ai","openai","tool-use","function-calling","mcp","model-context-protocol","orchestrator"],"repository":{"type":"git","url":"git+https://github.com/awesome-agent/awesome-agent-sdk.git","directory":"packages/core"},"description":"Agentic loop core library — provider-agnostic, server-independent","maintainers":[{"name":"kaanbingol","email":"kaanbingol@outlook.com"}],"readme":"# agent-core\r\n\r\nA TypeScript library for building AI agents that can think, use tools, and loop until the job is done.\r\n\r\nZero runtime dependencies. Provider-agnostic — bring your own LLM adapter.\r\n\r\nPart of the [awesome-agent-sdk](https://github.com/awesome-agent/awesome-agent-sdk) monorepo.\r\n\r\nBuilt on the standard agentic loop pattern — if you're familiar with modern coding agents, you'll recognize the architecture.\r\n\r\n## What Does It Do?\r\n\r\nThink of ChatGPT or any chat assistant — you send a message, you get a response. But what if the AI needs to **do things** in between? Read a file, run a command, call an API, then keep going based on the result?\r\n\r\nThat's what agent-core does. It runs a **loop**:\r\n\r\n```\r\nYou say something\r\n    ↓\r\nAgent thinks (calls the LLM)\r\n    ↓\r\nLLM says \"I need to read a file\" → Agent reads the file → feeds result back to LLM\r\n    ↓\r\nLLM says \"Now I need to run a command\" → Agent runs it → feeds result back\r\n    ↓\r\nLLM says \"Done, here's your answer\"\r\n    ↓\r\nYou get the final response\r\n```\r\n\r\nEach cycle is called an **iteration**. The agent keeps looping until the LLM decides it's done, hits a limit, or gets cancelled.\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install @awesome-agent/agent-core\r\n```\r\n\r\nYou'll also need an LLM adapter:\r\n\r\n```bash\r\nnpm install @awesome-agent/adapter-openai    # OpenAI, OpenRouter, Groq, Ollama\r\n# or\r\nnpm install @awesome-agent/adapter-anthropic  # Anthropic (coming soon)\r\n```\r\n\r\nYou can import individual modules for tree-shaking:\r\n\r\n```typescript\r\nimport { AgenticLoop } from \"@awesome-agent/agent-core/loop\";\r\nimport { DefaultToolRegistry } from \"@awesome-agent/agent-core/tool\";\r\n```\r\n\r\n## Quick Start\r\n\r\nHere's the simplest possible agent — it connects to an LLM and can read files:\r\n\r\n```typescript\r\nimport fs from \"fs/promises\";\r\nimport {\r\n  AgenticLoop,\r\n  DefaultToolRegistry,\r\n  DefaultToolExecutor,\r\n  DefaultHookManager,\r\n  DefaultContextBuilder,\r\n} from \"@awesome-agent/agent-core\";\r\nimport { OpenAIAdapter } from \"@awesome-agent/adapter-openai\";\r\n\r\n// Step 1: Set up the LLM connection\r\n// This works with OpenAI, but also Groq, Ollama, OpenRouter — anything\r\n// that speaks the OpenAI chat completions protocol.\r\nconst llm = new OpenAIAdapter({\r\n  baseURL: \"https://api.openai.com/v1\",\r\n  apiKey: process.env.OPENAI_API_KEY,\r\n});\r\n\r\n// Step 2: Define tools the agent can use\r\n// Tools are functions the LLM can call. You define what they do,\r\n// the LLM decides when to call them.\r\nconst tools = new DefaultToolRegistry();\r\n\r\ntools.register({\r\n  name: \"read_file\",\r\n  description: \"Read a file from disk\",\r\n  parameters: {\r\n    type: \"object\",\r\n    properties: {\r\n      path: { type: \"string\", description: \"File path to read\" },\r\n    },\r\n    required: [\"path\"],\r\n  },\r\n  execute: async (args) => {\r\n    const content = await fs.readFile(args.path as string, \"utf-8\");\r\n    return { success: true, content };\r\n  },\r\n});\r\n\r\n// Step 3: Wire everything together and run\r\nconst loop = new AgenticLoop({\r\n  llm,\r\n  agent: {\r\n    id: \"my-agent\",\r\n    name: \"My Agent\",\r\n    prompt: \"You are a helpful assistant. Use tools when needed.\",\r\n  },\r\n  tools,\r\n  executor: new DefaultToolExecutor(tools),\r\n  hooks: new DefaultHookManager(),\r\n  context: new DefaultContextBuilder(),\r\n});\r\n\r\nconst result = await loop.run(\"What's in package.json?\", \"session-1\");\r\nconsole.log(result.output);\r\n// \"The package.json contains a project called agent-core at version 0.1.0...\"\r\n```\r\n\r\n**What happens under the hood:**\r\n1. Your message goes to the LLM\r\n2. LLM responds: \"I'll read that file\" + calls `read_file({ path: \"package.json\" })`\r\n3. agent-core runs the tool, sends the file content back to the LLM\r\n4. LLM reads the content and generates a human-friendly summary\r\n5. Loop ends, you get `result.output`\r\n\r\n## Examples\r\n\r\n### 1. Coding Assistant (Read + Write + Shell)\r\n\r\nAn agent that can read files, write code, and run commands — like a mini coding agent:\r\n\r\n```typescript\r\nimport fs from \"fs/promises\";\r\nimport { execSync } from \"child_process\";\r\n\r\nconst tools = new DefaultToolRegistry();\r\n\r\n// Tool 1: Read files\r\ntools.register({\r\n  name: \"read_file\",\r\n  description: \"Read a file's contents\",\r\n  parameters: {\r\n    type: \"object\",\r\n    properties: { path: { type: \"string\" } },\r\n    required: [\"path\"],\r\n  },\r\n  execute: async (args) => {\r\n    const content = await fs.readFile(args.path as string, \"utf-8\");\r\n    return { success: true, content };\r\n  },\r\n});\r\n\r\n// Tool 2: Write files\r\ntools.register({\r\n  name: \"write_file\",\r\n  description: \"Create or overwrite a file\",\r\n  parameters: {\r\n    type: \"object\",\r\n    properties: {\r\n      path: { type: \"string\" },\r\n      content: { type: \"string\" },\r\n    },\r\n    required: [\"path\", \"content\"],\r\n  },\r\n  execute: async (args) => {\r\n    await fs.writeFile(args.path as string, args.content as string);\r\n    return { success: true, content: `Wrote ${args.path}` };\r\n  },\r\n});\r\n\r\n// Tool 3: Run shell commands\r\ntools.register({\r\n  name: \"run_command\",\r\n  description: \"Run a shell command and return its output\",\r\n  parameters: {\r\n    type: \"object\",\r\n    properties: { command: { type: \"string\" } },\r\n    required: [\"command\"],\r\n  },\r\n  execute: async (args) => {\r\n    try {\r\n      const output = execSync(args.command as string, {\r\n        encoding: \"utf-8\",\r\n        timeout: 10_000,\r\n      });\r\n      return { success: true, content: output };\r\n    } catch (err) {\r\n      return { success: false, content: (err as Error).message };\r\n    }\r\n  },\r\n});\r\n\r\n// Create the agent\r\nconst loop = new AgenticLoop({\r\n  llm,\r\n  agent: {\r\n    id: \"coder\",\r\n    name: \"Coding Assistant\",\r\n    prompt: \"You are a coding assistant. Read files, write code, run commands.\",\r\n    maxIterations: 20, // Allow up to 20 think-execute cycles\r\n  },\r\n  tools,\r\n  executor: new DefaultToolExecutor(tools),\r\n  hooks: new DefaultHookManager(),\r\n  context: new DefaultContextBuilder(),\r\n});\r\n\r\n// Ask it to do a multi-step task\r\nconst result = await loop.run(\r\n  \"Add a lint script to package.json using eslint, then install eslint\",\r\n  \"session-1\"\r\n);\r\n\r\nconsole.log(result.output);       // Agent's final message\r\nconsole.log(result.iterations);   // e.g. 4 (read → write → run install → respond)\r\nconsole.log(result.toolCalls);    // Full log of every tool call\r\n```\r\n\r\nThe agent will:\r\n1. Read package.json to see current scripts\r\n2. Write an updated package.json with the lint script\r\n3. Run `npm install eslint`\r\n4. Report back what it did\r\n\r\n### 2. Streaming to a UI\r\n\r\nWhen building a chat interface, you want to show progress in real-time — not wait for the entire loop to finish. The `onEvent` callback fires on every meaningful event:\r\n\r\n```typescript\r\nconst loop = new AgenticLoop({\r\n  llm,\r\n  agent: { id: \"chat\", name: \"Chat\", prompt: \"You are helpful.\" },\r\n  tools,\r\n  executor: new DefaultToolExecutor(tools),\r\n  hooks: new DefaultHookManager(),\r\n  context: new DefaultContextBuilder(),\r\n\r\n  // This callback fires throughout the loop\r\n  onEvent: (event) => {\r\n    switch (event.type) {\r\n      // Text arrives token by token — stream it to the user\r\n      case \"text:delta\":\r\n        process.stdout.write(event.text);\r\n        break;\r\n\r\n      // Agent is about to use a tool\r\n      case \"tool:start\":\r\n        console.log(`\\nUsing tool: ${event.name}`);\r\n        console.log(`  Args: ${JSON.stringify(event.args)}`);\r\n        break;\r\n\r\n      // Tool finished\r\n      case \"tool:end\":\r\n        if (event.result.success) {\r\n          console.log(`  Result: ${event.result.content.slice(0, 200)}`);\r\n        } else {\r\n          console.log(`  Error: ${event.result.content}`);\r\n        }\r\n        break;\r\n\r\n      // Loop phase changed (thinking → executing → verifying)\r\n      case \"phase:change\":\r\n        console.log(`\\n[${event.from} → ${event.to}]`);\r\n        break;\r\n\r\n      // One iteration complete — shows token usage\r\n      case \"iteration:end\":\r\n        console.log(`\\n--- Iteration ${event.iteration} ---`);\r\n        console.log(`  Tokens: ${event.usage.input} in / ${event.usage.output} out`);\r\n        break;\r\n\r\n      // Something went wrong\r\n      case \"error\":\r\n        console.error(`Error: ${event.error}`);\r\n        break;\r\n    }\r\n  },\r\n});\r\n\r\nawait loop.run(\"Explain the project structure\", \"session-1\");\r\n```\r\n\r\n**Example output:**\r\n```\r\n[idle → gathering]\r\n[gathering → thinking]\r\nI'll read the project files to understand the structure.\r\n[thinking → executing]\r\nUsing tool: read_file\r\n  Args: {\"path\":\"package.json\"}\r\n  Result: {\"name\":\"agent-core\",\"version\":\"0.1.0\"...\r\n[executing → verifying]\r\n[verifying → thinking]\r\nThis is a TypeScript project with 8 modules...\r\n--- Iteration 2 ---\r\n  Tokens: 3200 in / 450 out\r\n```\r\n\r\n### 3. Safety Guardrails with Hooks\r\n\r\nHooks let you intercept the loop at key points. You can **block** actions, **modify** data, or just **observe**. Three hook actions:\r\n\r\n- `\"continue\"` — do nothing, let it proceed\r\n- `\"block\"` — stop this action with a reason\r\n- `\"modify\"` — change the data before it proceeds\r\n\r\n```typescript\r\nimport { DefaultHookManager, HookEvent } from \"@awesome-agent/agent-core\";\r\n\r\nconst hooks = new DefaultHookManager();\r\n\r\n// HOOK 1: Block dangerous commands\r\n// Runs BEFORE every tool call. If the tool is \"run_command\" and the\r\n// command looks destructive, block it.\r\nhooks.register({\r\n  name: \"safety-guard\",\r\n  event: HookEvent.PreToolUse,\r\n  priority: 1,  // Lower number = runs first\r\n  handler: async (payload) => {\r\n    const { toolCall } = payload.data;\r\n\r\n    if (toolCall.name === \"run_command\") {\r\n      const cmd = toolCall.args.command as string;\r\n      const dangerous = /rm\\s+-rf|drop\\s+table|format\\s+/i;\r\n      if (dangerous.test(cmd)) {\r\n        return {\r\n          action: \"block\",\r\n          reason: `Blocked dangerous command: ${cmd}`,\r\n        };\r\n      }\r\n    }\r\n\r\n    if (toolCall.name === \"write_file\") {\r\n      const path = toolCall.args.path as string;\r\n      if (path.includes(\".env\") || path.includes(\"credentials\")) {\r\n        return {\r\n          action: \"block\",\r\n          reason: \"Cannot write to sensitive files\",\r\n        };\r\n      }\r\n    }\r\n\r\n    return { action: \"continue\" };\r\n  },\r\n});\r\n\r\n// HOOK 2: Inject extra rules into every LLM call\r\n// Runs BEFORE each LLM request. Appends safety rules to the system prompt.\r\nhooks.register({\r\n  name: \"inject-rules\",\r\n  event: HookEvent.PreLLMCall,\r\n  handler: async (payload) => {\r\n    const request = payload.data.request;\r\n    return {\r\n      action: \"modify\",\r\n      data: {\r\n        request: {\r\n          ...request,\r\n          systemPrompt:\r\n            request.systemPrompt +\r\n            \"\\n\\nRULES:\\n- Never delete files\\n- Always explain before writing\\n- Ask before bulk operations\",\r\n        },\r\n      },\r\n    };\r\n  },\r\n});\r\n\r\n// HOOK 3: Log token usage after every LLM call\r\n// Runs AFTER each LLM response. Just observes — doesn't change anything.\r\nhooks.register({\r\n  name: \"usage-logger\",\r\n  event: HookEvent.PostLLMCall,\r\n  handler: async (payload) => {\r\n    const { usage, finishReason } = payload.data;\r\n    console.log(`[LLM] ${usage.inputTokens} in, ${usage.outputTokens} out (${finishReason})`);\r\n    return { action: \"continue\" };\r\n  },\r\n});\r\n\r\n// Use these hooks in your loop\r\nconst loop = new AgenticLoop({\r\n  llm,\r\n  agent: { id: \"safe-agent\", name: \"Safe Agent\", prompt: \"You are helpful.\" },\r\n  tools,\r\n  executor: new DefaultToolExecutor(tools),\r\n  hooks,  // <-- pass your hooks here\r\n  context: new DefaultContextBuilder(),\r\n});\r\n```\r\n\r\n**Available hook events:**\r\n\r\n| Event | When | Can block? | Can modify? |\r\n|-------|------|-----------|-------------|\r\n| `PreLLMCall` | Before each LLM request | Yes | Yes (modify request) |\r\n| `PostLLMCall` | After each LLM response | No | No |\r\n| `PreToolUse` | Before each tool execution | Yes | Yes (modify args) |\r\n| `PostToolUse` | After each tool execution | No | No |\r\n| `Stop` | When agent wants to finish | Yes (force continue) | No |\r\n| `SessionStart` | Loop begins | No | No |\r\n| `SessionEnd` | Loop ends | No | No |\r\n| `Error` | On error | No | No |\r\n\r\n### 4. Cancel a Running Agent\r\n\r\nPass an `AbortSignal` to stop the agent at any time:\r\n\r\n```typescript\r\nconst controller = new AbortController();\r\n\r\n// Option A: Cancel after 30 seconds\r\nsetTimeout(() => controller.abort(), 30_000);\r\n\r\n// Option B: Cancel on Ctrl+C\r\nprocess.on(\"SIGINT\", () => controller.abort());\r\n\r\nconst result = await loop.run(\r\n  \"Analyze every file in this project\",\r\n  \"session-1\",\r\n  controller.signal  // <-- third argument\r\n);\r\n\r\n// Check if it was cancelled\r\nif (result.finishReason === \"cancelled\") {\r\n  console.log(\"Agent was stopped early.\");\r\n  console.log(\"It completed\", result.iterations, \"iterations before cancellation.\");\r\n  console.log(\"Partial output:\", result.output);\r\n}\r\n```\r\n\r\n### 5. Tool Middleware\r\n\r\nMiddleware wraps **every** tool call with before/after logic. Unlike hooks (which are event-driven), middleware is a chain that processes each call sequentially.\r\n\r\nUse cases: logging, timing, caching, arg sanitization, rate limiting.\r\n\r\n```typescript\r\nimport { MiddlewarePipeline, DefaultToolExecutor } from \"@awesome-agent/agent-core\";\r\n\r\nconst pipeline = new MiddlewarePipeline();\r\n\r\n// Middleware 1: Time every tool call\r\npipeline.add({\r\n  name: \"timer\",\r\n  before: async (ctx) => {\r\n    console.log(`[${ctx.toolCall.name}] Starting...`);\r\n    // Store start time for the after phase\r\n    (ctx as any)._start = Date.now();\r\n    return { action: \"continue\" };\r\n  },\r\n  after: async (ctx) => {\r\n    const ms = Date.now() - (ctx as any)._start;\r\n    console.log(`[${ctx.toolCall.name}] Done in ${ms}ms`);\r\n    return ctx.result;\r\n  },\r\n});\r\n\r\n// Middleware 2: Redact sensitive args before execution\r\npipeline.add({\r\n  name: \"redact-secrets\",\r\n  before: async (ctx) => {\r\n    const cleaned = { ...ctx.toolCall.args };\r\n    for (const key of Object.keys(cleaned)) {\r\n      if (/password|secret|token/i.test(key)) {\r\n        cleaned[key] = \"***\";\r\n      }\r\n    }\r\n    return { action: \"modify\", args: cleaned };\r\n  },\r\n});\r\n\r\n// Pass the pipeline to the executor\r\nconst executor = new DefaultToolExecutor(tools, pipeline);\r\n```\r\n\r\n### 6. Skills — Load Knowledge on Demand\r\n\r\nWithout skills, every LLM call includes the same system prompt — even if the user asks about something the prompt doesn't cover. With skills, **specialized knowledge loads only when relevant**.\r\n\r\n```typescript\r\nimport { DefaultSkillRegistry, DefaultSkillDetector } from \"@awesome-agent/agent-core\";\r\n\r\nconst skills = new DefaultSkillRegistry();\r\n\r\n// Each skill has triggers — keywords or regex patterns\r\nskills.register({\r\n  name: \"database\",\r\n  description: \"SQL queries, migrations, schema design\",\r\n  triggers: [\r\n    { type: \"keyword\", keyword: \"SQL\" },\r\n    { type: \"keyword\", keyword: \"database\" },\r\n    { type: \"pattern\", pattern: /\\b(SELECT|INSERT|CREATE TABLE|migration)\\b/i },\r\n  ],\r\n});\r\n\r\nskills.register({\r\n  name: \"docker\",\r\n  description: \"Containers, Dockerfiles, compose, deployment\",\r\n  triggers: [\r\n    { type: \"keyword\", keyword: \"docker\" },\r\n    { type: \"keyword\", keyword: \"container\" },\r\n    { type: \"pattern\", pattern: /\\b(Dockerfile|docker-compose)\\b/i },\r\n  ],\r\n});\r\n\r\nconst loop = new AgenticLoop({\r\n  llm,\r\n  agent: {\r\n    id: \"devops\",\r\n    name: \"DevOps Agent\",\r\n    prompt: \"You help with infrastructure and deployment.\",\r\n  },\r\n  tools,\r\n  executor: new DefaultToolExecutor(tools),\r\n  hooks: new DefaultHookManager(),\r\n  context: new DefaultContextBuilder(),\r\n\r\n  // Enable the skill system\r\n  skills,\r\n  skillDetector: new DefaultSkillDetector(),\r\n  skillLoader: {\r\n    loadPrompt: async (name) => {\r\n      // In practice, load from files or a database\r\n      const prompts: Record<string, string> = {\r\n        database:\r\n          \"You are an expert DBA.\\n\" +\r\n          \"- Always use parameterized queries to prevent SQL injection\\n\" +\r\n          \"- Prefer migrations over raw DDL statements\\n\" +\r\n          \"- Include rollback steps in every migration\",\r\n        docker:\r\n          \"You are a Docker expert.\\n\" +\r\n          \"- Use multi-stage builds to minimize image size\\n\" +\r\n          \"- Never run containers as root\\n\" +\r\n          \"- Pin image versions, don't use :latest in production\",\r\n      };\r\n      return prompts[name] ?? \"\";\r\n    },\r\n  },\r\n});\r\n\r\n// When the user says: \"Write a SQL migration for a users table\"\r\n//\r\n// 1. Detector sees \"SQL\" and \"migration\" → matches \"database\" skill\r\n// 2. Loader fetches the full database prompt\r\n// 3. Context builder adds it to the system prompt for this call\r\n// 4. LLM gets DBA expertise — writes proper migrations with rollbacks\r\n//\r\n// If the user then says: \"Deploy it with Docker\"\r\n// → \"database\" skill unloads, \"docker\" skill loads instead\r\n```\r\n\r\n### 7. Long Conversations — Manage Context Size\r\n\r\nLLMs have a context window (e.g., 128K tokens). Long conversations can exceed it. agent-core provides two strategies:\r\n\r\n**Strategy A: Pruning** — Drop the oldest messages to stay under the limit. Fast but lossy.\r\n\r\n```typescript\r\nimport { DefaultPruner } from \"@awesome-agent/agent-core\";\r\n\r\nconst loop = new AgenticLoop({\r\n  // ...other config...\r\n  pruner: new DefaultPruner(),\r\n  maxContextTokens: 128_000,\r\n});\r\n\r\n// Conversation with 200 messages? The pruner drops the oldest ones\r\n// to stay under 128K tokens. System prompt and recent messages are preserved.\r\n```\r\n\r\n**Strategy B: Compaction** — Use the LLM to summarize old messages. Slower but preserves knowledge.\r\n\r\n```typescript\r\nimport { LLMCompactor } from \"@awesome-agent/agent-core\";\r\n\r\nconst loop = new AgenticLoop({\r\n  // ...other config...\r\n  compactor: new LLMCompactor(llm, {\r\n    preserveLastN: 6,        // Always keep the last 6 messages untouched\r\n    maxSummaryTokens: 1024,  // Budget for the summary\r\n    model: \"gpt-4o-mini\",    // Use a cheap model for summarization\r\n  }),\r\n});\r\n\r\n// Before compaction:\r\n//   [msg1, msg2, msg3, msg4, msg5, msg6, msg7, msg8, msg9, msg10]\r\n//\r\n// After compaction (preserveLastN = 6):\r\n//   [summary of msg1-msg4, msg5, msg6, msg7, msg8, msg9, msg10]\r\n//\r\n// The summary captures key decisions, tool results, and context\r\n// from the old messages — so the agent doesn't lose track.\r\n```\r\n\r\n### 8. Understanding the Result\r\n\r\nEvery `loop.run()` returns a `LoopResult` with everything you need to know:\r\n\r\n```typescript\r\nconst result = await loop.run(\"Fix the TypeScript errors\", \"session-1\");\r\n\r\n// --- Status ---\r\nresult.success;       // true if finishReason is \"complete\"\r\nresult.finishReason;  // \"complete\" | \"max_iterations\" | \"blocked\" | \"error\" | \"cancelled\"\r\n\r\n// --- Output ---\r\nresult.output;        // The agent's final text response\r\n\r\n// --- Diagnostics ---\r\nresult.iterations;    // How many think-execute cycles ran (e.g., 3)\r\nresult.totalTokens;   // { input: 45200, output: 3100 }\r\n\r\n// --- Tool Call History ---\r\n// Every tool the agent called, in order, with results:\r\nresult.toolCalls;\r\n// [\r\n//   { name: \"read_file\",    args: { path: \"src/index.ts\" },  result: \"import ...\" },\r\n//   { name: \"write_file\",   args: { path: \"src/index.ts\", content: \"...\" },  result: \"Wrote src/index.ts\" },\r\n//   { name: \"run_command\",  args: { command: \"npx tsc --noEmit\" },  result: \"\" },\r\n// ]\r\n\r\n// --- React to different outcomes ---\r\nswitch (result.finishReason) {\r\n  case \"complete\":\r\n    console.log(\"Done:\", result.output);\r\n    break;\r\n  case \"max_iterations\":\r\n    console.log(\"Agent ran out of steps. Partial result:\", result.output);\r\n    break;\r\n  case \"blocked\":\r\n    console.log(\"A hook blocked the agent.\");\r\n    break;\r\n  case \"cancelled\":\r\n    console.log(\"Agent was cancelled by AbortSignal.\");\r\n    break;\r\n  case \"error\":\r\n    console.log(\"Something went wrong.\");\r\n    break;\r\n}\r\n```\r\n\r\n### 9. Processing Large Files (PDFs, Codebases, Logs)\r\n\r\nA single LLM call can't process a 500-page PDF or a 10,000-line log file — it won't fit in the context window. But that's exactly what the agentic loop is designed for: **the agent breaks the task into chunks automatically**.\r\n\r\nYou provide the tools, the agent decides the strategy:\r\n\r\n```typescript\r\nimport { readFile } from \"fs/promises\";\r\n\r\nconst tools = new DefaultToolRegistry();\r\n\r\n// Tool: Read a specific page range from a PDF\r\n// In practice, use a library like pdf-parse, pdfjs-dist, or an external API.\r\ntools.register({\r\n  name: \"read_pdf\",\r\n  description: \"Read specific pages from a PDF file. Returns the text content.\",\r\n  parameters: {\r\n    type: \"object\",\r\n    properties: {\r\n      path: { type: \"string\", description: \"Path to the PDF file\" },\r\n      startPage: { type: \"number\", description: \"First page to read (1-based)\" },\r\n      endPage: { type: \"number\", description: \"Last page to read (1-based)\" },\r\n    },\r\n    required: [\"path\", \"startPage\", \"endPage\"],\r\n  },\r\n  execute: async (args) => {\r\n    // Your PDF parsing logic here — returns text for the given page range.\r\n    // The key: this tool reads a SLICE, not the whole file.\r\n    const text = await extractPdfPages(\r\n      args.path as string,\r\n      args.startPage as number,\r\n      args.endPage as number,\r\n    );\r\n    return { success: true, content: text };\r\n  },\r\n});\r\n\r\n// Tool: Get PDF metadata (page count, title, table of contents)\r\ntools.register({\r\n  name: \"pdf_info\",\r\n  description: \"Get metadata about a PDF: total pages, title, and table of contents if available.\",\r\n  parameters: {\r\n    type: \"object\",\r\n    properties: {\r\n      path: { type: \"string\", description: \"Path to the PDF file\" },\r\n    },\r\n    required: [\"path\"],\r\n  },\r\n  execute: async (args) => {\r\n    const info = await getPdfMetadata(args.path as string);\r\n    return { success: true, content: JSON.stringify(info) };\r\n  },\r\n});\r\n\r\n// Tool: Write notes to a file (agent uses this to save intermediate results)\r\ntools.register({\r\n  name: \"write_file\",\r\n  description: \"Write text content to a file\",\r\n  parameters: {\r\n    type: \"object\",\r\n    properties: {\r\n      path: { type: \"string\" },\r\n      content: { type: \"string\" },\r\n    },\r\n    required: [\"path\", \"content\"],\r\n  },\r\n  execute: async (args) => {\r\n    await writeFile(args.path as string, args.content as string);\r\n    return { success: true, content: `Wrote ${args.path}` };\r\n  },\r\n});\r\n\r\n// Tool: Read a text file back\r\ntools.register({\r\n  name: \"read_file\",\r\n  description: \"Read a text file's contents\",\r\n  parameters: {\r\n    type: \"object\",\r\n    properties: { path: { type: \"string\" } },\r\n    required: [\"path\"],\r\n  },\r\n  execute: async (args) => {\r\n    const content = await readFile(args.path as string, \"utf-8\");\r\n    return { success: true, content };\r\n  },\r\n});\r\n\r\nconst loop = new AgenticLoop({\r\n  llm,\r\n  agent: {\r\n    id: \"doc-analyst\",\r\n    name: \"Document Analyst\",\r\n    prompt:\r\n      \"You analyze documents. When given a large file, first check its structure \" +\r\n      \"(page count, table of contents), then read it in chunks. Save notes for \" +\r\n      \"each section to files, then combine them into a final summary.\",\r\n    maxIterations: 30, // Large documents need more iterations\r\n  },\r\n  tools,\r\n  executor: new DefaultToolExecutor(tools),\r\n  hooks: new DefaultHookManager(),\r\n  context: new DefaultContextBuilder(),\r\n  pruner: new DefaultPruner(),\r\n  maxContextTokens: 128_000,\r\n});\r\n\r\nconst result = await loop.run(\r\n  \"Summarize the key findings from report.pdf\",\r\n  \"session-1\",\r\n);\r\n```\r\n\r\n**What the agent does (you don't code this — the LLM decides):**\r\n\r\n```\r\nIteration 1: \"Let me check what I'm working with\"\r\n  → pdf_info({ path: \"report.pdf\" })\r\n  ← { pages: 487, title: \"Annual Report 2025\", toc: [\"Introduction\", \"Q1 Results\", ...] }\r\n\r\nIteration 2: \"487 pages. I'll read the introduction first\"\r\n  → read_pdf({ path: \"report.pdf\", startPage: 1, endPage: 15 })\r\n  ← \"Executive Summary: Revenue grew 23%...\"\r\n\r\nIteration 3: \"Let me save these notes and continue\"\r\n  → write_file({ path: \"notes_intro.md\", content: \"# Introduction\\n- Revenue grew 23%...\" })\r\n  → read_pdf({ path: \"report.pdf\", startPage: 16, endPage: 80 })\r\n  ← \"Q1 Results: The first quarter saw...\"\r\n\r\nIteration 4-10: reads remaining sections, saves notes for each\r\n\r\nIteration 11: \"I've read everything. Let me compile the summary\"\r\n  → read_file({ path: \"notes_intro.md\" })\r\n  → read_file({ path: \"notes_q1.md\" })\r\n  → read_file({ path: \"notes_q2.md\" })\r\n  → ...\r\n  ← Final summary combining all notes\r\n```\r\n\r\n**Why this works even with context limits:** The agent writes intermediate notes to files. When the context fills up (after reading hundreds of pages), the pruner drops old messages — but the notes are safe on disk. The agent reads them back when it's time to compile the final summary. This is the same pattern production coding agents use when analyzing large codebases.\r\n\r\n**The same approach works for any large input:**\r\n\r\n- **Codebase analysis** — `list_files` to discover structure, `read_file` per file, `write_file` for notes\r\n- **Log analysis** — `read_log({ start: 0, lines: 500 })` in chunks, filter as you go\r\n- **Database exploration** — `run_query(\"SELECT COUNT(*) FROM ...\")` first, then targeted queries\r\n- **API crawling** — `fetch_page({ url, page: 1 })`, paginate through results\r\n\r\nThe pattern is always the same: **explore → chunk → process → save → combine**. You provide the tools, the agent figures out the strategy.\r\n\r\n### 10. Subagents — Agents That Spawn Other Agents\r\n\r\nSometimes a single agent isn't enough. A complex task might require **multiple specialists** working in parallel, each with their own context and tools. That's what subagents do.\r\n\r\nThe parent agent delegates subtasks to child agents. Each child runs its own `AgenticLoop` with isolated context — they don't pollute the parent's conversation history, and they can run in parallel.\r\n\r\n```typescript\r\nimport {\r\n  AgenticLoop,\r\n  DefaultToolRegistry, DefaultToolExecutor,\r\n  DefaultHookManager, DefaultContextBuilder,\r\n  DefaultSubagentRunner,\r\n} from \"@awesome-agent/agent-core\";\r\nimport type { SubagentConfig } from \"@awesome-agent/agent-core\";\r\nimport { OpenAIAdapter } from \"@awesome-agent/adapter-openai\";\r\n\r\nconst llm = new OpenAIAdapter({\r\n  baseURL: \"https://api.openai.com/v1\",\r\n  apiKey: process.env.OPENAI_API_KEY,\r\n});\r\n\r\n// A factory function that creates a loop for any subagent.\r\n// Each subagent gets its own tools, hooks, and context — fully isolated.\r\nfunction createSubagentLoop(config: SubagentConfig) {\r\n  const tools = new DefaultToolRegistry();\r\n\r\n  // Give each subagent the tools it needs based on its role\r\n  tools.register({\r\n    name: \"read_file\",\r\n    description: \"Read a file\",\r\n    parameters: {\r\n      type: \"object\",\r\n      properties: { path: { type: \"string\" } },\r\n      required: [\"path\"],\r\n    },\r\n    execute: async (args) => {\r\n      const content = await fs.readFile(args.path as string, \"utf-8\");\r\n      return { success: true, content };\r\n    },\r\n  });\r\n\r\n  tools.register({\r\n    name: \"write_file\",\r\n    description: \"Write a file\",\r\n    parameters: {\r\n      type: \"object\",\r\n      properties: {\r\n        path: { type: \"string\" },\r\n        content: { type: \"string\" },\r\n      },\r\n      required: [\"path\", \"content\"],\r\n    },\r\n    execute: async (args) => {\r\n      await fs.writeFile(args.path as string, args.content as string);\r\n      return { success: true, content: `Wrote ${args.path}` };\r\n    },\r\n  });\r\n\r\n  return new AgenticLoop({\r\n    llm,\r\n    agent: config.agent,\r\n    tools,\r\n    executor: new DefaultToolExecutor(tools),\r\n    hooks: new DefaultHookManager(),\r\n    context: new DefaultContextBuilder(),\r\n  });\r\n}\r\n\r\n// Create the subagent runner\r\nconst runner = new DefaultSubagentRunner(createSubagentLoop);\r\n```\r\n\r\n**Spawning a single subagent:**\r\n\r\n```typescript\r\nconst result = await runner.spawn({\r\n  agent: {\r\n    id: \"researcher\",\r\n    name: \"Researcher\",\r\n    prompt: \"You research topics by reading files. Be thorough and factual.\",\r\n  },\r\n  task: \"Read all .ts files in src/llm/ and document the public API\",\r\n  parentSessionId: \"session-1\",\r\n  timeout: 60_000, // Kill after 60 seconds if still running\r\n});\r\n\r\nconsole.log(result.success);    // true\r\nconsole.log(result.output);     // \"The llm module exports: MockLLMAdapter, RetryLLMAdapter, ...\"\r\nconsole.log(result.iterations); // 5\r\nconsole.log(result.tokenUsage); // { input: 12000, output: 3400 }\r\n```\r\n\r\n**Spawning multiple subagents in parallel:**\r\n\r\n```typescript\r\n// All three run at the same time — each in its own isolated context\r\nconst results = await runner.spawnParallel([\r\n  {\r\n    agent: {\r\n      id: \"api-researcher\",\r\n      name: \"API Researcher\",\r\n      prompt: \"You document APIs. Read source files and list all exports with descriptions.\",\r\n    },\r\n    task: \"Document the public API of src/tool/\",\r\n    parentSessionId: \"session-1\",\r\n  },\r\n  {\r\n    agent: {\r\n      id: \"test-writer\",\r\n      name: \"Test Writer\",\r\n      prompt: \"You write unit tests. Read source files, then write comprehensive tests.\",\r\n    },\r\n    task: \"Write tests for src/context/pruner.ts\",\r\n    parentSessionId: \"session-1\",\r\n  },\r\n  {\r\n    agent: {\r\n      id: \"reviewer\",\r\n      name: \"Code Reviewer\",\r\n      prompt: \"You review code for bugs, security issues, and style problems.\",\r\n    },\r\n    task: \"Review src/llm/openai-adapter.ts for potential issues\",\r\n    parentSessionId: \"session-1\",\r\n  },\r\n]);\r\n\r\n// Each result is independent\r\nfor (const r of results) {\r\n  console.log(`${r.success ? \"OK\" : \"FAIL\"} — ${r.iterations} iterations, ${r.tokenUsage.input + r.tokenUsage.output} tokens`);\r\n  console.log(r.output.slice(0, 200));\r\n  console.log(\"---\");\r\n}\r\n```\r\n\r\n**Using subagents as a tool (agent spawns agents):**\r\n\r\nThe most powerful pattern: make subagent spawning available as a tool. The parent agent decides *when* and *what* to delegate:\r\n\r\n```typescript\r\nconst parentTools = new DefaultToolRegistry();\r\n\r\n// The parent agent can spawn child agents via this tool\r\nparentTools.register({\r\n  name: \"delegate\",\r\n  description:\r\n    \"Delegate a task to a specialist subagent. Use this for independent subtasks \" +\r\n    \"that can run in isolation. Returns the subagent's output.\",\r\n  parameters: {\r\n    type: \"object\",\r\n    properties: {\r\n      role: { type: \"string\", description: \"Short role name (e.g. 'researcher', 'tester')\" },\r\n      expertise: { type: \"string\", description: \"System prompt for the subagent\" },\r\n      task: { type: \"string\", description: \"What the subagent should do\" },\r\n    },\r\n    required: [\"role\", \"expertise\", \"task\"],\r\n  },\r\n  execute: async (args, context) => {\r\n    const result = await runner.spawn({\r\n      agent: {\r\n        id: `sub-${args.role as string}`,\r\n        name: args.role as string,\r\n        prompt: args.expertise as string,\r\n        maxIterations: 15,\r\n      },\r\n      task: args.task as string,\r\n      parentSessionId: context.sessionId,\r\n      timeout: 120_000,\r\n    });\r\n\r\n    if (!result.success) {\r\n      return { success: false, content: `Subagent failed: ${result.output}` };\r\n    }\r\n    return { success: true, content: result.output };\r\n  },\r\n});\r\n\r\n// Now create the parent agent — it decides when to delegate\r\nconst parentLoop = new AgenticLoop({\r\n  llm,\r\n  agent: {\r\n    id: \"orchestrator\",\r\n    name: \"Orchestrator\",\r\n    prompt:\r\n      \"You are a project lead. Break complex tasks into subtasks and delegate them \" +\r\n      \"to specialist subagents. Combine their results into a final deliverable. \" +\r\n      \"Use the delegate tool for independent work that doesn't need your context.\",\r\n    maxIterations: 10,\r\n  },\r\n  tools: parentTools,\r\n  executor: new DefaultToolExecutor(parentTools),\r\n  hooks: new DefaultHookManager(),\r\n  context: new DefaultContextBuilder(),\r\n});\r\n\r\nconst result = await parentLoop.run(\r\n  \"Audit the entire codebase: check for bugs, write missing tests, and document the public API\",\r\n  \"session-1\",\r\n);\r\n```\r\n\r\n**What happens:**\r\n\r\n```\r\nParent (Orchestrator):\r\n  \"This is a big job. I'll split it into three parallel tasks.\"\r\n\r\n  Iteration 1:\r\n    → delegate({ role: \"reviewer\", expertise: \"You find bugs...\", task: \"Review src/ for bugs\" })\r\n        ↓\r\n        Child agent runs its own loop:\r\n          → read_file(\"src/loop/loop.ts\")\r\n          → read_file(\"src/tool/executor.ts\")\r\n          → ... (5 iterations)\r\n          ← \"Found 2 potential issues: 1) Missing null check in...\"\r\n    ← \"Found 2 potential issues...\"\r\n\r\n  Iteration 2:\r\n    → delegate({ role: \"tester\", expertise: \"You write tests...\", task: \"Write missing tests\" })\r\n        ↓\r\n        Another child agent, own context:\r\n          → read_file(\"src/context/pruner.ts\")\r\n          → write_file(\"tests/context/pruner-edge-cases.test.ts\", \"...\")\r\n          → ... (8 iterations)\r\n          ← \"Wrote 12 new test cases covering edge cases in...\"\r\n    ← \"Wrote 12 new test cases...\"\r\n\r\n  Iteration 3:\r\n    → delegate({ role: \"documenter\", expertise: \"You write docs...\", task: \"Document public API\" })\r\n        ↓\r\n        Third child agent:\r\n          → read_file(\"src/index.ts\")\r\n          → read_file(\"src/llm/types.ts\")\r\n          → write_file(\"API.md\", \"...\")\r\n          ← \"Documented 47 exports across 8 modules\"\r\n    ← \"Documented 47 exports...\"\r\n\r\n  Iteration 4:\r\n    Parent combines all results into a final report.\r\n    ← \"Audit complete. 2 bugs found, 12 tests added, API documented.\"\r\n```\r\n\r\n**Key properties of subagents:**\r\n\r\n| Property | Description |\r\n|----------|-------------|\r\n| **Isolated context** | Each child has its own message history. Parent's context stays clean. |\r\n| **Parallel execution** | `spawnParallel()` runs multiple children at the same time. |\r\n| **Timeout support** | Set `timeout` to kill a child that takes too long. |\r\n| **Abort propagation** | If the parent is cancelled, all children are cancelled too. |\r\n| **Token tracking** | Each result includes `tokenUsage` — you know exactly what each child cost. |\r\n| **Composable** | Children can spawn their own children (nested subagents). |\r\n\r\n**When to use subagents vs. a single agent:**\r\n\r\n| Use a single agent when... | Use subagents when... |\r\n|---|---|\r\n| Task is sequential (step A then step B) | Tasks are independent and can run in parallel |\r\n| Context from step A is needed in step B | Each subtask is self-contained |\r\n| Total work fits in one context window | Work would overflow a single context window |\r\n| Simple task, few iterations | Complex task with multiple specialties |\r\n\r\n### 11. Memory — Persistent Knowledge Across Conversations\r\n\r\nMemory lets the agent remember things between conversations. You define **what** to store (user preferences, project facts, feedback), the agent decides **when** to recall it.\r\n\r\nagent-core provides the `MemoryStore` interface — you implement the backend (Firestore, file system, SQLite, etc.).\r\n\r\n```typescript\r\nimport type { MemoryStore, MemoryEntry, MemorySearchResult } from \"@awesome-agent/agent-core\";\r\n\r\n// Step 1: Implement the MemoryStore interface\r\n// This example uses a simple in-memory Map. In production, use Firestore, SQLite, etc.\r\nclass MyMemoryStore implements MemoryStore {\r\n  private entries = new Map<string, MemoryEntry>();\r\n  private nextId = 1;\r\n\r\n  async save(entry: Omit<MemoryEntry, \"id\" | \"createdAt\" | \"updatedAt\">): Promise<MemoryEntry> {\r\n    const full: MemoryEntry = {\r\n      ...entry,\r\n      id: `mem_${this.nextId++}`,\r\n      createdAt: Date.now(),\r\n      updatedAt: Date.now(),\r\n    };\r\n    this.entries.set(full.id, full);\r\n    return full;\r\n  }\r\n\r\n  async search(query: string, options?: { maxResults?: number }): Promise<readonly MemorySearchResult[]> {\r\n    const results: MemorySearchResult[] = [];\r\n    for (const entry of this.entries.values()) {\r\n      // Simple keyword match — in production, use embeddings or full-text search\r\n      const relevance = entry.content.toLowerCase().includes(query.toLowerCase()) ? 0.9 : 0.1;\r\n      results.push({ entry, relevance });\r\n    }\r\n    return results\r\n      .sort((a, b) => b.relevance - a.relevance)\r\n      .slice(0, options?.maxResults ?? 10);\r\n  }\r\n\r\n  async delete(id: string): Promise<void> {\r\n    this.entries.delete(id);\r\n  }\r\n\r\n  async getAll(): Promise<readonly MemoryEntry[]> {\r\n    return [...this.entries.values()];\r\n  }\r\n}\r\n\r\n// Step 2: Pre-populate with some knowledge\r\nconst memory = new MyMemoryStore();\r\n\r\nawait memory.save({\r\n  type: \"user\",\r\n  name: \"role\",\r\n  content: \"Senior TypeScript developer, prefers functional style, uses Vitest for testing.\",\r\n});\r\n\r\nawait memory.save({\r\n  type: \"feedback\",\r\n  name: \"no-classes\",\r\n  content: \"User prefers plain functions over classes. Don't wrap everything in a class.\",\r\n});\r\n\r\nawait memory.save({\r\n  type: \"project\",\r\n  name: \"stack\",\r\n  content: \"Project uses React 19, TypeScript 5.5, Tailwind CSS, deployed on Vercel.\",\r\n});\r\n\r\n// Step 3: Pass memory to the loop\r\nconst loop = new AgenticLoop({\r\n  llm,\r\n  agent: {\r\n    id: \"assistant\",\r\n    name: \"Assistant\",\r\n    prompt: \"You are a helpful coding assistant.\",\r\n  },\r\n  tools,\r\n  executor: new DefaultToolExecutor(tools),\r\n  hooks: new DefaultHookManager(),\r\n  context: new DefaultContextBuilder(),\r\n  memory,  // <-- memories are searched and injected into the system prompt\r\n});\r\n\r\n// When the user says \"Write a utility function for date formatting\":\r\n// 1. Memory is searched with the user's input\r\n// 2. Relevant entries are found: \"prefers functional style\", \"uses Vitest\"\r\n// 3. They're injected into the system prompt as <memory> sections\r\n// 4. The LLM writes a plain function (not a class) with Vitest tests\r\nconst result = await loop.run(\"Write a utility function for date formatting\", \"session-1\");\r\n```\r\n\r\n**Memory types:**\r\n\r\n| Type | What it stores | Example |\r\n|------|---------------|---------|\r\n| `user` | Who the user is | \"Senior developer, prefers terse responses\" |\r\n| `feedback` | Corrections from the user | \"Don't use default exports — project convention\" |\r\n| `project` | Ongoing work context | \"Auth rewrite is driven by compliance, not tech debt\" |\r\n| `reference` | External resource pointers | \"Pipeline bugs tracked in Linear project INGEST\" |\r\n\r\n### 12. Plan Mode — Think Before Acting\r\n\r\nFor complex tasks, you might want the agent to **plan first** before executing anything. Plan mode makes the agent outline its approach, then waits for approval before proceeding.\r\n\r\nThis is a two-step process:\r\n\r\n```typescript\r\n// Step 1: Run with planMode — agent creates a plan but doesn't execute\r\nconst loop = new AgenticLoop({\r\n  llm,\r\n  agent: {\r\n    id: \"planner\",\r\n    name: \"Planner\",\r\n    prompt: \"You are a senior engineer. Plan carefully before making changes.\",\r\n  },\r\n  tools,\r\n  executor: new DefaultToolExecutor(tools),\r\n  hooks: new DefaultHookManager(),\r\n  context: new DefaultContextBuilder(),\r\n  planMode: true,  // <-- enables planning phase\r\n});\r\n\r\nconst planResult = await loop.run(\"Refactor the auth module to use JWT\", \"session-1\");\r\n\r\n// The agent returns a plan, NOT execution results\r\nconsole.log(planResult.finishReason);  // \"plan_pending\"\r\nconsole.log(planResult.output);\r\n// \"Step 1: Read the current auth module (src/auth/)\r\n//  Step 2: Identify session-based code to replace\r\n//  Step 3: Install jsonwebtoken package\r\n//  Step 4: Create jwt.ts with sign/verify functions\r\n//  Step 5: Update auth middleware to use JWT\r\n//  Step 6: Update tests\r\n//  Step 7: Run tests to verify\"\r\nconsole.log(planResult.iterations);    // 0 — no tool calls were made\r\n```\r\n\r\n```typescript\r\n// Step 2: After reviewing the plan, run again with approvedPlan\r\nconst execLoop = new AgenticLoop({\r\n  llm,\r\n  agent: {\r\n    id: \"planner\",\r\n    name: \"Planner\",\r\n    prompt: \"You are a senior engineer.\",\r\n  },\r\n  tools,\r\n  executor: new DefaultToolExecutor(tools),\r\n  hooks: new DefaultHookManager(),\r\n  context: new DefaultContextBuilder(),\r\n  planMode: true,\r\n  approvedPlan: planResult.output,  // <-- inject the approved plan\r\n});\r\n\r\nconst execResult = await execLoop.run(\"Refactor the auth module to use JWT\", \"session-1\");\r\n\r\n// Now the agent executes — following the plan step by step\r\nconsole.log(execResult.finishReason);  // \"complete\"\r\nconsole.log(execResult.iterations);    // 7\r\nconsole.log(execResult.toolCalls);     // read_file, write_file, run_command, ...\r\n```\r\n\r\n**What happens under the hood:**\r\n\r\n| Phase | `planMode: true` | `planMode: true` + `approvedPlan` |\r\n|-------|------------------|-----------------------------------|\r\n| Tools sent to LLM | None (forces text-only) | All tools available |\r\n| System prompt | Adds \"Create a step-by-step plan...\" | Injects plan in `<approved-plan>` tags |\r\n| Loop iterations | 0 (single LLM call) | Normal loop (think → execute → verify) |\r\n| `finishReason` | `\"plan_pending\"` | `\"complete\"` |\r\n\r\n**Listening for plan events:**\r\n\r\n```typescript\r\nconst loop = new AgenticLoop({\r\n  // ...config...\r\n  planMode: true,\r\n  onEvent: (event) => {\r\n    if (event.type === \"plan:ready\") {\r\n      console.log(\"Plan received:\", event.plan);\r\n      // Show to user for approval in your UI\r\n    }\r\n  },\r\n});\r\n```\r\n\r\n### 13. MCP — Connect External Tool Servers\r\n\r\n[Model Context Protocol (MCP)](https://modelcontextprotocol.io) is a standard for connecting AI agents to external tool servers. With MCP, your agent can use tools from **any MCP-compatible server** — without writing tool definitions by hand.\r\n\r\nagent-core provides `MCPToolBridge` — it discovers tools from MCP servers and converts them to native agent-core tools automatically.\r\n\r\n```typescript\r\nimport type { MCPClient } from \"@awesome-agent/agent-core\";\r\nimport { MCPToolBridge, DefaultToolRegistry, AgenticLoop } from \"@awesome-agent/agent-core\";\r\n\r\n// Step 1: Create MCP clients\r\n// You implement the MCPClient interface per transport (stdio, WebSocket, SSE).\r\n// Here's what a connected client looks like:\r\nconst revitClient: MCPClient = {\r\n  id: \"revit\",\r\n  name: \"Revit MCP Server\",\r\n  connect: async () => { /* connect via WebSocket */ },\r\n  disconnect: async () => { /* cleanup */ },\r\n  listTools: async () => [\r\n    { name: \"execute_script\", description: \"Run C# in Revit\", inputSchema: { type: \"object\" } },\r\n    { name: \"search_api\", description: \"Search Revit API\", inputSchema: { type: \"object\" } },\r\n  ],\r\n  callTool: async (name, args) => {\r\n    // Forward the call to the MCP server\r\n    return { content: [{ type: \"text\", text: \"Script executed successfully\" }] };\r\n  },\r\n};\r\n\r\nconst rhinoClient: MCPClient = {\r\n  id: \"rhino\",\r\n  name: \"Rhino MCP Server\",\r\n  connect: async () => {},\r\n  disconnect: async () => {},\r\n  listTools: async () => [\r\n    { name: \"execute_script\", description: \"Run Python in Rhino\", inputSchema: { type: \"object\" } },\r\n  ],\r\n  callTool: async (name, args) => {\r\n    return { content: [{ type: \"text\", text: \"ok\" }] };\r\n  },\r\n};\r\n```\r\n\r\n```typescript\r\n// Step 2a: Manual bridge — discover and register tools yourself\r\nconst registry = new DefaultToolRegistry();\r\nconst bridge = new MCPToolBridge(revitClient);\r\nawait bridge.registerAll(registry);\r\n\r\nconsole.log(registry.has(\"revit_execute_script\")); // true — prefixed with client ID\r\nconsole.log(registry.has(\"revit_search_api\"));     // true\r\n```\r\n\r\n```typescript\r\n// Step 2b: Or use the loop's built-in MCP support — just pass clients\r\nconst loop = new AgenticLoop({\r\n  llm,\r\n  agent: {\r\n    id: \"architect\",\r\n    name: \"Architect\",\r\n    prompt: \"You help with BIM modeling across Revit and Rhino.\",\r\n  },\r\n  tools: new DefaultToolRegistry(),  // starts empty\r\n  executor: new DefaultToolExecutor(new DefaultToolRegistry()),\r\n  hooks: new DefaultHookManager(),\r\n  context: new DefaultContextBuilder(),\r\n  mcpClients: [revitClient, rhinoClient],  // <-- auto-discovered at loop start\r\n});\r\n\r\n// At the start of loop.run():\r\n// 1. MCPToolBridge.registerFromClients() discovers tools from both servers\r\n// 2. \"revit_execute_script\", \"revit_search_api\", \"rhino_execute_script\" are registered\r\n// 3. The agent can now use tools from both servers seamlessly\r\n\r\nconst result = await loop.run(\"Create a wall in Revit and export it to Rhino\", \"session-1\");\r\n```\r\n\r\n**Tool naming:** MCP tools are prefixed with the client ID to avoid collisions. If both Revit and Rhino have `execute_script`, they become `revit_execute_script` and `rhino_execute_script`.\r\n\r\n**Filtering tools:**\r\n\r\n```typescript\r\n// Custom prefix\r\nconst bridge = new MCPToolBridge(revitClient, {\r\n  toolPrefix: \"bim_\",  // tools become \"bim_execute_script\", \"bim_search_api\"\r\n});\r\n\r\n// Include/exclude with glob patterns\r\nconst bridge = new MCPToolBridge(revitClient, {\r\n  includeFilter: [\"execute_*\"],     // only tools matching this pattern\r\n  excludeFilter: [\"*_dangerous\"],   // exclude tools matching this pattern\r\n});\r\n```\r\n\r\n**Handling images from MCP tools:**\r\n\r\nMCP tools can return images (e.g., viewport captures). These are automatically converted to `ToolFile` objects:\r\n\r\n```typescript\r\n// If an MCP tool returns an image:\r\n// { content: [{ type: \"image\", data: \"base64...\", mimeType: \"image/png\" }] }\r\n//\r\n// The bridge converts it to:\r\n// { success: true, content: \"...\", files: [{ name: \"image\", mimeType: \"image/png\", data: \"base64...\" }] }\r\n```\r\n\r\n## LLM Providers\r\n\r\nInstall an adapter package, then point it at your provider:\r\n\r\n```bash\r\nnpm install @awesome-agent/adapter-openai\r\n```\r\n\r\n```typescript\r\nimport { OpenAIAdapter } from \"@awesome-agent/adapter-openai\";\r\n// OpenAI\r\nconst llm = new OpenAIAdapter({\r\n  baseURL: \"https://api.openai.com/v1\",\r\n  apiKey: \"sk-...\",\r\n});\r\n\r\n// OpenRouter (access to Anthropic, Gemini, Llama, etc.)\r\nconst llm = new OpenAIAdapter({\r\n  baseURL: \"https://openrouter.ai/api/v1\",\r\n  apiKey: \"or-...\",\r\n});\r\n\r\n// Groq (fast inference)\r\nconst llm = new OpenAIAdapter({\r\n  baseURL: \"https://api.groq.com/openai/v1\",\r\n  apiKey: \"gsk-...\",\r\n});\r\n\r\n// Ollama (local, no API key needed)\r\nconst llm = new OpenAIAdapter({\r\n  baseURL: \"http://localhost:11434/v1\",\r\n});\r\n\r\n// Any other OpenAI-compatible server\r\nconst llm = new OpenAIAdapter({\r\n  baseURL: \"https://your-server.com/v1\",\r\n  apiKey: \"your-key\",\r\n  defaultHeaders: { \"X-Custom-Header\": \"value\" },\r\n});\r\n```\r\n\r\nTo add a completely custom provider, implement the `LLMAdapter` interface:\r\n\r\n```typescript\r\nimport type { LLMAdapter, LLMRequest, LLMStream } from \"@awesome-agent/agent-core\";\r\n\r\nclass MyCustomAdapter implements LLMAdapter {\r\n  async stream(request: LLMRequest): Promise<LLMStream> {\r\n    // Connect to your LLM, return a stream of events\r\n    // See @awesome-agent/adapter-openai source for a complete example\r\n  }\r\n}\r\n```\r\n\r\n## Architecture\r\n\r\n```\r\nsrc/\r\n├── loop/       Core loop + state machine\r\n│               AgenticLoop runs: gather → think → execute → verify → repeat\r\n│\r\n├── llm/        LLM interfaces + utilities (provider-agnostic)\r\n│               LLMAdapter interface, DefaultLLMStream, SSE parser\r\n│               MockLLMAdapter (testing), RetryLLMAdapter (decorator)\r\n│\r\n├── tool/       Tool system\r\n│               DefaultToolRegistry (register/lookup tools by name)\r\n│               DefaultToolExecutor (parallel execution)\r\n│               MiddlewarePipeline (before/after hooks on every tool call)\r\n│\r\n├── hook/       Event hooks\r\n│               DefaultHookManager (block, modify, or observe loop events)\r\n│               Type-safe payloads per event\r\n│\r\n├── context/    Context management\r\n│               DefaultContextBuilder (assembles system prompt + skills)\r\n│               DefaultPruner (drop old messages when over token limit)\r\n│               LLMCompactor (summarize old messages with LLM)\r\n│\r\n├── skill/      Skill system\r\n│               DefaultSkillRegistry (register skills with triggers)\r\n│               DefaultSkillDetector (match user input to skills)\r\n│\r\n├── agent/      Agent configuration\r\n│               AgentConfigBuilder (fluent config API)\r\n│               Permission matching (glob patterns)\r\n│               DefaultSubagentRunner (spawn child agents)\r\n│\r\n├── memory/     Memory system (interface-only)\r\n│               MemoryStore interface (save, search, delete, getAll)\r\n│               Implementations live outside core (Firestore, file system, etc.)\r\n│\r\n├── mcp/        Model Context Protocol bridge\r\n│               MCPToolBridge (convert MCP tools to native Tool format)\r\n│               Auto-discovery via mcpClients config\r\n│\r\n└── schema/     JSON Schema types\r\n```\r\n\r\n## Development\r\n\r\n```bash\r\nnpm install          # Install dependencies (TypeScript + Vitest only)\r\nnpm run build        # Compile to dist/\r\nnpm run dev          # Watch mode — recompile on save\r\nnpm test             # Run all 243 tests\r\nnpm run test:watch   # Interactive test mode\r\n```\r\n\r\n## Design Principles\r\n\r\n- **Zero runtime dependencies** — Only TypeScript and Vitest (dev). No HTTP, database, or auth code.\r\n- **Provider-agnostic** — Swap LLM providers by changing one URL. No vendor lock-in.\r\n- **Minimal core** — The loop is simple. Complexity lives in hooks and middleware.\r\n- **Immutable state** — Loop state changes through pure functions, never mutated directly.\r\n- **Strict TypeScript** — Discriminated unions, exhaustive checks, full type safety.\r\n\r\n## License\r\n\r\nMIT\r\n","readmeFilename":"README.md"}