{"_id":"@agent-ops/sesh-channels","_rev":"2-40eaa1e016e1d6650f77ae53617e1608","name":"@agent-ops/sesh-channels","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@agent-ops/sesh-channels","version":"0.1.0","keywords":["sesh","nats","agent","synadia-agent-protocol","role","class"],"author":"Dan Mestas","license":"Apache-2.0","_id":"@agent-ops/sesh-channels@0.1.0","maintainers":[{"name":"danmestas","email":"daniel.mestas@craftdesign.group"}],"homepage":"https://github.com/danmestas/sesh/tree/main/agents/sdk-ts#readme","bugs":"https://github.com/danmestas/sesh/issues","dist":{"shasum":"c3a881759556f4af5ddb294365a2b4a3b4188a0b","tarball":"https://registry.npmjs.org/@agent-ops/sesh-channels/-/sesh-channels-0.1.0.tgz","fileCount":6,"integrity":"sha512-YdQWNLohkOKXTAJDU/5qBM3ZNlvooLPJYo8vg48vC1RoVqMWwfZWxAwoqhUuDwWZf9p6xGb8R8z+NpDCDL+frA==","signatures":[{"sig":"MEQCIEbx0UmHTtLZJZsO+8f0SDdpARhBLBUyRIFPdLRdBc+TAiBpV3wTIK8smNko8Udo5YLirpGO73LCdXWfJ+E9b16p8g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11374},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"c3a881759556f4af5ddb294365a2b4a3b4188a0b","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"bun test","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run test && npm run build"},"_npmUser":{"name":"danmestas","email":"daniel.mestas@craftdesign.group"},"_integrity":"sha512-YdQWNLohkOKXTAJDU/5qBM3ZNlvooLPJYo8vg48vC1RoVqMWwfZWxAwoqhUuDwWZf9p6xGb8R8z+NpDCDL+frA==","repository":{"url":"git+https://github.com/danmestas/sesh.git","type":"git","directory":"agents/sdk-ts"},"_npmVersion":"10.8.3","description":"Canonical role/class types, validators, and defaults for the sesh agent registration protocol. TS port of github.com/danmestas/sesh/internal/agentmeta.","directories":{},"_nodeVersion":"24.3.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","typescript":"^5.6.0","@types/node":"^20.14.0"},"_npmOperationalInternal":{"tmp":"tmp/sesh-channels_0.1.0_1779475489269_0.5011704121702845","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@agent-ops/sesh-channels","version":"0.1.1","description":"Canonical role/class types, validators, and defaults for the sesh agent registration protocol. TS port of github.com/danmestas/sesh/internal/agentmeta.","license":"Apache-2.0","author":"Dan Mestas","repository":{"type":"git","url":"git+https://github.com/danmestas/sesh.git","directory":"agents/sdk-ts"},"homepage":"https://github.com/danmestas/sesh/tree/main/agents/sdk-ts#readme","bugs":"https://github.com/danmestas/sesh/issues","keywords":["sesh","nats","agent","synadia-agent-protocol","role","class"],"type":"module","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"engines":{"node":">=20"},"scripts":{"build":"tsup","test":"bun test","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run test && npm run build"},"devDependencies":{"@types/node":"^20.14.0","tsup":"^8.3.0","typescript":"^5.6.0"},"_id":"@agent-ops/sesh-channels@0.1.1","_integrity":"sha512-I07R8/JrB6ZdEjYX65DVIOqoSIU7jp7Op3MMIcQoKC+TIFQKcHiE+dwtB5Sfz++CwqCsRcjiqh6HQNfhBzdJvA==","_nodeVersion":"24.3.0","_npmVersion":"10.8.3","shasum":"b97bb3f61475eb363752ae568f7c76859d2ca3b3","dist":{"integrity":"sha512-I07R8/JrB6ZdEjYX65DVIOqoSIU7jp7Op3MMIcQoKC+TIFQKcHiE+dwtB5Sfz++CwqCsRcjiqh6HQNfhBzdJvA==","shasum":"b97bb3f61475eb363752ae568f7c76859d2ca3b3","tarball":"https://registry.npmjs.org/@agent-ops/sesh-channels/-/sesh-channels-0.1.1.tgz","fileCount":6,"unpackedSize":18537,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCfmkomceuhrC98Fb7ZX8nt2M5+HyiiGWpYfkYnEjCOzQIgWx4XEoFaiAuUQRaCBMVDwpgEbatBg/N0+7w1q5v/9Vg="}]},"_npmUser":{"name":"danmestas","email":"daniel.mestas@craftdesign.group"},"directories":{},"maintainers":[{"name":"danmestas","email":"daniel.mestas@craftdesign.group"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sesh-channels_0.1.1_1779535652811_0.20119360926558771"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-22T18:44:49.089Z","modified":"2026-05-23T11:27:33.099Z","0.1.0":"2026-05-22T18:44:49.411Z","0.1.1":"2026-05-23T11:27:32.967Z"},"bugs":"https://github.com/danmestas/sesh/issues","author":"Dan Mestas","license":"Apache-2.0","homepage":"https://github.com/danmestas/sesh/tree/main/agents/sdk-ts#readme","keywords":["sesh","nats","agent","synadia-agent-protocol","role","class"],"repository":{"type":"git","url":"git+https://github.com/danmestas/sesh.git","directory":"agents/sdk-ts"},"description":"Canonical role/class types, validators, and defaults for the sesh agent registration protocol. TS port of github.com/danmestas/sesh/internal/agentmeta.","maintainers":[{"name":"danmestas","email":"daniel.mestas@craftdesign.group"}],"readme":"# @agent-ops/sesh-channels\n\nCanonical role/class types, validators, and defaults for the **sesh agent registration protocol**. TS port of [`github.com/danmestas/sesh/internal/agentmeta`](https://github.com/danmestas/sesh/tree/main/internal/agentmeta).\n\nUse this package in any NATS-channel adapter that registers an agent on the sesh mesh (claude / pi / omp / gemini / grok / your own). It owns the regex, the length bound, the class enum, and the defaulting policy — adapter code becomes a one-line import.\n\n## Install\n\n```bash\nnpm i @agent-ops/sesh-channels\n# or\nbun add @agent-ops/sesh-channels\n```\n\n## Usage\n\nThe 90% case: read role + class from env at boot, hand the result to your `AgentService` / `svcm.add` metadata.\n\n```ts\nimport { readRoleClass } from \"@agent-ops/sesh-channels\";\nimport { AgentService } from \"@synadia-ai/agent-service\";\n\nconst { role, class: cls } = readRoleClass(); // throws ConfigError on invalid input\n\nconst svc = new AgentService({\n  nc,\n  agent: \"claude-code\",\n  owner: process.env.SESH_OWNER ?? \"anon\",\n  name: \"main\",\n  metadata: { role, class: cls /* ... your other metadata ... */ },\n});\n```\n\nOr, for the full adapter config (NATS_URL + agent + owner + session + role + class) in one call:\n\n```ts\nimport { readAdapterConfig } from \"@agent-ops/sesh-channels\";\n\nconst cfg = readAdapterConfig(\"claude-code\"); // throws ConfigError on bad role/class\n\nconst svc = new AgentService({\n  nc,\n  agent: cfg.agent,\n  owner: cfg.owner,\n  name: cfg.session || \"main\",\n  metadata: { role: cfg.role, class: cfg.class, session: cfg.session },\n});\n```\n\n## API\n\n| Symbol | Purpose |\n|---|---|\n| `readRoleClass()` | Read `SESH_ROLE` / `SESH_CLASS` from env, apply defaults, validate. Returns `{ role, class }`. Throws `ConfigError` on invalid input. |\n| `readAdapterConfig(defaultAgent)` | Compose `readRoleClass` with NATS_URL / SESH_AGENT / SESH_OWNER / SESH_SESSION env reads. Returns a full `AdapterConfig`. Throws on bad role/class. |\n| `readSessionLabel(opts?)` | Resolve a sesh session label without an explicit operator value. Prefers `$SESH_SESSION`, then walks cwd → root for the nearest `.sesh/sessions/<label>.json`. Returns `null` if no unique label is reachable (warns to stderr on ambiguity). Adapters compose with their own `NATS_SESSION_NAME` / `basename(cwd)` fallbacks. |\n| `ConfigError` | Thrown on invalid input. Distinct class so callers can `instanceof` check. |\n| `AgentClass` (type) | Literal union `\"active\" \\| \"observer\"`. |\n| `AdapterRoleClass` (type) | `{ role: string; class: AgentClass }`. |\n| `AdapterConfig` (type) | `AdapterRoleClass` + NATS_URL / agent / owner / session. |\n| `SessionLabelOptions` (type) | `{ startDir?: string; env?: ProcessEnv; warn?: (msg) => void }`. Test-time injection points for `readSessionLabel`. |\n\nInternal helpers (`validateRole`, `validateClass`, defaults) are intentionally not exported — callers shouldn't bypass validation, and the boundary is `readRoleClass` / `readAdapterConfig`.\n\n## Canonical rules\n\nMirrored verbatim from [the proposal](https://github.com/danmestas/sesh/blob/main/docs/proposals/2026-05-21-agent-role-registration.md#canonical-roleclass-rules-cite-this-section-verbatim):\n\n```\nrole regex     : ^[a-z0-9_-]+$\nrole length    : 1..63 bytes inclusive\nrole default   : \"worker\"\nclass values   : \"active\" | \"observer\"\nclass default  : \"active\"\n```\n\nDefaulting rule: empty / unset → apply default. Any other value: validate; on failure, throw at boot.\n\n## Versioning\n\nTracks sesh's agent-registration wire format. Minor bumps for additive metadata fields (e.g., capabilities); major bumps for changes that break adapter compatibility.\n\n## Source of truth\n\nWhen the rules change, this package and `internal/agentmeta` MUST be updated together. The proposal at [`docs/proposals/2026-05-21-agent-role-registration.md`](https://github.com/danmestas/sesh/blob/main/docs/proposals/2026-05-21-agent-role-registration.md) is the canonical document.\n","readmeFilename":"README.md"}