{"_id":"@atbash-plugin/sdk","_rev":"4-e16ac874b9d42e5dc101d039e975226f","name":"@atbash-plugin/sdk","dist-tags":{"latest":"0.1.4"},"versions":{"0.1.1":{"name":"@atbash-plugin/sdk","version":"0.1.1","keywords":["atbash","tool-audit","chromia","policy","audit","sdk"],"author":{"name":"atbash"},"license":"UNLICENSED","_id":"@atbash-plugin/sdk@0.1.1","maintainers":[{"name":"bewuketu_lake","email":"bewuketu.lake@chromaway.com"},{"name":"celse13","email":"honore.rugira@chromaway.com"}],"dist":{"shasum":"40c97792a8a8d31433ce71a951590fdce0866ca6","tarball":"https://registry.npmjs.org/@atbash-plugin/sdk/-/sdk-0.1.1.tgz","fileCount":22,"integrity":"sha512-mdhvJ8H5ie5evjNBg7S3J/elSYNRgqsjoB0v+nSsCiVvlvB+8fTvIb5PYLiQnKFdRoKd5dvLy5HLzXSrogBUwg==","signatures":[{"sig":"MEYCIQCFnpKYCfaFswATpqKU++mq1ilgPS/Y22ssXWuV6n8xBwIhANCMSfphS1TLwXZU8lVR/hM+V7Fil1py+HgkuqhgSNCt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31170},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"79a6044992cbc2d9bd01b1eff8b11c79635d6fb7","scripts":{"build":"tsc && esbuild dist/index.js --bundle --platform=node --external:postchain-client --minify --allow-overwrite --outfile=dist/index.js"},"_npmUser":{"name":"celse13","email":"honore.rugira@chromaway.com"},"_npmVersion":"11.13.0","description":"Framework-agnostic ATBASH tool-audit SDK: validate endpoint, log on-chain, query judge, verify response signature.","directories":{},"_nodeVersion":"25.8.2","dependencies":{"postchain-client":"^2.1.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sdk_0.1.1_1777545627688_0.10143077075968243","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@atbash-plugin/sdk","version":"0.1.4","description":"Framework-agnostic ATBASH tool-audit SDK: validate endpoint, log on-chain, query judge, verify response signature.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc && esbuild dist/index.js --bundle --platform=node --external:postchain-client --minify --allow-overwrite --outfile=dist/index.js"},"keywords":["atbash","tool-audit","chromia","policy","audit","sdk"],"author":{"name":"atbash"},"license":"UNLICENSED","dependencies":{"postchain-client":"^2.1.2"},"gitHead":"79a6044992cbc2d9bd01b1eff8b11c79635d6fb7","_id":"@atbash-plugin/sdk@0.1.4","_nodeVersion":"25.8.2","_npmVersion":"11.13.0","dist":{"integrity":"sha512-ti3RaNNByRXNjF/SFO6uRWSGDoN0dyUFM6As3yU0Z0Qrb8hGrc2fvesa77cnKED6+eE/LryzAvNRq2m/jcxRDA==","shasum":"873fef5030c1aab06fc481aed5cb5ae46017f704","tarball":"https://registry.npmjs.org/@atbash-plugin/sdk/-/sdk-0.1.4.tgz","fileCount":22,"unpackedSize":30814,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDSAh1L+Kx8YEhUUTZELVglQgIy4KhxjPf8SvXaXanFaQIhAMzbj2ZbsRdQNgyyUZgRgMFnrw0arMJ++hTngAXEMwbX"}]},"_npmUser":{"name":"celse13","email":"honore.rugira@chromaway.com"},"directories":{},"maintainers":[{"name":"bewuketu_lake","email":"bewuketu.lake@chromaway.com"},{"name":"celse13","email":"honore.rugira@chromaway.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk_0.1.4_1777558330623_0.8421228025738556"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-30T10:40:27.588Z","modified":"2026-04-30T14:12:10.931Z","0.1.1":"2026-04-30T10:40:27.825Z","0.1.2":"2026-04-30T11:29:07.073Z","0.1.4":"2026-04-30T14:12:10.806Z"},"author":{"name":"atbash"},"license":"UNLICENSED","keywords":["atbash","tool-audit","chromia","policy","audit","sdk"],"description":"Framework-agnostic ATBASH tool-audit SDK: validate endpoint, log on-chain, query judge, verify response signature.","maintainers":[{"name":"bewuketu_lake","email":"bewuketu.lake@chromaway.com"},{"name":"celse13","email":"honore.rugira@chromaway.com"}],"readme":"# @atbash-plugin/sdk\n\nTypeScript SDK that gates AI-agent tool calls against the ATBASH policy service. Use it from any Node.js host — LangChain, Vercel AI SDK, MCP, custom agents, scripts, Lambdas — to get a yes/no decision per tool call.\n\n> The agent's private key never leaves the machine. Only signed transaction bytes plus the corresponding public key are transmitted.\n\n## Install\n\n```bash\nnpm install @atbash-plugin/sdk\n```\n\nRequires Node.js 18+.\n\n## Quickstart\n\nA complete, runnable example. Save as `quickstart.mjs` and run with `node quickstart.mjs`:\n\n```js\nimport { createAtbashClient } from \"@atbash-plugin/sdk\";\nimport { execSync } from \"node:child_process\";\n\nconst client = createAtbashClient();\n\nconst toolName = \"shell.exec\";\nconst args = { cmd: \"ls /tmp\" };\n\nconst decision = await client.auditToolCall({\n  toolName,\n  args,\n  context: \"quickstart smoke test\",\n});\n\nconsole.log(`Verdict: ${decision.verdict}  (allow=${decision.allow})`);\nconsole.log(`Reason:  ${decision.reason ?? \"—\"}`);\n\nif (!decision.allow) {\n  process.exit(1);\n}\n\nconst output = execSync(args.cmd, { encoding: \"utf8\" });\nconsole.log(\"---\");\nconsole.log(output);\n```\n\nExpected output on an `ALLOW`:\n\n```\nVerdict: ALLOW  (allow=true)\nReason:  ALLOW: ...\n---\nfile1\nfile2\n...\n```\n\n`createAtbashClient()` reads your agent key from `~/.config/atbash/guard-client-key` by default. Contact the ATBASH team to register an agent and obtain a key pair.\n\n## Get an agent key\n\nPlace the agent key pair at `~/.config/atbash/guard-client-key` (the default path). The file accepts either JSON:\n\n```json\n{\n  \"privKey\": \"your-hex-private-key-64-chars\",\n  \"pubKey\":  \"your-hex-public-key-66-chars\"\n}\n```\n\n…or `key=value`:\n\n```\nprivkey=your-hex-private-key-64-chars\npubkey=your-hex-public-key-66-chars\n```\n\nLengths must be exact: `privKey` is 64 hex chars (32 bytes), `pubKey` is 66 hex chars (33 bytes — the compressed secp256k1 form, prefixed with `02` or `03`). A short or malformed key will be rejected by the judge service with a `400`.\n\nTo use a different path, pass `keyPath`:\n\n```ts\ncreateAtbashClient({ keyPath: \"/etc/atbash/agent-key.json\" });\n```\n\nFor environments without a writable filesystem (Lambda, container without a mounted secret), pass the key pair inline — see [In-memory key](#in-memory-key) below.\n\n## Decision shape\n\n```ts\ntype Decision = {\n  allow: boolean;\n  verdict: \"ALLOW\" | \"HOLD\" | \"BLOCK\" | \"ERROR\";\n  reason?: string;\n  toolCallId?: string;\n};\n```\n\n| Verdict | `allow` | What it means |\n|---|---|---|\n| `ALLOW` | `true` | Approved. |\n| `HOLD` | `true` | Approved with advisory: your UI should ask for confirmation. |\n| `BLOCK` | `false` | Denied. Do not run the tool. |\n| `ERROR` | `false` (when `failClosed`) | Audit failed. Fails closed by default. |\n\n## Configuration\n\n```ts\ntype AtbashClientConfig = {\n  keyPath?: string;\n  keyPair?: { privKey: string; pubKey: string };\n  failClosed?: boolean;\n  logger?: { info?: Function; warn?: Function };\n};\n```\n\n| Field | Default | Notes |\n|---|---|---|\n| `keyPath` | `~/.config/atbash/guard-client-key` | Path to the agent key file. Supports `~/`. |\n| `keyPair` | — | Provide the key pair inline instead of reading from disk. Useful for serverless / containerised deployments. |\n| `failClosed` | `true` | When `true`, errors return `{ allow: false }`. When `false`, errors return `{ allow: true }`. Real `BLOCK` verdicts always block — `failClosed` only affects error paths. |\n| `logger` | — | Optional `{ info, warn }` sink for telemetry. |\n\n### In-memory key\n\n```ts\ncreateAtbashClient({\n  keyPair: {\n    privKey: process.env.ATBASH_PRIVKEY!,\n    pubKey:  process.env.ATBASH_PUBKEY!,\n  },\n});\n```\n\n## Fail-closed behaviour\n\nBy default, every error in the audit pipeline returns `{ allow: false, verdict: \"ERROR\", reason }` so the caller can skip the tool safely. Configuration mistakes throw at `createAtbashClient` time — wrap construction in `try/catch` if you want to surface them programmatically.\n\n## License\n\nProprietary — all rights reserved. See [LICENSE](LICENSE). Commercial licensing inquiries: contact the Atbash team.\n","readmeFilename":"README.md"}