← CastReaderCONTENT HISTORY

Update to CastReader

Snapshot Sep 30, 2026 · 23:16 UTC · version 0.1.4

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "name": "build-voice-app",
  "description": "Build and verify a working text-to-speech feature using CastReader Voice API. Use for adding speech, narration, audio lessons or generated voice files to an application, with server-side credentials and restartable jobs.",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 200
    }
  ],
  "skill_md_contents": "---\nname: build-voice-app\ndescription: Build and verify a working text-to-speech feature using CastReader Voice API. Use for adding speech, narration, audio lessons or generated voice files to an application, with server-side credentials and restartable jobs.\n---\n\n# Build a voice feature\n\nDeliver runnable code in the user's chosen stack and verify the actual flow through audio playback. The plugin root is two directories above this file.\n\n## Current contract\n\nRead `https://voice.castreader.com/integration-manifest.json` and the relevant part of `https://voice.castreader.com/openapi.json`; `https://voice.castreader.com/llms-full.txt` provides integration context. Paths in OpenAPI can be disabled: check `x-enabled` and the manifest. Current queued input limit is 500 normalized Unicode code points; short `/audio/speech` is 120. Streaming and realtime are disabled. Select the spoken language explicitly; language selection does not translate text.\n\nUse a server-side `CASTREADER_API_KEY` supplied through the environment. Never request secrets in chat or put them in browser code, logs, URLs or version control. Activation is at `https://voice.castreader.com/request-access`; App Pro does not fund API usage.\n\n## Deliver the application\n\nFor a new Node.js project, run:\n\n```sh\nnode <plugin-root>/scripts/create-app.mjs /absolute/path/to/new-voice-app\n```\n\nThe starter is a working audio-card app with editable text, language and voice selection, estimates, playback, downloads and persistent batches. Read its `README.md`. Run `npm install`, set the server environment, then `npm start`. Its dependency uses the versioned official SDK download; do not substitute an unpublished npm package name. Node.js 22+ is required.\n\nFor an existing application, adapt to its framework. Use the starter's `server.mjs` and `generate.mjs` as examples; preserve the user's project. For single audio jobs, copy or import the dependency-free `scripts/voice.mjs` implementation. Keep credentials and synthesis on the backend. Return controlled audio bytes or a protected application-owned result URL to the player. Add input validation and reuse account authorization before exposing a paid endpoint publicly. The starter binds to loopback and is not a public multiuser deployment template.\n\nResolve `https://voice.castreader.com/v1/route`, then pin work to the resource region. The accepted service bases are `https://voice.castreader.com/v1` and `https://api.castreader.cn/voice-api/v1`. Use SDK 0.2.3 or newer. Saved jobs on the retired China hostname are migrated by the bundled CLI without changing their job or idempotency identity. Use an authorized, ready `voice_...` ID from the account's regional list; catalog IDs and display names are not voice IDs. Voice listing may initialize builtin workspace references without synthesis.\n\nEstimate actual input, display estimated charge and trial usage, and respect the budget. Save the body and idempotency key before POST, then the returned job ID. Continue that job after timeout. Missing downloads are download retries. Never silently create new paid requests for failed, expired or cancelled jobs. Save results within the current retention window (24 hours).\n\n## Verify and hand over\n\nRun relevant application checks, launch it, and inspect the user-facing flow. When credentials and the user's generation authorization are present, test one short clip and verify a decodable file, charge receipt and same-job recovery. Use the user's budget; otherwise disclose a small estimate before the authorized generation. Never top up or change subscriptions.\n\nWithout a key, complete and test the local app and use clearly labeled existing public samples only when useful. State that live synthesis is unverified; never label a saved sample as newly generated. Report the start command, behavior, test evidence, actual charge and remaining configuration.\n"
}

SHA-256: 429d824bb9ce9a7da8ae0755eafebc33ad00abcab5d98d950fd4b0606d88d307