All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
client.startGeneration(compositionId, description)- server-side Node entry point that kicks off a generation job with a secret key and returns{ jobId, streamUrl }.client.subscribeToGeneration(streamUrl, compositionId?)- browser-side entry point that subscribes to an in-flight generation stream via SSE. No API key required; thejobIdin the URL is a capability token.GenerationEvent.type === "raw"variant as an escape hatch so callers can observe unmapped server events without SDK changes.examples/server.ts- tiny Express backend proxy demonstrating the secure generation flow (secret key stays on the server).- Live integration test suite under
test/live/(run withnpm run test:live). Exercises a real running Underscore API (local or production) selected viaUNDERSCORE_BASE_URL; credentials come fromUNDERSCORE_PUBLISHABLE_KEYandUNDERSCORE_SECRET_KEY. The slow generation tier is gated behindUNDERSCORE_LIVE_GENERATION=1. Missing env vars skip cleanly sonpm run test:liveis safe to run on forks without credentials. - Pre-commit hook via husky + lint-staged: runs
eslint --fix+ prettier on staged files, thentypecheckand the mocked test suite. Bypass withgit commit --no-verifywhen necessary. See CONTRIBUTING.md.
AudioEngine.loadSamplesnow throwsAudioErrorwhen a sample is missingurlinstead of silently skipping. Surfaces API/SDK contract breaks immediately rather than producing a silent synth.- Consolidated demo and examples into single
examples/directory. - Improved README with cleaner structure and tables.
- Updated CONTRIBUTING.md with accurate project structure.
- Parameter type validation now accepts any string (supports custom types like
bpm,generic).
- Removed dead
llm.thinking.chunk/llm.phase_change/llm.code.chunkmapping branches; the server always normalizes these before emitting. - Removed E2E tests (to be rewritten for standalone repo).
- Removed Playwright dependency.
- Initial release of the Underscore SDK
Underscoreclass for SDK initializationSynthclass for playback and parameter control- API client with Zod schema validation
- Generation streaming via Server-Sent Events
- Custom error classes (
ApiError,AudioError,SynthError,ValidationError) - Configurable logging (
debug,info,warn,error,none) - CLI tool (
npx underscore-sdk) for WASM asset management - Full TypeScript type definitions
- Working example application
- ES2022 target with ESM modules
- Strict TypeScript configuration
- Zod runtime validation
- MSW-based test mocks