{"_id":"@capsiynau/sdk-transcribe","_rev":"6-473715a54752f6eadb2d1b9c48ae68d2","name":"@capsiynau/sdk-transcribe","dist-tags":{"latest":"1.2.0"},"versions":{"1.0.0":{"name":"@capsiynau/sdk-transcribe","version":"1.0.0","keywords":["capsiynau","transcription","speech-to-text","stt","welsh","cymraeg","bilingual","captions","subtitles","sdk","node"],"author":{"name":"Aled Parry","email":"aled@aledparry.com"},"license":"MIT","_id":"@capsiynau/sdk-transcribe@1.0.0","maintainers":[{"name":"parryaled","email":"aled@aledparry.com"}],"homepage":"https://github.com/aledprysparry/Capsiynau_V2_ClaudeAI/tree/main/packages/sdk-transcribe","bugs":{"url":"https://github.com/aledprysparry/Capsiynau_V2_ClaudeAI/issues"},"dist":{"shasum":"03c8604a6b5f9bbd1eb3419a3fbe73dcc6c204c6","tarball":"https://registry.npmjs.org/@capsiynau/sdk-transcribe/-/sdk-transcribe-1.0.0.tgz","fileCount":8,"integrity":"sha512-MMIU5IcrvlQQtzRQ9A8JGZT/kD4/BygwFv2avUqaQGw2luwOVVTMb3I3l8bY6cg21QxD/rvnDln+rCPk1/kIDg==","signatures":[{"sig":"MEYCIQDsuZvWD27ytYy3mCAep1bUkgtgBKu3iyHSrFjV0mHaHAIhAPG4mb7KCjqLFMMf5P8OVPDZeIZj1TPW45/EfBu5/r0X","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46932},"main":"./src/index.js","type":"module","engines":{"node":">=18"},"exports":{".":"./src/index.js"},"gitHead":"e41f31dda3c0d9e13b024ee9ef198a650b0d509f","scripts":{"test":"vitest run __tests__"},"_npmUser":{"name":"parryaled","email":"aled@aledparry.com"},"repository":{"url":"git+https://github.com/aledprysparry/Capsiynau_V2_ClaudeAI.git","type":"git","directory":"packages/sdk-transcribe"},"_npmVersion":"11.9.0","description":"Node SDK for the Capsiynau transcription API. Wraps POST /v1/transcribe, job polling, and typed errors. Welsh and English first-class. Browser support follows once the token-mint endpoint ships.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sdk-transcribe_1.0.0_1779185802119_0.1273229499186732","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@capsiynau/sdk-transcribe","version":"1.0.1","keywords":["capsiynau","transcription","speech-to-text","stt","welsh","cymraeg","bilingual","captions","subtitles","sdk","node"],"author":{"name":"Aled Parry","email":"aled@aledparry.com"},"license":"MIT","_id":"@capsiynau/sdk-transcribe@1.0.1","maintainers":[{"name":"parryaled","email":"aled@aledparry.com"}],"homepage":"https://github.com/aledprysparry/Capsiynau.com/tree/main/packages/sdk-transcribe","bugs":{"url":"https://github.com/aledprysparry/Capsiynau.com/issues"},"dist":{"shasum":"1f94d90c8d478ccb258c08137ec0892ae5e8bac3","tarball":"https://registry.npmjs.org/@capsiynau/sdk-transcribe/-/sdk-transcribe-1.0.1.tgz","fileCount":13,"integrity":"sha512-S2/0ZEySuToBMrRZ5U6H+dU34t9drn9PzdSm9yMqTWq3c5McertjCzCHsf2UPbIusnZVzvGiqmI0SelwH3Q9jw==","signatures":[{"sig":"MEYCIQCXhkFhy8c5qeyACAm9e52OSQGH86E3N2x9k9e0Io47dQIhALNZUOD5uZ5HAZ6nArKyqB0FDoqqJTyQ25Vew0lZbnaa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65370},"main":"./src/index.js","type":"module","types":"./types/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./types/index.d.ts","default":"./src/index.js"}},"gitHead":"7ddc5f1417a937738937e21888542a8e0f85d54e","scripts":{"test":"vitest run __tests__","check:types":"tsc -p tsconfig.types.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:45f3a79a-f710-4ef8-927e-4aa041f24414"}},"repository":{"url":"git+https://github.com/aledprysparry/Capsiynau.com.git","type":"git","directory":"packages/sdk-transcribe"},"_npmVersion":"12.0.1","description":"Node SDK for the Capsiynau transcription API. Wraps POST /v1/transcribe, job polling, and typed errors. Welsh and English first-class. Browser support follows once the token-mint endpoint ships.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sdk-transcribe_1.0.1_1785020683524_0.7664619628771325","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@capsiynau/sdk-transcribe","version":"1.0.2","keywords":["capsiynau","transcription","speech-to-text","stt","welsh","cymraeg","bilingual","captions","subtitles","sdk","node"],"author":{"name":"Aled Parry","email":"aled@aledparry.com"},"license":"MIT","_id":"@capsiynau/sdk-transcribe@1.0.2","maintainers":[{"name":"parryaled","email":"aled@aledparry.com"}],"homepage":"https://github.com/aledprysparry/Capsiynau.com/tree/main/packages/sdk-transcribe","bugs":{"url":"https://github.com/aledprysparry/Capsiynau.com/issues"},"dist":{"shasum":"45a4790ac464f2319227ddf97abc41c33f3f11d1","tarball":"https://registry.npmjs.org/@capsiynau/sdk-transcribe/-/sdk-transcribe-1.0.2.tgz","fileCount":22,"integrity":"sha512-9JjpVnfJb5oqU94SoubEuAa2Yi4NG1kZG3/qyhzHtgcpA8jpQjTIsy8xXdM6mFREa6XfulSt8ZLJPn9+SweAXQ==","signatures":[{"sig":"MEYCIQDfN7IiQwfb2U6eUKXnuxxy4T3boryhTI8mivD9GK4yCAIhAJTO7CghBz2MSK9E+2OkWbiS6owT/YDM7Tcx8pYYe28a","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102396},"main":"./src/index.js","type":"module","types":"./types/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./types/index.d.ts","default":"./src/index.js"}},"gitHead":"09bf7c5609a92d67aeed4b05ada0ae6f4bafb888","scripts":{"test":"vitest run __tests__","check:types":"tsc -p tsconfig.types.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:45f3a79a-f710-4ef8-927e-4aa041f24414"}},"repository":{"url":"git+https://github.com/aledprysparry/Capsiynau.com.git","type":"git","directory":"packages/sdk-transcribe"},"_npmVersion":"12.0.1","description":"Node SDK for the Capsiynau transcription API. Wraps POST /v1/transcribe, job polling, and typed errors. Welsh and English first-class. Browser support follows once the token-mint endpoint ships.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sdk-transcribe_1.0.2_1785226951387_0.23122372421709048","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@capsiynau/sdk-transcribe","version":"1.1.0","keywords":["capsiynau","transcription","speech-to-text","stt","welsh","cymraeg","bilingual","captions","subtitles","sdk","node"],"author":{"name":"Aled Parry","email":"aled@aledparry.com"},"license":"MIT","_id":"@capsiynau/sdk-transcribe@1.1.0","maintainers":[{"name":"parryaled","email":"aled@aledparry.com"}],"homepage":"https://github.com/aledprysparry/Capsiynau.com/tree/main/packages/sdk-transcribe","bugs":{"url":"https://github.com/aledprysparry/Capsiynau.com/issues"},"dist":{"shasum":"e369ac4cae996f5011219d0ea17373c1bd65ad92","tarball":"https://registry.npmjs.org/@capsiynau/sdk-transcribe/-/sdk-transcribe-1.1.0.tgz","fileCount":23,"integrity":"sha512-MxTevY3gdM5EN53vDilP2TD/k6Wo2j+CoMWJMtryOcpJKl+adTT7qz6mB6QrGSsYKZfAjVrQ/jEGQgjzoVUsmg==","signatures":[{"sig":"MEUCIQCfexXr9lqNmlwQuHRsTQgQinYBmKPTqRMbQitZEX5/FgIgWXA7CduqfQlwgUvrN03bSw3j54PgVZe2PaYmSMOV7W8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108906},"main":"./src/index.js","type":"module","types":"./types/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./types/index.d.ts","default":"./src/index.js"}},"gitHead":"9210edf29387590e515d09e8f8d8ffb54405b238","scripts":{"test":"vitest run __tests__","check:types":"tsc -p tsconfig.types.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:45f3a79a-f710-4ef8-927e-4aa041f24414"}},"repository":{"url":"git+https://github.com/aledprysparry/Capsiynau.com.git","type":"git","directory":"packages/sdk-transcribe"},"_npmVersion":"12.0.1","description":"Node SDK for the Capsiynau transcription API. Wraps POST /v1/transcribe, job polling, and typed errors. Welsh and English first-class. Browser support follows once the token-mint endpoint ships.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sdk-transcribe_1.1.0_1785306158429_0.7547629769824473","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@capsiynau/sdk-transcribe","version":"1.1.1","keywords":["capsiynau","transcription","speech-to-text","stt","welsh","cymraeg","bilingual","captions","subtitles","sdk","node"],"author":{"name":"Aled Parry","email":"aled@aledparry.com"},"license":"MIT","_id":"@capsiynau/sdk-transcribe@1.1.1","maintainers":[{"name":"parryaled","email":"aled@aledparry.com"}],"homepage":"https://github.com/aledprysparry/Capsiynau.com/tree/main/packages/sdk-transcribe","bugs":{"url":"https://github.com/aledprysparry/Capsiynau.com/issues"},"dist":{"shasum":"8cf9e28bcef2948a81e0d0770685ece8013e3676","tarball":"https://registry.npmjs.org/@capsiynau/sdk-transcribe/-/sdk-transcribe-1.1.1.tgz","fileCount":23,"integrity":"sha512-zN387ArxBo3Ie/OB5NIdETsCM1LFdY5a2SkzTKGYIFQkRaNy0VnN4NsKlsl3CCR/xIK7kdiuHrdjuDS9somQ7Q==","signatures":[{"sig":"MEQCIEZ3Hja8Yh13qc3s9pE7W8w97khzHmccg7nBXzFhsMyMAiAKa0H/1zhbpS+8RcBdWpTwOVq9TJszker9vCbjHKzaqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108963},"main":"./src/index.js","type":"module","types":"./types/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./types/index.d.ts","default":"./src/index.js"}},"gitHead":"1b58cd2da89f6266a942efdb23c86aec090b45fe","scripts":{"test":"vitest run __tests__","check:types":"tsc -p tsconfig.types.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:45f3a79a-f710-4ef8-927e-4aa041f24414"}},"repository":{"url":"git+https://github.com/aledprysparry/Capsiynau.com.git","type":"git","directory":"packages/sdk-transcribe"},"_npmVersion":"12.0.1","description":"Node SDK for the Capsiynau transcription API. Wraps POST /v1/transcribe, job polling, and typed errors. Welsh and English first-class. Browser support follows once the token-mint endpoint ships.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sdk-transcribe_1.1.1_1785307122292_0.3695308449667507","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@capsiynau/sdk-transcribe","version":"1.2.0","description":"Node SDK for the Capsiynau transcription API. Wraps POST /v1/transcribe, job polling, and typed errors. Welsh and English first-class. Browser support follows once the token-mint endpoint ships.","type":"module","license":"MIT","author":{"name":"Aled Parry","email":"aled@aledparry.com"},"homepage":"https://github.com/aledprysparry/Capsiynau.com/tree/main/packages/sdk-transcribe","repository":{"type":"git","url":"git+https://github.com/aledprysparry/Capsiynau.com.git","directory":"packages/sdk-transcribe"},"bugs":{"url":"https://github.com/aledprysparry/Capsiynau.com/issues"},"keywords":["capsiynau","transcription","speech-to-text","stt","welsh","cymraeg","bilingual","captions","subtitles","sdk","node"],"main":"./src/index.js","types":"./types/index.d.ts","exports":{".":{"types":"./types/index.d.ts","default":"./src/index.js"}},"engines":{"node":">=18"},"publishConfig":{"access":"public"},"scripts":{"test":"vitest run __tests__","check:types":"tsc -p tsconfig.types.json"},"sideEffects":false,"gitHead":"c7b8d6c80010e656b6b6f714ad18cb3c16bab54a","_id":"@capsiynau/sdk-transcribe@1.2.0","_nodeVersion":"22.23.1","_npmVersion":"12.0.2","dist":{"integrity":"sha512-FSpPZsxO3MOQLRSz5q7Qq4tY15GoIyO1jzve0HdkRilkt780g6VW7y//ZgYO2yqxH/IgqcPZAMR9SV6iUQu7xA==","shasum":"c0a3e00adb4500cdf148cf97712535280199c2b1","tarball":"https://registry.npmjs.org/@capsiynau/sdk-transcribe/-/sdk-transcribe-1.2.0.tgz","fileCount":23,"unpackedSize":110325,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD/zc6wYogELvTigtX4MQBnDK0kBhEwE38I8ZNHJFkeQQIgJS8WObhyabePj4NrMZ3F6nmvq5xlsPEwPutJhRaQU78="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:45f3a79a-f710-4ef8-927e-4aa041f24414"}},"directories":{},"maintainers":[{"name":"parryaled","email":"aled@aledparry.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk-transcribe_1.2.0_1786301980296_0.4694862644211901"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-19T10:16:42.002Z","modified":"2026-08-09T18:59:40.623Z","1.0.0":"2026-05-19T10:16:42.269Z","1.0.1":"2026-07-25T23:04:43.660Z","1.0.2":"2026-07-28T08:22:31.540Z","1.1.0":"2026-07-29T06:22:38.558Z","1.1.1":"2026-07-29T06:38:42.437Z","1.2.0":"2026-08-09T18:59:40.441Z"},"bugs":{"url":"https://github.com/aledprysparry/Capsiynau.com/issues"},"author":{"name":"Aled Parry","email":"aled@aledparry.com"},"license":"MIT","homepage":"https://github.com/aledprysparry/Capsiynau.com/tree/main/packages/sdk-transcribe","keywords":["capsiynau","transcription","speech-to-text","stt","welsh","cymraeg","bilingual","captions","subtitles","sdk","node"],"repository":{"type":"git","url":"git+https://github.com/aledprysparry/Capsiynau.com.git","directory":"packages/sdk-transcribe"},"description":"Node SDK for the Capsiynau transcription API. Wraps POST /v1/transcribe, job polling, and typed errors. Welsh and English first-class. Browser support follows once the token-mint endpoint ships.","maintainers":[{"name":"parryaled","email":"aled@aledparry.com"}],"readme":"# @capsiynau/sdk-transcribe\n\n[![npm](https://img.shields.io/npm/v/@capsiynau/sdk-transcribe.svg)](https://www.npmjs.com/package/@capsiynau/sdk-transcribe)\n\nNode SDK for the Capsiynau transcription API. Wraps `POST /v1/transcribe`,\njob polling, and typed errors. Welsh and English first-class.\n\n**Status: stable.** v1.0.0 published 2026-05-19. v1.0 scope is\nintentionally tight (Node + API key, transcription only). Browser\nsupport and voice-notes are deferred to sibling packages - see\n[DESIGN.md §7](./DESIGN.md) and the [Roadmap](#roadmap) below.\n\n> **Note for repo maintainers:** this package has no repo-internal\n> consumers by design. It is an npm-publishable SDK (`publishConfig.access:\n> public` in package.json) consumed by external integrators against the\n> hosted API; it is not wired into the app bundle and never will be. The\n> app's own marketing and developer pages reference the npm package name\n> (`src/components/landing/APISection.jsx`, `src/pages/Developers.jsx`,\n> `src/data/v1Spec.js`) but do not import the code. Do not flag or delete\n> it as dead code.\n\n## Why this exists\n\nCapsiynau's `/v1/transcribe` endpoint already powers PMA, Nodiadau, and\ninternal apps. Third-party integrators currently hit raw HTTP, parse a\nnon-uniform error envelope, and re-implement job polling. This SDK is\nthe shared, opinionated Node-side wrapper.\n\nWelsh is a first-class citizen. The `language` parameter is required (no\nautodetect — a Capsiynau P0 lesson, see [DESIGN.md](./DESIGN.md)), and\nWelsh fixtures appear in at least half the documented examples.\n\n## Install\n\n```bash\nnpm install @capsiynau/sdk-transcribe\n```\n\nRequires Node `>=18`. ESM-only.\n\n## 30-second sketch\n\n```js\nimport { TranscriptionClient } from '@capsiynau/sdk-transcribe'\n\nconst client = new TranscriptionClient({\n  apiKey: process.env.CAPSIYNAU_API_KEY,\n})\n\n// Submit a transcription job. The project must already exist in\n// Capsiynau (or pass an assetId - same shape).\nconst job = await client.submit({\n  projectId: '00000000-0000-0000-0000-000000000000',\n  fileUrl: 'https://example.com/audio.mp3',\n  language: 'cy',                    // required; never autodetected\n})\n// job: { jobId, projectId, status: 'queued', ... }\n\nawait client.waitFor(job.jobId, { timeoutMs: 600_000 })\n// Resolves when the job reaches a terminal status ('done' or\n// 'completed' - both accepted). The SDK handles jittered backoff and\n// transient errors.\n\nconst transcript = await client.getTranscript(job.projectId)\n// { project_id, title, source_language, segments: [...] }\n\nconsole.log(transcript.segments[0].text)\n```\n\n## What's in the box (v1.0)\n\n| Module | Purpose |\n|--------|---------|\n| `TranscriptionClient` | Wraps `POST /v1/transcribe`, job polling (`GET /v1/status`), transcript retrieval (`GET /v1/export?format=json`), and retry policy. |\n| Typed errors | `AuthError`, `QuotaError`, `PlanGateError`, `NetworkError`, `ValidationError`, `ServerError`. Parsed from today's `{ error: '<string>' }` envelope; will upgrade to structured codes once the server-side normaliser middleware ships. |\n| `SignAvatarClient` *(experimental)* | Wraps `/v1/sign-avatar/*`. Phrase-to-animation router for live captioning. Response shapes may change; not yet covered by the v1 stability contract. See [Sign Avatar (experimental)](#sign-avatar-experimental) below. |\n\nSurface and rationale in [DESIGN.md](./DESIGN.md).\n\n## What this SDK does **not** do\n\n- **No browser usage in v1.0.** Browser path requires the\n  `/v1/auth/token` short-lived mint endpoint, which is on the roadmap\n  but not built server-side. Node-only for now.\n- **No autodetect of source language.** Caller passes `language`.\n  Period.\n- **No exposed AI knobs.** `engine` selection is server-side; the SDK\n  always sends the platform default. AI infrastructure is invisible.\n- **No voice recording, no timecode helpers, no in-place transcript\n  edits.** Those live in a planned sibling package\n  `@capsiynau/sdk-voice-notes` (not yet started) and depend on a\n  `/v1/notes` resource that does not exist server-side today.\n- **No live streaming mode.** Live captions today go through the\n  worker's relay on `feature/phase-15-live-relay`, which is not yet\n  bracketed under a v1 wire contract.\n\n## Sign Avatar (experimental)\n\n`SignAvatarClient` wraps the experimental `/api/v1/sign-avatar/*`\nroutes. **This is a phrase-to-animation router, not a sign-language\ntranslation system.** It exists to prove the architecture: one live\ntranscript pipeline feeding multiple accessibility outputs. Real\nproduction use requires Deaf/BSL consultant validation and proper\nanimation assets - neither of which ship with the POC.\n\n**Stability:** the routes are tagged experimental in\n[`docs/api-versioning.md`](../../docs/api-versioning.md). Response\nshapes may change without a `/v2` bump until the routes are promoted.\n\n```js\nimport { SignAvatarClient } from '@capsiynau/sdk-transcribe'\n\nconst client = new SignAvatarClient({ apiKey: process.env.CAPSIYNAU_API_KEY })\n\nconst instruction = await client.resolve({\n  text: 'Please scan the QR code to ask a question',\n  language: 'en',\n})\n// { normalisedText, signLanguage: 'prototype',\n//   glossSequence: ['PLEASE','SCAN','QR-CODE','QUESTION'],\n//   animations: [...], fallback: false, warnings: [], latency_ms: 4 }\n```\n\nDictionary management (admin role required server-side):\n\n```js\nconst { entries } = await client.listDictionary({ language: 'cy' })\nawait client.upsertPhrase({\n  phrase: 'Sganiwch y cod QR',\n  gloss: ['PLEASE','SCAN','QR-CODE'],\n  animationIds: ['please','scan','qr-code'],\n  language: 'cy',\n})\n```\n\nUnmatched phrase log (drives future dictionary growth):\n\n```js\nawait client.logUnmatched({ text: 'lanyard', language: 'en' })\nconst { entries } = await client.listUnmatched({ limit: 100 })\n```\n\nFor background on why this is a phrase router and not a BSL translator,\nsee [`docs/sign-avatar-poc.md`](../../docs/sign-avatar-poc.md).\n\n## Cross-package notes\n\n- Welsh language utilities (normalisation, mutations, digraphs, glossary\n  helpers) live in [`@capsiynau/intelligence`](../intelligence). The two\n  packages stay separate by design. Re-exporting `intelligence` symbols\n  through `sdk-transcribe` would drag every consumer's bundle up with\n  Welsh-specific code they may not need, couple release cadence, and\n  frame Welsh as mandatory rather than supported. Consumers who need\n  Welsh-aware text handling alongside transcripts depend on both\n  packages explicitly.\n- `@capsiynau/sdk-voice-notes` will be a future sibling once the\n  `/v1/notes` resource exists server-side. The two SDKs share auth,\n  errors, and language conventions but not transport implementations.\n- The Capsiynau live-relay worker is the server counterpart for any\n  future live mode. Edits there land on `feature/phase-15-live-relay`,\n  not main (branch invariant).\n\n## Roadmap\n\n- **v1.0** — `TranscriptionClient` (Node, API key auth). Submit + poll.\n  Typed errors against the current `{ error: '<string>' }` envelope.\n- **v1.1** — Browser support via `/v1/auth/token` short-lived token\n  mint (depends on the server-side mint endpoint; see\n  [DESIGN.md §1](./DESIGN.md) and [§9](./DESIGN.md)).\n- **v1.2** — Correction-signal emit\n  (`POST /v1/transcripts/:id/corrections` or equivalent; endpoint does\n  not exist today). Wires Nodiadau-style edits into the\n  `@capsiynau/intelligence` glossary loop.\n- **v2.x** — Live mode WebSocket, once the worker relay is bracketed\n  under a v1 contract.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}