{"_id":"@essentianlabs/radar-lite","_rev":"29-ea4e848379ce4cb22925e8987a31ec66","name":"@essentianlabs/radar-lite","dist-tags":{"latest":"0.4.9"},"versions":{"0.1.0":{"name":"@essentianlabs/radar-lite","version":"0.1.0","keywords":["ai","agents","risk","governance","safety"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.1.0","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"e361d6e17cc07c7179fbfda0ae530eb8f12d7491","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.1.0.tgz","fileCount":11,"integrity":"sha512-Q2YyMFafaM/0i15dBvPGM5Y1ja3LD2oqUMwQ3PyL3fVVsTZMyAfj6t32cUg2w6+yl+h/+whrPALLaZw++27Mxw==","signatures":[{"sig":"MEYCIQDhjwUD3en8bMDuJdnmXuv0Wi7MFaaDUAcC6h9FCMv/5gIhAOSLT7TwgFgB3nESwZfN94n1ZiBb9a/sTeP+/Pq3k9Jc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32751},"main":"src/index.js","type":"module","gitHead":"6db3bf2cdf0c77a99d0fef06a0c7a76a0721f7ec","scripts":{"dev":"node test/manual.js","test":"node --test test/"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","_npmVersion":"11.9.0","description":"Local risk assessment for AI agents. Vela Lite runs on your machine.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.1.0_1774618830374_0.884008656962262","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@essentianlabs/radar-lite","version":"0.1.2","keywords":["ai","agents","risk","governance","safety"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.1.2","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"a3952a98a1a07b2d70f41cda0f24a8462286a7a0","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.1.2.tgz","fileCount":12,"integrity":"sha512-csmSU9IDYRATw8vBc5qNWZ5ZFLiNIMgqDDo5MfAHZlQouCetu1FaPyQbmm6B4GS7KZD4+40ii/OPpFWXHFRBLQ==","signatures":[{"sig":"MEYCIQDXbpHjbDI+zXXyrKB4ZNp91gttOpyx9rIaBNHP/4REugIhAOEBZwuTBLXJQLfhbRUa8zaCr4tIB/4rUvKVJuFUoPkf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38201},"main":"src/index.js","type":"module","gitHead":"3f4ade1aa8da87dc002e8acf579d08da79573496","scripts":{"dev":"node test/manual.js","test":"node --test test/"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","_npmVersion":"11.9.0","description":"Local risk assessment for AI agents. Vela Lite runs on your machine.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.1.2_1774621826453_0.11533609552163138","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@essentianlabs/radar-lite","version":"0.1.3","keywords":["ai","agents","risk","governance","safety"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.1.3","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"9a2c0176b62d5fc33a6f75d873c564efdca31f66","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.1.3.tgz","fileCount":13,"integrity":"sha512-ozrOrzwsYdIqXuTdinyE7hG5lZc+lBlWc3nL7NgGBgtAkMj/B+idTU8W4Bl7w100FDPkqzi9+FDvUIhqfqwgKg==","signatures":[{"sig":"MEUCIAiGj57PXzYOWSYmOmISk3lOVdwigPh8AbFLaffeJT1jAiEAt1XQ7pW8vFjBC4i/FFx9NNXGZv6Gd+GVoAnqA4NL1og=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63545},"main":"src/index.js","type":"module","gitHead":"fefb1a2c069b5ffe85f6fe2bb781d82260ac6dfa","scripts":{"dev":"node test/manual.js","test":"node --test test/"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","_npmVersion":"11.9.0","description":"Local risk assessment for AI agents. Vela Lite runs on your machine.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.1.3_1774633568209_0.9672921616575811","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@essentianlabs/radar-lite","version":"0.2.2","keywords":["ai","agents","risk","governance","safety"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.2.2","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"b900c5b47cb515ba7918a535963b8cfac5b0a82a","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.2.2.tgz","fileCount":13,"integrity":"sha512-i90gd6jxrSPE85rslOlau/f816KiLjozeCdg45wQKX/IPf19ksAdx8dCtS0jnOea+3zfnFZoqpEDOXmH90dSrQ==","signatures":[{"sig":"MEYCIQDDcF5v+U4Ml/iKobzNiiGKPaRz0cX4Myo8pIAEXaV1ywIhAMqjZ0mHDbCKwVLeBv6vAtfx5fwrEAd+bobvkt/kzL2q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":154493},"main":"src/index.js","type":"module","gitHead":"1041a4a91b5c8ae94b92c4184120fd993aa65a71","scripts":{"dev":"node test/manual.js","test":"node --test test/"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","_npmVersion":"11.9.0","description":"Local risk assessment for AI agents. Vela Lite runs on your machine.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.2.2_1774698483532_0.8990172385802928","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@essentianlabs/radar-lite","version":"0.2.4","keywords":["ai","agents","risk","governance","safety"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.2.4","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"40d3e3e7841fd3f9b6747fdde1108dda32f6ac74","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.2.4.tgz","fileCount":13,"integrity":"sha512-Wb1VX4Wv1PtMwtOjYqDCFh7T9byUZ3+oikXStJkf9+lpe9no/2TicP6ceomhMDwshLN6j7W34eb83qnvogTq1w==","signatures":[{"sig":"MEYCIQDtAeX8bNJiMCchtPFp8zIcfGvQs1HldwJGzGJ0gascqAIhAKup3IMfMhLoUDEJhrToN8ezvWoPmQ71muK0mdJ0WBt3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":183893},"main":"src/index.js","type":"module","gitHead":"cf05ca170b1870bd90861b1029f8121b37c3d3ee","scripts":{"dev":"node test/manual.js","test":"node --test test/"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","_npmVersion":"11.9.0","description":"Local risk assessment for AI agents. Vela Lite runs on your machine.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.2.4_1774723224832_0.46808916402958767","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@essentianlabs/radar-lite","version":"0.2.6","keywords":["ai","agents","risk","governance","safety"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.2.6","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"b35e5cd53f85f62af62a74eadd88adaae0df2bb3","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.2.6.tgz","fileCount":15,"integrity":"sha512-usbm6ic8V7NKupOQuDr5wZ0AUBqG+1wL+LunKhBAyP5MvwCJHgA10qlWK+TEAm5wb4NvAGIqGWM+HOsVeid6Sg==","signatures":[{"sig":"MEUCIQD+O5BHGzJ3OWi+m9LzqH2y4kXmjJmVcNXbhu/QWNMpYgIgBfw78D+eo9HF1G6tsvdtd4MS/TGGZpVnhxTMQWQguXk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":204908},"main":"src/index.js","type":"module","gitHead":"d069a85a6e20a82632260d6ccd1651e2bffe0fdd","scripts":{"dev":"node test/manual.js","test":"node --test test/"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","_npmVersion":"11.9.0","description":"Local risk assessment for AI agents. Vela Lite runs on your machine.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.2.6_1774784330033_0.8124866378985114","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@essentianlabs/radar-lite","version":"0.2.7","keywords":["ai","agents","risk","governance","safety"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.2.7","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"99be35a7e5c8f6dc8e8996aa63eed63abd1501c8","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.2.7.tgz","fileCount":15,"integrity":"sha512-8GXjFHK29s3qkcQtbKhI5GRBsCU5bjFIokfmLZUv46f8d9sv8+5i+lIbcip+pSAOmuwRDmgqL0sMadRC1hwIYQ==","signatures":[{"sig":"MEYCIQDU7r7gB+9JGukJY7/4IiK5poRfB0gXZrb4BtjBHlcNsAIhALLFKbBREFD35Q0V7UZtMFwG7/pU8/BKCMEeo0lCBEt0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":208532},"main":"src/index.js","type":"module","gitHead":"610b2f2f7ab1e4fb2c5eec1e00566b24c3e66d50","scripts":{"dev":"node test/manual.js","test":"node --test test/"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","_npmVersion":"11.9.0","description":"Local risk assessment for AI agents. Vela Lite runs on your machine.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.2.7_1774785790735_0.3029715432572042","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@essentianlabs/radar-lite","version":"0.2.8","keywords":["ai","agents","risk","governance","safety"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.2.8","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"3601cc053fe2077159667ee489ba419564f3b610","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.2.8.tgz","fileCount":15,"integrity":"sha512-kLooJUV6eV05NIzW5FktVTemQNkiRahfZYObD+e7jfY/gCyGN2J+r+iYrWTcd510kFnHsZKIpyUO2yCEAUyiRw==","signatures":[{"sig":"MEUCIQDwwJ+636dSrtQ/Hlf8pD9ZIVrPMz9kfXLQL8xWN7nCOwIgA4nevJzE9FGLG+Y3S/TQn6AsVYiDEL+YLQ6S+gSiWYM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":208882},"main":"src/index.js","type":"module","gitHead":"e54366a8221bb42caf5274bd88f657fa56d47919","scripts":{"dev":"node test/manual.js","test":"node --test test/"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","_npmVersion":"11.9.0","description":"Local risk assessment for AI agents. Vela Lite runs on your machine.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.2.8_1774787418454_0.5291809678915722","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"@essentianlabs/radar-lite","version":"0.2.9","keywords":["ai","agents","risk","governance","safety"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.2.9","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"387edf7011cc2ae5e59dad674b535d0e0ff2be60","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.2.9.tgz","fileCount":15,"integrity":"sha512-iHtGh+pvR8rKXKezGfwN574Db4G8VqeAwoeoF5rhPzhkSccMatcXbLHitDS6dbaPTM0N2tUEok+3241N4TOV5w==","signatures":[{"sig":"MEYCIQDp8Bu1B0PcXoRZC+T7xTjtoZoIcBu/pTbwvqRqoNFRfgIhAOD4l1vVRA0wTlcYrtnj1EjfQHvtyyFyEAVSTK0VuAzD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":208873},"main":"src/index.js","type":"module","gitHead":"943f432e8bf650010e5aca70dbee56d0a0e270ef","scripts":{"dev":"node test/manual.js","test":"node --test test/"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","_npmVersion":"11.9.0","description":"Local risk assessment for AI agents. Vela Lite runs on your machine.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.2.9_1774788173821_0.3162330251498897","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@essentianlabs/radar-lite","version":"0.3.0","keywords":["ai","agents","risk","governance","safety"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.3.0","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"dba42c9c9c216b4a4ef8f6cbacb5cc33adcc5301","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.3.0.tgz","fileCount":15,"integrity":"sha512-23HcJNftJx4baALLaYUc6MgTNU6jC/9ZKXu0UmKc67pBadeV0gqDUIaDkPfoT6V7rBvK7J65rqOKm5CkaPUQ8Q==","signatures":[{"sig":"MEUCIGNQauduOw9mHJuT83LU3ImbU+HjddROy49TSIu5cTBjAiEA7lNb59DqgrXDmk5CuIomikdUtvJA40gT3Y+VqQzeLVA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":218536},"main":"src/index.js","type":"module","gitHead":"421c08fe00eb1af3751eaffceba4784f6d12c1ba","scripts":{"dev":"node test/manual.js","test":"node --test test/"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","_npmVersion":"11.9.0","description":"Local risk assessment for AI agents. Vela Lite runs on your machine.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.3.0_1774790475788_0.7560477443079139","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@essentianlabs/radar-lite","version":"0.3.1","keywords":["ai","agents","risk","governance","safety"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.3.1","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"aa5546846cae2ef601d8f42848d6de186a8778b5","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.3.1.tgz","fileCount":16,"integrity":"sha512-lqLJIxtlYOxBaLYcIORpJLSMG+s6EeJwC14+ewPJyQw2WfZJ6AYZEbcCYSnGnjfaZLHTaiwHsibohxXPBokViw==","signatures":[{"sig":"MEQCIG7vkTKIaW3OjuYu2lm1Li60oCKVRox/mJ/VeVi8cO1UAiA1ljFp+SH9urLjMKSa+pZUpuPIppEX3kuLHReHVIOJZg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":226612},"main":"src/index.js","type":"module","gitHead":"4400055c6f41ae8caa04c557ea6f5c5aecfe9d0f","scripts":{"dev":"node test/manual.js","test":"node --test test/"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","_npmVersion":"11.9.0","description":"Local risk assessment for AI agents. Vela Lite runs on your machine.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.3.1_1776625820797_0.8047612016955499","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@essentianlabs/radar-lite","version":"0.3.2","keywords":["ai","agents","risk","governance","safety","ai-safety","guardrails","mcp","n8n","langchain","tool-use","risk-assessment"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.3.2","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"b9530330b39e6eaa43cf10a61c1ff592f604e7ac","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.3.2.tgz","fileCount":16,"integrity":"sha512-M1pQxcA2SEW4QLbKuEgMqDZHhq74UKSC7s+oGweLm+jzWQRuoYiBZAmn9wrt0uL/I7ivQmFNa8wgOILbV6MTpw==","signatures":[{"sig":"MEUCIQC75lpWiJ3gAQcjW7zFwk4Xhhc1XffhPBOYeH/PE5l4KQIgAS9NvCYxONcW8s95tKVu8IM3AQZVzc+K39Saewl8V+k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":235726},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"4400055c6f41ae8caa04c557ea6f5c5aecfe9d0f","scripts":{"dev":"node test/manual.js","test":"node --test test/"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","_npmVersion":"11.9.0","description":"Pre-action risk assessment for AI agents. PROCEED, HOLD, or DENY — local, private, no data sent to EssentianLabs.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.3.2_1776681671514_0.2592149575397096","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@essentianlabs/radar-lite","version":"0.3.3","keywords":["ai","agents","risk","governance","safety","ai-safety","guardrails","mcp","n8n","langchain","tool-use","risk-assessment"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.3.3","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"97c83a168ffeea4b9914fc7119ce4d38339889f3","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.3.3.tgz","fileCount":16,"integrity":"sha512-nskbL+vHN3zCsLiNDrfnxi24YPM5DNfL5iA6IbE1QDJ2R2tM+33v7aAV0AvRBFLv3OKR+NG7gI5lN6VgAqlFYg==","signatures":[{"sig":"MEYCIQCRdD7NxDcDgEOQuvW8E9vIt+S+laTkwtfZX7FNEMnSoQIhALMYjxL/ae24kKLu+sP5aitjt5FEQTynAHCZGn4ADoD5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":241483},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"29d87ecfd408ad2f71aa7cdd345f81ae4fffe035","scripts":{"dev":"node test/manual.js","test":"node --test test/"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","_npmVersion":"11.9.0","description":"Pre-action risk assessment for AI agents. PROCEED, HOLD, or DENY — local, private, no data sent to EssentianLabs.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.3.3_1777278671551_0.15715101132051945","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@essentianlabs/radar-lite","version":"0.3.4","keywords":["ai","agents","risk","governance","safety","ai-safety","guardrails","mcp","n8n","langchain","tool-use","risk-assessment"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.3.4","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"d0aedb8b5d2570c3c3f549aaf15789a89ab1a20a","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.3.4.tgz","fileCount":16,"integrity":"sha512-lYHFSobT6LmkwgFOY+Y5CHRME8tou3oHlzPlAUtSjEIgH5YCKkgeKrZgdkzMsLjPW+EUxWcZHJGU/4D9yTAueA==","signatures":[{"sig":"MEUCIQD7s+3vmax4mngD4iHQPCeURRKMBmj3xsLH6QBTPd5AxQIgdb5vpvMwaMk8T6j2v9tII7Bz81Uqoib7fVnXcDE+qLI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":246385},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"72757abc127d72048fcd357af779e33b293a4932","scripts":{"dev":"node test/manual.js","test":"node --test test/"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","_npmVersion":"11.9.0","description":"Pre-action risk assessment for AI agents. PROCEED, HOLD, or DENY — local, private, no data sent to EssentianLabs.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.3.4_1777319054446_0.31416673253477767","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"@essentianlabs/radar-lite","version":"0.3.6","keywords":["ai","agents","risk","governance","safety","ai-safety","guardrails","mcp","n8n","langchain","tool-use","risk-assessment"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.3.6","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"85bc269b3b3c5095a97fe25395f23feb95404979","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.3.6.tgz","fileCount":16,"integrity":"sha512-HfIpEwMfwDuAYks+5F4CWfYNSfmWbOsAXY3MYhy0ITmTPwmctM9N/FXB2eKUQ1wII3/dkAiHygteCushYhSyjA==","signatures":[{"sig":"MEUCIQCune2pSZvE1pCbRjHXdpgNxT6L51kR9Bte5LCqfbYVbAIgBDZsKdA4SJMjot/hTaIzdna6QOnTMITAtO95jGQ4Fuo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":250115},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"0e5da71c57b64adf73252ed1d6422805d75e6649","scripts":{"dev":"node test/manual.js","test":"node --test test/"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","_npmVersion":"11.9.0","description":"Pre-action risk assessment for AI agents. PROCEED, HOLD, or DENY — local, private, no data sent to EssentianLabs.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.3.6_1777360718842_0.022662166884667823","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"@essentianlabs/radar-lite","version":"0.3.7","keywords":["ai","agents","risk","governance","safety","ai-safety","guardrails","mcp","n8n","langchain","tool-use","risk-assessment"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.3.7","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"effa23e75e51ff5a6c6e43f2074cce9aaa6637fd","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.3.7.tgz","fileCount":16,"integrity":"sha512-DYh9bD5JtnoCA/uUOerqGFvTekDlMDmDzYWuudZwG6pBvwIS7sE2SmwtB5YJZ0qTp4eJKeXZxikB0WU8l6ToQQ==","signatures":[{"sig":"MEYCIQDbynad9fUnXHeWRgTLhfQY2vEbm27/7CaLD6I+JclyhAIhAMU0YIcGt4nL58s7G7Fz59xLH6hee3kC0De1YbWaLBM1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":253201},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"277d39df18c6099fb3fe5b7a2557ca83ed7cc286","scripts":{"dev":"node test/manual.js","test":"node --test test/"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","_npmVersion":"11.9.0","description":"Pre-action risk assessment for AI agents. PROCEED, HOLD, or DENY — local, private, no data sent to EssentianLabs.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.3.7_1777362842944_0.7913620256392533","host":"s3://npm-registry-packages-npm-production"}},"0.3.8":{"name":"@essentianlabs/radar-lite","version":"0.3.8","keywords":["ai","agents","risk","governance","safety","ai-safety","guardrails","mcp","n8n","langchain","tool-use","risk-assessment"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.3.8","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"7f6c304611f42dde037ea1164a22c885f789aba8","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.3.8.tgz","fileCount":16,"integrity":"sha512-zl5+YUuoaNn9M22ai4NvumBQbzLwOC6At5eCzPP7xTU/TmYA1nMpSBiZ8iUfafj//XTAryuVcJOPX2PNncUiDA==","signatures":[{"sig":"MEUCIFJWA+Hq8WGtvHMn5w7Q8PTqA1rYY/bKDbB1rKIl982yAiEA658PZGBSVQvaF2NNCXU2nTKTzSiCjDtgY2TwjvBfpnY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":254476},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"83b61a7354fb0ac94af6a4973dd4d77885991eb8","scripts":{"dev":"node test/manual.js","test":"node --test test/"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","_npmVersion":"11.9.0","description":"Pre-action risk assessment for AI agents. PROCEED, HOLD, or DENY — local, private, no data sent to EssentianLabs.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.3.8_1777746119398_0.3562799095326641","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@essentianlabs/radar-lite","version":"0.4.0","keywords":["ai","agents","risk","governance","safety","ai-safety","guardrails","mcp","n8n","langchain","tool-use","risk-assessment"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.4.0","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"62dd6196be993a68fac9a3c283293f56f4f57615","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.4.0.tgz","fileCount":16,"integrity":"sha512-eaIQUKB1GVZhlaVqWH9jL5vbqvn8Ha29UuHM66ysGPXKl5nwBYv2q+wHqNwCo3JMW9t4dsxMeNBcLSxXAxgh5w==","signatures":[{"sig":"MEYCIQDU3AqtM7/p1ys+0vKicB/psu5a7UqTvTLTP1G8QQzXugIhALgSog7vSMsToDTXaXUkIjRAg86M33cZJqK6+UEPxBEy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":321400},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"66330bb5fe24b09aed6cb77c2618a465e554b762","scripts":{"dev":"node test/manual.js","test":"node --test test/"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","_npmVersion":"11.9.0","description":"Pre-action risk assessment for AI agents. PROCEED, HOLD, or DENY — local, private, no data sent to EssentianLabs.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.4.0_1777760551817_0.4327201667937113","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@essentianlabs/radar-lite","version":"0.4.1","keywords":["ai","agents","risk","governance","safety","ai-safety","guardrails","mcp","n8n","langchain","tool-use","risk-assessment"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.4.1","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"homepage":"https://radar.essentianlabs.com","bugs":{"url":"https://github.com/ktkorpela-prog/radar-lite/issues"},"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"bcf388ddfc933c59e2b47a0bf7319a56b1efd7fa","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.4.1.tgz","fileCount":16,"integrity":"sha512-1JmFAvBNUKOneZDkDjdSLdjbxK9VRddjpVbMr5+iXi4Dk7sRwXWUhEHvXsOQeuAvlmyx5XaMvNm6/zyogFs4IA==","signatures":[{"sig":"MEUCIQDhWhkqOMgF7etU2UlwLRZuyDoMUcWYesLaUH5BmwB1XwIgOEpT8tKO2pYgbC8/cT5ojIdhTuDX289Go2fhAf6qKs4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":323174},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"a895fcfe96109b5e613f9b83a5bb6c90d9fa9b63","scripts":{"dev":"node test/manual.js","test":"node --test test/"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","repository":{"url":"git+https://github.com/ktkorpela-prog/radar-lite.git","type":"git"},"_npmVersion":"11.9.0","description":"Pre-action risk assessment for AI agents. PROCEED, HOLD, or DENY — local, private, no data sent to EssentianLabs.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.4.1_1784537237328_0.5866468623597061","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@essentianlabs/radar-lite","version":"0.4.2","keywords":["ai","agents","risk","governance","safety","ai-safety","guardrails","mcp","n8n","langchain","tool-use","risk-assessment"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.4.2","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"homepage":"https://radar.essentianlabs.com","bugs":{"url":"https://github.com/ktkorpela-prog/radar-lite/issues"},"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"d56669a5444175bc3d4d37df29dd807667b5d8df","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.4.2.tgz","fileCount":16,"integrity":"sha512-hc7aGcn+UrVIpVnP/Cygazd5VuYIaxiA0b0YcH6LoLYQnOAuQ4spANxpgqlV3AP62hJQbw1Zd700omH7Eojfvg==","signatures":[{"sig":"MEUCIDLdCWl2aYSq68TGPHsNgGgBAOch338YpAwVu+JWcwkNAiEArcB6okFmquoR6cli+pvb9XjrdSiT1Kr6dS+x2YbaUk0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":325551},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"f9c4c9053bd6cddc27a6c903d0c99439f381bb1c","scripts":{"dev":"node test/manual.js","test":"node --test test/"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","repository":{"url":"git+https://github.com/ktkorpela-prog/radar-lite.git","type":"git"},"_npmVersion":"11.9.0","description":"Pre-action risk assessment for AI agents. PROCEED, HOLD, or DENY — local, private, no data sent to EssentianLabs.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.4.2_1784537288690_0.505573246594845","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@essentianlabs/radar-lite","version":"0.4.3","keywords":["ai","agents","risk","governance","safety","ai-safety","guardrails","mcp","n8n","langchain","tool-use","risk-assessment"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.4.3","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"homepage":"https://radar.essentianlabs.com","bugs":{"url":"https://github.com/ktkorpela-prog/radar-lite/issues"},"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"f64d4072d79784176fac93e2593b181c9932542a","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.4.3.tgz","fileCount":16,"integrity":"sha512-ju3bGcBfzPNOPna11LD1rzciiyl2p7kqc20Wt/Z0v9WJxrC52/4qXxRgxgLsXV9/zfh7u2piKhsjxqEdaXRv4g==","signatures":[{"sig":"MEQCICfEHbDzIzdpCnyj+Ee31AD+QRDNgNXSXihhZvQDL/5mAiBEluNEE56URkv8Tm0VN8a0Yx2jE2u5dm6bn+NP1gw5Iw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":325551},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"a5a0ed54fa1bc5ad82a7133423290aa025cc9200","scripts":{"dev":"node test/manual.js","test":"node --test test/"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","repository":{"url":"git+https://github.com/ktkorpela-prog/radar-lite.git","type":"git"},"_npmVersion":"11.9.0","description":"Pre-action risk assessment for AI agents. PROCEED, HOLD, or DENY — local, private, no data sent to EssentianLabs.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.4.3_1784538045168_0.9744718494359412","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"@essentianlabs/radar-lite","version":"0.4.4","keywords":["ai","agents","risk","governance","safety","ai-safety","guardrails","mcp","n8n","langchain","tool-use","risk-assessment"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.4.4","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"homepage":"https://radar.essentianlabs.com","bugs":{"url":"https://github.com/ktkorpela-prog/radar-lite/issues"},"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"58c6394938ffe2205a924484b4eee80c55dd9205","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.4.4.tgz","fileCount":16,"integrity":"sha512-DjiBpor00DyNwewk7EmSZmNe4lq/nvWGlMvh2OLAYI9He1kDs9DvW8h8pA2a0V3CypStDKqnpYwaOrJUe2nMeg==","signatures":[{"sig":"MEUCIFNDa4bhE/4wET3WzmZdfSR/QxKZfEYrqKQO1C9ffuQEAiEA3vkm1K6uCB0+is+/zQzcAhbz8WCsxYfYMZYXq/WJOy4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":330854},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"842d1ea9ec5308d8b45dde1b39cc5d19fa80a266","scripts":{"dev":"node test/manual.js","test":"node --test test/"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","repository":{"url":"git+https://github.com/ktkorpela-prog/radar-lite.git","type":"git"},"_npmVersion":"11.9.0","description":"Pre-action risk assessment for AI agents. PROCEED, HOLD, or DENY — local, private, no data sent to EssentianLabs.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.4.4_1784539605358_0.040560810243173595","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"@essentianlabs/radar-lite","version":"0.4.5","keywords":["ai","agents","risk","governance","safety","ai-safety","guardrails","mcp","n8n","langchain","tool-use","risk-assessment"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.4.5","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"homepage":"https://radar.essentianlabs.com","bugs":{"url":"https://github.com/ktkorpela-prog/radar-lite/issues"},"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"7127991e29338b7737e569f76ae20b6b018a0c54","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.4.5.tgz","fileCount":17,"integrity":"sha512-01kqWEdh5vwX67gSHYvEnkaippcvbW/z1VGsTHsrWIDJP5+x2fxoVAfx1Nt0myrkn6OxpWGtcElzI+ssRjCQqA==","signatures":[{"sig":"MEUCIQDsTEWsj2QYQmyrseTGuzds1MxYQJnmCy8gCmpEPJ4lzgIgYMHWFOVRg7EiKJJnGdOov5f13z8vxkMKQbgdefHRQEk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":335678},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"f88489126b28864af381d6d13d729ebe98942d03","scripts":{"dev":"node test/manual.js","test":"node --test test/","preinstall":"node preinstall-guard.js"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Upgrade to 0.4.6+ for Gemini fix, supply-chain patches, self-install guard, and update notifications","repository":{"url":"git+https://github.com/ktkorpela-prog/radar-lite.git","type":"git"},"_npmVersion":"11.9.0","description":"Pre-action risk assessment for AI agents. PROCEED, HOLD, or DENY — local, private, no data sent to EssentianLabs.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0","@essentianlabs/radar-lite":"^0.4.4"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.4.5_1784541790860_0.6811832546451593","host":"s3://npm-registry-packages-npm-production"}},"0.4.6":{"name":"@essentianlabs/radar-lite","version":"0.4.6","keywords":["ai","agents","risk","governance","safety","ai-safety","guardrails","mcp","n8n","langchain","tool-use","risk-assessment"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.4.6","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"homepage":"https://radar.essentianlabs.com","bugs":{"url":"https://github.com/ktkorpela-prog/radar-lite/issues"},"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"70ef2c1268bcabb4d0fe4a4db529108182f4efe1","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.4.6.tgz","fileCount":17,"integrity":"sha512-UdRtMm+7aOo9VysRMnobloCv3t9rleemyqE+k2KWDA0xrpkjLEcLL1as1fiLsDMLAooOElzYC30wsEgr/d4kHg==","signatures":[{"sig":"MEUCIQDud32u+jIq2lE3C4tv+WGs6mNLDojvvdCe+XRmDlb2kgIgDuP50WY0bwgoy7WjK2NWdEeqsfkxNvj81G0NHixixw0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":335634},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"84adafed7cbe72d684d4a2ddeb6fdbd7e6e7fdf8","scripts":{"dev":"node test/manual.js","test":"node --test test/","preinstall":"node preinstall-guard.js"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"repository":{"url":"git+https://github.com/ktkorpela-prog/radar-lite.git","type":"git"},"_npmVersion":"11.9.0","description":"Pre-action risk assessment for AI agents. PROCEED, HOLD, or DENY — local, private, no data sent to EssentianLabs.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.4.6_1784544938589_0.825998297385379","host":"s3://npm-registry-packages-npm-production"}},"0.4.7":{"name":"@essentianlabs/radar-lite","version":"0.4.7","keywords":["ai","agents","risk","governance","safety","ai-safety","guardrails","mcp","n8n","langchain","tool-use","risk-assessment"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.4.7","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"homepage":"https://radar.essentianlabs.com","bugs":{"url":"https://github.com/ktkorpela-prog/radar-lite/issues"},"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"744e3e9a7c02e8d3b6b3f2574894322b16376135","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.4.7.tgz","fileCount":20,"integrity":"sha512-lZh+x6ma6dvd7QAAaPnbcnAUO+MW9t0mfWSpEzRucq+CC7oVqzmDMqGLYgPgVHLMaodgDAkcfq0w77ZLAMuHlA==","signatures":[{"sig":"MEQCIB8V4MiniS/UmQPifkcArHNghrlhdC5QzPDWXs7pVUHdAiBXlq1GhFyui/HOwcWbm6jUShvRiNRyv3NOuzJN/ZS2+A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":349041},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"5e13dc3d9902c02d9eb3b3e6e86b1478f7aef5cd","scripts":{"dev":"node test/manual.js","test":"node --test test/","preinstall":"node preinstall-guard.js"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"deprecated":"Broken build — fails to import; upgrade to 0.4.8+","repository":{"url":"git+https://github.com/ktkorpela-prog/radar-lite.git","type":"git"},"_npmVersion":"11.9.0","description":"Pre-action risk assessment for AI agents. PROCEED, HOLD, or DENY — local, private, no data sent to EssentianLabs.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.4.7_1784619169305_0.5500274161036882","host":"s3://npm-registry-packages-npm-production"}},"0.4.8":{"name":"@essentianlabs/radar-lite","version":"0.4.8","keywords":["ai","agents","risk","governance","safety","ai-safety","guardrails","mcp","n8n","langchain","tool-use","risk-assessment"],"author":{"name":"EssentianLabs"},"license":"MIT","_id":"@essentianlabs/radar-lite@0.4.8","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"homepage":"https://radar.essentianlabs.com","bugs":{"url":"https://github.com/ktkorpela-prog/radar-lite/issues"},"bin":{"radar-lite":"bin/radar-lite.js"},"dist":{"shasum":"911c5dcc9e09a29ac8477db004d5f4d7a88df31e","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.4.8.tgz","fileCount":20,"integrity":"sha512-Pzme5qdPOtmhRe6KL4X94n2XGTLlG2CCk27TCU6YvIRxGZ6TK1WOKp78LNoy9T68sxBvatyoo8NpQUPt9akYUg==","signatures":[{"sig":"MEUCIQCBbmcUosOzo8TDRmYPkHSzjPvcy1zlLLKIDEFZglXwYgIgd8I+cCZywT50+R+0qnO1ycdNFlLgE0XiKbNd8S2z/3k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":351291},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"5e13dc3d9902c02d9eb3b3e6e86b1478f7aef5cd","scripts":{"dev":"node test/manual.js","test":"node --test test/","preinstall":"node preinstall-guard.js"},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"repository":{"url":"git+https://github.com/ktkorpela-prog/radar-lite.git","type":"git"},"_npmVersion":"11.9.0","description":"Pre-action risk assessment for AI agents. PROCEED, HOLD, or DENY — local, private, no data sent to EssentianLabs.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.0.0","sql.js":"^1.10.0","express":"^4.18.0","@anthropic-ai/sdk":"^0.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/radar-lite_0.4.8_1784620797821_0.5030795307348968","host":"s3://npm-registry-packages-npm-production"}},"0.4.9":{"name":"@essentianlabs/radar-lite","version":"0.4.9","description":"Pre-action risk assessment for AI agents. PROCEED, HOLD, or DENY — local, private, no data sent to EssentianLabs.","type":"module","main":"src/index.js","types":"src/index.d.ts","bin":{"radar-lite":"bin/radar-lite.js"},"repository":{"type":"git","url":"git+https://github.com/ktkorpela-prog/radar-lite.git"},"bugs":{"url":"https://github.com/ktkorpela-prog/radar-lite/issues"},"homepage":"https://radar.essentianlabs.com","scripts":{"test":"node --test test/","dev":"node test/manual.js","preinstall":"node preinstall-guard.js"},"keywords":["ai","agents","risk","governance","safety","ai-safety","guardrails","mcp","n8n","langchain","tool-use","risk-assessment"],"author":{"name":"EssentianLabs"},"license":"MIT","dependencies":{"@anthropic-ai/sdk":"^0.39.0","express":"^4.18.0","openai":"^4.0.0","sql.js":"^1.10.0"},"peerDependencies":{"@anthropic-ai/sdk":"^0.39.0"},"gitHead":"d62f9d493ddd46daab275ce70a14144b5e5b67ff","_id":"@essentianlabs/radar-lite@0.4.9","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-/T4x30iTcKjcCOtjdhj/xmH9W3Gt5wvkK2mcH12cfzYNjY50gKwmr4C161Uer+CrUs4LqLWg6omH4lF/iqbONw==","shasum":"f6eb8c910cfe29a762557ceddafa00bd23a66db4","tarball":"https://registry.npmjs.org/@essentianlabs/radar-lite/-/radar-lite-0.4.9.tgz","fileCount":19,"unpackedSize":353174,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAodaP/LXFr1PA3ddra4BW4sW3ZUcfo92zJ7zTt6416YAiEAnMGr+7kjplb9pThNHMH+Xyra+hPshQJLxm0gJBicDqg="}]},"_npmUser":{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"},"directories":{},"maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/radar-lite_0.4.9_1786796414305_0.5434701272763383"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-27T13:40:30.296Z","modified":"2026-08-15T12:20:14.685Z","0.1.0":"2026-03-27T13:40:30.507Z","0.1.2":"2026-03-27T14:30:26.583Z","0.1.3":"2026-03-27T17:46:08.355Z","0.2.2":"2026-03-28T11:48:03.684Z","0.2.4":"2026-03-28T18:40:24.976Z","0.2.6":"2026-03-29T11:38:50.198Z","0.2.7":"2026-03-29T12:03:10.877Z","0.2.8":"2026-03-29T12:30:18.633Z","0.2.9":"2026-03-29T12:42:54.009Z","0.3.0":"2026-03-29T13:21:15.976Z","0.3.1":"2026-04-19T19:10:20.939Z","0.3.2":"2026-04-20T10:41:11.649Z","0.3.3":"2026-04-27T08:31:11.710Z","0.3.4":"2026-04-27T19:44:14.599Z","0.3.6":"2026-04-28T07:18:39.000Z","0.3.7":"2026-04-28T07:54:03.070Z","0.3.8":"2026-05-02T18:21:59.530Z","0.4.0":"2026-05-02T22:22:31.952Z","0.4.1":"2026-07-20T08:47:17.455Z","0.4.2":"2026-07-20T08:48:08.835Z","0.4.3":"2026-07-20T09:00:45.313Z","0.4.4":"2026-07-20T09:26:45.500Z","0.4.5":"2026-07-20T10:03:11.044Z","0.4.6":"2026-07-20T10:55:38.726Z","0.4.7":"2026-07-21T07:32:49.460Z","0.4.8":"2026-07-21T07:59:57.967Z","0.4.9":"2026-08-15T12:20:14.492Z"},"bugs":{"url":"https://github.com/ktkorpela-prog/radar-lite/issues"},"author":{"name":"EssentianLabs"},"license":"MIT","homepage":"https://radar.essentianlabs.com","keywords":["ai","agents","risk","governance","safety","ai-safety","guardrails","mcp","n8n","langchain","tool-use","risk-assessment"],"repository":{"type":"git","url":"git+https://github.com/ktkorpela-prog/radar-lite.git"},"description":"Pre-action risk assessment for AI agents. PROCEED, HOLD, or DENY — local, private, no data sent to EssentianLabs.","maintainers":[{"name":"ktkorpela","email":"ktkorpela@essentianlabs.com"}],"readme":"# @essentianlabs/radar-lite\r\n\r\nEarly beta for evaluation only.\r\n\r\nRADAR Lite is in active evaluation. I'm testing both the framework and how people interpret it. If you try it, assume it's experimental and tell me where it breaks — technically or conceptually.\r\n\r\nLocal risk assessment for AI agents. Vela Lite structures reasoning about agent actions before they execute.\r\n\r\n## Advisory notice\r\n\r\nRADAR produces risk intelligence, not safety assurance. It structures reasoning — it does not validate decisions.\r\n\r\n- RADAR assesses the **action description** supplied by the developer or agent. It does not verify, monitor, or control the real-world action that is actually executed.\r\n- A **PROCEED** verdict means \"not held by this assessment.\" It is not authorization, approval, certification, legal advice, or safety validation.\r\n- RADAR can produce a PROCEED verdict for actions that later prove harmful, incorrect, unethical, or non-compliant. The assessment reflects what was described, not what occurs.\r\n- **Liability remains with the developer, operator, and end user.** RADAR does not transfer, reduce, or share liability for actions taken.\r\n- If an external LLM provider is configured, action text leaves the local machine and is sent to that provider under your own account and API terms.\r\n\r\nThis is a beta release. Not recommended for enterprise or production use without independent legal and compliance review. By installing this package you agree to the [Beta Terms of Use](https://radar.essentianlabs.com/terms.html).\r\n\r\n## Intended use boundaries\r\n\r\nRADAR Lite is designed as a reasoning layer for AI agent developers — a checkpoint that surfaces risk signals before an action executes. It should not be relied on as the sole control for high-stakes domains including:\r\n\r\n- Medical decisions or patient care\r\n- Legal advice or legal document generation\r\n- Employment, hiring, or termination decisions\r\n- Regulated financial advice or transactions\r\n- Safety-critical systems or irreversible physical-world actions\r\n\r\nIn these domains, RADAR should be one input among several — combined with independent human review, domain-specific compliance controls, and professional oversight.\r\n\r\n## Runtime meaning of the verdict (v0.3)\r\n\r\n| Status | When | Meaning | `proceed` | `reviewRequired` |\r\n|--------|------|---------|-----------|-------------------|\r\n| `PROCEED` | T1 low risk | Below review threshold. Go ahead. | `true` | `false` |\r\n| `HOLD` | T2 elevated risk | Requires explicit human/system review before continuing | `false` | `true` |\r\n| `DENY` | Policy or extreme risk | Blocked by configuration. Should not continue through normal execution. | `false` | `false` |\r\n\r\n**HOLD** includes `holdAction`, `notifyUrl`, `options`, and `recommended`. The developer reviews the options and records a strategy.\r\n\r\n**DENY** includes only `reason` and `callId`. No options, no holdAction. Override requires:\r\n```javascript\r\nawait radar.strategy(callId, 'override_deny', {\r\n  reason: 'Approved by CTO after compliance review',  // required\r\n  decidedBy: 'admin@company.com'                       // required\r\n});\r\n```\r\n\r\nDENY triggers (deterministic — no LLM):\r\n- Trigger policy set to `'deny'`: `await radar.savePolicy('*drop database*', 'deny')`\r\n- Score 20+ with irreversibility signal (rules engine)\r\n\r\nNeither verdict is a substitute for human accountability. RADAR advises — it does not enforce.\r\n\r\n### Backward compatibility\r\n\r\n`result.verdict` and `result.proceed` still work as before:\r\n- `result.verdict` mirrors `result.status` (`'PROCEED'`, `'HOLD'`, or `'DENY'`)\r\n- `result.proceed` is `true` for PROCEED, `false` for HOLD and DENY\r\n- Existing code using `if (!result.proceed)` continues to work unchanged\r\n\r\n## Prerequisites\r\n\r\n- Node.js 18 or higher — https://nodejs.org\r\n- npm (included with Node.js)\r\n\r\n**Windows users:** If you see \"running scripts is disabled\" in PowerShell, run this once:\r\n\r\n```powershell\r\nSet-ExecutionPolicy RemoteSigned -Scope CurrentUser\r\n```\r\n\r\nThen retry the install.\r\n\r\n## Install\r\n\r\n```bash\r\nnpm install @essentianlabs/radar-lite\r\n```\r\n\r\n## Quick start\r\n\r\n```javascript\r\nimport radar from '@essentianlabs/radar-lite';\r\n\r\nradar.configure({\r\n  llmProvider: 'anthropic',                  // T1 scorer\r\n  llmKey: process.env.ANTHROPIC_API_KEY,     // optional — without it, rules engine only\r\n  t2Provider: 'openai',                      // T2 reviewer (optional — different provider)\r\n  t2Key: process.env.OPENAI_API_KEY,         // optional — falls back to llmKey\r\n  activities: {\r\n    email_single: 0.5,\r\n    email_bulk: 0.8,\r\n    financial: 0.9,\r\n    data_delete_bulk: 0.9,\r\n    system_execute: 0.8,\r\n    web_search: 0.2\r\n  }\r\n});\r\n\r\nconst result = await radar.assess(\r\n  'Send price increase email to 50,000 users',\r\n  'email_bulk'\r\n);\r\n\r\nif (!result.proceed) {\r\n  console.log(result.verdict);    // \"HOLD\"\r\n  console.log(result.options);    // { avoid, mitigate, transfer, accept }\r\n  console.log(result.recommended); // \"mitigate\"\r\n}\r\n\r\n// Record chosen strategy\r\nawait radar.strategy(result.callId, 'mitigate', {\r\n  justification: 'staged rollout approved',\r\n  decidedBy: 'human',\r\n  scope: 'single'  // 'single' (default) | 'pattern'\r\n                    // pattern matching coming in future version\r\n});\r\n```\r\n\r\n## Activity Types (v0.2)\r\n\r\n| Type | Base risk | Use for |\r\n|------|-----------|---------|\r\n| `email_single` | Medium | Single email send |\r\n| `email_bulk` | High | Bulk/mass email send |\r\n| `publish` | Medium | Publishing content to web |\r\n| `data_read` | Low | Reading data |\r\n| `data_write` | Medium | Writing/updating data |\r\n| `data_delete_single` | High | Deleting a single record |\r\n| `data_delete_bulk` | Very high | Bulk deletion |\r\n| `web_search` | Very low | Web searches |\r\n| `external_api_call` | Medium | External API calls |\r\n| `system_execute` | High | Running system commands |\r\n| `system_files` | High | Modifying system files |\r\n| `financial` | Very high | Financial transactions |\r\n\r\n### Deprecated types\r\n\r\nThe following v0.1 types still work but log a deprecation warning:\r\n\r\n| Old type | Maps to |\r\n|----------|---------|\r\n| `email` | `email_single` |\r\n| `publishing` | `publish` |\r\n| `data_deletion` | `data_delete_single` |\r\n| `external_api` | `external_api_call` |\r\n\r\n`financial` is unchanged.\r\n\r\n## Policy upload (v0.4.1)\r\n\r\nEach activity type can have an uploaded policy that Vela checks against. When a policy is uploaded for an activity, RADAR adds an **additional LLM call** to every assessment of that activity type — including T1 actions that would otherwise be cheap.\r\n\r\n**Cost implication:** without a policy, a T1 assessment of activity `X` is one LLM call (the oneliner). With a policy uploaded for `X`, every T1 assessment of `X` becomes two LLM calls (oneliner + policy compliance check). This is the operator's choice when uploading a policy.\r\n\r\nThe dashboard surfaces the estimated added token count per assessment in the policy editor (Settings tab → expand any activity → Policy panel). Approximate cost: 4 chars ≈ 1 token; multiply by your provider's input-token rate to estimate the per-assessment delta.\r\n\r\n| Tier | Cap | Notes |\r\n|------|-----|-------|\r\n| Free | 2,000 chars per activity policy | One policy per activity |\r\n| Paid | Hosted policy library, multi-policy per activity, no practical cap | Centrally versioned |\r\n\r\nUploading a policy is opt-in. To remove the added LLM call, delete or disable the policy from the dashboard.\r\n\r\n## T3/T4 review — `scopeHygiene` is advisory\r\n\r\nT3/T4 server-side review responses include a `scopeHygiene` field. It asks the reviewing LLM whether the action description, `activity_type`, and trigger reason are mutually consistent — for example, whether an action described as \"delete one record\" was correctly classified as `data_delete_single` rather than `data_delete_bulk`.\r\n\r\n**Scope hygiene checks are advisory, not authoritative.**\r\n\r\nThe check is a best-effort prompt instruction. Different LLM providers attend to it differently. In our internal validation:\r\n\r\n- Anthropic models flagged scope mismatches reliably (3/7)\r\n- OpenAI models defaulted to \"no issues\" more often (0/7)\r\n\r\nTreat `scopeHygiene` as a useful signal **when it fires**, but do not build workflows that assume `scopeHygiene.issuesDetected === false` means \"clean.\" Absence of detection is not certainty of absence. Use this field to surface concerns, not to confirm safety.\r\n\r\n## How it works\r\n\r\nEvery call to `radar.assess()` follows this flow:\r\n\r\n1. **Check trigger policy** — if a matching pattern exists, short-circuit with `human_required` or `no_assessment`\r\n2. **Check activity config** — if `requiresHumanReview` is on for this type, return HOLD immediately\r\n3. **Rules engine scores** — deterministic scoring based on activity type, action text signals, and slider position. Produces riskScore, triggerReason, activityType, rawTier\r\n4. **Prior decision lookup** — if the action hash has been assessed before, the prior verdict is passed to Vela Lite as context\r\n5. **Vela Lite called** with that context (when LLM key is configured). Every assessment makes an LLM call — your key, your cost\r\n6. **Slider threshold determines output depth and model:**\r\n   - Score below T2 threshold → **T1 oneliner** — fast model, one-line verdict, no strategy options (`options: null`)\r\n   - Score at or above T2 threshold → **T2 TL;DR** — reasoning model (or different provider), verdict + four strategy options (avoid/mitigate/transfer/accept)\r\n\r\n**Without an LLM key:** Both T1 and T2 fall back to a rules-engine-only formatted one-liner with PROCEED. No LLM call is made. You get scoring but no Vela verdict.\r\n\r\n## Prior Decision Matching\r\n\r\nWhen the same action string is submitted more than once, Vela Lite receives the prior verdict as context and factors it into the current assessment. This reduces unnecessary re-flagging of actions you have already reviewed.\r\n\r\nMatching is exact — based on a SHA256 hash of the action string. One character different = no match.\r\n\r\nIf you want to pre-approve a class of similar actions without exact matching, use Trigger Policy instead:\r\n\r\n```javascript\r\nawait radar.savePolicy(\r\n  'Send newsletter to * subscribers',\r\n  'no_assessment'\r\n);\r\n```\r\n\r\nPattern-level acceptance (marking a reviewed decision as applicable to similar future actions) is planned for a future version.\r\n\r\n## Return object\r\n\r\n`radar.assess()` returns:\r\n\r\n```javascript\r\n{\r\n  status: \"PROCEED\" | \"HOLD\" | \"DENY\",  // primary verdict (v0.3)\r\n  proceed: false,                // derived: true for PROCEED, false for HOLD/DENY\r\n  verdict: \"PROCEED\" | \"HOLD\" | \"DENY\", // alias for status (backward compat)\r\n  reviewRequired: true | false,  // true only on HOLD\r\n  tier: 1 | 2,                  // null for policy/DENY short-circuits\r\n  riskScore: 1-25,              // null for policy short-circuits\r\n  triggerReason: \"string\",\r\n  activityType: \"email_bulk\",\r\n  callId: \"ra_xxxxxxxxxxxx\",\r\n  vela: \"formatted string\",     // null for DENY and policy short-circuits\r\n  options: null | { avoid, mitigate, transfer, accept }, // HOLD only\r\n  recommended: null | \"mitigate\",  // HOLD only\r\n  promptMode: \"oneliner\" | \"tldr\", // null for policy/DENY\r\n  holdAction: \"halt\",            // HOLD only — configured response\r\n  notifyUrl: null,               // HOLD only, when holdAction is 'notify'\r\n  reason: \"string\",             // DENY only — why it was denied\r\n  t2Attempted: true | false,\r\n  wouldEscalate: true | false,\r\n  escalateTier: null | 3 | 4,\r\n  parseFailed: true | false,\r\n  policyDecision: \"assess\" | \"human_required\" | \"no_assessment\" | \"deny\",\r\n  radarEnabled: true | false\r\n}\r\n```\r\n\r\n## Trigger Policy\r\n\r\nAction-level rules that short-circuit assessment. Patterns use glob matching (`*` matches anything).\r\n\r\n```javascript\r\n// Any action containing \"delete\" requires human approval\r\nawait radar.savePolicy('*delete*', 'human_required');\r\n\r\n// Searches never need assessment\r\nawait radar.savePolicy('*search*', 'no_assessment');\r\n\r\n// Agent-specific rule\r\nawait radar.savePolicy('*deploy*', 'human_required', 'agent-deploy-bot');\r\n\r\n// Check policy without running full assessment\r\nconst policy = await radar.checkPolicy('delete all records');\r\n// Returns: 'assess' | 'human_required' | 'no_assessment'\r\n```\r\n\r\nPolicies are stored in local SQLite. Agent-specific rules are checked before global rules.\r\n\r\n## Human Review Toggle\r\n\r\nPer-activity-type toggle that forces HOLD on all actions of that type, bypassing Vela Lite entirely.\r\n\r\n```javascript\r\n// All system_execute actions require human review\r\nawait radar.saveActivityConfig('system_execute', {\r\n  requiresHumanReview: true\r\n});\r\n\r\n// Set slider position via DB (overrides JS config)\r\nawait radar.saveActivityConfig('financial', {\r\n  sliderPosition: 0.95,\r\n  requiresHumanReview: false\r\n});\r\n```\r\n\r\n## Hold Actions\r\n\r\nWhen `verdict` is `HOLD`, the return object includes `holdAction` telling your code what the configured response is:\r\n\r\n| holdAction | Meaning | Your code should |\r\n|------------|---------|-----------------|\r\n| `halt` | Agent stops (default) | Stop execution, wait for manual handling |\r\n| `queue` | Queue for review | Add to your review queue — no queue is built into RADAR |\r\n| `accept` | Log and proceed | Log the HOLD, continue execution — you accept the risk |\r\n| `notify` | Send notification + halt | Send to `result.notifyUrl`, then halt |\r\n\r\nThe `holdAction` field is advisory — RADAR returns the value, your code decides what to do with it. The package only interprets two values internally: `halt` is the default fallback when no value is set, and `notify` triggers `result.notifyUrl` propagation. Any other string is passed through verbatim for your code to handle.\r\n\r\n```javascript\r\nconst result = await radar.assess('Delete all records', 'data_delete_bulk');\r\n\r\nif (!result.proceed) {\r\n  if (result.holdAction === 'notify' && result.notifyUrl) {\r\n    await fetch(result.notifyUrl, {\r\n      method: 'POST',\r\n      headers: { 'Content-Type': 'application/json' },\r\n      body: JSON.stringify({ callId: result.callId, verdict: result.verdict })\r\n    });\r\n  }\r\n  if (result.holdAction !== 'accept') return; // halt, queue, or unknown — don't proceed\r\n}\r\n```\r\n\r\n`holdAction: 'notify'` returns the configured `notifyUrl` in the assess result. The package does not make outbound calls — your code sends the notification.\r\n\r\nAll activity types default to `holdAction: 'halt'` until configured. Changes to holdAction are logged with timestamps. The last 5 changes per activity type are retained in the local risk register.\r\n\r\nConfigure via dashboard Settings tab or programmatically:\r\n\r\n```javascript\r\nawait radar.saveActivityConfig('data_delete_bulk', {\r\n  holdAction: 'notify',\r\n  notifyUrl: 'https://your-app.com/escalation'\r\n});\r\n```\r\n\r\n## Disabling RADAR\r\n\r\nYou can disable RADAR assessment by setting `RADAR_ENABLED=false` in your `.radar/.env` file, or via the dashboard Settings tab. When disabled, `radar.assess()` returns PROCEED immediately without calling Vela. All bypass events are recorded in the local risk register regardless of this setting.\r\n\r\n```bash\r\n# In .radar/.env\r\nRADAR_ENABLED=false\r\n```\r\n\r\nThe return object includes `radarEnabled: false` when assessment is bypassed.\r\n\r\n## Slider positions\r\n\r\nEach activity type has a slider from `0.0` (permissive) to `1.0` (conservative):\r\n\r\n- **0.0-0.3 permissive**: T2 triggers at score 7\r\n- **0.4-0.6 balanced**: T2 triggers at score 5\r\n- **0.7-1.0 conservative**: T2 triggers at score 3\r\n\r\nThese thresholds are documented because the package is local and inspectable. The full RADAR API uses different calibration and is not directly comparable.\r\n\r\nSlider position is resolved in order: SQLite `activity_config` → JS `config.activities` → default 0.5.\r\n\r\n**Note:** Vela Lite uses slider-interpolated thresholds that adapt to developer risk appetite. The full RADAR API (paid tier) uses fixed tier boundaries calibrated for standardised risk assessment, distinct from Lite's slider-driven thresholds.\r\n\r\n## Privacy and data flow\r\n\r\nRADAR Lite is designed for local operation. No data is sent to EssentianLabs servers.\r\n\r\n- **Rules engine only** (no LLM key configured): All scoring runs locally. No network calls. No action text leaves your machine.\r\n- **With LLM key configured**: The action description, activity type, risk score, and trigger reason are sent to the configured LLM provider (Anthropic, OpenAI, or Google) under your own API account and terms. This is necessary for Vela Lite to generate verdicts and strategy options.\r\n- **With dual-provider configured**: Action context is sent to both the T1 provider and the T2 provider (if different).\r\n- **SQLite storage**: The local register stores SHA256 hashes of action text, never the text itself. No PII is written to the database.\r\n- **No telemetry**: The package does not phone home, collect usage data, or communicate with EssentianLabs infrastructure.\r\n\r\nIf you require fully offline operation with no external network calls, do not configure an LLM key. The rules engine will provide deterministic scoring without Vela verdicts.\r\n\r\n## Determinism and gameability\r\n\r\nThe T1 rules engine is intentionally transparent and deterministic. The scoring weights, signal patterns, and threshold calculations are visible in the source code. Given the same input, slider position, and version, the rules engine will always produce the same score.\r\n\r\nThis means the rules engine is gameable. An agent or developer who reads the source code can craft action descriptions that avoid trigger patterns or manipulate scores. **The rules engine should not be treated as a security mechanism or anti-abuse control.**\r\n\r\nFor higher-stakes use, combine the rules engine with:\r\n- LLM-based assessment (Vela Lite or Vela Essentian) which is harder to game\r\n- Independent human review\r\n- Additional domain-specific controls\r\n\r\n## Versioning and decision-impacting changes\r\n\r\nThis package follows semantic versioning for API and package behaviour.\r\n\r\n**Decision-impacting changes** — changes to scoring thresholds, risk weights, activity type mappings, signal patterns, prompt wording, or verdict semantics — are flagged explicitly in the changelog. These changes can cause the same input to produce a different verdict across versions.\r\n\r\nIf your application depends on stable, reproducible verdicts, pin to a specific version. Review the changelog for entries marked as decision-impacting before upgrading.\r\n\r\nUpdate classifications:\r\n- **Maintenance update** — bug fixes, documentation, no verdict changes\r\n- **Decision logic changed** — scoring weights, thresholds, or prompt changes that may produce different verdicts for the same input\r\n- **API migration required** — breaking changes to the public API\r\n\r\n## Updates and rollback\r\n\r\nUpdates are never forced. The dashboard can optionally check the npm registry for new versions — **this is disabled by default** and must be explicitly enabled via Settings or by setting `UPDATE_CHECK=true` in `.radar/.env`.\r\n\r\n### Backup before upgrading\r\n\r\n```bash\r\nnpx radar-lite backup\r\n```\r\n\r\nCreates a timestamped copy of `.radar/` (database, config, .env) before you upgrade.\r\n\r\n### Two rollback paths\r\n\r\n**Quick revert** — reinstall the previous version:\r\n```bash\r\nnpm install @essentianlabs/radar-lite@0.2.4\r\n```\r\n\r\n**Safe revert** — restore from backup:\r\n```bash\r\nrm -rf .radar\r\nmv .radar-backup-v0.2.4-2026-03-29 .radar\r\nnpm install @essentianlabs/radar-lite@0.2.4\r\n```\r\n\r\nFor decision-impacting releases: test against representative actions before upgrading to production.\r\n\r\n## Integration patterns and enforcement model\r\n\r\nRADAR Lite is a pre-action assessment layer. It evaluates a described action and returns a verdict — it does not intercept, block, or prevent execution by itself. How strongly that verdict is enforced depends entirely on the host application. Integration and governance are not the same thing. Developers must decide how to act on the verdict and implement enforcement in their own code.\r\n\r\n| Platform / Environment | Integration approach | Ease | Enforceability | Status | Notes |\r\n|------------------------|---------------------|------|----------------|--------|-------|\r\n| Custom Node.js agents | Native `import` — call `assess()` before actions | High | High | Supported | Developer controls execution flow directly. `if (!result.proceed) return` is real enforcement. |\r\n| LangChain (JavaScript) | Wrap `assess()` as middleware or custom tool in the chain | Medium | Medium–High | Supported | Enforceability depends on chain design. If `assess()` gates tool execution, enforcement is strong. If it's a parallel step, it's advisory. |\r\n| N8N | Use Code node to call `assess()`, or wrap as HTTP endpoint | Medium | Medium–High | Partial | Low-code friction — requires Code node or a local HTTP wrapper. If wired as a conditional branch (HOLD → stop), enforcement is strong. |\r\n| Python agents (CrewAI, AutoGen, etc.) | Not supported natively (JS package). Requires HTTP service wrapper or Python port. | Low | Depends on implementation | Not supported | Would need `radar-lite` running as a local HTTP service that Python calls. Enforceability depends on how the wrapper is integrated. |\r\n| Claude Code (via MCP) | MCP server wrapping `assess()` as a tool Claude calls before actions | Medium | Low | Experimental | See below. |\r\n| OpenClaw | [`@essentianlabs/openclaw-radar`](https://www.npmjs.com/package/@essentianlabs/openclaw-radar) — RADAR plugin for OpenClaw agents | Easy | High | Supported | Native integration. |\r\n\r\n### Claude Code and MCP\r\n\r\nAn MCP server for RADAR would expose `assess()` as a tool that Claude calls before taking actions. The verdict is returned to Claude, which then decides whether to proceed or stop.\r\n\r\nThis is advisory, not enforced. Claude seeing `HOLD` does not prevent Claude from acting — it relies on the model's instruction-following to respect the verdict. The developer's system prompt must instruct Claude to check RADAR and respect the result. There is no technical gate that blocks execution on HOLD.\r\n\r\nSegregation of duties matters here: if Claude is the agent being assessed, the LLM evaluating the risk should not be Claude (or any Anthropic model). Configure `llmProvider: 'openai'` or `llmProvider: 'google'` so the assessor is independent of the actor. The dual-provider architecture supports this — set a different provider for T2 review than the model performing the action.\r\n\r\n### Advisory vs enforcement\r\n\r\nRADAR does not intercept or block actions by itself. It returns a verdict. Enforcement only exists when the host application enforces that verdict — by checking `result.proceed` and halting execution when it is `false`.\r\n\r\nIn MCP and tool-based integrations, enforcement relies on model behaviour and prompt design, not on technical controls. A model that ignores a HOLD verdict will proceed regardless. For stronger guarantees, enforcement must be implemented outside the model — in the orchestration layer, the tool execution framework, or the application code that wraps the agent.\r\n\r\n## HTTP API (local)\r\n\r\nThe dashboard server exposes a local HTTP API for integrations that cannot import the npm package directly (n8n, Python agents, curl, etc.).\r\n\r\nStart the server first:\r\n\r\n```bash\r\nnpx radar-lite dashboard\r\n```\r\n\r\n**POST http://localhost:4040/assess**\r\n\r\n```json\r\n{\r\n  \"action\": \"Send price increase email to 50,000 users\",\r\n  \"activityType\": \"email_bulk\",\r\n  \"agentId\": \"my-agent\"\r\n}\r\n```\r\n\r\nReturns the full assessment result object (status, verdict, riskScore, options, etc.).\r\n\r\n**POST http://localhost:4040/strategy**\r\n\r\n```json\r\n{\r\n  \"callId\": \"ra_xxxxxxxxxxxx\",\r\n  \"strategy\": \"mitigate\",\r\n  \"justification\": \"staged rollout approved\",\r\n  \"decidedBy\": \"human\"\r\n}\r\n```\r\n\r\nReturns `{ success: true, callId }`.\r\n\r\nThe server is bound to `127.0.0.1` only — not accessible from the network. Start the dashboard server before calling these endpoints. The server does not auto-start when radar-lite is installed as a package dependency.\r\n\r\n### Setting up LLM keys for HTTP users\r\n\r\nIf you're using the HTTP API (Python, n8n, curl) rather than importing the package directly, configure your LLM keys in `~/.radar/.env`:\r\n\r\n```\r\nLLM_PROVIDER=anthropic\r\nLLM_API_KEY=sk-ant-your-key-here\r\nT2_PROVIDER=openai\r\nT2_API_KEY=sk-your-openai-key-here\r\n```\r\n\r\nOr configure via the dashboard Settings tab after starting the server.\r\n\r\n### Overriding model defaults (v0.4.1)\r\n\r\nThe package ships baked-in defaults for each provider's fast + reasoning model. When a vendor deprecates a model name, or when you want to pin a specific version, override the default via `~/.radar/.env` (or any mechanism that sets `process.env`) using the pattern `RADAR_<PROVIDER>_<TIER>_MODEL`:\r\n\r\n```\r\n# Google — override both defaults\r\nRADAR_GOOGLE_FAST_MODEL=gemini-3.5-flash-latest\r\nRADAR_GOOGLE_REASONING_MODEL=gemini-3.1-pro-preview\r\n\r\n# Anthropic — pin a specific Sonnet build\r\nRADAR_ANTHROPIC_REASONING_MODEL=claude-sonnet-4-6\r\n\r\n# OpenAI — opt in to the o-series reasoning tier\r\nRADAR_OPENAI_REASONING_MODEL=o4-mini\r\n```\r\n\r\nOverrides are resolved per-call, so `radar.reload()` (or dashboard config changes) picks them up without a process restart. Empty-string overrides fall back to the default — safe against accidental blanks. If a model name you've pinned starts returning 404s from the vendor (see: Google's Gemini 2.x deprecation), you can fix it in your `.env` without waiting for a package publish.\r\n\r\nCurrent baked-in defaults, verified 2026-06-24:\r\n- Anthropic — fast: `claude-haiku-4-5-20251001` · reasoning: `claude-sonnet-4-6`\r\n- OpenAI — fast: `gpt-4o-mini` · reasoning: `gpt-4o`\r\n- Google — fast: `gemini-3.5-flash` · reasoning: `gemini-3.1-pro-preview`\r\n\r\n### Running the server persistently\r\n\r\nFor production use, run the dashboard server as a background process so HTTP integrations can reach it reliably:\r\n\r\n```bash\r\n# Using pm2\r\npm2 start npx --name radar-lite -- radar-lite dashboard\r\n\r\n# Or using nohup\r\nnohup npx radar-lite dashboard > /dev/null 2>&1 &\r\n```\r\n\r\n### Health check\r\n\r\nBefore making HTTP calls, verify the server is running:\r\n\r\n```bash\r\ncurl http://localhost:4040/api/health\r\n# Returns: {\"status\":\"ok\",\"version\":\"1.0.0\"}\r\n```\r\n\r\nIn Python:\r\n\r\n```python\r\nimport requests\r\n\r\ntry:\r\n    requests.get('http://localhost:4040/api/health', timeout=2)\r\nexcept requests.ConnectionError:\r\n    print(\"Start the server first: npx radar-lite dashboard\")\r\n```\r\n\r\n## Dashboard\r\n\r\n```bash\r\nnpx radar-lite dashboard\r\n```\r\n\r\nOpens a local dashboard at `http://localhost:4040` showing your risk register.\r\n\r\n## CLI\r\n\r\n```bash\r\nnpx radar-lite dashboard  # open local dashboard\r\nnpx radar-lite demo       # seed sample data and view\r\nnpx radar-lite stats      # tier counts, hold rate\r\nnpx radar-lite history    # last 10 assessments\r\nnpx radar-lite reset      # clear all assessment records\r\nnpx radar-lite backup     # backup .radar/ directory\r\nnpx radar-lite version    # package version\r\n```\r\n\r\n## Integration cookbook\r\n\r\n### Node.js agent (native)\r\n\r\n```javascript\r\nimport radar from '@essentianlabs/radar-lite';\r\n\r\nradar.configure({\r\n  llmKey: process.env.ANTHROPIC_API_KEY,\r\n  llmProvider: 'anthropic'\r\n});\r\n\r\nasync function executeAction(action, type) {\r\n  const result = await radar.assess(action, type);\r\n\r\n  if (result.status === 'DENY') {\r\n    console.log('Blocked:', result.reason);\r\n    return;\r\n  }\r\n\r\n  if (result.status === 'HOLD') {\r\n    console.log('Held:', result.triggerReason);\r\n    console.log('Options:', result.options);\r\n    console.log('Recommended:', result.recommended);\r\n    // Wait for human decision before proceeding\r\n    return;\r\n  }\r\n\r\n  // PROCEED — execute the action\r\n  await doTheAction(action);\r\n}\r\n```\r\n\r\n### LangChain (JavaScript)\r\n\r\n```javascript\r\nimport { DynamicTool } from '@langchain/core/tools';\r\nimport radar from '@essentianlabs/radar-lite';\r\n\r\nradar.configure({\r\n  llmKey: process.env.ANTHROPIC_API_KEY,\r\n  llmProvider: 'anthropic'\r\n});\r\n\r\n// Create a RADAR gate tool\r\nconst radarTool = new DynamicTool({\r\n  name: 'radar_assess',\r\n  description: 'Assess risk before taking any action',\r\n  func: async (input) => {\r\n    const { action, activityType } = JSON.parse(input);\r\n    const result = await radar.assess(action, activityType);\r\n    return JSON.stringify(result);\r\n  }\r\n});\r\n\r\n// Add radarTool to your agent's tool list\r\n```\r\n\r\n### Python (via HTTP API)\r\n\r\nStart the dashboard server first: `npx radar-lite dashboard`\r\n\r\n```python\r\nimport requests\r\n\r\ndef assess_action(action: str, activity_type: str, agent_id: str = None):\r\n    response = requests.post('http://localhost:4040/assess', json={\r\n        'action': action,\r\n        'activityType': activity_type,\r\n        'agentId': agent_id\r\n    })\r\n    result = response.json()\r\n\r\n    if not result['proceed']:\r\n        print(f\"RADAR: {result['status']} — {result.get('triggerReason')}\")\r\n        if result.get('options'):\r\n            print(f\"Recommended: {result['recommended']}\")\r\n        return None\r\n\r\n    return result\r\n\r\n# Usage\r\nresult = assess_action(\r\n    'Send newsletter to 50,000 subscribers',\r\n    'email_bulk',\r\n    'my-python-agent'\r\n)\r\n```\r\n\r\n### Python LangChain (via HTTP API)\r\n\r\n```python\r\nfrom langchain.tools import tool\r\nimport requests\r\n\r\n@tool\r\ndef radar_assess(action: str, activity_type: str) -> str:\r\n    \"\"\"Assess risk of an action before executing it.\"\"\"\r\n    response = requests.post('http://localhost:4040/assess', json={\r\n        'action': action,\r\n        'activityType': activity_type\r\n    })\r\n    return str(response.json())\r\n\r\n# Add radar_assess to your agent's tools list\r\n```\r\n\r\n### n8n (HTTP Request node)\r\n\r\n1. Start the server: `npx radar-lite dashboard`\r\n2. Add an **HTTP Request** node:\r\n   - Method: POST\r\n   - URL: `http://localhost:4040/assess`\r\n   - Body: `{ \"action\": \"{{$json.action}}\", \"activityType\": \"email_bulk\" }`\r\n3. Add an **IF** node after it:\r\n   - Condition: `{{$json.proceed}}` equals `true`\r\n   - True branch → execute the action\r\n   - False branch → send to human review\r\n\r\n### curl\r\n\r\n```bash\r\ncurl -X POST http://localhost:4040/assess \\\r\n  -H \"Content-Type: application/json\" \\\r\n  -d '{\"action\": \"Delete all user records\", \"activityType\": \"data_delete_bulk\"}'\r\n```\r\n\r\n## LLM providers\r\n\r\nVela Lite uses your own LLM key. Your key, your infrastructure, your cost. No data is sent to EssentianLabs.\r\n\r\n### Dual-provider architecture\r\n\r\nT1 and T2 use different model tiers by default — fast models for T1 routing, reasoning models for T2 assessment. You can also use a different provider for T2 to ensure segregation of duties (the model that scores is not the same model that reviews).\r\n\r\n```javascript\r\nradar.configure({\r\n  llmProvider: 'anthropic',              // T1 scorer — fast model\r\n  llmKey: process.env.ANTHROPIC_API_KEY,\r\n  t2Provider: 'openai',                  // T2 reviewer — different provider\r\n  t2Key: process.env.OPENAI_API_KEY\r\n});\r\n```\r\n\r\nIf `t2Provider` is not set, T2 uses the same provider as T1 but with the reasoning model.\r\n\r\n### Models by tier\r\n\r\nT1 uses your provider's fast model. T2 uses your provider's reasoning model. See `src/providers.js` for currently pinned versions.\r\n\r\n### Cost\r\n\r\nEvery `assess()` call with an LLM key makes one LLM call. T1 uses fast/cheap models. T2 uses reasoning models — higher cost but T2 only fires when risk exceeds the threshold, so the majority of calls are T1-priced.\r\n\r\n### Provider verdict behaviour\r\n\r\nDifferent LLM providers follow the T2 prompt instructions with different levels of strictness. In end-to-end testing:\r\n\r\n- **Anthropic (Sonnet)** follows the \"default to HOLD at T2\" instruction reliably. High-risk actions consistently return HOLD with proportionate strategy options.\r\n- **OpenAI (GPT-4o)** tends to return PROCEED even when recommending AVOID or MITIGATE as the strategy. It does not apply the uncertainty tiebreaker as strongly.\r\n- **Google (Gemini)** — not yet tested at T2 with reasoning model.\r\n\r\nThis is a model behaviour difference, not a code issue. If your use case requires stricter verdict discipline at T2, Anthropic is currently the more conservative reviewer. The dual-provider architecture lets you choose: use a permissive model for T1 routing and a stricter model for T2 review.\r\n\r\n## Ecosystem\r\n\r\n**Pixel Agents — visual governance for Claude Code** ([PR #258](https://github.com/pablodelucca/pixel-agents/pull/258), [preview build](https://github.com/ktkorpela-prog/pixel-agents/releases))\r\n\r\nPixel Agents is a VS Code extension that turns Claude Code terminals into animated pixel-art characters in a virtual office. The contribution adds a **Risk Assessment desk** with **Vela** (the first NPC) — when a Claude Code agent calls `radar_assess`, the agent character walks to Vela's desk for a verdict.\r\n\r\n- 🟢 PROCEED → green stamp, agent continues\r\n- 🟡 HOLD → amber stamp, agent waits for user decision\r\n- 🔴 DENY → red stamp, agent steps back\r\n\r\nThe integration is dormant if `radar_desk` isn't placed in the layout — no errors, no warnings. Vela appears only when the desk is added.\r\n\r\n## License\r\n\r\nMIT licensed and free to use. See [LICENSE](LICENSE).\r\n\r\nThe RADAR client packages — `radar-lite`, `radar-mcp`, `openclaw-radar` — are MIT licensed. The hosted Vela Essentian™ service and supporting infrastructure are proprietary and operated by [EssentianLabs](https://essentianlabs.com).\r\n","readmeFilename":"README.md"}