{"_id":"@arcanada/output-guard","_rev":"6-3501127b60a3186f5de9b0d1d614f13f","name":"@arcanada/output-guard","dist-tags":{"latest":"0.1.5"},"versions":{"0.1.0":{"name":"@arcanada/output-guard","version":"0.1.0","keywords":["llm","json","yaml","toml","repair","structured-output","zod","arcanada"],"author":{"name":"Arcanada","email":"pavel@arcanada.one"},"license":"MIT","_id":"@arcanada/output-guard@0.1.0","maintainers":[{"name":"arcanada","email":"mail@veritasarcana.ai"}],"homepage":"https://github.com/Arcanada-one/output-guard","bugs":{"url":"https://github.com/Arcanada-one/output-guard/issues"},"dist":{"shasum":"52b55477859ec85992d514a5e97b10a6c4df902e","tarball":"https://registry.npmjs.org/@arcanada/output-guard/-/output-guard-0.1.0.tgz","fileCount":7,"integrity":"sha512-YH48ygH+tdC3XLW3OOFyifCmgqEcxn4j7hETGswyh6gcyQlf5HHKMV0s5fpRq33eh9JzmClA7yS3b1l0g0flSQ==","signatures":[{"sig":"MEUCICEnlL/z3teCSmAa5hGhXbpG4xOjPLcBAGjuLmK8hGyZAiEA0ExOScZJRN6HUU+rKYKXqhpq/X5ZrtPZAc55BgCfGdM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcanada%2foutput-guard@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":202704},"main":"./dist/index.cjs","type":"module","_from":"file:arcanada-output-guard-0.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsup","test:watch":"vitest","test:parity":"vitest run tests/parity"},"_npmUser":{"name":"arcanada","email":"mail@veritasarcana.ai"},"_resolved":"/tmp/57dfcd72b0afaf8da82669076510cb5e/arcanada-output-guard-0.1.0.tgz","_integrity":"sha512-YH48ygH+tdC3XLW3OOFyifCmgqEcxn4j7hETGswyh6gcyQlf5HHKMV0s5fpRq33eh9JzmClA7yS3b1l0g0flSQ==","repository":{"url":"git+https://github.com/Arcanada-one/output-guard.git","type":"git","directory":"packages/ts"},"_npmVersion":"10.9.7","description":"Validate, repair, retry LLM structured output (JSON/YAML/TOML/python-literal)","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^3.23.0","yaml":"^2.9.0","smol-toml":"^1.6.1","jsonrepair":"^3.14.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.17.0","tsup":"^8.5.0","vitest":"^2.1.0","fast-check":"^3.23.0","typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/output-guard_0.1.0_1778595233334_0.7530329588508571","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@arcanada/output-guard","version":"0.1.1","keywords":["llm","json","yaml","toml","repair","structured-output","zod","arcanada"],"author":{"name":"Arcanada","email":"pavel@arcanada.one"},"license":"MIT","_id":"@arcanada/output-guard@0.1.1","maintainers":[{"name":"arcanada-origin","email":"mail@veritasarcana.ai"}],"homepage":"https://github.com/Arcanada-one/output-guard","bugs":{"url":"https://github.com/Arcanada-one/output-guard/issues"},"dist":{"shasum":"80ec4de0668a78ed948583731380f663ca446834","tarball":"https://registry.npmjs.org/@arcanada/output-guard/-/output-guard-0.1.1.tgz","fileCount":9,"integrity":"sha512-lU8sM6JTjNfH/mtOSeb7998//QJ9VkzLYUOTGARjitRPxbPGXsCLvw9N2G/Ibf5SkMkdtu/qLo2ajYsq3NLPvg==","signatures":[{"sig":"MEUCIQDJyv+u4mP94JaIYYoA2v5G1/b9GagCiHL9vp1O0a33NQIgKsOgNg4uaNSNnZ9PNKhC8C4UdkCWdpaP28RknvEpiI8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":207491},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"50403efc18cd5e5283f3ee18570853a860acfa67","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsup","test:watch":"vitest","test:parity":"vitest run tests/parity","prepublishOnly":"pnpm build"},"_npmUser":{"name":"arcanada-origin","email":"mail@veritasarcana.ai"},"repository":{"url":"git+https://github.com/Arcanada-one/output-guard.git","type":"git","directory":"packages/ts"},"_npmVersion":"11.11.0","description":"Validate, repair, retry LLM structured output (JSON / YAML / TOML / Python literal) — 15-strategy two-pass repair chain with Zod adapter.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.23.0","yaml":"^2.9.0","smol-toml":"^1.6.1","jsonrepair":"^3.14.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.17.0","tsup":"^8.5.0","vitest":"^2.1.0","fast-check":"^3.23.0","typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/output-guard_0.1.1_1778658105904_0.991740735795148","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@arcanada/output-guard","version":"0.1.2","keywords":["llm","json","yaml","toml","repair","structured-output","zod","arcanada"],"author":{"name":"Arcanada","email":"pavel@arcanada.one"},"license":"MIT","_id":"@arcanada/output-guard@0.1.2","maintainers":[{"name":"arcanada-origin","email":"mail@veritasarcana.ai"}],"homepage":"https://github.com/Arcanada-one/output-guard","bugs":{"url":"https://github.com/Arcanada-one/output-guard/issues"},"dist":{"shasum":"7f2d571b720fed5691d27ff189e8240f00107c73","tarball":"https://registry.npmjs.org/@arcanada/output-guard/-/output-guard-0.1.2.tgz","fileCount":9,"integrity":"sha512-1ID3uhYAA+q85obUI9zZuda4ImITL0Eifns8xd4OvNyQzAC790rMEZw5zPw/wCF78rteqa8QYNX6+R2t24jAXw==","signatures":[{"sig":"MEUCIQCStkHKpNhmJX+tqnNPebR2toETj8b4lwHqqfSsJEJ+PgIgRn758YME9/1nAZ1k0Q9fWs+S6goHgE04fv9XUm2PFOc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":206898},"main":"./dist/index.cjs","type":"module","_from":"file:arcanada-output-guard-0.1.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsup","test:watch":"vitest","test:parity":"vitest run tests/parity"},"_npmUser":{"name":"arcanada-origin","email":"mail@veritasarcana.ai"},"_resolved":"/private/var/folders/jx/rjnc0jxj6bl40hcw0bf523wh0000gn/T/470c164352b3a23addce74eb5b7d5b64/arcanada-output-guard-0.1.2.tgz","_integrity":"sha512-1ID3uhYAA+q85obUI9zZuda4ImITL0Eifns8xd4OvNyQzAC790rMEZw5zPw/wCF78rteqa8QYNX6+R2t24jAXw==","repository":{"url":"git+https://github.com/Arcanada-one/output-guard.git","type":"git","directory":"packages/ts"},"_npmVersion":"11.11.0","description":"Validate, repair, retry LLM structured output (JSON / YAML / TOML / Python literal) — 15-strategy two-pass repair chain with Zod adapter.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.23.0","yaml":"^2.9.0","smol-toml":"^1.6.1","jsonrepair":"^3.14.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.17.0","tsup":"^8.5.0","vitest":"^2.1.0","fast-check":"^3.23.0","typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/output-guard_0.1.2_1778659781497_0.9365503202053707","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@arcanada/output-guard","version":"0.1.4","keywords":["llm","json","yaml","toml","repair","structured-output","zod","arcanada"],"author":{"name":"Arcanada","email":"pavel@arcanada.one"},"license":"MIT","_id":"@arcanada/output-guard@0.1.4","maintainers":[{"name":"arcanada-origin","email":"mail@veritasarcana.ai"}],"homepage":"https://github.com/Arcanada-one/output-guard","bugs":{"url":"https://github.com/Arcanada-one/output-guard/issues"},"dist":{"shasum":"6aaf37746def806f88c776b7cf031e83c3402af5","tarball":"https://registry.npmjs.org/@arcanada/output-guard/-/output-guard-0.1.4.tgz","fileCount":9,"integrity":"sha512-wCY+Tb+VSSgP8B74ywtvGjyHEBW2b6ygpzqtF2sWGmrHkm//jH7KGT4LnMNGxjom8AsCui27msN9uH1bRonVzg==","signatures":[{"sig":"MEQCIDYQ3oZHDFkgTLmv6bbnzivlJGhcS3l6TYOBtSgJckp8AiAwbIbU5jtSsXpIzHwyN+kdobpe1ofcTeBrQU3dBWQfjw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcanada%2foutput-guard@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":206898},"main":"./dist/index.cjs","type":"module","_from":"file:arcanada-output-guard-0.1.4.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsup","test:watch":"vitest","test:parity":"vitest run tests/parity"},"_npmUser":{"name":"arcanada-origin","email":"mail@veritasarcana.ai"},"_resolved":"/tmp/266af113587e0edddf4817ffd660f73d/arcanada-output-guard-0.1.4.tgz","_integrity":"sha512-wCY+Tb+VSSgP8B74ywtvGjyHEBW2b6ygpzqtF2sWGmrHkm//jH7KGT4LnMNGxjom8AsCui27msN9uH1bRonVzg==","repository":{"url":"git+https://github.com/Arcanada-one/output-guard.git","type":"git","directory":"packages/ts"},"_npmVersion":"10.9.7","description":"Validate, repair, retry LLM structured output (JSON / YAML / TOML / Python literal) — 15-strategy two-pass repair chain with Zod adapter.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^3.23.0","yaml":"^2.9.0","smol-toml":"^1.6.1","jsonrepair":"^3.14.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.17.0","tsup":"^8.5.0","vitest":"^2.1.0","fast-check":"^3.23.0","typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/output-guard_0.1.4_1778667307934_0.9688966631706284","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@arcanada/output-guard","version":"0.1.5","description":"Validate, repair, retry LLM structured output (JSON / YAML / TOML / Python literal) — 15-strategy two-pass repair chain with Zod adapter.","license":"MIT","author":{"name":"Arcanada","email":"pavel@arcanada.one"},"homepage":"https://github.com/Arcanada-one/output-guard","repository":{"type":"git","url":"git+https://github.com/Arcanada-one/output-guard.git","directory":"packages/ts"},"bugs":{"url":"https://github.com/Arcanada-one/output-guard/issues"},"keywords":["llm","json","yaml","toml","repair","structured-output","zod","arcanada"],"type":"module","main":"./dist/index.cjs","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"engines":{"node":">=20"},"publishConfig":{"access":"public"},"dependencies":{"jsonrepair":"^3.14.0","smol-toml":"^1.6.1","yaml":"^2.9.0","zod":"^3.23.0"},"devDependencies":{"@types/node":"^22.10.0","ajv":"^8.17.0","fast-check":"^3.23.0","tsup":"^8.5.0","typescript":"^5.7.0","vitest":"^2.1.0"},"scripts":{"build":"tsup","test":"vitest run","test:watch":"vitest","test:parity":"vitest run tests/parity","lint":"tsc --noEmit"},"_id":"@arcanada/output-guard@0.1.5","_integrity":"sha512-EuwxP7Bg2v1HCsCazYjAeeMtjMQ5TneY88/89mhLSytx90iFQyA7MQmObVOjpUV9GL5L9NNeYVY6wo1eQRgMoQ==","_resolved":"/tmp/3ad0dea1d977ff77ef4d41d0a3f58327/arcanada-output-guard-0.1.5.tgz","_from":"file:arcanada-output-guard-0.1.5.tgz","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-EuwxP7Bg2v1HCsCazYjAeeMtjMQ5TneY88/89mhLSytx90iFQyA7MQmObVOjpUV9GL5L9NNeYVY6wo1eQRgMoQ==","shasum":"435ea65c2588d7089ddc4e22acd9432967f4ccf2","tarball":"https://registry.npmjs.org/@arcanada/output-guard/-/output-guard-0.1.5.tgz","fileCount":9,"unpackedSize":206898,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcanada%2foutput-guard@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIC72yhJNEALokDlcqnE9EbitKIgdmgG15ppnqUgtT8LAAiAD9Ivm3P3qSWC6t9nrXALhpIWUjsY6Jaff/YSyi47RiA=="}]},"_npmUser":{"name":"arcanada-origin","email":"mail@veritasarcana.ai"},"directories":{},"maintainers":[{"name":"arcanada-origin","email":"mail@veritasarcana.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/output-guard_0.1.5_1778667445164_0.3815631269172093"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-12T14:13:53.274Z","modified":"2026-05-13T10:17:25.593Z","0.1.0":"2026-05-12T14:13:53.484Z","0.1.1":"2026-05-13T07:41:46.130Z","0.1.2":"2026-05-13T08:09:41.657Z","0.1.4":"2026-05-13T10:15:08.085Z","0.1.5":"2026-05-13T10:17:25.298Z"},"bugs":{"url":"https://github.com/Arcanada-one/output-guard/issues"},"author":{"name":"Arcanada","email":"pavel@arcanada.one"},"license":"MIT","homepage":"https://github.com/Arcanada-one/output-guard","keywords":["llm","json","yaml","toml","repair","structured-output","zod","arcanada"],"repository":{"type":"git","url":"git+https://github.com/Arcanada-one/output-guard.git","directory":"packages/ts"},"description":"Validate, repair, retry LLM structured output (JSON / YAML / TOML / Python literal) — 15-strategy two-pass repair chain with Zod adapter.","maintainers":[{"name":"arcanada-origin","email":"mail@veritasarcana.ai"}],"readme":"# @arcanada/output-guard\n\n![npm version](https://img.shields.io/npm/v/@arcanada/output-guard) ![License: MIT](https://img.shields.io/badge/license-MIT-green) [![CI](https://github.com/Arcanada-one/output-guard/actions/workflows/ci.yml/badge.svg)](https://github.com/Arcanada-one/output-guard/actions) ![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue)\n\nValidate, repair, and retry LLM structured output (JSON / YAML / TOML / Python literal) — battle-tested 15-strategy repair chain with two-pass orchestrator.\n\n## Install\n\n```bash\npnpm add @arcanada/output-guard\n\n# or\nnpm install @arcanada/output-guard\n\n# or\nyarn add @arcanada/output-guard\n```\n\n## Quick start\n\n```typescript\nimport { repair, OutputGuard } from '@arcanada/output-guard';\nimport { z } from 'zod';\n\nconst User = z.object({\n  name: z.string(),\n  age: z.number(),\n});\n\n// Functional API — format-only repair, no schema\nconst result = repair('{\"name\":\"Alice\",\"age\":30,}', 'json');\n\nconsole.log(result.data);              // { name: 'Alice', age: 30 }\nconsole.log(result.repaired);          // true\nconsole.log(result.pass);              // \"A\"\nconsole.log(result.strategiesApplied); // [\"fix-commas\"]\n```\n\n## Stateful API (with schema validation)\n\n```typescript\nimport { OutputGuard } from '@arcanada/output-guard';\n\nconst guard = new OutputGuard({ format: 'json', schema: User });\nconst result = guard.repair('```json\\n{\"name\":\"Bob\",\"age\":25}\\n```');\n// throws if schema mismatch; returns RepairResult<User> on success\n```\n\n## Output format support\n\n- **JSON** — strict and relaxed parsing with common error recovery\n- **YAML** — with structural repair for indentation and missing keys\n- **TOML** — fixing malformed tables and value assignments\n- **Python literal** — parsing `dict`/`list` literals with safe eval\n- **Auto-detect** — set `format: 'auto'` to infer format from content\n\n## `RepairResult` semantics\n\n```typescript\ninterface RepairResult<T> {\n  repaired: boolean;          // false when raw was already valid\n  data?: T;                   // parsed + (optionally) schema-validated payload\n  raw: string;                // original input as supplied\n  strategiesApplied: string[]; // ordered list of repair strategies invoked\n  pass: \"A\" | \"B\";            // \"A\" = combined-apply; \"B\" = isolating fallback\n}\n```\n\n`MAX_RETRIES` exhaustion signals via thrown `ParseError`, not via a `pass` value.\n\n## Async wrapper for LLM calls\n\n```typescript\nimport { guardedGenerate } from '@arcanada/output-guard';\nimport { z } from 'zod';\n\nconst result = await guardedGenerate({\n  generate: async (prompt) => callYourLLM(prompt),  // your LLM client\n  prompt: 'Return JSON {\"result\": <integer>}',\n  schema: z.object({ result: z.number() }),\n  format: 'json',\n  maxRetries: 3,\n});\n\nconsole.log(result.data);              // { result: 42 }\nconsole.log(result.pass);              // \"A\" | \"B\"\nconsole.log(result.strategiesApplied); // [] when raw was already valid\n```\n\n## Error handling\n\n- **`ValidationError`** — schema validation failure\n- **`RepairExhaustedError`** — all repair strategies exhausted\n- **`FormatError`** — unsupported or unparseable format\n\n## Requirements\n\nNode >= 18 (recommended 20+)\n\n## Documentation\n\nFull API reference and guides: [docs/](https://github.com/Arcanada-one/output-guard/tree/main/packages/ts/docs) (Diataxis structure).  \nSource: [packages/ts](https://github.com/Arcanada-one/output-guard/tree/main/packages/ts)\n\n## License\n\nMIT — see [LICENSE](https://github.com/Arcanada-one/output-guard/tree/main/LICENSE)\n\n---\n\nЖизнь одного человека имеет значение / One human life matters","readmeFilename":"README.md"}