{"_id":"@ai-sdk-tool/harness","_rev":"17-d01d06e91477ce333672e82045dc551b","name":"@ai-sdk-tool/harness","dist-tags":{"latest":"1.3.3"},"versions":{"0.1.0":{"name":"@ai-sdk-tool/harness","version":"0.1.0","_id":"@ai-sdk-tool/harness@0.1.0","maintainers":[{"name":"minpeter","email":"kali2005611@gmail.com"}],"dist":{"shasum":"e73df09966878caca72fe461eab9cdb62c008491","tarball":"https://registry.npmjs.org/@ai-sdk-tool/harness/-/harness-0.1.0.tgz","fileCount":25,"integrity":"sha512-oahfjYGlGAqqGWQtw/lD7usdS+KitWQagW1+h0F1EfX/ScsyJtarZmSUtO2c/UCnuwRM9WqXqDcU4c/CmmS4ZQ==","signatures":[{"sig":"MEUCID3nxGRScy9krO5j39+IjE4amiYD+Jiq6HipHAuBiCFyAiEAkFwW2LxQqoItHjEAILtjlV4ACsACdBXybfyXDkEVHG0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28497},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"19b6f1052f1f4e8201e346dfca28ba1003665c27","scripts":{"test":"bun test","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"minpeter","email":"kali2005611@gmail.com"},"_npmVersion":"11.10.0","directories":{},"_nodeVersion":"22.21.0","dependencies":{"ai":"^6.0.101"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3"},"peerDependencies":{"zod":"^4.3.6","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.0_1772472196789_0.4245111971071205","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@ai-sdk-tool/harness","version":"0.1.1","_id":"@ai-sdk-tool/harness@0.1.1","maintainers":[{"name":"minpeter","email":"kali2005611@gmail.com"}],"homepage":"https://github.com/minpeter/plugsuits#readme","bugs":{"url":"https://github.com/minpeter/plugsuits/issues"},"dist":{"shasum":"3776a5cfba9812fb076504305d8a84c6e03b80e7","tarball":"https://registry.npmjs.org/@ai-sdk-tool/harness/-/harness-0.1.1.tgz","fileCount":25,"integrity":"sha512-HY0KRdLT3ijKjdsIFjBsyE6j37CSTJ5k1J0NzcvJnk4g+77018ZOkt7/qEFyfQWboaRPaJNCWEQ7vVpEOat8QA==","signatures":[{"sig":"MEUCIFaOg5wConNRLuQMmh9KDhfmrFSeYZnxaw5H/RoVtT2eAiEA/CCSPj9hIXTtiAOa7Qwc0UqvJZ5wGOwB4lutn2p5s9U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-sdk-tool%2fharness@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":28659},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"993bb8181e0a9b5f81ba3527f9d51907cb0052a3","scripts":{"test":"bun test","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:78849709-3c9d-4a21-a8fe-4ae05ee6f55f"}},"repository":{"url":"git+https://github.com/minpeter/plugsuits.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.11.0","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ai":"^6.0.101"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3"},"peerDependencies":{"zod":"^4.3.6","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.1_1772478824226_0.8677840444345928","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@ai-sdk-tool/harness","version":"0.2.0","_id":"@ai-sdk-tool/harness@0.2.0","maintainers":[{"name":"minpeter","email":"kali2005611@gmail.com"}],"homepage":"https://github.com/minpeter/plugsuits#readme","bugs":{"url":"https://github.com/minpeter/plugsuits/issues"},"dist":{"shasum":"b02431533c58773b6711c4709e8978b4aa655ea1","tarball":"https://registry.npmjs.org/@ai-sdk-tool/harness/-/harness-0.2.0.tgz","fileCount":25,"integrity":"sha512-BhxbQOpSiq7NEHm5wHcXsWIot0bAEubYQ677pa0v+XnOuAU83B9mZTqLp4EUzX9gRwGwMCb8aF6i5qzWi8RXXw==","signatures":[{"sig":"MEQCIFwKOUb0InX0xT2VOWI7lJGWOGh0TTiWLIgrtnhSvHLrAiACw6SAxOZpfYSO7LXD3HvX3ZaoQZTV4DQvkJCDpErJWg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-sdk-tool%2fharness@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":50111},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"0b3faf50e8d04bc7a21cc01a2b58d90188857fff","scripts":{"test":"bun test","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:78849709-3c9d-4a21-a8fe-4ae05ee6f55f"}},"repository":{"url":"git+https://github.com/minpeter/plugsuits.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.11.0","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ai":"^6.0.101"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3"},"peerDependencies":{"zod":"^4.3.6","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.2.0_1772704249390_0.5602917101229126","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@ai-sdk-tool/harness","version":"0.2.1","_id":"@ai-sdk-tool/harness@0.2.1","maintainers":[{"name":"minpeter","email":"kali2005611@gmail.com"}],"homepage":"https://github.com/minpeter/plugsuits#readme","bugs":{"url":"https://github.com/minpeter/plugsuits/issues"},"dist":{"shasum":"6d720e44aaa11da7c8ed574a58613ccfcb8972f0","tarball":"https://registry.npmjs.org/@ai-sdk-tool/harness/-/harness-0.2.1.tgz","fileCount":26,"integrity":"sha512-mQOVRk0GOaaJkqhY3tAT/dhh7hDQmbBx2UbOYeEW4hinkHRW1Bsp8buPlOkefxxlv0vVlYYtF//sPb4xfSAp3g==","signatures":[{"sig":"MEQCIHJwkwEvIsSBgU1RP5Eh/xmRh2Oa4+niQNV0KaUTNPUFAiBLUNuNOhnt/qLBssoc0LQ7XHbcewVtN5RnAGIprwVJMg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-sdk-tool%2fharness@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63279},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"0274aed093b9a0f82ce96a7f980886486e7257b4","scripts":{"test":"bun test","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:78849709-3c9d-4a21-a8fe-4ae05ee6f55f"}},"repository":{"url":"git+https://github.com/minpeter/plugsuits.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.11.0","description":"A lightweight, model-agnostic agent harness built on the [Vercel AI SDK](https://sdk.vercel.ai). Provides the core loop, message history management, and tool orchestration primitives for building AI agents.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ai":"^6.0.101"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3"},"peerDependencies":{"zod":"^4.3.6","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.2.1_1772947944588_0.4969099875020011","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@ai-sdk-tool/harness","version":"0.3.0","_id":"@ai-sdk-tool/harness@0.3.0","maintainers":[{"name":"minpeter","email":"kali2005611@gmail.com"}],"homepage":"https://github.com/minpeter/plugsuits#readme","bugs":{"url":"https://github.com/minpeter/plugsuits/issues"},"dist":{"shasum":"7788f2c24b10da371e6a73a60d9c6441c7ffbcee","tarball":"https://registry.npmjs.org/@ai-sdk-tool/harness/-/harness-0.3.0.tgz","fileCount":30,"integrity":"sha512-M+EXkwCZb0JCMEII0gX2b0k+6Bt2JO9pvj3h4lTPPG57/jNpfo5i3wb1Ux4oIX8g57Ll77zcOQLkYNCJ8nZ28A==","signatures":[{"sig":"MEYCIQDwterQAc9YlqJ5qdBNIn4Tpxp/rgPi6dX2j3F7jgNsuwIhAMIJyDYV6SEuhJttD3uv/26iwnrI2VEoQLNiqLcJuB7i","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-sdk-tool%2fharness@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":91097},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"69e56dbc3aac5047a636bc3d7c048cb1b4fc0c30","scripts":{"test":"bun test","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:78849709-3c9d-4a21-a8fe-4ae05ee6f55f"}},"repository":{"url":"git+https://github.com/minpeter/plugsuits.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.11.0","description":"A lightweight, model-agnostic agent harness built on the [Vercel AI SDK](https://sdk.vercel.ai). Provides the core loop, message history management, and tool orchestration primitives for building AI agents.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ai":"^6.0.101"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@ai-sdk/openai":"^3.0.41"},"peerDependencies":{"zod":"^4.3.6","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.3.0_1773041541171_0.8326522759882167","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@ai-sdk-tool/harness","version":"0.3.1","_id":"@ai-sdk-tool/harness@0.3.1","maintainers":[{"name":"minpeter","email":"kali2005611@gmail.com"}],"homepage":"https://github.com/minpeter/plugsuits#readme","bugs":{"url":"https://github.com/minpeter/plugsuits/issues"},"dist":{"shasum":"d8850a5653884853cd284994fbf2d20e1a199ae0","tarball":"https://registry.npmjs.org/@ai-sdk-tool/harness/-/harness-0.3.1.tgz","fileCount":30,"integrity":"sha512-6YUNiLnQ4/BEAPoMhkO0D5cyLTnhlxRwXno3/7GOMDpXmSkQs579LB5RvLcqYbAPKL1EG9ef0xNRja0QB/ySBQ==","signatures":[{"sig":"MEYCIQDU35MCvsV4V/Qcyr0GJFgP51L5t1KcM+TpEaWLa/7eRgIhAN59uE3LPTiAfnuF1Mw3awqc4a+rLGT3hVy1JdMMVwuo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-sdk-tool%2fharness@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":90772},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"1d32a04e2c4adc7fdb668144cdf1f8ff4513608a","scripts":{"test":"bun test","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:78849709-3c9d-4a21-a8fe-4ae05ee6f55f"}},"repository":{"url":"git+https://github.com/minpeter/plugsuits.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.11.0","description":"A lightweight, model-agnostic agent harness built on the [Vercel AI SDK](https://sdk.vercel.ai). Provides the core loop, message history management, and tool orchestration primitives for building AI agents.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ai":"^6.0.101"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@ai-sdk/openai":"^3.0.41"},"peerDependencies":{"zod":"^4.3.6","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.3.1_1773045168644_0.13884546998393632","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@ai-sdk-tool/harness","version":"1.1.0","_id":"@ai-sdk-tool/harness@1.1.0","maintainers":[{"name":"minpeter","email":"kali2005611@gmail.com"}],"homepage":"https://github.com/minpeter/plugsuits#readme","bugs":{"url":"https://github.com/minpeter/plugsuits/issues"},"dist":{"shasum":"3b6502e794c310bf071f91722527445b3cc58f0f","tarball":"https://registry.npmjs.org/@ai-sdk-tool/harness/-/harness-1.1.0.tgz","fileCount":98,"integrity":"sha512-8YPhjpdUpvErDtuELrxqPUHcbxESMAOSbAWCrqQK50gCmj0jji7vDUQ777fqWQ17X/c7T6T5vbBSW4drSUIu5A==","signatures":[{"sig":"MEUCIQDoNr5N/3LdsfnL4MmqyVIgETuV2WHiOySLn4o82t6F9AIgH23eUIFRECTEOdVfc21z+mMZ4f8rcXovaz5Eonykj00=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-sdk-tool%2fharness@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":331824},"main":"./dist/index.js","type":"module","_from":"file:ai-sdk-tool-harness-1.1.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@ai-sdk-tool/source":"./src/index.ts"}},"scripts":{"test":"vitest run src","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:78849709-3c9d-4a21-a8fe-4ae05ee6f55f"}},"_resolved":"/tmp/586870d7cd9f2154bb07284a0c640839/ai-sdk-tool-harness-1.1.0.tgz","_integrity":"sha512-8YPhjpdUpvErDtuELrxqPUHcbxESMAOSbAWCrqQK50gCmj0jji7vDUQ777fqWQ17X/c7T6T5vbBSW4drSUIu5A==","repository":{"url":"git+https://github.com/minpeter/plugsuits.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.12.1","description":"A lightweight, model-agnostic agent harness built on the [Vercel AI SDK](https://sdk.vercel.ai). Provides the core loop, message history management, session lifecycle, skills loading, TODO continuation, command registry, and tool orchestration primitives ","directories":{},"_nodeVersion":"22.22.1","dependencies":{"ai":"^6.0.116","glob":"^13.0.6","yaml":"^2.8.2","@ai-sdk/provider":"^3.0.8"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.4.0","@ai-sdk/openai":"^3.0.41"},"peerDependencies":{"zod":"^4.3.6","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.1.0_1774979048580_0.8952972957088927","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@ai-sdk-tool/harness","version":"1.1.1","_id":"@ai-sdk-tool/harness@1.1.1","maintainers":[{"name":"minpeter","email":"kali2005611@gmail.com"}],"homepage":"https://github.com/minpeter/plugsuits#readme","bugs":{"url":"https://github.com/minpeter/plugsuits/issues"},"dist":{"shasum":"5c31d12a155605331db1b865fbc4f28d4a2eb2d3","tarball":"https://registry.npmjs.org/@ai-sdk-tool/harness/-/harness-1.1.1.tgz","fileCount":98,"integrity":"sha512-YzwbeYg/L/C+fFAqPWnlmDGNy3IF8QHT5tdvnCEoVrS/RfLVYmHD8wmB/GkSb30ldXh52ybmfQcVOzuufFWL3g==","signatures":[{"sig":"MEYCIQDlfKO8Bdb/rsj4t0G94X2XUItsRsXp+mmYDFJIXKDo4QIhAOHLalQKwb0VJYWSDNbPAh27ekq/ehh3zSQVvofbIDJa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-sdk-tool%2fharness@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":331986},"main":"./dist/index.js","type":"module","_from":"file:ai-sdk-tool-harness-1.1.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@ai-sdk-tool/source":"./src/index.ts"}},"scripts":{"test":"vitest run src","build":"tsc && node ../../scripts/fix-esm-imports.mjs dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:78849709-3c9d-4a21-a8fe-4ae05ee6f55f"}},"_resolved":"/tmp/e77d4013aadedb72a955e030cf21d5de/ai-sdk-tool-harness-1.1.1.tgz","_integrity":"sha512-YzwbeYg/L/C+fFAqPWnlmDGNy3IF8QHT5tdvnCEoVrS/RfLVYmHD8wmB/GkSb30ldXh52ybmfQcVOzuufFWL3g==","repository":{"url":"git+https://github.com/minpeter/plugsuits.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.12.1","description":"A lightweight, model-agnostic agent harness built on the [Vercel AI SDK](https://sdk.vercel.ai). Provides the core loop, message history management, session lifecycle, skills loading, TODO continuation, command registry, and tool orchestration primitives ","directories":{},"_nodeVersion":"22.22.1","dependencies":{"ai":"^6.0.116","glob":"^13.0.6","yaml":"^2.8.2","@ai-sdk/provider":"^3.0.8"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.4.0","@ai-sdk/openai":"^3.0.41"},"peerDependencies":{"zod":"^4.3.6","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.1.1_1774993064768_0.7784464286284678","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@ai-sdk-tool/harness","version":"1.2.0","_id":"@ai-sdk-tool/harness@1.2.0","maintainers":[{"name":"minpeter","email":"kali2005611@gmail.com"}],"homepage":"https://github.com/minpeter/plugsuits#readme","bugs":{"url":"https://github.com/minpeter/plugsuits/issues"},"dist":{"shasum":"692c1d437838821bb48b3990dfe4fc237d1e7fb7","tarball":"https://registry.npmjs.org/@ai-sdk-tool/harness/-/harness-1.2.0.tgz","fileCount":98,"integrity":"sha512-Mtz9CJ+3+S0HYxLJoM2op14PiYnYVnSOVhfwmTIrn7xp18CLGOTQXhv0tKZdzt2O70FnHdB25MsR5oWbT21PIw==","signatures":[{"sig":"MEYCIQCoEPoJXkzwUFGDcOWKcMJ5bvsKHMxphTUSY0teyOAcrwIhAOY9XbaRfwP854ieceyEsHRF8FKHOnWI1u9MGxL7x3mF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-sdk-tool%2fharness@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":333348},"main":"./dist/index.js","type":"module","_from":"file:ai-sdk-tool-harness-1.2.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@ai-sdk-tool/source":"./src/index.ts"}},"scripts":{"test":"vitest run src","build":"tsc && node ../../scripts/fix-esm-imports.mjs dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:78849709-3c9d-4a21-a8fe-4ae05ee6f55f"}},"_resolved":"/tmp/2d6464bca8caee6a24916e8bb0ea8ab7/ai-sdk-tool-harness-1.2.0.tgz","_integrity":"sha512-Mtz9CJ+3+S0HYxLJoM2op14PiYnYVnSOVhfwmTIrn7xp18CLGOTQXhv0tKZdzt2O70FnHdB25MsR5oWbT21PIw==","repository":{"url":"git+https://github.com/minpeter/plugsuits.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.12.1","description":"A lightweight, model-agnostic agent harness built on the [Vercel AI SDK](https://sdk.vercel.ai). Provides the core loop, message history management, session lifecycle, skills loading, TODO continuation, command registry, and tool orchestration primitives ","directories":{},"_nodeVersion":"22.22.1","dependencies":{"ai":"^6.0.116","glob":"^13.0.6","yaml":"^2.8.2","@ai-sdk/provider":"^3.0.8"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.4.0","@ai-sdk/openai":"^3.0.41"},"peerDependencies":{"zod":"^4.3.6","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.2.0_1775010063760_0.34268254849458923","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@ai-sdk-tool/harness","version":"1.2.1","_id":"@ai-sdk-tool/harness@1.2.1","maintainers":[{"name":"minpeter","email":"kali2005611@gmail.com"}],"homepage":"https://github.com/minpeter/plugsuits#readme","bugs":{"url":"https://github.com/minpeter/plugsuits/issues"},"dist":{"shasum":"b85ba8775aa1bbceb93d418835e2ffaf0ec26fcb","tarball":"https://registry.npmjs.org/@ai-sdk-tool/harness/-/harness-1.2.1.tgz","fileCount":146,"integrity":"sha512-JHnagYo7cpIQ1RBJM6qJeF1ZCqyDIXBceTo4+ZBGvKS4EBngi9DI6zXIuE4gB8QBAAs8bMhABP0L+tuKv8ii9w==","signatures":[{"sig":"MEUCIQDINUA25fqNSGyDgV8kIsC20cP9XNGk2xo8lvdGH2g+LQIgG6nm2bpwuBjYHjNnUILlozLF5NHlIqmAXn/OVLI5r0o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-sdk-tool%2fharness@1.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":614451},"main":"./dist/index.js","type":"module","_from":"file:ai-sdk-tool-harness-1.2.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@ai-sdk-tool/source":"./src/index.ts"}},"scripts":{"test":"vitest run src","build":"tsc && node ../../scripts/fix-esm-imports.mjs dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:78849709-3c9d-4a21-a8fe-4ae05ee6f55f"}},"_resolved":"/tmp/3fbd61819f69b2b8d6386c9b64627048/ai-sdk-tool-harness-1.2.1.tgz","_integrity":"sha512-JHnagYo7cpIQ1RBJM6qJeF1ZCqyDIXBceTo4+ZBGvKS4EBngi9DI6zXIuE4gB8QBAAs8bMhABP0L+tuKv8ii9w==","repository":{"url":"git+https://github.com/minpeter/plugsuits.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.11.0","description":"A lightweight, model-agnostic agent harness built on the [Vercel AI SDK](https://sdk.vercel.ai). Provides the core loop, message history management, session lifecycle, skills loading, TODO continuation, command registry, and tool orchestration primitives ","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ai":"^6.0.116","glob":"^13.0.6","yaml":"^2.8.2","@ai-sdk/provider":"^3.0.8","@t3-oss/env-core":"^0.13.10"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.4.0","@ai-sdk/openai":"^3.0.41"},"peerDependencies":{"zod":"^4.3.6","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.2.1_1775444206135_0.33232383113790465","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@ai-sdk-tool/harness","version":"1.2.2","_id":"@ai-sdk-tool/harness@1.2.2","maintainers":[{"name":"minpeter","email":"kali2005611@gmail.com"}],"homepage":"https://github.com/minpeter/plugsuits#readme","bugs":{"url":"https://github.com/minpeter/plugsuits/issues"},"dist":{"shasum":"f956a98c4df2c644d6d7d423b08c86fc27d416c3","tarball":"https://registry.npmjs.org/@ai-sdk-tool/harness/-/harness-1.2.2.tgz","fileCount":166,"integrity":"sha512-+gQnTC/sr/ZJ5R7XM7i+UctbCbMskV65rbCo7A0JhTcm4YgzGyZdAWtIz77ESeYQrSSUhZTah6/Cm8U6GJ52GQ==","signatures":[{"sig":"MEYCIQCO8sj6qPzDgkFHd8rjXP0MxOMMBGYkZM7ehz/Ce0Q8YgIhAMtVe0e/OhT/FdLskstwODASfSH7CkpXYoysTzDBMCgr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-sdk-tool%2fharness@1.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":666298},"main":"./dist/index.js","type":"module","_from":"file:ai-sdk-tool-harness-1.2.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@ai-sdk-tool/source":"./src/index.ts"}},"scripts":{"test":"vitest run src","build":"tsc && node ../../scripts/fix-esm-imports.mjs dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:78849709-3c9d-4a21-a8fe-4ae05ee6f55f"}},"_resolved":"/tmp/a57230030eb2b31b167656f2d061b58d/ai-sdk-tool-harness-1.2.2.tgz","_integrity":"sha512-+gQnTC/sr/ZJ5R7XM7i+UctbCbMskV65rbCo7A0JhTcm4YgzGyZdAWtIz77ESeYQrSSUhZTah6/Cm8U6GJ52GQ==","repository":{"url":"git+https://github.com/minpeter/plugsuits.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.11.0","description":"A lightweight, model-agnostic agent harness built on the [Vercel AI SDK](https://sdk.vercel.ai). Provides the core loop, message history management, session lifecycle, skills loading, TODO continuation, command registry, and tool orchestration primitives ","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ai":"^6.0.116","glob":"^13.0.6","yaml":"^2.8.2","@ai-sdk/mcp":"^1.0.32","@ai-sdk/provider":"^3.0.8","@t3-oss/env-core":"^0.13.10"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.4.0","@ai-sdk/openai":"^3.0.41"},"peerDependencies":{"zod":"^4.3.6","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.2.2_1775539440412_0.7793641635913282","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@ai-sdk-tool/harness","version":"1.2.3","_id":"@ai-sdk-tool/harness@1.2.3","maintainers":[{"name":"minpeter","email":"kali2005611@gmail.com"}],"homepage":"https://github.com/minpeter/plugsuits#readme","bugs":{"url":"https://github.com/minpeter/plugsuits/issues"},"dist":{"shasum":"38bb00e5a214e3907366b38e487d003344288f8a","tarball":"https://registry.npmjs.org/@ai-sdk-tool/harness/-/harness-1.2.3.tgz","fileCount":170,"integrity":"sha512-9BCOMheArnqBG/Tmfm6JuFBh7CWw89gNrDeeGn1UgRLsnI8+7nSUoIq1YaGYXGEBKO6K/0eZ5aspPI76LiY8VA==","signatures":[{"sig":"MEUCIQCAcNl/43gDIXwBhcXu675a38wy+d5hKjfkIkek0ojNrAIgNuL8DRgpLgVYdGkMLILyNCkXE/TWLffsx/pRZ/ZfWns=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-sdk-tool%2fharness@1.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":675173},"main":"./dist/index.js","type":"module","_from":"file:ai-sdk-tool-harness-1.2.3.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@ai-sdk-tool/source":"./src/index.ts"}},"scripts":{"test":"vitest run src","build":"tsc && node ../../scripts/fix-esm-imports.mjs dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:78849709-3c9d-4a21-a8fe-4ae05ee6f55f"}},"_resolved":"/tmp/1c3e33521b7a3f778f14d8711f5f4178/ai-sdk-tool-harness-1.2.3.tgz","_integrity":"sha512-9BCOMheArnqBG/Tmfm6JuFBh7CWw89gNrDeeGn1UgRLsnI8+7nSUoIq1YaGYXGEBKO6K/0eZ5aspPI76LiY8VA==","repository":{"url":"git+https://github.com/minpeter/plugsuits.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.11.0","description":"A lightweight, model-agnostic agent harness built on the [Vercel AI SDK](https://sdk.vercel.ai). Provides the core loop, message history management, session lifecycle, skills loading, TODO continuation, command registry, and tool orchestration primitives ","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ai":"^6.0.116","glob":"^13.0.6","yaml":"^2.8.2","@ai-sdk/mcp":"^1.0.32","@ai-sdk/provider":"^3.0.8","@t3-oss/env-core":"^0.13.10"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.4.0","@ai-sdk/openai":"^3.0.41"},"peerDependencies":{"zod":"^4.3.6","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.2.3_1775629207426_0.8881266185358572","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"@ai-sdk-tool/harness","version":"1.2.4","_id":"@ai-sdk-tool/harness@1.2.4","maintainers":[{"name":"minpeter","email":"kali2005611@gmail.com"}],"homepage":"https://github.com/minpeter/plugsuits#readme","bugs":{"url":"https://github.com/minpeter/plugsuits/issues"},"dist":{"shasum":"6b38699f693174b5aa9938a7a921d779e1dbb49c","tarball":"https://registry.npmjs.org/@ai-sdk-tool/harness/-/harness-1.2.4.tgz","fileCount":182,"integrity":"sha512-y41mWWHuQctLkPUYGWwlpKz7KRQCyq3Lo8HTbTmmuEuSHXIY7KuInpwnUqP+bdG1My7TDNijjIiCkiwNGm2ryg==","signatures":[{"sig":"MEYCIQCIjffHDHher31FZI+7NPpfcJIDRB8PGLVrTpk5kqCsYQIhAJ1Caig8uUdxfuXFk0cYaUgDwvp9rD6vfjSs+Q2/wxRg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-sdk-tool%2fharness@1.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":703196},"main":"./dist/index.js","type":"module","_from":"file:ai-sdk-tool-harness-1.2.4.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@ai-sdk-tool/source":"./src/index.ts"}},"scripts":{"test":"vitest run src","build":"tsc && node ../../scripts/fix-esm-imports.mjs dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:78849709-3c9d-4a21-a8fe-4ae05ee6f55f"}},"_resolved":"/tmp/1bfef3cc592d12b8d464f4ead0e43de5/ai-sdk-tool-harness-1.2.4.tgz","_integrity":"sha512-y41mWWHuQctLkPUYGWwlpKz7KRQCyq3Lo8HTbTmmuEuSHXIY7KuInpwnUqP+bdG1My7TDNijjIiCkiwNGm2ryg==","repository":{"url":"git+https://github.com/minpeter/plugsuits.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.11.0","description":"A lightweight, model-agnostic agent harness built on the [Vercel AI SDK](https://sdk.vercel.ai). Provides the core loop, message history management, session lifecycle, skills loading, TODO continuation, command registry, and tool orchestration primitives ","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ai":"^6.0.116","glob":"^13.0.6","yaml":"^2.8.2","@ai-sdk/mcp":"^1.0.32","@ai-sdk/provider":"^3.0.8","@t3-oss/env-core":"^0.13.10"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.4.0","@ai-sdk/openai":"^3.0.41"},"peerDependencies":{"zod":"^4.3.6","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.2.4_1775985603884_0.5070846272436444","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@ai-sdk-tool/harness","version":"1.3.0","_id":"@ai-sdk-tool/harness@1.3.0","maintainers":[{"name":"minpeter","email":"kali2005611@gmail.com"}],"homepage":"https://github.com/minpeter/plugsuits#readme","bugs":{"url":"https://github.com/minpeter/plugsuits/issues"},"dist":{"shasum":"df47458d8437cb6a25220d7bcbca6bb33592a56d","tarball":"https://registry.npmjs.org/@ai-sdk-tool/harness/-/harness-1.3.0.tgz","fileCount":258,"integrity":"sha512-/S8XduHfeCxAY8OJFppDSkXqcH7G0vhUsLhHwrK/sMoYCc0Ia6AK5gcc/noz945sthom6QJzdB07IQBKWSDN1A==","signatures":[{"sig":"MEQCIE6eSksdDAFem/Pxqwx8fAM0JTx7gI9TWDrtvyxxh/j7AiBujXwS0Y31SYLdW3ws+bn9UnMWVqFtu3gStUEiCDUB+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-sdk-tool%2fharness@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":797358},"main":"./dist/index.js","type":"module","_from":"file:ai-sdk-tool-harness-1.3.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@ai-sdk-tool/source":"./src/index.ts"},"./mcp":{"types":"./dist/subpath/mcp.d.ts","import":"./dist/subpath/mcp.js","@ai-sdk-tool/source":"./src/subpath/mcp.ts"},"./utils":{"types":"./dist/subpath/utils.d.ts","import":"./dist/subpath/utils.js","@ai-sdk-tool/source":"./src/subpath/utils.ts"},"./memory":{"types":"./dist/subpath/memory.d.ts","import":"./dist/subpath/memory.js","@ai-sdk-tool/source":"./src/subpath/memory.ts"},"./skills":{"types":"./dist/subpath/skills.d.ts","import":"./dist/subpath/skills.js","@ai-sdk-tool/source":"./src/subpath/skills.ts"},"./runtime":{"types":"./dist/subpath/runtime.d.ts","import":"./dist/subpath/runtime.js","@ai-sdk-tool/source":"./src/subpath/runtime.ts"},"./commands":{"types":"./dist/subpath/commands.d.ts","import":"./dist/subpath/commands.js","@ai-sdk-tool/source":"./src/subpath/commands.ts"},"./sessions":{"types":"./dist/subpath/sessions.d.ts","import":"./dist/subpath/sessions.js","@ai-sdk-tool/source":"./src/subpath/sessions.ts"},"./compaction":{"types":"./dist/subpath/compaction.d.ts","import":"./dist/subpath/compaction.js","@ai-sdk-tool/source":"./src/subpath/compaction.ts"}},"scripts":{"test":"vitest run src","build":"tsc && node ../../scripts/fix-esm-imports.mjs dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:78849709-3c9d-4a21-a8fe-4ae05ee6f55f"}},"_resolved":"/tmp/f30dea32577f606d158a82154cac4ae7/ai-sdk-tool-harness-1.3.0.tgz","_integrity":"sha512-/S8XduHfeCxAY8OJFppDSkXqcH7G0vhUsLhHwrK/sMoYCc0Ia6AK5gcc/noz945sthom6QJzdB07IQBKWSDN1A==","repository":{"url":"git+https://github.com/minpeter/plugsuits.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.11.0","description":"A lightweight, model-agnostic agent harness built on the [Vercel AI SDK](https://sdk.vercel.ai). Provides the core loop, message history management, session lifecycle, skills loading, TODO continuation, command registry, and tool orchestration primitives ","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ai":"^6.0.116","glob":"^13.0.6","yaml":"^2.8.2","@ai-sdk/mcp":"^1.0.32","@ai-sdk/provider":"^3.0.8","@t3-oss/env-core":"^0.13.10"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.4.0","@ai-sdk/openai":"^3.0.41"},"peerDependencies":{"zod":"^4.3.6","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.3.0_1776364827123_0.1645056939354188","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@ai-sdk-tool/harness","version":"1.3.1","_id":"@ai-sdk-tool/harness@1.3.1","maintainers":[{"name":"minpeter","email":"kali2005611@gmail.com"}],"homepage":"https://github.com/minpeter/plugsuits#readme","bugs":{"url":"https://github.com/minpeter/plugsuits/issues"},"dist":{"shasum":"5735fabd0b5a370801f912c0771d748854524b6c","tarball":"https://registry.npmjs.org/@ai-sdk-tool/harness/-/harness-1.3.1.tgz","fileCount":274,"integrity":"sha512-UyHjXnAqon+qdLUG9bcYQEoD+7ZMnryJbgUXv+J8ywZYBnZXLj0vA0vDCf9apuhJwRi1/lI1+7hFdb2GP3/wTw==","signatures":[{"sig":"MEQCIDxm6MrfAH2wODs1vXEv0hCZWaNOqXTR4W+SYHquxWZbAiBcxI3Z1sYVx4eApyhmUDtIsCAtdc9yx2LFg2F+f8Akuw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-sdk-tool%2fharness@1.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":839219},"main":"./dist/index.js","type":"module","_from":"file:ai-sdk-tool-harness-1.3.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@ai-sdk-tool/source":"./src/index.ts"},"./mcp":{"types":"./dist/subpath/mcp.d.ts","import":"./dist/subpath/mcp.js","@ai-sdk-tool/source":"./src/subpath/mcp.ts"},"./utils":{"types":"./dist/subpath/utils.d.ts","import":"./dist/subpath/utils.js","@ai-sdk-tool/source":"./src/subpath/utils.ts"},"./memory":{"types":"./dist/subpath/memory.d.ts","import":"./dist/subpath/memory.js","@ai-sdk-tool/source":"./src/subpath/memory.ts"},"./skills":{"types":"./dist/subpath/skills.d.ts","import":"./dist/subpath/skills.js","@ai-sdk-tool/source":"./src/subpath/skills.ts"},"./runtime":{"types":"./dist/subpath/runtime.d.ts","import":"./dist/subpath/runtime.js","@ai-sdk-tool/source":"./src/subpath/runtime.ts"},"./commands":{"types":"./dist/subpath/commands.d.ts","import":"./dist/subpath/commands.js","@ai-sdk-tool/source":"./src/subpath/commands.ts"},"./sessions":{"types":"./dist/subpath/sessions.d.ts","import":"./dist/subpath/sessions.js","@ai-sdk-tool/source":"./src/subpath/sessions.ts"},"./compaction":{"types":"./dist/subpath/compaction.d.ts","import":"./dist/subpath/compaction.js","@ai-sdk-tool/source":"./src/subpath/compaction.ts"},"./preferences":{"types":"./dist/subpath/preferences.d.ts","import":"./dist/subpath/preferences.js","@ai-sdk-tool/source":"./src/subpath/preferences.ts"}},"scripts":{"test":"vitest run src","build":"tsc && node ../../scripts/fix-esm-imports.mjs dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:78849709-3c9d-4a21-a8fe-4ae05ee6f55f"}},"_resolved":"/tmp/f8f38e35307ca993a1067ad6680de9a9/ai-sdk-tool-harness-1.3.1.tgz","_integrity":"sha512-UyHjXnAqon+qdLUG9bcYQEoD+7ZMnryJbgUXv+J8ywZYBnZXLj0vA0vDCf9apuhJwRi1/lI1+7hFdb2GP3/wTw==","repository":{"url":"git+https://github.com/minpeter/plugsuits.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.11.0","description":"A lightweight, model-agnostic agent harness built on the [Vercel AI SDK](https://sdk.vercel.ai). Provides the core loop, message history management, session lifecycle, skills loading, TODO continuation, command registry, and tool orchestration primitives ","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ai":"^6.0.168","glob":"^13.0.6","yaml":"2.8.3","@ai-sdk/mcp":"^1.0.36","@ai-sdk/provider":"^3.0.8","@t3-oss/env-core":"^0.13.11"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@types/node":"^25.6.0","@ai-sdk/openai":"^3.0.53"},"peerDependencies":{"zod":"^4.3.6","typescript":"^5.0.0 || ^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.3.1_1776852564893_0.022846691727040458","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"@ai-sdk-tool/harness","version":"1.3.2","_id":"@ai-sdk-tool/harness@1.3.2","maintainers":[{"name":"minpeter","email":"kali2005611@gmail.com"}],"homepage":"https://github.com/minpeter/plugsuits#readme","bugs":{"url":"https://github.com/minpeter/plugsuits/issues"},"dist":{"shasum":"6175ea966e7b4f87374da307dea4b60d6a18134d","tarball":"https://registry.npmjs.org/@ai-sdk-tool/harness/-/harness-1.3.2.tgz","fileCount":274,"integrity":"sha512-/aA8d1Sofnf4cUP9zDJYk/DZfwWmxkMMMSpgHArcsl3voQAoGR6lNZcD1u1NiHZQudsCz7OYXcJXUxYjgX2zKQ==","signatures":[{"sig":"MEUCIQCDAyi+zVrWYSc3sCEeJ0aiWvyyXFLPNQ3ouMJ84MjuEgIgUt9QT/hZNo/wj2gTHMhF0dAQgqfwkxtIauDTKt9K7SU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-sdk-tool%2fharness@1.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":840113},"main":"./dist/index.js","type":"module","_from":"file:ai-sdk-tool-harness-1.3.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@ai-sdk-tool/source":"./src/index.ts"},"./mcp":{"types":"./dist/subpath/mcp.d.ts","import":"./dist/subpath/mcp.js","@ai-sdk-tool/source":"./src/subpath/mcp.ts"},"./utils":{"types":"./dist/subpath/utils.d.ts","import":"./dist/subpath/utils.js","@ai-sdk-tool/source":"./src/subpath/utils.ts"},"./memory":{"types":"./dist/subpath/memory.d.ts","import":"./dist/subpath/memory.js","@ai-sdk-tool/source":"./src/subpath/memory.ts"},"./skills":{"types":"./dist/subpath/skills.d.ts","import":"./dist/subpath/skills.js","@ai-sdk-tool/source":"./src/subpath/skills.ts"},"./runtime":{"types":"./dist/subpath/runtime.d.ts","import":"./dist/subpath/runtime.js","@ai-sdk-tool/source":"./src/subpath/runtime.ts"},"./commands":{"types":"./dist/subpath/commands.d.ts","import":"./dist/subpath/commands.js","@ai-sdk-tool/source":"./src/subpath/commands.ts"},"./sessions":{"types":"./dist/subpath/sessions.d.ts","import":"./dist/subpath/sessions.js","@ai-sdk-tool/source":"./src/subpath/sessions.ts"},"./compaction":{"types":"./dist/subpath/compaction.d.ts","import":"./dist/subpath/compaction.js","@ai-sdk-tool/source":"./src/subpath/compaction.ts"},"./preferences":{"types":"./dist/subpath/preferences.d.ts","import":"./dist/subpath/preferences.js","@ai-sdk-tool/source":"./src/subpath/preferences.ts"}},"scripts":{"test":"vitest run src","build":"tsc && node ../../scripts/fix-esm-imports.mjs dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:78849709-3c9d-4a21-a8fe-4ae05ee6f55f"}},"_resolved":"/tmp/9c969df9f6b63406cc57afcaa112c99f/ai-sdk-tool-harness-1.3.2.tgz","_integrity":"sha512-/aA8d1Sofnf4cUP9zDJYk/DZfwWmxkMMMSpgHArcsl3voQAoGR6lNZcD1u1NiHZQudsCz7OYXcJXUxYjgX2zKQ==","repository":{"url":"git+https://github.com/minpeter/plugsuits.git","type":"git","directory":"packages/harness"},"_npmVersion":"11.11.0","description":"A lightweight, model-agnostic agent harness built on the [Vercel AI SDK](https://sdk.vercel.ai). Provides the core loop, message history management, session lifecycle, skills loading, TODO continuation, command registry, and tool orchestration primitives ","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ai":"^6.0.168","glob":"^13.0.6","yaml":"2.8.3","@ai-sdk/mcp":"^1.0.36","@ai-sdk/provider":"^3.0.8","@t3-oss/env-core":"^0.13.11"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@types/node":"^25.6.0","@ai-sdk/openai":"^3.0.53"},"peerDependencies":{"zod":"^4.3.6","typescript":"^5.0.0 || ^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.3.2_1777013769487_0.35299785331396816","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"@ai-sdk-tool/harness","version":"1.3.3","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"@ai-sdk-tool/source":"./src/index.ts","types":"./dist/index.d.ts","import":"./dist/index.js"},"./compaction":{"@ai-sdk-tool/source":"./src/subpath/compaction.ts","import":"./dist/subpath/compaction.js","types":"./dist/subpath/compaction.d.ts"},"./sessions":{"@ai-sdk-tool/source":"./src/subpath/sessions.ts","import":"./dist/subpath/sessions.js","types":"./dist/subpath/sessions.d.ts"},"./runtime":{"@ai-sdk-tool/source":"./src/subpath/runtime.ts","types":"./dist/subpath/runtime.d.ts","import":"./dist/subpath/runtime.js"},"./memory":{"@ai-sdk-tool/source":"./src/subpath/memory.ts","import":"./dist/subpath/memory.js","types":"./dist/subpath/memory.d.ts"},"./preferences":{"@ai-sdk-tool/source":"./src/subpath/preferences.ts","import":"./dist/subpath/preferences.js","types":"./dist/subpath/preferences.d.ts"},"./mcp":{"@ai-sdk-tool/source":"./src/subpath/mcp.ts","import":"./dist/subpath/mcp.js","types":"./dist/subpath/mcp.d.ts"},"./commands":{"@ai-sdk-tool/source":"./src/subpath/commands.ts","import":"./dist/subpath/commands.js","types":"./dist/subpath/commands.d.ts"},"./skills":{"@ai-sdk-tool/source":"./src/subpath/skills.ts","import":"./dist/subpath/skills.js","types":"./dist/subpath/skills.d.ts"},"./utils":{"@ai-sdk-tool/source":"./src/subpath/utils.ts","import":"./dist/subpath/utils.js","types":"./dist/subpath/utils.d.ts"},"./env-node":{"@ai-sdk-tool/source":"./src/env-node.ts","import":"./dist/env-node.js","types":"./dist/env-node.d.ts"}},"repository":{"type":"git","url":"git+https://github.com/minpeter/plugsuits.git","directory":"packages/harness"},"publishConfig":{"access":"public","provenance":true},"dependencies":{"@ai-sdk/mcp":"^1.0.36","@ai-sdk/provider":"^3.0.8","@t3-oss/env-core":"^0.13.11","ai":"^6.0.168","glob":"^13.0.6","yaml":"2.8.3"},"peerDependencies":{"typescript":"^5.0.0 || ^6.0.0","zod":"^4.3.6"},"devDependencies":{"@ai-sdk/openai":"^3.0.53","@types/node":"^25.6.0","typescript":"^6.0.3"},"engines":{"node":">=22.19.0"},"scripts":{"build":"tsc && node ../../scripts/fix-esm-imports.mjs dist","typecheck":"tsc --noEmit","test":"vitest run src"},"_id":"@ai-sdk-tool/harness@1.3.3","description":"A lightweight, model-agnostic agent harness built on the [Vercel AI SDK](https://sdk.vercel.ai). Provides the core loop, message history management, session lifecycle, skills loading, TODO continuation, command registry, and tool orchestration primitives ","bugs":{"url":"https://github.com/minpeter/plugsuits/issues"},"homepage":"https://github.com/minpeter/plugsuits#readme","_integrity":"sha512-hB9K/CSnLDXVA6aOxiuFXvDPu5J8wsGPMom+DNKKBrgFjGuoJvu4Hs91i/kZVB64bh4riJEPXe0BqwAqeu1Vlw==","_resolved":"/tmp/7673d2b37bc87b9ff1ddf83317422128/ai-sdk-tool-harness-1.3.3.tgz","_from":"file:ai-sdk-tool-harness-1.3.3.tgz","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-hB9K/CSnLDXVA6aOxiuFXvDPu5J8wsGPMom+DNKKBrgFjGuoJvu4Hs91i/kZVB64bh4riJEPXe0BqwAqeu1Vlw==","shasum":"38093b49a822e260c98d945bc199080438d5f5d4","tarball":"https://registry.npmjs.org/@ai-sdk-tool/harness/-/harness-1.3.3.tgz","fileCount":286,"unpackedSize":863568,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-sdk-tool%2fharness@1.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHqoDoVRv38x3DLAvdEKL4+ZiqFOuHqJdWlMpJvjs7nnAiEAmqYiSSVSIOvUU+vWS4RcHM0wzSuTf/6J4T5T/A/Evnc="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:78849709-3c9d-4a21-a8fe-4ae05ee6f55f"}},"directories":{},"maintainers":[{"name":"minpeter","email":"kali2005611@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/harness_1.3.3_1777311722000_0.954503789661985"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-02T17:23:16.665Z","modified":"2026-04-27T17:42:02.457Z","0.1.0":"2026-03-02T17:23:16.955Z","0.1.1":"2026-03-02T19:13:44.425Z","0.2.0":"2026-03-05T09:50:49.527Z","0.2.1":"2026-03-08T05:32:24.746Z","0.3.0":"2026-03-09T07:32:21.304Z","0.3.1":"2026-03-09T08:32:48.819Z","1.1.0":"2026-03-31T17:44:08.750Z","1.1.1":"2026-03-31T21:37:44.990Z","1.2.0":"2026-04-01T02:21:03.896Z","1.2.1":"2026-04-06T02:56:46.327Z","1.2.2":"2026-04-07T05:24:00.587Z","1.2.3":"2026-04-08T06:20:07.671Z","1.2.4":"2026-04-12T09:20:04.113Z","1.3.0":"2026-04-16T18:40:27.272Z","1.3.1":"2026-04-22T10:09:25.071Z","1.3.2":"2026-04-24T06:56:09.663Z","1.3.3":"2026-04-27T17:42:02.195Z"},"bugs":{"url":"https://github.com/minpeter/plugsuits/issues"},"homepage":"https://github.com/minpeter/plugsuits#readme","repository":{"type":"git","url":"git+https://github.com/minpeter/plugsuits.git","directory":"packages/harness"},"description":"A lightweight, model-agnostic agent harness built on the [Vercel AI SDK](https://sdk.vercel.ai). Provides the core loop, message history management, session lifecycle, skills loading, TODO continuation, command registry, and tool orchestration primitives ","maintainers":[{"name":"minpeter","email":"kali2005611@gmail.com"}],"readme":"# @ai-sdk-tool/harness\n\nA lightweight, model-agnostic agent harness built on the [Vercel AI SDK](https://sdk.vercel.ai). Provides the core loop, message history management, session lifecycle, skills loading, TODO continuation, command registry, and tool orchestration primitives for building AI agents.\n\n## Installation\n\n```bash\npnpm add @ai-sdk-tool/harness\n# or\nnpm install @ai-sdk-tool/harness\n```\n\n**Peer dependencies:**\n\n```bash\npnpm add ai zod\n```\n\n## Quick Start\n\n```typescript\nimport { defineAgent, createAgentRuntime } from \"@ai-sdk-tool/harness/runtime\";\nimport { FileSnapshotStore } from \"@ai-sdk-tool/harness/sessions\";\nimport { runAgentSessionTUI } from \"@ai-sdk-tool/tui/session\";\n\nconst assistant = defineAgent({\n  name: \"assistant\",\n  agent: {\n    model,\n    instructions: \"You are a helpful assistant.\",\n    tools,\n  },\n  history: {\n    compaction: { enabled: true, contextLimit: 100_000 },\n  },\n});\n\nconst runtime = await createAgentRuntime({\n  name: \"my-assistant\",\n  agents: [assistant],\n  persistence: { snapshotStore: new FileSnapshotStore(\".my-assistant\") },\n});\n\nconst session = await runtime.openSession();\nawait runAgentSessionTUI(session);\n```\n\nSee [Low-level API](#low-level-api) for direct `createAgent` / `runAgentLoop` / `CheckpointHistory` usage.\n\n## Subpath Imports\n\n```typescript\n// High-level runtime API (recommended starting point)\nimport { defineAgent, createAgentRuntime } from \"@ai-sdk-tool/harness/runtime\";\n\n// Persistence\nimport { FileSnapshotStore, InMemorySnapshotStore } from \"@ai-sdk-tool/harness/sessions\";\n\n// Compaction utilities\nimport { createModelSummarizer, CompactionCircuitBreaker } from \"@ai-sdk-tool/harness/compaction\";\n\n// Memory tracking\nimport { SessionMemoryTracker, BackgroundMemoryExtractor } from \"@ai-sdk-tool/harness/memory\";\n```\n\n## Low-level API\n\n```typescript\nimport { createAgent, runAgentLoop, CheckpointHistory } from \"@ai-sdk-tool/harness\";\nimport { openai } from \"@ai-sdk/openai\";\nimport { z } from \"zod\";\nimport { tool } from \"ai\";\n\n// 1. Create an agent with a model and tools\nconst agent = await createAgent({\n  model: openai(\"gpt-4o\"),\n  instructions: \"You are a helpful assistant.\",\n  tools: {\n    get_time: tool({\n      description: \"Get the current time\",\n      parameters: z.object({}),\n      execute: async () => new Date().toISOString(),\n    }),\n  },\n});\n\n// 2. Run the agent loop\nconst result = await runAgentLoop({\n  agent,\n  messages: [{ role: \"user\", content: \"What time is it?\" }],\n  onToolCall: (call, ctx) => {\n    console.log(`[${ctx.iteration}] Tool call: ${call.toolName}`);\n  },\n  onStepComplete: (step) => {\n    console.log(`Step ${step.iteration} done (${step.finishReason})`);\n  },\n});\n\nconsole.log(`Finished after ${result.iterations} iterations`);\n```\n\n## API Reference\n\n### `createAgent(config)`\n\nCreates an `Agent` instance that wraps a Vercel AI SDK `streamText` call.\n\n```typescript\nimport { createAgent } from \"@ai-sdk-tool/harness\";\n\nconst agent = await createAgent({\n  model,                        // LanguageModel — required\n  instructions,                 // string | (() => Promise<string>) — system prompt\n  tools,                        // ToolSet — tool definitions\n  maxStepsPerTurn,              // number — max tool-call steps per stream (default: 1)\n  extraStopConditions,          // StopCondition[] — additional independent stop triggers\n  experimental_repairToolCall,  // repair callback for malformed tool calls\n});\n```\n\n**Returns:** `Agent` — an object with `config` and `stream(opts)` method.\n\n---\n\n### `runAgentLoop(options)`\n\nRuns the agent in a loop until a stop condition is met or `maxIterations` is reached.\n\n```typescript\nimport { runAgentLoop } from \"@ai-sdk-tool/harness\";\n\nconst result = await runAgentLoop({\n  agent,           // Agent — required\n  messages,        // ModelMessage[] — initial conversation history\n  maxIterations,   // number — max loop iterations (default: unlimited)\n  abortSignal,     // AbortSignal — for cancellation\n\n  // Hooks\n  onPrepareStep,   // (context) => partial AgentStreamOptions override, applied before onBeforeTurn\n  onBeforeTurn,    // (context) => partial AgentStreamOptions override\n  onInterrupt,     // ({ iteration, reason }, context) => void | Promise<void>\n  shouldContinue,  // (finishReason, context) => boolean — custom continuation logic\n  onToolLifecycle, // (lifecycle, context) => void | Promise<void>\n  onToolCall,      // (call, context) => void | Promise<void>\n  onStepComplete,  // (step) => void | Promise<void>\n  onError,         // (error, context) => void | Promise<void> | { shouldContinue?, recovery? }\n});\n```\n\n**Returns:** `RunAgentLoopResult`\n\n```typescript\ninterface RunAgentLoopResult {\n  messages: ModelMessage[];       // Full conversation history after loop\n  iterations: number;             // Number of iterations completed\n  finishReason: AgentFinishReason; // Final finish reason\n}\n```\n\n---\n\n### `CheckpointHistory`\n\nManages conversation history with configurable limits, compaction, and automatic cleanup of invalid message sequences.\n\n```typescript\nimport { CheckpointHistory } from \"@ai-sdk-tool/harness\";\n\nconst history = new CheckpointHistory({\n  compaction: {\n    enabled: true,\n    summarizeFn: async (messages) => \"Summary of earlier conversation...\",\n    speculativeStartRatio: 0.8,\n  },\n});\n```\n\n**Key behaviors:**\n- `addUserMessage()` and `addModelMessages()` manage history state\n- `getMessagesForLLM()` returns summary-prefixed messages suitable for the next model call\n- `prepareSpeculativeCompaction()`, `applyPreparedCompaction()`, and `compact()` are the supported compaction entrypoints\n- invalid tool-call/tool-result sequences are cleaned up automatically during trimming and compaction\n\n---\n\n### `SessionManager`\n\nManages a UUID-based session ID lifecycle. Useful for stamping events and file paths with a consistent identifier.\n\n```typescript\nimport { SessionManager } from \"@ai-sdk-tool/harness\";\n\nconst session = new SessionManager(\"my-agent\"); // optional prefix, default: \"session\"\n\nconst sessionId = session.initialize(); // => \"my-agent-<uuid>\"\nconsole.log(session.getId());           // => \"my-agent-<uuid>\"\nconsole.log(session.isActive());        // => true\n```\n\n**Methods:**\n\n| Method | Returns | Description |\n|--------|---------|-------------|\n| `initialize()` | `string` | Generates and stores a new session ID |\n| `getId()` | `string` | Returns the current session ID; throws if not initialized |\n| `isActive()` | `boolean` | Returns `true` if `initialize()` has been called |\n\n---\n\n### `SkillsEngine`\n\nDiscovers and loads skills from up to five directories: bundled, global skills, global commands, project skills, and project commands.\n\n```typescript\nimport { SkillsEngine, type SkillsConfig } from \"@ai-sdk-tool/harness\";\n\nconst config: SkillsConfig = {\n  bundledDir: \"./skills\",           // Bundled skills shipped with the agent\n  globalSkillsDir: \"~/.agent/skills\",\n  globalCommandsDir: \"~/.agent/commands\",\n  projectSkillsDir: \".agent/skills\",\n  projectCommandsDir: \".agent/commands\",\n};\n\nconst engine = new SkillsEngine(config);\nconst skills = await engine.loadSkills(); // SkillInfo[]\n\n// Get content of a specific skill\nconst content = await engine.getSkillContent(\"my-skill\");\n```\n\n**`SkillInfo` fields:**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `id` | `string` | Unique skill identifier |\n| `name` | `string` | Display name |\n| `description` | `string` | Short description for autocomplete |\n| `path` | `string` | Absolute path to the skill file |\n| `format` | `\"legacy\" \\| \"v2\" \\| \"command\"` | Skill file format |\n| `source` | `\"bundled\" \\| \"global\" \\| \"project\" \\| \"global-command\" \\| \"project-command\"` | Where the skill was found |\n| `argumentHint` | `string?` | Hint shown in autocomplete for skills that take arguments |\n\n---\n\n### `TodoContinuation`\n\nReads a todo JSON file and generates reminder messages for incomplete tasks. Used with `runHeadless` to keep the agent running until all TODOs are done.\n\n```typescript\nimport { TodoContinuation, type TodoConfig } from \"@ai-sdk-tool/harness\";\n\nconst todo = new TodoContinuation({\n  todoDir: \".sisyphus/todos\",   // Directory containing todo JSON files\n  sessionId: \"session-abc123\",  // Used to locate the correct todo file\n  promptTemplate: (todos) => `You have ${todos.length} tasks remaining.`,\n  userMessageTemplate: (todos) => `Continue with: ${todos[0].content}`,\n});\n\nconst reminder = await todo.getReminder();\n// => { hasReminder: true, message: \"...\" }\n// or { hasReminder: false, message: null }\n```\n\n**`TodoItem` fields:**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `id` | `string` | Unique task ID |\n| `content` | `string` | Task description |\n| `status` | `\"pending\" \\| \"in_progress\" \\| \"completed\" \\| \"cancelled\"` | Current status |\n| `priority` | `\"high\" \\| \"medium\" \\| \"low\"` | Task priority |\n| `description` | `string?` | Optional longer description |\n\n---\n\n### Command Registry\n\nA global registry for slash commands. Commands are registered once and available to both TUI and headless runtimes.\n\n```typescript\nimport {\n  registerCommand,\n  executeCommand,\n  getCommands,\n  isCommand,\n  parseCommand,\n  configureCommandRegistry,\n  createHelpCommand,\n  resolveRegisteredCommandName,\n  isSkillCommandResult,\n} from \"@ai-sdk-tool/harness\";\n\n// Register a command\nregisterCommand({\n  name: \"model\",\n  description: \"Switch the active model\",\n  aliases: [\"m\"],\n  execute: async ({ args }) => {\n    const newModel = args[0];\n    return { success: true, message: `Switched to ${newModel}` };\n  },\n});\n\n// Check if input is a command\nif (isCommand(\"/model gpt-4o\")) {\n  const result = await executeCommand(\"/model gpt-4o\");\n  console.log(result?.message);\n}\n\n// Configure skill loading for /skill-name commands\nconfigureCommandRegistry({\n  skillLoader: async (name) => {\n    const content = await loadSkillFile(name);\n    return content ? { content, id: name } : null;\n  },\n});\n```\n\n**Functions:**\n\n| Function | Description |\n|----------|-------------|\n| `registerCommand(command)` | Adds a command to the global registry |\n| `executeCommand(input)` | Parses and executes a command string |\n| `getCommands()` | Returns the full `Map<string, Command>` |\n| `isCommand(input)` | Returns `true` if input starts with `/` |\n| `parseCommand(input)` | Parses `\"/name arg1 arg2\"` into `{ name, args }` |\n| `configureCommandRegistry(config)` | Sets the skill loader for skill-based commands |\n| `createHelpCommand(getCommands)` | Creates a `/help` command listing all registered commands |\n| `resolveRegisteredCommandName(name)` | Resolves an alias to its canonical command name |\n| `isSkillCommandResult(result)` | Type guard for `SkillCommandResult` |\n\n---\n\n### `buildMiddlewareChain(config)`\n\nBuilds a middleware chain for wrapping language model calls. Useful for logging, caching, or modifying requests/responses.\n\n```typescript\nimport { buildMiddlewareChain, type MiddlewareConfig } from \"@ai-sdk-tool/harness\";\nimport { wrapLanguageModel } from \"ai\";\n\nconst middlewares = buildMiddlewareChain({\n  middlewares: [loggingMiddleware, cachingMiddleware],\n});\n\nconst wrappedModel = wrapLanguageModel({\n  model: openai(\"gpt-4o\"),\n  middleware: middlewares[0], // or compose them\n});\n```\n\n---\n\n### `createAgentPaths(options)`\n\nCreates a consistent set of filesystem paths for agent configuration and TODO storage.\n\n```typescript\nimport { createAgentPaths } from \"@ai-sdk-tool/harness\";\n\nconst paths = createAgentPaths({\n  configDirName: \".my-agent\",\n  todoDirName: \"todos\",\n  todoBaseDir: \"/tmp\",  // optional, defaults to os.tmpdir()\n});\n\n// paths.configDir => \".my-agent\"\n// paths.todoDir   => \"/tmp/todos\"\n```\n\n---\n\n### `shouldContinueManualToolLoop(finishReason, context)`\n\nThe default continuation predicate used by `runAgentLoop`. Returns `true` when `finishReason` is `\"tool-calls\"`.\n\n```typescript\nimport { shouldContinueManualToolLoop } from \"@ai-sdk-tool/harness\";\n\n// Use as custom shouldContinue with additional logic\nconst result = await runAgentLoop({\n  agent,\n  messages,\n  shouldContinue: (reason, ctx) => {\n    if (ctx.iteration >= 10) return false; // Custom limit\n    return shouldContinueManualToolLoop(reason, ctx);\n  },\n});\n```\n\n---\n\n### `normalizeFinishReason(reason)`\n\nNormalizes provider-specific finish reason strings to a canonical `AgentFinishReason`.\n\n```typescript\nimport { normalizeFinishReason } from \"@ai-sdk-tool/harness\";\n\nconst normalized = normalizeFinishReason(\"tool_calls\"); // => \"tool-calls\"\n```\n\n---\n\n### Compaction prompts\n\nBuilt-in summarization prompts for `CheckpointHistory` compaction.\n\n```typescript\nimport {\n  createModelSummarizer,\n  DEFAULT_SUMMARIZATION_PROMPT,\n  ITERATIVE_SUMMARIZATION_PROMPT,\n} from \"@ai-sdk-tool/harness\";\n\nconst summarize = createModelSummarizer({\n  model: openai(\"gpt-4o-mini\"),\n  prompt: DEFAULT_SUMMARIZATION_PROMPT,\n});\n\nconst history = new CheckpointHistory({\n  compaction: {\n    enabled: true,\n    speculativeStartRatio: 0.8,\n    summarizeFn: summarize,\n  },\n});\n```\n\n---\n\n## Types\n\n```typescript\nimport type {\n  Agent,\n  AgentConfig,\n  AgentStreamOptions,\n  AgentStreamResult,\n  AgentFinishReason,\n  LoopContinueContext,\n  LoopStepInfo,\n  LoopHooks,\n  RunAgentLoopOptions,\n  RunAgentLoopResult,\n  // Re-exported from Vercel AI SDK:\n  LanguageModel,\n  ModelMessage,\n  Tool,\n  ToolCallPart,\n  ToolSet,\n  // CheckpointHistory types:\n  CompactionConfig,\n  CompactionSummary,\n  Message,\n  CheckpointHistoryOptions,\n  // Session:\n  // (SessionManager is a class, not a type)\n  // Skills:\n  SkillInfo,\n  SkillsConfig,\n  // TODO:\n  TodoConfig,\n  TodoItem,\n  // Commands:\n  Command,\n  CommandContext,\n  CommandRegistryConfig,\n  CommandResult,\n  SkillCommandResult,\n  // Middleware:\n  MiddlewareConfig,\n  // Paths:\n  AgentPaths,\n  AgentPathsOptions,\n  // Tool pruning:\n  PruneResult,\n  PruningConfig,\n} from \"@ai-sdk-tool/harness\";\n```\n\n## Advanced Usage\n\n### Custom tool-call repair\n\n```typescript\nconst agent = await createAgent({\n  model,\n  experimental_repairToolCall: async ({ toolCall, error, messages, system }) => {\n    // Return repaired tool call arguments, or null to skip repair\n    console.warn(`Repairing tool call: ${toolCall.toolName}`, error);\n    return null;\n  },\n});\n```\n\n### Compacting long conversations\n\n```typescript\nconst history = new CheckpointHistory({\n  compaction: {\n    enabled: true,\n    speculativeStartRatio: 0.8,\n    summarizeFn: async (messages) => {\n      // Use your model to summarize\n      const summary = await generateSummary(messages);\n      return summary;\n    },\n  },\n});\n```\n\n### Abort signal for cancellation\n\n```typescript\nconst controller = new AbortController();\n\n// Cancel after 30 seconds\nsetTimeout(() => controller.abort(), 30_000);\n\nconst result = await runAgentLoop({\n  agent,\n  messages,\n  abortSignal: controller.signal,\n});\n```\n\n### Full session setup\n\n```typescript\nimport {\n  createAgent,\n  CheckpointHistory,\n  SessionManager,\n  SkillsEngine,\n  TodoContinuation,\n  registerCommand,\n  createHelpCommand,\n  getCommands,\n  createAgentPaths,\n} from \"@ai-sdk-tool/harness\";\n\nconst paths = createAgentPaths({\n  configDirName: \".my-agent\",\n  todoDirName: \"todos\",\n});\n\nconst session = new SessionManager(\"my-agent\");\nconst sessionId = session.initialize();\n\nconst history = new CheckpointHistory({});\n\nconst skillsEngine = new SkillsEngine({\n  bundledDir: \"./skills\",\n  projectSkillsDir: \".my-agent/skills\",\n});\nconst skills = await skillsEngine.loadSkills();\n\nconst todo = new TodoContinuation({\n  todoDir: paths.todoDir,\n  sessionId,\n});\n\nregisterCommand(createHelpCommand(getCommands));\n\nconst agent = await createAgent({ model, instructions: \"...\" });\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}