{"_id":"@dmsdc-ai/aigentry-ssot","name":"@dmsdc-ai/aigentry-ssot","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@dmsdc-ai/aigentry-ssot","version":"1.0.0","description":"aigentry ssot — typed Interface Authority (TS contracts + JSON Schema + A2A reference + envelope-in-PTY).","type":"module","main":"dist/index.js","module":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./contracts/session":{"types":"./dist/contracts/session.d.ts","import":"./dist/contracts/session.js"},"./contracts/lifecycle":{"types":"./dist/contracts/lifecycle.d.ts","import":"./dist/contracts/lifecycle.js"},"./contracts/capability":{"types":"./dist/contracts/capability.d.ts","import":"./dist/contracts/capability.js"},"./contracts/workspace-host":{"types":"./dist/contracts/workspace-host.d.ts","import":"./dist/contracts/workspace-host.js"},"./contracts/telemetry-event":{"types":"./dist/contracts/telemetry-event.d.ts","import":"./dist/contracts/telemetry-event.js"},"./contracts/handoff":{"types":"./dist/contracts/handoff.d.ts","import":"./dist/contracts/handoff.js"},"./envelope/pty-envelope":{"types":"./dist/envelope/pty-envelope.d.ts","import":"./dist/envelope/pty-envelope.js"},"./schemas/v1/*.json":"./schemas/v1/*.json"},"scripts":{"typecheck":"tsc --noEmit","build:ts":"tsc -p tsconfig.json","build:schemas":"tsx scripts/generate-schemas.ts","build":"npm run build:ts && npm run build:schemas","test":"vitest run","lint:consumer":"tsx scripts/lint-consumer.ts"},"engines":{"node":">=20.6.0"},"publishConfig":{"access":"public"},"license":"MIT","devDependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1","ts-json-schema-generator":"^2.4.0","tsx":"^4.22.3","typescript":"^5.9.3","vitest":"^1.6.1"},"_id":"@dmsdc-ai/aigentry-ssot@1.0.0","gitHead":"6d285ef75b525c992347946688c56d4011a95b43","_nodeVersion":"20.20.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-ryOl8Iu/wRO0He8s95yEle80jPbMTis1Nfg7KsE3F2hSdT4X0erLJjF/+rgZ/WLADdBmttf2rqDgc05y3qYvOg==","shasum":"05f1f7bb6e1dc0a221a1a4a27fa0d0c9dd81c85f","tarball":"https://registry.npmjs.org/@dmsdc-ai/aigentry-ssot/-/aigentry-ssot-1.0.0.tgz","fileCount":47,"unpackedSize":100943,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHjbLa/G0kUWsO9HWKnKX7ArcVuM3DKK5GKfpp7D95KwAiEAvys8LMNw3ujhKCkF4xuO8Z73ytvcs/iXg8ep4DNjwm4="}]},"_npmUser":{"name":"duckyoung_kim","email":"banggayo3@gmail.com"},"directories":{},"maintainers":[{"name":"duckyoung_kim","email":"banggayo3@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/aigentry-ssot_1.0.0_1780753765440_0.1702080869328937"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-06T13:49:25.302Z","1.0.0":"2026-06-06T13:49:25.582Z","modified":"2026-06-06T13:49:25.786Z"},"maintainers":[{"name":"duckyoung_kim","email":"banggayo3@gmail.com"}],"description":"aigentry ssot — typed Interface Authority (TS contracts + JSON Schema + A2A reference + envelope-in-PTY).","license":"MIT","readme":"# `@dmsdc-ai/aigentry-ssot`\n\nTyped Interface Authority for the aigentry ecosystem. Build-time contract\nvalidation, JSON Schema codegen, and the envelope-in-PTY transport\nutilities.\n\nThis package is **build-time only** — no runtime daemon, no HTTP server, no\nadmission webhook. Consumer repos import types, validate inject payloads in\nCI, and generate per-language bindings from the published JSON Schemas.\n\n## Install\n\n```bash\nnpm install --save-dev @dmsdc-ai/aigentry-ssot\n```\n\n## Contract modules\n\n| Module                                | Purpose                                                                                  |\n| ------------------------------------- | ---------------------------------------------------------------------------------------- |\n| `@dmsdc-ai/aigentry-ssot/contracts/session`    | `SessionId`, `SessionContext`, `Session`                                                 |\n| `@dmsdc-ai/aigentry-ssot/contracts/lifecycle`  | `LifecycleEvent`, `LifecycleEnvelope`, `Hold`, `Report`, `CleanupRequest`                |\n| `@dmsdc-ai/aigentry-ssot/contracts/capability` | `Capability` enum, `Role` enum, `ROLE_CAPABILITY_SUBSET`, `isSubsetOfRoleDefault()`      |\n| `@dmsdc-ai/aigentry-ssot/contracts/workspace-host` | `WorkspaceHost` (4-method surface: `lookup` / `close` / `alive` / `list_ids`)        |\n| `@dmsdc-ai/aigentry-ssot/contracts/telemetry-event` | `TelemetryEvent` (NDJSON envelope schema)                                           |\n| `@dmsdc-ai/aigentry-ssot/contracts/handoff`    | `TestReport`, `EvidenceRequest`, `EvidenceResponse`                                      |\n| `@dmsdc-ai/aigentry-ssot/envelope/pty-envelope` | `parsePtyEnvelope`, `serializePtyEnvelope`, `extractFencedJsonBlocks`                   |\n\n## CI lint hook integration (consumer side)\n\nA consumer repo (`aigentry-orchestrator`, `aigentry-telepty`,\n`aigentry-dustcraw`, …) integrates ssot validation in CI as follows:\n\n1. Pin the exact version of `@dmsdc-ai/aigentry-ssot` in `devDependencies`.\n2. Commit canonical inject fixtures under `fixtures/inject/*.json`.\n3. Add a PR-time CI job:\n\n   ```yaml\n   - name: ssot conformance\n     run: |\n       for f in fixtures/inject/hold/*.json; do\n         npx tsx node_modules/@dmsdc-ai/aigentry-ssot/scripts/lint-consumer.ts \\\n              --schema hold < \"$f\"\n       done\n   ```\n\n   The payload is piped via stdin to keep the tool side-effect-free with\n   respect to filesystem paths (Snyk SAST hardening per CLAUDE.md\n   At-Inception policy).\n\nThe job fails on schema violations. No runtime gate, no daemon, no\nnetwork calls — pure build-time validation per ADR §1 (lightweight).\n\n## Envelope-in-PTY transport\n\nThe recommended way to ship structured payloads over telepty inject:\n\n```ts\nimport {\n  serializePtyEnvelope,\n  parsePtyEnvelope,\n} from '@dmsdc-ai/aigentry-ssot/envelope/pty-envelope';\n\nconst wire = serializePtyEnvelope(\n  { schema_version: '1', kind: 'hold', payload: { phase: 'X', reason: 'Y', needs: 'Z' } },\n  { preamble: 'orchestrator: please ACK', trailer: '— α1' },\n);\n\n// On the receiver:\nconst result = parsePtyEnvelope(wire);\nif (result.ok) {\n  // result.envelope.kind === 'hold'\n  // result.envelope.transport === 'json-fenced'\n}\n```\n\nLegacy markdown HOLD/REPORT formats still parse via the\n`markdown-fallback` transport tag — backward compat per decision #3\noption C (2026-05-23).\n\n## A2A reference\n\nSee [`docs/a2a-mapping.md`](docs/a2a-mapping.md) for the structural\nalignment between this package and the\n[A2A protocol](https://github.com/a2aproject/A2A).\n\n## SemVer\n\nSee [`SEMVER.md`](SEMVER.md). Pre-1.0 the policy is conservative; once\n1.0.0 ships, every breaking change requires a MAJOR bump.\n\n## Build & test\n\n```bash\nnpm install\nnpm run typecheck     # tsc --noEmit\nnpm run build:schemas # regenerate schemas/v1/*.schema.json\nnpm test              # vitest run\n```\n","readmeFilename":"README.md","_rev":"1-232f8bb34fa5c6b16897f4d672d3da5c"}