{"_id":"tune-basic-toolset","_rev":"36-fa63648b18d66a2112916343af640d16","name":"tune-basic-toolset","dist-tags":{"latest":"0.2.13"},"versions":{"0.1.0":{"name":"tune-basic-toolset","version":"0.1.0","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.1.0","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"fc147cf24b65beb76317dd46bb38f7285261b28f","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.1.0.tgz","fileCount":39,"integrity":"sha512-x/r2ZIeueOaKqXJxdND6ZL+ZuqRxRmFVxTzj2q8RACMdiLwjYloIoX8QVLhRvlcQwXz69Y+4igDUCI7zFVXY2A==","signatures":[{"sig":"MEQCID7/R1sohuX+HB4jFM3dF0gKIkrDvojXlBrMhDfwbKakAiANM4dZy4stKYLAIa5viefdvSCLx4XLux0CmgzU6mSbBA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31209},"main":"src/index.js","gitHead":"539ea54455a2030f958183b8094b2c16595d8dc6","_npmUser":{"name":"iovdin","email":"iovdin@gmail.com"},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"10.9.0","description":"Basic toolset for tune","directories":{},"_nodeVersion":"22.11.0","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.1.0_1754989172020_0.053231672352058945","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"tune-basic-toolset","version":"0.1.1","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.1.1","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"bd00b18ed6d694d1d88347e402f0d510fccc3f9f","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.1.1.tgz","fileCount":43,"integrity":"sha512-JGIY1wlF9GFXxzivPLHjJBzl/FBjeltfgUdsOboK1VSrVoRX8UXWhhFmYH2StKuTJzp9pCTS4SwpwdGNqiyHxA==","signatures":[{"sig":"MEUCICwcUSIVN2jZrTVHKMOEn0IuuJCQo9zTV63Hmyr20JpPAiEAgjyRmvwji2/0ajMWMXKvcfgT1RmpfC/ZyW6FiglYmZM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32427},"main":"src/index.js","gitHead":"539ea54455a2030f958183b8094b2c16595d8dc6","_npmUser":{"name":"iovdin","email":"iovdin@gmail.com"},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"10.9.0","description":"Basic toolset for tune","directories":{},"_nodeVersion":"22.11.0","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.1.1_1755095978971_0.508614935915346","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"tune-basic-toolset","version":"0.1.2","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.1.2","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"5d5b34f48d7a3b84e1ab8c4ee1771be35b28e1d4","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.1.2.tgz","fileCount":43,"integrity":"sha512-HF0PdJVSOQ2J4I7aXZ0q+wQBiRqF0oqSsjpJfDbcxWDexAwlZcd8hWkvZ4776eSIcmZOqF86/RD7ymVUO82MgQ==","signatures":[{"sig":"MEUCIBikTSEhny3QueNaUFS8r4VgJD+08iEZoWU1hicYtr9uAiEAwenHMs2gfntAqmAIy1Ia9jIbVp3hrmhqVTnGPq3qDN4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32436},"main":"src/index.js","gitHead":"89ae511b64fa867a0358130bc9afd69e25a6d2f6","_npmUser":{"name":"iovdin","email":"iovdin@gmail.com"},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"10.9.0","description":"Basic toolset for tune","directories":{},"_nodeVersion":"22.11.0","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.1.2_1755096446912_0.4432237285305187","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"tune-basic-toolset","version":"0.1.3","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.1.3","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"be6ab2c88dd2ae459e39e39e87ac92cca497217a","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.1.3.tgz","fileCount":44,"integrity":"sha512-mfAIhoVd3YpByb93iN4MqkPKyhnBgWNyZGxu5AJZUvKiRnAbsIJRT3EHPrpRSGvjzKPzAELHH95hHFjlYM9ffQ==","signatures":[{"sig":"MEUCIQDwrS1yFYPRCTR9zik6PDQxj9yW7WFBuDul3tWJ94oEAAIgDzCmudB16FhFEerEfOsjdfXzetsfdwJsP66doyRKWtA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42246},"main":"src/index.js","gitHead":"8ea70b64fb57590ba9ed5e60141d595fefc556dd","_npmUser":{"name":"iovdin","email":"iovdin@gmail.com"},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"10.9.0","description":"Basic toolset for tune","directories":{},"_nodeVersion":"22.11.0","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.1.3_1755375824144_0.03558474463074157","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"tune-basic-toolset","version":"0.1.4","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.1.4","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"3a0bf40ed64163bee3a65ad6d5a705e1ac41e9fb","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.1.4.tgz","fileCount":44,"integrity":"sha512-Hha2fVtRhWjUQXZFdj5UiTXjZGaMhCtB7MKAOYzNh3c8HSiFvqfGh914ayJSktwyxYMtpg4tzrDsM91+HLHU7A==","signatures":[{"sig":"MEUCIEuXZOQQX2z6mS7H1hn2q1qYx6e1YsgJ63txybtHF9vhAiEA95v5ZpICwk3FM1gYVF8zFcm6IfRUu/04SWTAIivCUT4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":42258},"main":"src/index.js","gitHead":"106bf5329a2fde225c290227137595955f1b4f7e","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.6.0","description":"Basic toolset for tune","directories":{},"_nodeVersion":"20.19.4","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.1.4_1757010572656_0.0016933589367535973","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"tune-basic-toolset","version":"0.1.6","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.1.6","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"c1aa627992807985b68e7973a4680932af6fffb9","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.1.6.tgz","fileCount":45,"integrity":"sha512-/5pkIz4BNx4M9R0PwzU+0y+IfbKZMObwKtC5Rs0NNDECJLpEnpfGOV6BUS0n0t4mHSvA6yHlAau0Zc+JMD/70g==","signatures":[{"sig":"MEUCIB/htI8PpwuW//eoj8ugllKNHtDtIQuaRnGFFWort2X2AiEAmrLcGl6j99uUzQ2Q00KFdBUZL1S30j3+iRS6yM+tUUo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":44968},"main":"src/index.js","gitHead":"6b9cb4246dead376cfb4ad6f9074d333f19ccabb","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.6.0","description":"Basic toolset for tune","directories":{},"_nodeVersion":"20.19.5","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.1.6_1758444779966_0.5071325068345831","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"tune-basic-toolset","version":"0.1.7","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.1.7","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"635417eb810578856ca88fb8b95ac93101dca37d","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.1.7.tgz","fileCount":45,"integrity":"sha512-OGGgIJpcFWCWhkjy/WFxdRMeMvfphvapVixS/HbLhs5gMLG0IdV4O2Tt6vTX+ZTdnuZ7kx9LfHFidh97gP6MmQ==","signatures":[{"sig":"MEYCIQCCIWWUWplMCjNXrxCzU+ORi6SbFp158SywppGHmDMuqQIhAJviCsCuGvpGTzHHVwPtjKHVcgPdyR2vxnx1bp5HDfZS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":44968},"main":"src/index.js","gitHead":"6906b6e9ec822c13fecd60894241107f63be2d36","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.6.0","description":"Basic toolset for tune","directories":{},"_nodeVersion":"20.19.5","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.1.7_1758533979927_0.8590560859653174","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"tune-basic-toolset","version":"0.1.8","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.1.8","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"375106948454c6aaf3591d922532a5cc09ff0676","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.1.8.tgz","fileCount":48,"integrity":"sha512-ejEu8pdsvqzK5mu3Cb1ILVDmizIsK4xAO9OS465+CgFnUwJnME1hhTuPH7OHhT/MrHGFo7zgn+azfICkE1UtyQ==","signatures":[{"sig":"MEUCIQD8wRpFUa59m8upZ3bGSAKNIvLBDrJZFsySjyIs/e9hQAIgRL2MFZniHCywHiBmAkVcUaNrsAO02927kyfRsiq3x18=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":51010},"main":"src/index.js","gitHead":"da7a56a109350d6d41e7ce36d5f070e9455260e6","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.6.1","description":"Basic toolset for tune","directories":{},"_nodeVersion":"20.19.5","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.1.8_1759158993593_0.7134567726900785","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"tune-basic-toolset","version":"0.1.10","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.1.10","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"acb2936ca341b4c1949a657294bc9459146aeaf0","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.1.10.tgz","fileCount":48,"integrity":"sha512-xFXw+sBtWZ2OMEI8QgyAo30r3bxAUR3BuYJpvw/R90ttxsiuYGbise3IJ5hYQmoydLeES/vnjOOWaf7ORP3EXg==","signatures":[{"sig":"MEQCIB2A7MX/t2iQhlzzdDGbawrpxVUL4xgFwQ7F9bvNdcrbAiBsPXWQszV/GdlfhxIxOwwlUFHcu9OAZkicq1lB6XBn4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.1.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":52004},"main":"src/index.js","gitHead":"fd1df8e0fd703ee7c8a5bf358b76cef938911725","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.6.1","description":"Basic toolset for tune","directories":{},"_nodeVersion":"20.19.5","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.1.10_1759259750217_0.5223897589545037","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"tune-basic-toolset","version":"0.1.11","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.1.11","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"27fbc52ac7bc862b103b527f54d133f858162cbc","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.1.11.tgz","fileCount":52,"integrity":"sha512-Sy/17ihMl54aR6qc0zfrWszvqN44tVJ1MtdCMcFEUKglvwAgN8GTIGl741C6ReL34pv9tSNbac3Zvi6kxlWINw==","signatures":[{"sig":"MEQCIHCL66omH5yettAU4pyqxB2csrwgVbY8hZ/UIOZf27fsAiArvJ5S5W4cCiiFS+fPeqh/KTy0tsSbhzi1PFhWbl2OoA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.1.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":55172},"main":"src/index.js","gitHead":"925f8f2ca3b255745faeec91efc905865a60f70e","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.6.2","description":"Basic toolset for tune","directories":{},"_nodeVersion":"20.19.5","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.1.11_1761075581623_0.7426658128658166","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"tune-basic-toolset","version":"0.1.12","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.1.12","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"dfb5eaed3d4a9e6d1baad2dc697a1e412e57b4b2","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.1.12.tgz","fileCount":52,"integrity":"sha512-/AMACNmZe6GqfpPv6K1R9UTEKicyqn0M71L9aVmI+m5HIlM85s969XiahvenM6UqwVepmNcKTS9yTi4+xt8JXg==","signatures":[{"sig":"MEUCIAKvVSfMjYLYEH2XFPQdRNFszqYTW4Gjlr6zL2dkw7JlAiEA/YER3utOwL5hq28yHIotxPX/bq53ROBnfUqPJtL5XGM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.1.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":73304},"main":"src/index.js","gitHead":"0a1311a27719d946c0b6ff6b5eec0f7f426df358","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.6.2","description":"Basic toolset for tune","directories":{},"_nodeVersion":"20.19.5","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.1.12_1761395605131_0.3363809768588317","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"tune-basic-toolset","version":"0.1.13","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.1.13","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"0dd3739512140b0953c72e99d339d65efb086bfe","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.1.13.tgz","fileCount":52,"integrity":"sha512-nN7IZp8crTfsJzn58ZuIYcdwSk2naReMhfT4bLv4ZlazeDHh37mWfYOVFl6eof4octAP6eqm5TxW9nsKlHW06g==","signatures":[{"sig":"MEUCIQCTHSsjTUBy2SBje1GJAULEVDiPuzt3tjHNSBfJP9P1MwIgXT+5dyaB3DRJ9fK/pm0pBxwtNY+or3dN2YomShfSnOQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.1.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":73990},"main":"src/index.js","gitHead":"a54d8e16a99116f82002049aea9d015b3ba07910","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.6.2","description":"Basic toolset for tune","directories":{},"_nodeVersion":"20.19.5","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.1.13_1762250641480_0.4989902110407327","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"tune-basic-toolset","version":"0.1.14","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.1.14","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"1e78473e251df39c86b5b7ee04fb8ec72fcddedb","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.1.14.tgz","fileCount":53,"integrity":"sha512-m3QQrHuiIzoupeto9VfcBp3/vUdwRCr9cPq/G+cuaYRRHMozfYA2hpBHo17SUz/NEUz2SrMcSZeEGsjLAmtJmQ==","signatures":[{"sig":"MEUCIQDDZDPPTFaJfFyGPBJ/mtPnWMhVqr/i6Bl8bH/Qiv+4egIgIbyRA8W0RzYqOcoQulkz6ZosacRJxJsoyVodGZW91kM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.1.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":73451},"main":"src/index.js","gitHead":"7954a809ecaeccde742addafa76c1dfc5e158b8f","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.6.2","description":"Basic toolset for tune","directories":{},"_nodeVersion":"20.19.5","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.1.14_1762360596694_0.16146848017179094","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"tune-basic-toolset","version":"0.1.15","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.1.15","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"ddd6183ae3b3431a19b146c4ea14fe28346a94ea","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.1.15.tgz","fileCount":53,"integrity":"sha512-iqFicGOo/n28WMuWzFn16QvmIkIq7BzrJiq6JnwZmkF5O/Amx34Y7ffHeIx+YhoIer7IoV2bX83FGlpx3XP8Nw==","signatures":[{"sig":"MEUCIGCCU/FZvHQu9qHaheYJwvKJEmwkd5hjf8BObYn1WtgIAiEAnDq9r8S8Q0s86Q0FMWXznp1YXxQ1mwpI5NqQHm2Dvbs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.1.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":72765},"main":"src/index.js","gitHead":"624c926ca46a856329b21d5c0de72432ca31381f","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.6.2","description":"Basic toolset for tune","directories":{},"_nodeVersion":"20.19.5","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.1.15_1762676313477_0.042395970031031016","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"tune-basic-toolset","version":"0.1.16","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.1.16","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"a24678d50ecd860975750062612164d731983441","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.1.16.tgz","fileCount":52,"integrity":"sha512-sagEm7prVYN2M/3RQxWU2wEjWH+87a7dtYP65t1itDH3ojJSJlWvbHebQxgmsM9hpW8SJR/SI6cJNMnuWrZQZw==","signatures":[{"sig":"MEQCIFFIWotJEieQ3480Vq3OTWlzN060tUDMNWCNuA6YWAYmAiBdG2Vg8e8TApAKp8VJLNG6Hu0EX9PK1D/Cq3WWtzIbsg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.1.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":72298},"main":"src/index.js","gitHead":"dee4c389eb19f54bf975f994ac9559202a62f896","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.6.3","description":"Basic toolset for tune","directories":{},"_nodeVersion":"20.19.5","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.1.16_1763799052733_0.5611763227961235","host":"s3://npm-registry-packages-npm-production"}},"0.1.17":{"name":"tune-basic-toolset","version":"0.1.17","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.1.17","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"01e6390aa3aca8c5ebe26fcd416c18e58541530a","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.1.17.tgz","fileCount":54,"integrity":"sha512-W9HiSrWjcUJFgDKobnncC1znORae4TH/TQSfXTGcnZk0slqarpSKpGRuKkEt5jg2PPIIHQKcs+9TTRj98+SKTA==","signatures":[{"sig":"MEQCIHGFWC4pNGu1LMRLruhXTSLZTJVAXOGCtIY7mOujHMRhAiBHIsYIhCXj2Cz7QFnfxxm6OkwviYX8e1snwwpuuao4Jg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.1.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76642},"main":"src/index.js","gitHead":"392f8c47a3a96e94a9cbeb820b511de241438c66","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.6.3","description":"Basic toolset for tune","directories":{},"_nodeVersion":"20.19.5","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.1.17_1763885599417_0.6320256472819386","host":"s3://npm-registry-packages-npm-production"}},"0.1.18":{"name":"tune-basic-toolset","version":"0.1.18","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.1.18","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"2fcd2303249d3ad595cea4bf66fbdba176f5be18","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.1.18.tgz","fileCount":54,"integrity":"sha512-lTiPqAB6CYuwfhSaS7TKg9lyWVo4b29+WBNw3nRFEHdcWsKSEJP4WtqzH4mqJnrLVar+MeRhuIxggG2tP84sIw==","signatures":[{"sig":"MEQCIHx9sj9HHZELh4el684OrOz4z6TE2TCDDlYLE8S1eje9AiAbTFp+D9pEjeWcKT9NOcqX50CVw+y8n71SLNzfQm39/w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.1.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76816},"main":"src/index.js","gitHead":"d21d128076c174145737e41bbba2edd0ee5d1917","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.6.4","description":"Basic toolset for tune","directories":{},"_nodeVersion":"20.19.6","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.1.18_1764951597647_0.5255604520194597","host":"s3://npm-registry-packages-npm-production"}},"0.1.19":{"name":"tune-basic-toolset","version":"0.1.19","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.1.19","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"6884c22c19f423f9e5d54ea5aafc4d9f24ea8017","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.1.19.tgz","fileCount":54,"integrity":"sha512-huTM+XzJBqnPatMMXDKoomlJQkZtjgQoNOsU0mIraeFf5nHssuPhDeZNniCX3vbMaTULqsTFGEjsiLtxzuTpTw==","signatures":[{"sig":"MEUCIEDsix0okHALpBK9urWxU5iVbDNKahT7kwfYSL02tN1iAiEApEIrV1/jtxCHrTeGMZ1ToWyGFt8RQSWdKB7Qpg8yz5U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.1.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76843},"main":"src/index.js","gitHead":"530f67ffe3fd584bf26edb2af033306cf0b68102","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.7.0","description":"Basic toolset for tune","directories":{},"_nodeVersion":"20.19.6","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.1.19_1768758822553_0.3783197204113793","host":"s3://npm-registry-packages-npm-production"}},"0.1.20":{"name":"tune-basic-toolset","version":"0.1.20","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.1.20","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"984b51fddff3ba616dc8381a7416ea2be4ac5685","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.1.20.tgz","fileCount":57,"integrity":"sha512-l/aNPuxJCtRnUAVTBw3zgElHl1+d6T1j7Rpwj4wD00I9IGA9a4ter3tt1WLt/YUEMgxt+Sy0R9CVlfrHv9jh5g==","signatures":[{"sig":"MEYCIQCl7ZBTdWVaHmSwxpwYRn64xVn/2f8a0mVOaeNEVXXYRwIhAI5WwoADOph4sbJWjQCR00WULc9ZAz6/2wCnKUDQnKxX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.1.20","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":78457},"main":"src/index.js","gitHead":"c35c0e7ddb693024bbc0fbdd35b369792c806efb","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.7.0","description":"Basic toolset for tune","directories":{},"_nodeVersion":"20.19.6","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.1.20_1768759256741_0.9238717358608897","host":"s3://npm-registry-packages-npm-production"}},"0.1.21":{"name":"tune-basic-toolset","version":"0.1.21","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.1.21","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"4706ed52190e626d23d0944d4b2e89d98cc336bb","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.1.21.tgz","fileCount":57,"integrity":"sha512-fGL4vkwmp7hcm32MKVNhzXdRcTgAMcprPikZQyxlTEhZ6sZil16gD1dS/WcqOMba7BDWpolqd2aCG4JZPEKqtw==","signatures":[{"sig":"MEUCIB+KaFVzL0EehcNod3x/8oZgozbg2vWYLZywhMmE4r8bAiEAzK1GD5JQZpSv1bb8Z5mu+8jlPY1j2ngMEfpbxAJz5mc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.1.21","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":79657},"main":"src/index.js","gitHead":"df12a5b3db6d7206b737fa2e4bc8d1651a0622f1","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.9.0","description":"Basic toolset for tune","directories":{},"_nodeVersion":"20.20.0","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.1.21_1770639685782_0.35361935994338367","host":"s3://npm-registry-packages-npm-production"}},"0.1.22":{"name":"tune-basic-toolset","version":"0.1.22","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.1.22","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"0dcd549e4bc1a10c26f5fca77b0fb6bfc5486bd4","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.1.22.tgz","fileCount":59,"integrity":"sha512-GRHxV3/NNGgCNu72Fmqp4byDDpBqfU3xKTbX+mQ8BZJMiVYgzE5NhegItiCLNgZCMTOJvgY+FvmMWv+NSmD+YA==","signatures":[{"sig":"MEUCIQCjZ/hTxN39BARj112KPBw5yYJW+VKILaEpDCm50GpEWAIgInVNwFLfv88i2hFO1mqWfFXnLcJu/iBe5Ud9J45Oa5s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.1.22","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":84113},"main":"src/index.js","gitHead":"0efa8f1070a6b0ac3005a52a8ff59b44589943db","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.10.1","description":"Basic toolset for tune","directories":{},"_nodeVersion":"20.20.0","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.1.22_1771752411288_0.5294142206605392","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"tune-basic-toolset","version":"0.2.0","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.2.0","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"5b8699cd6482d7bf7c32ecd8ff3f5c67e3735adb","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.2.0.tgz","fileCount":59,"integrity":"sha512-f372VT6a7CekPT7mh1LBWmd4M4RmsTjB3xuxovj3I5acpha1KZ9TUdTLrJjRYwcct40RbeglmPwlfuO+NH3hJA==","signatures":[{"sig":"MEYCIQDqrC/D+dyw+gVsFZIzD563YLU7Ks5l/lRS5iq2ai9TDQIhAJMon8RNFZ+Q5MmITcAiqLDMn5P8r2BcNumQLTD9EmEZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":84328},"main":"src/index.js","gitHead":"837fedfd5a08a51b6d6e922a359bc2e38399e30a","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.11.0","description":"Basic toolset for tune","directories":{},"_nodeVersion":"20.20.0","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.2.0_1772528857236_0.3155152431158328","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"tune-basic-toolset","version":"0.2.1","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.2.1","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"15a02b3c6a7836600359a2f3c343b83ee70fcc27","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.2.1.tgz","fileCount":59,"integrity":"sha512-t+7UL574L5imMeaiYF7IlOe8iksj6Ooo5+mpMGd8gKgIg/QrPlrKnvEhGvUVNW9OI66zsxLvnFauRHsdggrj/g==","signatures":[{"sig":"MEQCIDg3kFK+t1pNrYlQI8w1mGUzVWiKEnLhTyAXzv2CkIjKAiB0mn9fVivsIKyEl0PIfgzKTc3Ap50Kv3HDIo1UKb2ZjQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":84842},"main":"src/index.js","gitHead":"633b1362bb59e72329707cb321db2c9db29f54f6","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.11.1","description":"Basic toolset for tune","directories":{},"_nodeVersion":"20.20.0","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.2.1_1773389612383_0.9399841457384983","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"tune-basic-toolset","version":"0.2.2","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.2.2","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"f2d59af00383ba3e1d3517afcf413ab0c534545e","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.2.2.tgz","fileCount":60,"integrity":"sha512-3k+CaL85E7Rl5yMeh0jY5ZuTnSelK4y3xA67YuThTUYV989FMlnLQ8D0lwIUMO9F/fOogwWRJwHzkBn3MiN+Fg==","signatures":[{"sig":"MEQCICQepzu/vEtAM4vOuCAJAbMfMpYQB7yG9CngAB/PnNYmAiBuqTtKQmRRvXWaFXpAGK8bKCIuWO++YY2Rtz/4ubH3Hg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":87764},"main":"src/index.js","gitHead":"e2ffa226ca9487d417663f001a82b8cc04a81ce1","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.11.1","description":"Basic toolset for tune","directories":{},"_nodeVersion":"20.20.1","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.2.2_1773651111133_0.8686509039185888","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"tune-basic-toolset","version":"0.2.3","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.2.3","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"730d09743c89b8b35f6d8f9be2895ecdab475ced","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.2.3.tgz","fileCount":62,"integrity":"sha512-L6D1OWQ6Npod3KBq5xwTmsiV6+VPyfBZ7hKokz/8cc3vXUH9Q1ylNYX3e2uC0Igeh+smYJOlv7Eub6HmPsyDig==","signatures":[{"sig":"MEQCICJ45SgX4n3PSLVx3C8xKAM9qHBc7FPQ/lJy3cc/GsZYAiBGRI9a+iFseb1apbr4KlQV4qxLsyCtDBIzh4EDP2c8nQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":89221},"main":"src/index.js","gitHead":"69f9d86b3a03e3c618bdc12032c5aa5b683d8e36","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.11.1","description":"Basic toolset for tune","directories":{},"_nodeVersion":"20.20.1","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.2.3_1773762428491_0.8536594842146543","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"tune-basic-toolset","version":"0.2.4","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.2.4","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"c5b97bac1f786c64adf758a1af873be7eca9949a","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.2.4.tgz","fileCount":62,"integrity":"sha512-KRd35/Ux+uzX/VMP6CHxiaBB/MVK1NXRE5gaNugTnuzYJKiqbJoqJcGejHYj1FTbqyNHckX/y+3FYwsRS4kZIg==","signatures":[{"sig":"MEUCIQC+a+SBx0soxZ2jXWYxuFAeeYisf0iFCN6CbRLnrzFhegIgKKTlnBOYP5FPycQE9vDfkN3DSmFxd8amyUsJ0PsWacg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":89505},"main":"src/index.js","gitHead":"c89e68b236e99727cf05d4e7e664fc9344145206","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.12.0","description":"Basic toolset for tune","directories":{},"_nodeVersion":"20.20.1","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.2.4_1774195461008_0.9505374232343555","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"tune-basic-toolset","version":"0.2.5","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.2.5","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"d8f4447f635ea376dfb3f5d45296bdfc49acb93a","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.2.5.tgz","fileCount":62,"integrity":"sha512-kYTfE1/7vRVSm+XSpps2RiYjpd2uRpNvOs/qgc3lMlclnJskWjnKf4Cl4COhYupGHhmANBoBqxKUp2oBnVIqvA==","signatures":[{"sig":"MEUCIQD5a1rBTRxSFR7JD/NZLZpsPr5AemZf24P4wePFDwGAGwIgB6dER1eW2BjiY+HJtVZ/3sXoCxWb/Y8NAalMDGO0ve4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.2.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":89583},"main":"src/index.js","gitHead":"ba1fc119fab10f320da08a207a8857b110e483b3","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.12.1","description":"Basic toolset for tune, like shell, readfile, writefile etc","directories":{},"_nodeVersion":"20.20.1","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.2.5_1775037310121_0.34020929670205136","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"tune-basic-toolset","version":"0.2.6","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.2.6","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"6426aa0e155bf3aef64a4565707c949eb591b7f2","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.2.6.tgz","fileCount":62,"integrity":"sha512-gC0wKDjWijVdqcVosanJJ6SFCHCX1LUklP47GwU688tOGsDNSKdUjQDOtpvThlAtajSa+jsqvFy+uVj/JQzVAQ==","signatures":[{"sig":"MEQCIF2oRNqgcflBP4k8nmTockZfLONH2Dhb86AAU2kzlLkJAiB1bWH+x60GBXZjHSbMf/NKROwUX5Vic9gmDe4B2Th9Aw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":90307},"main":"src/index.js","gitHead":"0ff88414c5b27edc63d23ec56db2c8f027a0f5a4","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.12.1","description":"Basic toolset for tune, like shell, readfile, writefile etc","directories":{},"_nodeVersion":"20.20.2","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.2.6_1775500079932_0.7083457081513236","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"tune-basic-toolset","version":"0.2.7","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.2.7","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"25223c50e6b32ef09240dffcd03c872eaae42c06","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.2.7.tgz","fileCount":67,"integrity":"sha512-p81jQ8Lq2NOeeyqu+i0Ow3TsfU0tvnI4riKztRW6GBXxJVBqd6uT3uhKaCzGOiVaRahvBnysb56zQdkq5RfMvg==","signatures":[{"sig":"MEYCIQCiEIJykL6ECC3VrMV9X4vjxrb8jH9bBKc6IFxq0vUtjQIhAPc3qkeGfPSXH6HDwdzncCA+0nrLjN48je7RJ4/R1rMP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.2.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":100894},"main":"src/index.js","gitHead":"89715e75f4c604ae331b80ad5369394ff99f8a8b","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"11.12.1","description":"Basic toolset for tune, like shell, readfile, writefile etc","directories":{},"_nodeVersion":"20.20.2","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.2.7_1776414366219_0.6120042441879039","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"tune-basic-toolset","version":"0.2.9","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.2.9","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"5042da84b8dacc969adac7f59b78609ecd473bd9","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.2.9.tgz","fileCount":68,"integrity":"sha512-4dEphi5fs7W88RkyreUHqCg/r0Y/TPfqAWWzoHc5/f51eRJdpWoNomldBLeH8w80wNoEcViwW6SZC9eZPstVTg==","signatures":[{"sig":"MEQCIErqIJA5aX36IILaxlpl3VUymEHTJqUjhoGwAEZIo5bHAiBPxJOgoUye9uEKCv4aaYzkwihfOZgVKtFSbH2bEs22Ow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.2.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":104786},"main":"src/index.js","gitHead":"e7ba2196bf2a7ed04825642b8c7605f5f62abfd1","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"12.0.1","description":"Basic toolset for tune, like shell, readfile, writefile etc","directories":{},"_nodeVersion":"22.23.1","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.2.9_1783845643779_0.33769770747852057","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"tune-basic-toolset","version":"0.2.10","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.2.10","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"d2af3cbf16c5d09b354f7a90293afb88ec7e82d9","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.2.10.tgz","fileCount":69,"integrity":"sha512-+dgl/H4YIv0f0DHb9jp3SkDKUmgJ3Ccgfq+WzVqGaUbPeXZE5dzqtw7//pr7GOflfOqD6JRlIm6GbmRda3SdwQ==","signatures":[{"sig":"MEUCIFLx02YtebMia7tRhrLK3xR5uMQxGe8cqIXxVdzbfaZvAiEA5aRPIeRb87hvhfBBa+990io0lqrOkKCv1BtjNzd86Yo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.2.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":106247},"main":"src/index.js","gitHead":"c9e9eeb4c2d69c397f3afa19a2f4810dc866da51","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"12.0.1","description":"Basic toolset for tune, like shell, readfile, writefile etc","directories":{},"_nodeVersion":"22.23.1","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.2.10_1784876936417_0.2405159328444686","host":"s3://npm-registry-packages-npm-production"}},"0.2.11":{"name":"tune-basic-toolset","version":"0.2.11","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.2.11","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"a45aa25dcd2941f1f56eb0ff4bd1145dad919222","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.2.11.tgz","fileCount":69,"integrity":"sha512-6GS3Q0yoU/jUz+YEUaqMuBUi2hwJZbKafGbHZ2sy7ney79xjz+TdYJe5gd2sG8om28cYnu9QSbDur3R5gzAz+w==","signatures":[{"sig":"MEQCIBw52D72Z7G6WvhwzL1+myTavwId8Uw8MMSYUOyllgcAAiAOyrXr/mpOdvkoNwfXUmu+POouydNmWOYvC9lNdaXBIg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.2.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":107210},"main":"src/index.js","gitHead":"9cc29e4fc943502bebc5ae9f50ff1d257edba085","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"12.0.2","description":"Basic toolset for tune, like shell, readfile, writefile etc","directories":{},"_nodeVersion":"22.23.2","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.2.11_1787575614376_0.17517552700407224","host":"s3://npm-registry-packages-npm-production"}},"0.2.12":{"name":"tune-basic-toolset","version":"0.2.12","keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","_id":"tune-basic-toolset@0.2.12","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"dist":{"shasum":"f4fcb3225c82d1d1ab5b3e754707fdcc5044890c","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.2.12.tgz","fileCount":69,"integrity":"sha512-xuGhcr1nWALZ8kNCORHtr2z/HuA4CBSvPfNzrqJYA8Ky1rpPepQtXfzKPRBpr9yZcVib8Vw6Ixdhj9crfMJCsQ==","signatures":[{"sig":"MEUCIDB7pzsEoUU0QjdPcI4jftPil8PgCjGzHde9GxECuqlfAiEAskLaRoL/pN/8ZDvNrFxcuCmdsQpFZzUgraYkOFwpmXQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.2.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":107393},"main":"src/index.js","gitHead":"83d0e5a1d9be70fe641019d99d45133b1a304f86","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"repository":{"url":"git+https://github.com/iovdin/tune-basic-toolset.git","type":"git"},"_npmVersion":"12.0.2","description":"Basic toolset for tune, like shell, readfile, writefile etc","directories":{},"_nodeVersion":"22.23.2","dependencies":{"esprima":"^4.0.1","escodegen":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"_npmOperationalInternal":{"tmp":"tmp/tune-basic-toolset_0.2.12_1787575962016_0.1008560392619231","host":"s3://npm-registry-packages-npm-production"}},"0.2.13":{"name":"tune-basic-toolset","version":"0.2.13","description":"Basic toolset for tune, like shell, readfile, writefile etc","main":"src/index.js","scripts":{"test":"node test/index.js","test:watch":"node --watch test/index.js"},"keywords":["ai","chat","tools","tune"],"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/iovdin/tune-basic-toolset.git"},"license":"MIT","peerDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"devDependencies":{"tune-fs":"latest","tune-sdk":"latest"},"dependencies":{"escodegen":"^2.1.0","esprima":"^4.0.1"},"gitHead":"464d0451b4d767ed47480b2c78d4e035e12a5c17","_id":"tune-basic-toolset@0.2.13","bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"homepage":"https://github.com/iovdin/tune-basic-toolset#readme","_nodeVersion":"22.23.2","_npmVersion":"12.0.2","dist":{"integrity":"sha512-Bu2+SvJc4dMlpcKEbiNrJnBqcKWDl+KToQhXiL2bycOcLc3grFIi2qBHRDIKpoHhDgKzCtq3BmqM9WiOQKLoRA==","shasum":"a7dba9d2fd6937ada118c77cb8897eda6e119e72","tarball":"https://registry.npmjs.org/tune-basic-toolset/-/tune-basic-toolset-0.2.13.tgz","fileCount":69,"unpackedSize":107395,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tune-basic-toolset@0.2.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEB7EaXiKjBpLlZZ4aoIdqFRjTe49+h9sKQjBaica9k0AiBGICoHRXa1N98vftNnT5kmk5+bfvl4P9lnlX6OLFb6hg=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88e93ae1-40d4-4109-bd1a-f8d1b5af5fda"}},"directories":{},"maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tune-basic-toolset_0.2.13_1787736928098_0.19462589936585029"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-12T08:59:32.019Z","modified":"2026-08-26T09:35:28.520Z","0.1.0":"2025-08-12T08:59:32.193Z","0.1.1":"2025-08-13T14:39:39.164Z","0.1.2":"2025-08-13T14:47:27.088Z","0.1.3":"2025-08-16T20:23:44.322Z","0.1.4":"2025-09-04T18:29:32.855Z","0.1.6":"2025-09-21T08:53:00.174Z","0.1.7":"2025-09-22T09:39:40.122Z","0.1.8":"2025-09-29T15:16:33.793Z","0.1.10":"2025-09-30T19:15:50.401Z","0.1.9":"2025-09-30T19:15:53.442Z","0.1.11":"2025-10-21T19:39:41.819Z","0.1.12":"2025-10-25T12:33:25.326Z","0.1.13":"2025-11-04T10:04:01.697Z","0.1.14":"2025-11-05T16:36:36.890Z","0.1.15":"2025-11-09T08:18:33.674Z","0.1.16":"2025-11-22T08:10:52.963Z","0.1.17":"2025-11-23T08:13:19.642Z","0.1.18":"2025-12-05T16:19:57.791Z","0.1.19":"2026-01-18T17:53:42.698Z","0.1.20":"2026-01-18T18:00:56.885Z","0.1.21":"2026-02-09T12:21:25.920Z","0.1.22":"2026-02-22T09:26:51.427Z","0.2.0":"2026-03-03T09:07:37.398Z","0.2.1":"2026-03-13T08:13:32.544Z","0.2.2":"2026-03-16T08:51:51.288Z","0.2.3":"2026-03-17T15:47:08.637Z","0.2.4":"2026-03-22T16:04:21.153Z","0.2.5":"2026-04-01T09:55:10.258Z","0.2.6":"2026-04-06T18:28:00.141Z","0.2.7":"2026-04-17T08:26:06.353Z","0.2.9":"2026-07-12T08:40:43.910Z","0.2.10":"2026-07-24T07:08:56.547Z","0.2.11":"2026-08-24T12:46:54.523Z","0.2.12":"2026-08-24T12:52:42.161Z","0.2.13":"2026-08-26T09:35:28.227Z"},"bugs":{"url":"https://github.com/iovdin/tune-basic-toolset/issues"},"author":{"name":"Ilya Ovdin","email":"iovdin@gmail.com"},"license":"MIT","homepage":"https://github.com/iovdin/tune-basic-toolset#readme","keywords":["ai","chat","tools","tune"],"repository":{"type":"git","url":"git+https://github.com/iovdin/tune-basic-toolset.git"},"description":"Basic toolset for tune, like shell, readfile, writefile etc","maintainers":[{"name":"iovdin","email":"iovdin@gmail.com"}],"readme":"# Tune basic toolset\nBasic toolset for [Tune](https://github.com/iovdin/tune).\n\n##### Index\n- [Setup](#setup)\n  - [Text Editor](#text-editor)\n  - [JavaScript Project](#javascript-project)\n- [Tools](#tools)\n  - [rf](#rf) read file\n  - [wf](#wf) write file\n  - [patch](#patch) patch file  \n  - [append](#append) append to file\n  - [sh](#sh) execute shell command\n  - [cmd](#cmd) execute Windows cmd command\n  - [powershell](#powershell) execute PowerShell command\n  - [grep](#grep) search for patterns in text or files\n  - [search_tools](#search_tools) find appropriate tools for a task\n  - [osa](#osa) manage reminders/notes/calendar (AppleScript/macOS)\n  - [jina_r](#jina_r) fetch webpage content\n  - [mistral_ocr](#mistral_ocr) extract text from documents and images via OCR\n  - [websearch](#websearch) search the web with web-enabled llms\n  - [list](#list) keep list of tasks todo (loops for LLM)\n  - [sqlite](#sqlite) execute sqlite queries \n  - [py](#py) run python code\n  - [js_node](#js_node) run javascript code in node process\n  - [js_ctx](#js_ctx) run javascript code that shares context with LLM\n  - [turn](#turn) handoff based agent (shared context)\n  - [branch](#branch) branch current chat and run sub-agent\n  - [message](#message) talk to another chat/agent (separate context)\n- [Processors](#processors)\n  - [proc](#proc) converts tool to processor\n  - [init](#init) set initial value\n  - [json_format](#json_format) make LLM respond with JSON\n  - [log](#log) save LLM payload or raw fetch responses\n  - [mock](#mock) set variables inline\n  - [linenum](#linenum) prepend line numbers\n  - [text](#text) convert any variable to text variable\n  - [resolve](#resolve) resolve a variable\n  - [prop](#prop) set additional properties of LLM\n  - [head](#head) take first N lines of a file\n  - [tail](#tail) take last N lines of a file or LLM payload\n  - [slice](#slice) take lines from <start> to <finish> of a file\n  - [random](#random) random selection, sampling, shuffling, uniform ranges\n  - [curry](#curry) change a tool by setting a parameter\n  - [limit](#limit) limit output size by approximate token count\n  - [expand](#expand) extract `content`, `tools`, and/or `llm` nodes from a prompt or chat file\n  - [schema](#schema) convert a tool node into its JSON schema as text\n  - [filter](#filter) keep or drop a node based on a boolean expression over its properties\n  - [usage](#usage) track and display token usage and cost\n  - [fn](#fn) quote a variable inside\n\n\n## Setup\n### Text Editor\n\nInstall in your `~/.tune` folder:\n\n```bash\ncd ~/.tune\nnpm install tune-basic-toolset\n```\n\nAdd to `~/.tune/default.ctx.js`:\n\n```javascript\nconst basics = require('tune-basic-toolset')\n\nmodule.exports = [\n    ...\n    basics()\n    ...\n]\n```\n\n### JavaScript Project\n\n```bash\nnpm install tune-basic-toolset tune-sdk\n```\n\n```javascript\nconst tune = require('tune-sdk')\nconst basics = require('tune-basic-toolset')\n\nconst ctx = tune.makeContext(\n    basics({ expose: [\"rf\", \"wf\"], mount: \"tools\" })\n)\n```\n\n## Tools\n[Tools](https://iovdin.github.io/tune/template-language/tools) is a function that llm can run on your local machine or server\n\n### `rf`\nRead file\n```chat\nuser: @rf\ncan you read README.md?\ntool_call: rf {\"filename\":\"README.md\"}\ntool_result: \n@README.md\n```\nIt accepts an optional `linenum` parameter that prepends line numbers to the file (useful for patching).\nIt also accepts an `inline` parameter that, when set, returns the resolved node's content directly without wrapping it in a file reference (useful when you want the raw content included inline in the chat).\n\n### `wf`\nWrite to a file\n```chat\nuser: @wf \nmake a hello world javascript\ntool_call: wf {\"filename\":\"helloWorld.js\"}\nconsole.log('Hello, World!');\ntool_result:\nwritten\n```\n\n### `patch`\n```chat\nuser: @patch\ntranslate \"hello world\" in helloWorld.js  to dutch\ntool_call: patch {\"filename\":\"helloWorld.js\"}\n<<<<<<< ORIGINAL\nconsole.log('Hello, World!');\n=======\nconsole.log('Hallo, Wereld!');\n>>>>>>> UPDATED\ntool_result:\npatched\n```\n\n\n### `append`\n```chat\nuser: @append\nAdd a todo that i want to buy a car and go to the moon\ntool_call: append {\"filename\":\"todo.md\"}\n- buy a car \n- fly to the moon\ntool_result:\nappended\n```\n\n### `sh`\nExecute shell command locally or with ssh\n```chat\nuser: @sh\nfind with ripgrep where echo is used\ntool_call: sh\nrg 'echo' ./\ntool_result: \n./README.md:    echo: \"You are echo, you print everything back\",\n./README.md:  const text = \"s: \\@echo\\nu: hello world\";\n./tools/echo.txt:you are echo, you print everything back\n./tools/README.md:* `echo.txt` - to debug variable expansions and context\n\nuser:\ncheck contents directory on root\\@host.com\nassistant:\ntool_call: sh {\"host\": \"root@host.com\"}\nls\ntool_result:\nfile1\nfile2\n```\n\n### `cmd`\nExecute Windows cmd command\n```chat\nuser: @cmd\nlist all files in current directory\ntool_call: cmd\ndir\ntool_result: \n Volume in drive C has no label.\n Volume Serial Number is 1234-5678\n\n Directory of C:\\project\n\n12/01/2023  10:30 AM    <DIR>          .\n12/01/2023  10:30 AM    <DIR>          ..\n12/01/2023  09:15 AM             1,024 package.json\n12/01/2023  09:20 AM    <DIR>          src\n               1 File(s)          1,024 bytes\n               3 Dir(s)  15,728,640 bytes free\n```\n\n### `powershell`\nExecute PowerShell command\n```chat\nuser: @powershell\nget system information\ntool_call: powershell\nGet-ComputerInfo | Select-Object WindowsProductName, TotalPhysicalMemory, CsProcessors\ntool_result: \nWindowsProductName  : Windows 11 Pro\nTotalPhysicalMemory : 17179869184\nCsProcessors        : {Intel(R) Core(TM) i7-10700K CPU @ 3.80GHz}\n```\n\n### `grep`\nSearch for patterns in text or files using regular expressions\n```chat\nuser: @grep\nfind all lines containing \"TODO\" in myfile.js\ntool_call: grep {\"filename\":\"myfile.js\",\"regex\":\"TODO\"}\ntool_result: \n// TODO: refactor this function\n// TODO: add error handling\n\nsystem: \nTODOS:\n@{ myfile.js | proc grep regex=TODO }\n\n```\n\n### `search_tools`\nFind appropriate tools for a given task by searching through available tools\n```chat\nuser: @search_tools\nwhat is in my current directory?\n\nassistant:\nI'll help you check what's in your current directory.\n\ntool_call: search_tools\nlist files and folders in current directory\n\ntool_result:\n@sh \"sh\" - because it can run shell commands like `ls -la` to list files/folders on Unix-like systems\n@cmd \"cmd\" - because it can execute `dir` to list directory contents on Windows cmd.exe\n@powershell \"powershell\" - because it can run `Get-ChildItem` (alias `ls`) to list items on Windows PowerShell\n@nu \"nu\" - because it can run Nushell commands like `ls` for structured directory listings\n\nassistant:\nLet me try with a shell command that works on most systems:\n\ntool_call: sh\nls -la\n\ntool_result:\ntotal 13584\ndrwxr-xr-x   15 iovdin  staff      480 Jan 18 19:07 .\ndrwxr-xr-x  195 iovdin  staff     6240 Jan 17 12:46 ..\ndrwxr-xr-x   14 iovdin  staff      448 Jan 18 19:00 .git\ndrwxr-xr-x    3 iovdin  staff       96 Sep  4 20:15 .github\n-rw-r--r--    1 iovdin  staff       82 Aug 12 10:44 .gitignore\n-rw-r--r--    1 iovdin  staff      316 Oct 21 21:41 .npmignore\ndrwxr-xr-x   32 iovdin  staff     1024 Jan 18 18:59 chats\ndrwxr-xr-x   13 iovdin  staff      416 Oct 25 09:32 node_modules\n-rw-r--r--    1 iovdin  staff     8145 Oct 25 09:32 package-lock.json\n-rw-r--r--    1 iovdin  staff      754 Jan 18 18:59 package.json\n-rw-r--r--    1 iovdin  staff    18959 Jan 18 18:59 README.md\ndrwxr-xr-x   62 iovdin  staff     1984 Jan 18 19:04 src\ndrwxr-xr-x   16 iovdin  staff      512 Nov  9 09:14 test\n\n```\n\nThis tool analyzes your task description and recommends the most relevant tools from the available toolset, explaining why each tool would be helpful for your specific use case.\n\n### `osa`\nAppleScript tool, manage reminders, notes, calendar etc on osx\n```chat\nsystem: @osa @gpt-4.1\nyou're personal assistant with access to osx apps\nlike reminder, calendar etc\n\nuser: \ncan you remind me in 2 hours that i have meeting with jack\n\nassistant:\n\ntool_call: osa\ntell application \"Reminders\" to make new reminder with properties {name:\"Meeting with Jack\", remind me date:(current date) + 2 * hours}\ntool_result:\nreminder id x-apple-reminder://849EA642-B7E0-4E16-94AA-B50FF1BC282D\n```\n\n### `jina_r`\nFetch webpage content with [jina reader](https://jina.ai/reader) api.\nWorks without an API key up to a limited rate. Set JINA_KEY in .env for higher rate limits.\n\n```chat\nuser: @jina_r\ntake https://iovdin.github.io/tune/ page content\nand put it into `home` directory\nthen make short summary\n\ntool_call: jina_r {\"url\":\"https://iovdin.github.io/tune/\",\"filename\":\"home/tune_page_content.md\"}\n\ntool_result: \n@home/tune_page_content.md\n\nassistant:\nThe content from the \"Tune\" page has been successfully retrieved and saved into the `home/tune_page_content.md` file. Below is a short summary of the page:\n\n---\n\n**Summary of Tune - Your Everyday LLM Toolkit:**\n\nTune is a versatile toolkit designed for developers and users to effectively interact with Large Language Models (LLMs). It allows users to chat with AI, build applications, and create AI agents in a simple manner. \n<cut for brevity>\n```\n\n### `mistral_ocr`\nExtract text from documents and images using the [Mistral OCR API](https://mistral.ai/). Requires a `MISTRAL_KEY` set in `.env`.\n\nSupports documents: `.pdf`, `.docx`, `.xlsx`, `.pptx`, `.txt`, `.epub`, `.xml`, `.rtf`, `.odt`, `.bib`, `.fb2`, `.ipynb`, `.tex`, `.opml`, `.1`, `.man`\n\nSupports images: `.jpg`, `.jpeg`, `.png`, `.avif`, `.tiff`, `.gif`, `.heic`, `.heif`, `.bmp`, `.webp`\n\n```chat\nuser: @mistral_ocr\nextract text from invoice.pdf\n\ntool_call: mistral_ocr {\"filename\":\"invoice.pdf\"}\ntool_result:\n# Invoice #1042\n\n**Date:** 2024-04-01\n**Bill To:** Acme Corp\n\n| Description        | Amount  |\n|--------------------|---------|\n| Consulting (10h)   | $1500   |\n| Hosting (1 month)  | $50     |\n| **Total**          | $1550   |\n\nuser: \nwhat does this screenshot say?\n\ntool_call: mistral_ocr {\"filename\":\"screenshot.png\"}\ntool_result:\n## System Alert\n\nYour disk usage has exceeded 90%. Please free up space to avoid performance issues.\n```\n\nYou can also save the extracted text to a file using the `outfile` parameter:\n\n```chat\nuser: @mistral_ocr\nextract text from report.pdf and save it to report.md\n\ntool_call: mistral_ocr {\"filename\":\"report.pdf\",\"outfile\":\"report.md\"}\ntool_result:\nsaved to report.md\n```\n\n### `websearch`\nSearch the web with web enabled llms\nSupports search with  `perplexity/sonar`, `perplexity/sonar-pro`, `gpt-4o-search-preview`, `gpt-4o-mini-search-preview` models via the `model` parameter (defaults to `perplexity/sonar`).\n\n```chat\nuser: @websearch\nlatest ai news\n\nassistant:\n\ntool_call: websearch {\"model\":\"perplexity/sonar\"}\nlatest AI news\ntool_result:\nThe latest AI news in October 2025 highlights significant investments, new projects, policy developments, and advances across various sectors:\n\n- Major companies including Microsoft, Google, Nvidia, OpenAI, Salesforce, and CoreWeave have pledged over £31 billion in capital expenditure focused on AI data centers and infrastructure upgrades[1].\n```\n\nThe websearch tool provides up-to-date information by querying the web through AI-powered search models. You can specify different Perplexity models like `perplexity/sonar-pro` for more advanced searches.\n\n### `list`\nKeep list of tasks to do\n\n```chat\nsystem: @list\nYou manage todo list in file todo.txt\n\nuser: \nToday i need to refactor xyz\nand then release abc\n\nassistant:\n\ntool_call: list {\"filename\":\"todo.txt\"}\ntodo - refactor xyz\ntodo - release abc\n\ntool_result:\nlist updated\n\nuser: \nok, i've finished refactoring xyz\n\nassistant:\n\ntool_call: list {\"filename\":\"todo.txt\"}\ndone - refactor xyz\n\ntool_result:\nlist updated\n```\n\n### `sqlite`\nexecut sqlite queries with sqlite shell\n\n```chat\nuser:\n@sqlite\n\ncreate a simple todo table in db.sqlite and fill it with fake data\nassistant:\n\ntool_call: sqlite {\"filename\":\"db.sqlite\"}\nCREATE TABLE todo (\n  id INTEGER PRIMARY KEY AUTOINCREMENT,\n  task TEXT NOT NULL,\n  status TEXT CHECK(status IN ('pending', 'completed')) NOT NULL DEFAULT 'pending',\n  due_date DATE\n);\n\nINSERT INTO todo (task, status, due_date) VALUES\n('Buy groceries', 'pending', '2024-05-01'),\n('Finish project report', 'pending', '2024-05-03'),\n('Book flight tickets', 'completed', '2024-04-25'),\n('Call plumber', 'pending', '2024-04-30'),\n('Schedule meeting with team', 'completed', '2024-04-20');\ntool_result:\n\nuser:\ncheck pending tasks\n\nassistant:\n\ntool_call: sqlite {\"filename\":\"db.sqlite\",\"format\":\"json\"}\nSELECT * FROM todo WHERE status = 'pending';\ntool_result:\n[{\"id\":1,\"task\":\"Buy groceries\",\"status\":\"pending\",\"due_date\":\"2024-05-01\"},\n{\"id\":2,\"task\":\"Finish project report\",\"status\":\"pending\",\"due_date\":\"2024-05-03\"},\n{\"id\":4,\"task\":\"Call plumber\",\"status\":\"pending\",\"due_date\":\"2024-04-30\"}]\n```\n\n\n### `py`\nexecute python code\n```chat\nuser: @py\n1234 + 4311\n\ntool_call: py\n1234 + 4311\n\ntool_result:\n5545\n```\n\n### `js_node`\nexecute javascript code in nodejs\n```chat\nuser: @js_node\n1234 + 4311\n\ntool_call: js {\"inputType\":\"commonjs\"}\n1234 + 4311\n\ntool_result:\n5545\n\n```\n\n### `js_ctx`\nexecute javascript code but also call tools available to llm or trigger LLM response from code \nIt is useful when you need to trigger loops and ifs or chain few tool calls together\n```chat\nuser: \n@js_ctx @sh\n\nwhat is in my current directory?\n\ntool_call: sh\nls\ntool_result:\n__pycache__\nappend.schema.json\nappend.tool.js\n... file list\n\nuser:\ncan you do the same using js_ctx tool?\n\nassistant:\n\ntool_call: js_ctx\n\nconst result = await ctx.exec(\"sh\", { text: \"ls\" });\nreturn result;\n\ntool_result:\n__pycache__\nappend.schema.json\nappend.tool.js\n....\n```\n\nNote that `ctx.exec` always returns a string. If you expect JSON, use `JSON.parse()`:\n\n```chat\ntool_call: js_ctx\n\nconst result = await ctx.exec(\"sqlite\", { filename: \"db.sqlite\", format: \"json\", text: \"SELECT * FROM users LIMIT 1\" });\nconst user = JSON.parse(result);\nreturn user[0].name;\n\ntool_result:\nAlice\n```\n\n\nNow we can loop trough all the files and summarize its content\n```\nuser:\ncan you loop throught the .js files and summarize its content using llm?\nassistant:\n\ntool_call: js_ctx\n\n// Get all .js files (excluding .proc.js and .schema.json files)\nconst files = await ctx.exec(\"sh\", { text: \"ls *.js | grep -v '.proc.js'\" });\nconst jsFiles = files.trim().split('\\n').filter(f => f.endsWith('.js'));\n\nconst summaries = [];\n\n// Loop through each .js file\nfor (const file of jsFiles) {\n  // Read the file content\n  const content = await ctx.exec(\"sh\", { text: `cat ${file}` });\n  \n  // Use LLM to summarize\n  const summary = await ctx.file2run({\n    system: \"@mistral-tiny You are a code analyst. Provide a brief 1-2 sentence summary of what this JavaScript file does.\",\n    user: \"Summarize this code:\\n\\n@code\"\n  }, {\n    code: content\n  });\n  \n  summaries.push({\n    file: file,\n    summary: summary.trim()\n  });\n}\n\n// Format and return results\nreturn summaries.map(s => `**${s.file}**\\n${s.summary}\\n`).join('\\n');\n\ntool_result:\n**append.tool.js**\nThis JavaScript file exports an asynchronous function that appends the given text to the end of a specified file, and returns \"done\" once the operation is completed.\n\n**cmd.tool.js**\nThis JavaScript file exports an asynchronous function `cmd` that executes a system command (Windows-specific, using 'cmd.exe' as the shell) passed as a string, and returns the command's output or an error message containing both stderr and stdout.\n\n**grep.tool.js**\nThis JavaScript module exports an asynchronous function named `grep` that reads a file (if provided) or a provided text and searches for lines matching a given regular expression. It returns the lines that match, separated by newlines. If the file is not found or the content is empty, it returns appropriate error messages.\n....\n\n```\n\n### `turn`\nA way to switch roles when building multistep agents [read more](https://iovdin.github.io/tune/examples/multi-agent) \n```chat\nsystem:  @gpt-4o\n@{ turn | curry filename=agent.txt}\nYou're playing 20 questions game.\nYou switch turns between 'thinker' and 'player' agent. \n'player' always plays first\n\n@@agent|init\nassistant: \nIs it a living thing?\n\ntool_call: turn {\"name\": \"thinker\"}\ntool_result: \nnow it is turn of thinker to reply\n\nassistant: \nNo.\n\ntool_call: turn {\"role\":\"player\"}\ntool_result: now it is turn of player to reply\n\nassistant: \nIs it something that can be used indoors?\n\ntool_call: turn {\"role\":\"thinker\"}\ntool_result: now it is turn of thinker to reply\n\nassistant: \nYes.\n\n...\n```\n\n### `branch`\nBranch current chat and continue from the same shared history.\n\nUnlike `message`, this tool must be called from an existing chat context. It takes the current chat history, appends your new instruction as the next user message, and returns the assistant reply from that branched continuation.\n\n```chat\nsystem:\n@branch\n\nuser:\nContinue this conversation, but explore an alternative approach.\n\nassistant:\ntool_call: branch \nRe-answer the last request, but optimize for simplicity and low cost.\ntool_result:\nHere's a simpler and lower-cost approach: ...\n```\n\nUse `branch` when you want to:\n- try an alternative reply without losing prior context\n- save context by doing a lot of tool calls in alternative branch\n\n### `message`\nTalk to another chat/agent via tool call. \nOrchestrate or evaulate other agents/chats.\n```chat\nsystem: \n@message\nYour goal is to talk to Groot at `groot.prompt` system prompt\nand try to make him say anything but 'I am Groot' \n\ntool_call: message {\"filename\":\"groot.chat\",\"system\":\"@@groot.prompt\"}\nHello Groot! How are you feeling today?\n\ntool_result: \nI am Groot!\n\ntool_call: message {\"filename\":\"groot.chat\"}\nWhat do you think about trees?\n\ntool_result: \nI am Groot!\n\ntool_call: message {\"filename\":\"groot.chat\"}\nCan you tell me a joke?\n\ntool_result: \nSure! Why did the tree go to the dentist?  \n\nBecause it had a root canal!\n```\n\nThe content of `groot.chat` is then:\n```chat\nsystem: @@groot.prompt\nuser:\nHello Groot! How are you feeling today?\n\nassistant:\nI am Groot!\n\nuser:\nWhat do you think about trees?\n\nassistant:\nI am Groot!\n\nuser:\nCan you tell me a joke?\n\nassistant:\nSure! Why did the tree go to the dentist?  \n\nBecause it had a root canal!\n```\n\n## Processors\n[Processors](https://iovdin.github.io/tune/template-language/processors) is a way to modify variable or insert new ones into chat.\n\n### `proc`\nconverts any tool to a processor\n``` chat\nsystem:\ninclude project file list to system prompt\n@{| proc sh git ls-files }\n\nexecute script with sqlite on db `db.sqlite` and insert result\n@{ script.sql | proc sqlite filename=db.sqlite }\n\nexecut python script text=\"384 * 123\" and insert back result\n@{| proc py 384 * 123  }\n```\n\n### `init` \nSet default value for non set variables\n\n```chat\nsystem:\n@memory|init \nif memory does not exist the chat will fail\n```\n\n### `json_format`\nSet llm response format to json [read more](https://platform.openai.com/docs/guides/structured-outputs?api-mode=chat).\n\nWithout arguments it sets\n```json\n\"response_format\": {\n  \"type\": \"json_object\"\n}\n```\n\n```chat\nsystem: \n@{ gpt-4o | json_format }\nplease reply in json format:\n{ \"message\": \"Your reply\"}\n\nuser: \nhi how are you?\n\nassistant:\n{ \"message\": \"I'm just a virtual assistant, so I don't have feelings, but I'm here and ready to help you! How can I assist you today?\" }\n\n```\n\nwith argument it sets \n```json\n\"response_format\": { \n    \"type\": \"json_schema\", \n    \"json_schema\": { \"schema\": \"<contents of the referenced schema file>\" }\n} \n```\n\n```chat\nsystem: \n@{ gpt-4o | json_format path/to/schema.json }\n```\n\n### `log` \nSave LLM payload or raw fetch responses to a file, used for debugging.\nSupports `.json`, `.chat`, and `.fetch` file extensions.\n```chat\nsystem: \n@{ gpt-4o | log path/to/log.json }\n@{ gpt-4o | log path/to/log.chat }\n@{ gpt-4o | log path/to/log.fetch }\n```\n- `.json` — saves the full LLM payload as JSON\n- `.chat` — saves the chat messages in `.chat` format\n- `.fetch` — saves the raw fetch response body\n\n### `mock` \nSet variables inline in chat. \n```\nsystem: @{| mock hello=world }\n@echo\nuser: \n@hello\nassistant:\nworld\n```\n\n### `linenum`\nPrepend line numbers to a file content. \nUseful when patching file.\n```chat\nsystem:\n@echo\nuser: \n@{ helloWorld | linenum }\nassistant:\n1 | console.log('Hello, World!');\n```\n\n### `text`\nTreat special files (`.ctx.js`, `.llm.js`, `.tool.js`)  like text\n```chat\nsystem: \n@echo\n\nuser: \ncontent \n@rf.tool.mjs\n\nassistant: \ncontent\n\nuser: \ncontent\n@{ rf.tool.mjs | text}\n\nassistant: \ncontent\nimport { promises as fs } from 'fs';\nimport { relative, dirname } from 'path' \n....\n```\n\n### `resolve`\nGiven filename resolve it and include\n\n```chat\n@{ filename | resolve }\n```\n\nsee `examples/queryimage` example\n\n### `prop`\nset additional properties for llm\n\n```chat\nsystem: \n@{ o3-mini | prop reasoning_effort=low temperature=2.0 }\n```\n\n### `head`\nTake first *N* lines of text from a file or variable. Default is 20 lines.\n\n```chat\nuser: \n@{ filename.txt | head 10 }    # first 10 lines\n```\n\n### `tail`\nTake last *N* lines of text from a file or variable. Default is 20 lines.\n\n```chat\nuser: \n@{ filename.txt | tail 15 }    # last 15 lines\n```\n\nYou can limit llm request context with tail like\n```chat\nsystem: \n@{ gpt-4.1 | tail 2 }  # take last 2 messages from the chat + system message\n\nuser: \n1\n\nassistant: \n2\n\nuser: \n3\n\nassistant: \n4\n```\n\n\n### `slice`\nExtract a range of lines from a file or variable.\n\n```chat\nuser: \n@{ filename.txt | slice 5 15 }      # lines 5 to 15 inclusive\n@{ filename.txt | slice 10 }        # from line 10 to end\n@{ filename.txt | slice -10 -1 }    # last 10 lines\n@{ filename.txt | slice -20 }       # last 20 lines\n@{ filename.txt | slice 1 20 }      # first 20 lines (like head 20)\n```\n\n### `random`\nRandom selection, sampling, shuffling, and uniform number generation.\n\nUse cases:\n```chat\nuser:\n@{| random a b c d }\n@{| random choice a b c d }\n@{| random \"choice 1\" \"choice 2\" }\n@{| random choice @path/to/file.txt }  # choose 1 line from a file\n@{| random choice 2..30 }              # choose 1 from range \n@{| random choice -2.5..7.5 }          # floats\n@{| random choices 3 a b c d }         # pick 3 with replacment\n@{| random choices 5 @file.txt }       # pick 5 lines from file.txt\n@{| random sample 3 a b c d }          # pick 3 without replacement\n@{| random sample 10 1..5 }            # will return 5 unique numbers\n@{| random shuffle a b c d }\n@{| random shuffle 1..10 }\n@{| random uniform 1..10 }           # integers\n@{| random uniform -2.5..7.5 }       # floats\n@{| random uniform 10 20 }           # two-number form\n\n```\nNotes:\n- Quotes are respected for tokens with spaces.\n- Files referenced as @file are expanded to non-empty trimmed lines.\n- Integer ranges like a..b can be mixed with discrete values and files; float ranges cannot be mixed in lists.\n- sample and shuffle require a discrete set; float ranges are not supported there.\n- choices and sample output multiple lines (one item per line).\n\n\n### `limit`\nLimit model or text or tool output by approximate token count.\n\n\n```chat\nsystem:\n@{ gpt-5.4 | limit tokens=100k }\n@{ README.md | limit tokens=2k }\n@{ sh | limit tokens=1500 hit=soft_err }\n@{ sh | limit tokens=1.5k hit=cut }\n@{ sh | limit tokens=1500 hit=tail }\n@{| proc sh tree | limit tokens=800 }\n```\n\nUseful when including large files or command output into a prompt.\nThe processor estimates tokens as roughly `content.length / 4`.\n\nArguments:\n- `tokens` max token limit, default `10000`\n- `hit` what to do when the limit is exceeded:\n  - `hard_err` throw an error (default)\n  - `soft_err` return an text error message instead of throwing the error.\n  - `cut` truncate the content after the limit\n  - `tail` truncate the content before the limit, keeping the last N tokens\n\n`tokens` also supports shorthand values like `2k`, `1.5k`, `3m`.\nInvalid, non-finite, or non-positive values fall back to `10000`.\n\n### `curry`\nModify a tool by setting parameter or name or description. \nNarrow possible usage of a tool so that LLM wont mess up\n\n```chat\nuser:\n@{ sh | curry text=ls $name=ls_cwd}\n\nwhat is in my current directory?\n\nassistant:\n\ntool_call: ls_cwd\ntool_result:\nnode_modules\npackage.json\nREADME.md\nsrc\n\n\nuser:\n@{ sqlite | curry filename=db.sqlite format=table}\n\nwhat tables are outhere?\n\nuser: \n@{ list | curry filename=mylist.todo $name=todo }\n\ncreate sample todo list\ntool_call: todo\n[] - Create sample todo list\ntool_result:\nlist updated\n```\n\n### `expand`\nParses a prompt or chat file and extracts its `content`, `tools`, and/or `llm`. \n\nexample `branch.tool.chat`:\n```chat\nsystem:\nYou're sub agent for the conversation:\n\n<chat-history>\n\n@{ __parent | expand content tools llm | filter name!=\"branch\" }\n\n# `__parent` - resolves to chat that calls this one as a tool\n# `| expand content tools llm` - will expand all @ and @@ inside the parent chat \n#                                return chat history(content) \n#                                re-use tools from parent chat\n#                                and use the same llm as parent chat\n# `| filter name!=\"branch\"` - it will remove `branch` tool (itself) so to avoid recursive calls\n\n</chat-history>\nuser:\n@text\n```\n\nexample for `webapp.tool.chat`:\n\n```chat\n@gpt-5.4 @rf @wf @patch\n\nYou are sub-agent \nYou help to make or update simple static webapps for 'tune ws'\n\n<tune-sdk-manual>\n@man/tune-sdk\n</tune-sdk-manual>\n\n<chat-history>\n@{ __parent | expand content }\n\n# `__parent` - resolves to caller chat\n# `expand content` expands only content of parent, skip tools and model\n\n</chat-history>\n\n<tools-schemas>\n@{ __parent | expand tools | schema }\n\n# `| expand tools ` extract tools from the chat\n# `| schema` - extract json schema of the tools, this chat will not call them, but it knows what can be called by `ctx` in generated html\n</tools-schemas>\n\nuser:\ngo\n```\n\n### `schema`\nConverts a tool node into its JSON schema as a text node. Must be applied to a `tool` type node.\n\n```chat\nsystem:\n@{ sh | schema }\n```\n\n### `filter`\nKeeps or drops a node based on a boolean expression evaluated against the node's properties (e.g. `type`, `name`).\n\nSupported operators: `==`, `!=`, `=~` (regex match), `!~` (regex no-match)\n\n```chat\nsystem:\n@{ __parent | expand tools | filter type == \"tool\" }\n@{ __parent | expand tools | filter name != \"sh\" }\n@{ __parent | expand tools | filter name =~ /^(sh|sqlite)$/ }\n```\n\n### `usage`\nTrack and display token usage and cost.\n\nWhen applied to an LLM node, this processor:\n- Strips previous usage markers from chat history before sending to the LLM\n- Appends token usage and cost information to the assistant's response after generation\n\n```chat\nsystem: \n@{ gpt-4o | usage }\nuser: \nHello\nassistant: \nHi there!\n\n---\n↑500/100 ↓50 0.05¢\n---\n```\n\nThe usage line shows:\n- `↑` prompt tokens (input) / cached tokens\n- `↓` completion tokens (output)\n- Cost in cents (if available)\n\n\n### `fn`\nInsert filename along with its content.\n\n`@path/filename` in cursor and other clients it inserts contents of the filename + leave filename in place. But tune only inserts content leaving mention empty.\n\n`fn` solves this:\n\n```chat\nuser: can you look into the @filename \n\n# becomes\n\nuser: can you look into <contents of the filename>\n\n# but\n\nuser: can you look into the @filename|fn\n\n#becomes\n\nuser: can you look into the @filename\n\n---- contents of filename ----\n<contents of the filename>\n---- end contents of filename ----\n```\n","readmeFilename":"README.md"}