@happyvertical/smrt-voice 0.57.36 → 0.57.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENTS.md CHANGED
@@ -7,6 +7,7 @@ TTS voice profiles with two creation modes: AI design or audio cloning. Word-lev
7
7
  - **VoiceProfile**: two mutually exclusive modes — `designPrompt` (AI-generated from description) XOR `sampleAssetId` (cloned from audio). Status: `pending → processing → ready/failed`. `voiceData` is opaque provider-specific storage. `defaultSpeed` (0.5-2.0), `defaultPitch` (-20 to 20 semitones).
8
8
  - **VoiceSample**: audio training data. `duration`, `transcription`, `quality` (low/medium/high), `sampleRate`, `format`. Validation: `meetsMinDuration` (≥3 sec), `isSuitableForCloning` (≥3 sec AND quality ≠ low).
9
9
  - **VoiceOutput** (extends Content): generated TTS audio. `sourceText`, `audioAssetId`, `wordTimings` array `[{word, start, end}]` in seconds for lip-sync. `audioMetadata` (sampleRate, format, channels, bitDepth, provider, model). Computed: `wordCount`, `wordsPerSecond`, `getWordAtTime(seconds)`.
10
+ - **Recipe `voice.profiles`** (`src/recipes.ts`, help in `src/profiles.recipe.md`): lists voices, sample clips and generated speech for the planner and other catalog hosts. Fields it shows carry `@field({ description })` in plain words; keep them when editing the models. Voice outputs are made by the speech service, so the help describes reading and removing them, not writing them.
10
11
 
11
12
  ## Gotchas
12
13
 
package/dist/index.d.ts CHANGED
@@ -34,6 +34,7 @@
34
34
  */
35
35
  import './__smrt-register__.js';
36
36
  export type { AudioInput, Speech, SpeechAdapterAvailability, SpeechSynthesizer, SpeechSynthesizerType, SpeechVoice, SpeechVoiceInput, SynthesisRequest, SynthesizedSpeech, Transcriber, TranscriberType, TranscriptionRequest, TranscriptResult, TranscriptSegment, WordTiming as SpeechWordTiming, } from '@happyvertical/speech';
37
+ export { VoiceProfilesRecipe } from './recipes.js';
37
38
  export { metadataFromSynthesizedSpeech, VoiceOutput, type VoiceOutputFromSynthesizedSpeechOptions, type VoiceOutputMetadata, type VoiceOutputOptions, type WordTiming, wordTimingsFromSpeech, } from './voice-output.js';
38
39
  export { type VoiceGender, VoiceProfile, type VoiceProfileOptions, type VoiceProfileStatus, } from './voice-profile.js';
39
40
  export { type SampleQuality, VoiceSample, type VoiceSampleOptions, } from './voice-sample.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAKH,OAAO,wBAAwB,CAAC;AAEhC,YAAY,EACV,UAAU,EACV,MAAM,EACN,yBAAyB,EACzB,iBAAiB,EACjB,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,IAAI,gBAAgB,GAC/B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,6BAA6B,EAC7B,WAAW,EACX,KAAK,uCAAuC,EAC5C,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,KAAK,WAAW,EAChB,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,aAAa,EAClB,WAAW,EACX,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAKH,OAAO,wBAAwB,CAAC;AAEhC,YAAY,EACV,UAAU,EACV,MAAM,EACN,yBAAyB,EACzB,iBAAiB,EACjB,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,IAAI,gBAAgB,GAC/B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EACL,6BAA6B,EAC7B,WAAW,EACX,KAAK,uCAAuC,EAC5C,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,KAAK,WAAW,EAChB,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,aAAa,EAClB,WAAW,EACX,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import { ObjectRegistry, SmrtObject, crossPackageRef, foreignKey, smrt } from "@happyvertical/smrt-core";
1
+ import { ObjectRegistry, SmrtObject, SmrtRecipe, crossPackageRef, field, foreignKey, smrt } from "@happyvertical/smrt-core";
2
2
  import { Content } from "@happyvertical/smrt-content";
3
3
  import { TenantScoped, tenantId } from "@happyvertical/smrt-tenancy";
4
4
  //#region src/__smrt-register__.ts
5
- ObjectRegistry.registerPackageManifest(JSON.parse(`{"version":"1.0.0","timestamp":0,"packageName":"@happyvertical/smrt-voice","packageVersion":"0.57.36","objects":{"@happyvertical/smrt-voice:VoiceOutput":{"name":"voiceoutput","className":"VoiceOutput","qualifiedName":"@happyvertical/smrt-voice:VoiceOutput","collection":"contents","description":"Generated audio output from text-to-speech synthesis","filePath":"/home/runner/work/smrt/smrt/packages/voice/src/voice-output.ts","packageName":"@happyvertical/smrt-voice","fields":{"created_at":{"type":"datetime","required":false},"updated_at":{"type":"datetime","required":false},"tenantId":{"type":"text","required":false,"_meta":{"generated":true,"source":"tenantScoped_decorator","sqlType":"UUID","__tenancy":{"isTenantIdField":true,"mode":"optional","field":"tenantId","autoFilter":true,"autoPopulate":true,"allowSuperAdminBypass":false}}},"type":{"type":"text","required":false},"variant":{"type":"text","required":false},"fileKey":{"type":"text","required":false},"author":{"type":"text","required":false},"name":{"type":"text","required":true,"default":"","_meta":{"required":true}},"title":{"type":"text","required":false},"description":{"type":"text","required":false},"body":{"type":"text","required":false},"bodyFormat":{"type":"text","required":false,"enum":["markdown","html"]},"publish_date":{"type":"datetime","required":false},"url":{"type":"text","required":false},"source":{"type":"text","required":false},"original_url":{"type":"text","required":false},"language":{"type":"text","required":false},"tags":{"type":"json","required":false,"default":[]},"category":{"type":"text","required":false},"status":{"type":"text","required":false,"default":"draft","enum":["published","draft","review","archived","deleted"]},"state":{"type":"text","required":false,"default":"active","enum":["deprecated","active","highlighted"]},"metadata":{"type":"json","required":false,"default":{}},"thumbnailAssetId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-assets:Asset"},"voiceProfileId":{"type":"foreignKey","required":false,"related":"VoiceProfile"},"sourceText":{"type":"text","required":false,"default":""},"audioAssetId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-assets:Asset"},"duration":{"type":"integer","required":false,"default":0},"wordTimings":{"type":"json","required":false,"default":[]},"audioMetadata":{"type":"json","required":false}},"methods":{"initialize":{"name":"initialize","async":true,"parameters":[],"returnType":"Promise<this>","isStatic":false,"isPublic":true},"save":{"name":"save","async":true,"parameters":[{"name":"options","type":"SmrtSaveOptions","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"resolveGovernance":{"name":"resolveGovernance","async":true,"parameters":[],"returnType":"Promise<ResolvedContentGovernance>","isStatic":false,"isPublic":true},"loadReferences":{"name":"loadReferences","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"addReference":{"name":"addReference","async":true,"parameters":[{"name":"content","type":"Content | string","optional":false,"unionBranches":[{"type":"Content"},{"type":"string"}]},{"name":"options","type":"object","optional":true,"memberTypes":["number | null"]}],"returnType":"any","isStatic":false,"isPublic":true},"removeReference":{"name":"removeReference","async":true,"parameters":[{"name":"targetId","type":"string","optional":false}],"returnType":"any","isStatic":false,"isPublic":true},"getReferences":{"name":"getReferences","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"getReferenceEdges":{"name":"getReferenceEdges","async":true,"parameters":[],"returnType":"Promise<Array<object>>","isStatic":false,"isPublic":true},"getReferenceDrift":{"name":"getReferenceDrift","async":true,"parameters":[],"returnType":"Promise<Array<object>>","isStatic":false,"isPublic":true},"isGoverned":{"name":"isGoverned","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"getFactLinks":{"name":"getFactLinks","async":true,"parameters":[{"name":"options","type":"object","optional":true,"memberTypes":["FactContentRelationship"]}],"returnType":"any","isStatic":false,"isPublic":true},"getFacts":{"name":"getFacts","async":true,"parameters":[{"name":"options","type":"object","optional":true,"memberTypes":["FactContentRelationship","boolean"]}],"returnType":"Promise<Fact[]>","isStatic":false,"isPublic":true},"addFact":{"name":"addFact","async":true,"parameters":[{"name":"fact","type":"Fact | string","optional":false,"unionBranches":[{"type":"Fact"},{"type":"string"}]},{"name":"relationship","type":"FactContentRelationship","optional":true},{"name":"metadata","type":"Record<string, unknown>","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"removeFact":{"name":"removeFact","async":true,"parameters":[{"name":"factId","type":"string","optional":false},{"name":"relationship","type":"FactContentRelationship","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"syncFacts":{"name":"syncFacts","async":true,"parameters":[{"name":"factIds","type":"string[]","optional":false},{"name":"relationship","type":"FactContentRelationship","optional":true}],"returnType":"Promise<object>","isStatic":false,"isPublic":true},"browseFacts":{"name":"browseFacts","async":true,"parameters":[{"name":"query","type":"any","optional":true,"default":""},{"name":"options","type":"object","optional":true,"memberTypes":["number","boolean"]}],"returnType":"Promise<Fact[]>","isStatic":false,"isPublic":true},"repairFactAudit":{"name":"repairFactAudit","async":true,"parameters":[{"name":"options","type":"object","optional":true,"memberTypes":["number","string"]}],"returnType":"any","isStatic":false,"isPublic":true},"repairFactAuditAction":{"name":"repairFactAuditAction","async":true,"parameters":[{"name":"options","type":"object","optional":true,"memberTypes":["number","string"]}],"returnType":"any","isStatic":false,"isPublic":true},"repairFactEvidence":{"name":"repairFactEvidence","async":true,"parameters":[{"name":"options","type":"FactAuditResourceRepairOptions","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"repairFactEvidenceAction":{"name":"repairFactEvidenceAction","async":true,"parameters":[{"name":"options","type":"FactAuditResourceRepairOptions","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"recheckFactClaims":{"name":"recheckFactClaims","async":true,"parameters":[{"name":"options","type":"FactAuditClaimRecheckOptions","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"recheckFactClaimsAction":{"name":"recheckFactClaimsAction","async":true,"parameters":[{"name":"options","type":"FactAuditClaimRecheckOptions","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"updateFactEvidenceStatus":{"name":"updateFactEvidenceStatus","async":true,"parameters":[{"name":"options","type":"FactEvidenceStatusUpdateOptions","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"updateFactEvidenceStatusAction":{"name":"updateFactEvidenceStatusAction","async":true,"parameters":[{"name":"options","type":"FactEvidenceStatusUpdateOptions","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"getFactAuditState":{"name":"getFactAuditState","async":true,"parameters":[],"returnType":"Promise<FactAuditState>","isStatic":false,"isPublic":true},"getFactAuditStateAction":{"name":"getFactAuditStateAction","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"getFactsState":{"name":"getFactsState","async":true,"parameters":[{"name":"options","type":"object","optional":true,"memberTypes":["FactContentRelationship"]}],"returnType":"any","isStatic":false,"isPublic":true},"syncFactsState":{"name":"syncFactsState","async":true,"parameters":[{"name":"options","type":"object","optional":true,"memberTypes":["string[]","FactContentRelationship"]}],"returnType":"any","isStatic":false,"isPublic":true},"createVersion":{"name":"createVersion","async":true,"parameters":[{"name":"options","type":"CreateContentVersionOptions","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"getVersions":{"name":"getVersions","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"restoreFromVersion":{"name":"restoreFromVersion","async":true,"parameters":[{"name":"versionNumber","type":"number","optional":false}],"returnType":"any","isStatic":false,"isPublic":true},"getReviews":{"name":"getReviews","async":true,"parameters":[{"name":"kind","type":"any","optional":true,"typeUnresolved":true}],"returnType":"any","isStatic":false,"isPublic":true},"listReviews":{"name":"listReviews","async":true,"parameters":[{"name":"options","type":"object","optional":true,"typeUnresolved":true}],"returnType":"any","isStatic":false,"isPublic":true},"getReviewRequirements":{"name":"getReviewRequirements","async":true,"parameters":[{"name":"profileKey","type":"string","optional":false},{"name":"governance","type":"ResolvedContentGovernance","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"getGovernanceState":{"name":"getGovernanceState","async":true,"parameters":[],"returnType":"Promise<ContentGovernanceState>","isStatic":false,"isPublic":true},"getGovernanceStateAction":{"name":"getGovernanceStateAction","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"listReviewProfilesAction":{"name":"listReviewProfilesAction","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"evaluateReviewProfile":{"name":"evaluateReviewProfile","async":true,"parameters":[{"name":"profileKey","type":"string","optional":false}],"returnType":"Promise<ContentReviewProfileEvaluation>","isStatic":false,"isPublic":true},"evaluateReviewProfileAction":{"name":"evaluateReviewProfileAction","async":true,"parameters":[{"name":"options","type":"object","optional":true,"memberTypes":["string"]}],"returnType":"any","isStatic":false,"isPublic":true},"isReadyForReviewProfile":{"name":"isReadyForReviewProfile","async":true,"parameters":[{"name":"profileKey","type":"string","optional":false}],"returnType":"Promise<boolean>","isStatic":false,"isPublic":true},"getPublishedTransparency":{"name":"getPublishedTransparency","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"getPublishedTransparencyAction":{"name":"getPublishedTransparencyAction","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"previewTransparency":{"name":"previewTransparency","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"previewTransparencyAction":{"name":"previewTransparencyAction","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"runReview":{"name":"runReview","async":true,"parameters":[{"name":"options","type":"RunContentReviewOptions","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"runReviewAction":{"name":"runReviewAction","async":true,"parameters":[{"name":"options","type":"RunContentReviewOptions","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"reviewFacts":{"name":"reviewFacts","async":true,"parameters":[{"name":"options","type":"Omit<RunContentReviewOptions, 'kind'>","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"reviewSafety":{"name":"reviewSafety","async":true,"parameters":[{"name":"options","type":"Omit<RunContentReviewOptions, 'kind'>","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"getCorrections":{"name":"getCorrections","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"listCorrections":{"name":"listCorrections","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"issueCorrection":{"name":"issueCorrection","async":true,"parameters":[{"name":"options","type":"IssueContentCorrectionOptions","optional":false}],"returnType":"any","isStatic":false,"isPublic":true},"issueCorrectionAction":{"name":"issueCorrectionAction","async":true,"parameters":[{"name":"options","type":"IssueContentCorrectionOptions","optional":false}],"returnType":"any","isStatic":false,"isPublic":true},"listVersions":{"name":"listVersions","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"mutateVersionAction":{"name":"mutateVersionAction","async":true,"parameters":[{"name":"options","type":"any","optional":true,"typeUnresolved":true}],"returnType":"any","isStatic":false,"isPublic":true},"getCategorySegments":{"name":"getCategorySegments","async":false,"parameters":[],"returnType":"string[]","isStatic":false,"isPublic":true},"getParentCategory":{"name":"getParentCategory","async":false,"parameters":[],"returnType":"string | null","isStatic":false,"isPublic":true},"getRootCategory":{"name":"getRootCategory","async":false,"parameters":[],"returnType":"string | null","isStatic":false,"isPublic":true},"getAncestorPaths":{"name":"getAncestorPaths","async":false,"parameters":[],"returnType":"string[]","isStatic":false,"isPublic":true},"isInCategory":{"name":"isInCategory","async":false,"parameters":[{"name":"categoryPath","type":"string","optional":false},{"name":"includeChildren","type":"any","optional":true}],"returnType":"boolean","isStatic":false,"isPublic":true},"getAssets":{"name":"getAssets","async":true,"parameters":[{"name":"relationship","type":"string","optional":true},{"name":"options","type":"object","optional":true,"typeUnresolved":true}],"returnType":"Promise<Asset[]>","isStatic":false,"isPublic":true},"getAssetIds":{"name":"getAssetIds","async":true,"parameters":[{"name":"relationship","type":"string","optional":true}],"returnType":"Promise<string[]>","isStatic":false,"isPublic":true},"addAsset":{"name":"addAsset","async":true,"parameters":[{"name":"asset","type":"Asset","optional":false},{"name":"relationship","type":"any","optional":true,"default":"attachment"},{"name":"sortOrder","type":"any","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"removeAsset":{"name":"removeAsset","async":true,"parameters":[{"name":"assetId","type":"string","optional":false},{"name":"relationship","type":"string","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"getMetadata":{"name":"getMetadata","async":false,"parameters":[],"returnType":"Record<string, unknown>","isStatic":false,"isPublic":true},"setMetadata":{"name":"setMetadata","async":false,"parameters":[{"name":"metadata","type":"Record<string, unknown> | null | undefined","optional":false,"unionBranches":[{"type":"Record<string, unknown>"},{"type":"null"},{"type":"undefined"}]}],"returnType":"void","isStatic":false,"isPublic":true},"updateMetadata":{"name":"updateMetadata","async":false,"parameters":[{"name":"patch","type":"Partial<Record<string, unknown>>","optional":false}],"returnType":"Record<string, unknown>","isStatic":false,"isPublic":true},"getThumbnail":{"name":"getThumbnail","async":true,"parameters":[],"returnType":"Promise<Image | null>","isStatic":false,"isPublic":true},"setThumbnail":{"name":"setThumbnail","async":true,"parameters":[{"name":"image","type":"Image","optional":false}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"generateThumbnail":{"name":"generateThumbnail","async":true,"parameters":[{"name":"options","type":"ThumbnailOptions","optional":false}],"returnType":"Promise<Image>","isStatic":false,"isPublic":true},"getWordAtTime":{"name":"getWordAtTime","async":false,"parameters":[{"name":"seconds","type":"number","optional":false}],"returnType":"WordTiming | null","isStatic":false,"isPublic":true},"fromSynthesizedSpeech":{"name":"fromSynthesizedSpeech","async":false,"parameters":[{"name":"options","type":"VoiceOutputFromSynthesizedSpeechOptions","optional":false}],"returnType":"VoiceOutput","isStatic":true,"isPublic":true}},"decoratorConfig":{"tableStrategy":"sti","api":{"include":["list","get","create","delete"]},"mcp":{"include":["list","get"]},"cli":true,"tenantScoped":{"mode":"optional"},"tableName":"contents"},"extends":"Content","extendsQualified":"@happyvertical/smrt-content:Content","exportName":"VoiceOutput","collectionExportName":"VoiceOutputCollection","displayLabelField":"name","validationRules":[{"field":"name","rule":"required","fieldType":"text"}],"schema":{"tableName":"contents","ddl":"CREATE TABLE IF NOT EXISTS \\"contents\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"type\\" TEXT,\\n \\"variant\\" TEXT,\\n \\"file_key\\" TEXT,\\n \\"author\\" TEXT,\\n \\"name\\" TEXT DEFAULT '',\\n \\"title\\" TEXT,\\n \\"description\\" TEXT,\\n \\"body\\" TEXT,\\n \\"body_format\\" TEXT,\\n \\"publish_date\\" TIMESTAMP,\\n \\"url\\" TEXT,\\n \\"source\\" TEXT,\\n \\"original_url\\" TEXT,\\n \\"language\\" TEXT,\\n \\"tags\\" JSON DEFAULT '[]',\\n \\"category\\" TEXT,\\n \\"status\\" TEXT DEFAULT 'draft',\\n \\"state\\" TEXT DEFAULT 'active',\\n \\"metadata\\" JSON DEFAULT '{}',\\n \\"thumbnail_asset_id\\" UUID,\\n \\"voice_profile_id\\" UUID,\\n \\"source_text\\" TEXT DEFAULT '',\\n \\"audio_asset_id\\" UUID,\\n \\"duration\\" INTEGER DEFAULT 0,\\n \\"word_timings\\" JSON DEFAULT '[]',\\n \\"audio_metadata\\" JSON,\\n \\"feed_source_id\\" UUID,\\n \\"source_guid\\" TEXT,\\n \\"source_name\\" TEXT,\\n \\"source_homepage_url\\" TEXT,\\n \\"external_url\\" TEXT,\\n \\"original_published_at\\" TIMESTAMP,\\n \\"dedupe_key\\" TEXT\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"type":{"type":"TEXT","notNull":false},"variant":{"type":"TEXT","notNull":false},"file_key":{"type":"TEXT","notNull":false},"author":{"type":"TEXT","notNull":false},"name":{"type":"TEXT","notNull":false,"default":""},"title":{"type":"TEXT","notNull":false},"description":{"type":"TEXT","notNull":false},"body":{"type":"TEXT","notNull":false},"body_format":{"type":"TEXT","notNull":false},"publish_date":{"type":"TIMESTAMP","notNull":false},"url":{"type":"TEXT","notNull":false},"source":{"type":"TEXT","notNull":false},"original_url":{"type":"TEXT","notNull":false},"language":{"type":"TEXT","notNull":false},"tags":{"type":"JSON","notNull":false,"default":[]},"category":{"type":"TEXT","notNull":false},"status":{"type":"TEXT","notNull":false,"default":"draft"},"state":{"type":"TEXT","notNull":false,"default":"active"},"metadata":{"type":"JSON","notNull":false,"default":{}},"thumbnail_asset_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false},"voice_profile_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"voice_profiles","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"source_text":{"type":"TEXT","notNull":false,"default":""},"audio_asset_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false},"duration":{"type":"INTEGER","notNull":false,"default":0},"word_timings":{"type":"JSON","notNull":false,"default":[]},"audio_metadata":{"type":"JSON","notNull":false},"feed_source_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false},"source_guid":{"type":"TEXT","notNull":false},"source_name":{"type":"TEXT","notNull":false},"source_homepage_url":{"type":"TEXT","notNull":false},"external_url":{"type":"TEXT","notNull":false},"original_published_at":{"type":"TIMESTAMP","notNull":false},"dedupe_key":{"type":"TEXT","notNull":false}},"indexes":[{"name":"contents_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"contents_meta_type_idx","columns":["_meta_type"]},{"name":"contents_tenant_id_publish_date_idx","columns":["tenant_id","publish_date"]},{"name":"contents_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"contents_thumbnail_asset_id_idx","columns":["thumbnail_asset_id"]},{"name":"contents_voice_profile_id_idx","columns":["voice_profile_id"]},{"name":"contents_audio_asset_id_idx","columns":["audio_asset_id"]},{"name":"contents_feed_source_id_idx","columns":["feed_source_id"]}],"version":"ee1272af"},"importPath":"@happyvertical/smrt-voice"},"@happyvertical/smrt-voice:VoiceProfile":{"name":"voiceprofile","className":"VoiceProfile","qualifiedName":"@happyvertical/smrt-voice:VoiceProfile","collection":"voiceprofiles","description":"Voice profile for AI-powered speech synthesis","filePath":"/home/runner/work/smrt/smrt/packages/voice/src/voice-profile.ts","packageName":"@happyvertical/smrt-voice","fields":{"created_at":{"type":"datetime","required":false},"updated_at":{"type":"datetime","required":false},"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"name":{"type":"text","required":false,"default":""},"description":{"type":"text","required":false},"language":{"type":"text","required":false,"default":"en-US"},"gender":{"type":"text","required":false,"default":"neutral","enum":["male","female","neutral"]},"designPrompt":{"type":"text","required":false},"sampleAssetId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-assets:Asset"},"voiceData":{"type":"json","required":false,"default":{}},"defaultSpeed":{"type":"decimal","required":false,"default":1},"defaultPitch":{"type":"integer","required":false,"default":0},"status":{"type":"text","required":false,"default":"pending","enum":["pending","processing","ready","failed"]},"provider":{"type":"text","required":false,"default":"qwen3-tts"},"errorMessage":{"type":"text","required":false}},"methods":{"toSpeechVoice":{"name":"toSpeechVoice","async":false,"parameters":[],"returnType":"SpeechVoice","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableStrategy":"sti","api":{"include":["list","get","create","update","delete"]},"mcp":{"include":["list","get"]},"cli":{"skipApiCheck":true},"tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context","_meta_type"]},"extends":"SmrtObject","exportName":"VoiceProfile","collectionExportName":"VoiceProfileCollection","displayLabelField":"name","schema":{"tableName":"voice_profiles","ddl":"CREATE TABLE IF NOT EXISTS \\"voice_profiles\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"name\\" TEXT DEFAULT '',\\n \\"description\\" TEXT,\\n \\"language\\" TEXT DEFAULT 'en-US',\\n \\"gender\\" TEXT DEFAULT 'neutral',\\n \\"design_prompt\\" TEXT,\\n \\"sample_asset_id\\" UUID,\\n \\"voice_data\\" JSON DEFAULT '{}',\\n \\"default_speed\\" REAL DEFAULT 1,\\n \\"default_pitch\\" INTEGER DEFAULT 0,\\n \\"status\\" TEXT DEFAULT 'pending',\\n \\"provider\\" TEXT DEFAULT 'qwen3-tts',\\n \\"error_message\\" TEXT\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"name":{"type":"TEXT","notNull":false,"default":""},"description":{"type":"TEXT","notNull":false},"language":{"type":"TEXT","notNull":false,"default":"en-US"},"gender":{"type":"TEXT","notNull":false,"default":"neutral"},"design_prompt":{"type":"TEXT","notNull":false},"sample_asset_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false},"voice_data":{"type":"JSON","notNull":false,"default":{}},"default_speed":{"type":"REAL","notNull":false,"default":1},"default_pitch":{"type":"INTEGER","notNull":false,"default":0},"status":{"type":"TEXT","notNull":false,"default":"pending"},"provider":{"type":"TEXT","notNull":false,"default":"qwen3-tts"},"error_message":{"type":"TEXT","notNull":false}},"indexes":[{"name":"voice_profiles_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"voice_profiles_meta_type_idx","columns":["_meta_type"]},{"name":"voice_profiles_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"voice_profiles_sample_asset_id_idx","columns":["sample_asset_id"]}],"version":"b3717c47"},"importPath":"@happyvertical/smrt-voice"},"@happyvertical/smrt-voice:VoiceSample":{"name":"voicesample","className":"VoiceSample","qualifiedName":"@happyvertical/smrt-voice:VoiceSample","collection":"voicesamples","description":"Audio sample for voice cloning","filePath":"/home/runner/work/smrt/smrt/packages/voice/src/voice-sample.ts","packageName":"@happyvertical/smrt-voice","fields":{"created_at":{"type":"datetime","required":false},"updated_at":{"type":"datetime","required":false},"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"voiceProfileId":{"type":"foreignKey","required":false,"related":"VoiceProfile"},"assetId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-assets:Asset"},"duration":{"type":"integer","required":false,"default":0},"transcription":{"type":"text","required":false},"quality":{"type":"text","required":false,"default":"medium","enum":["low","medium","high"]},"sampleRate":{"type":"integer","required":false},"channels":{"type":"integer","required":false},"format":{"type":"text","required":false},"isPrimary":{"type":"boolean","required":false,"default":false}},"methods":{},"decoratorConfig":{"tableStrategy":"sti","api":{"include":["list","get","create","delete"]},"mcp":{"include":["list","get"]},"cli":true,"tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context","_meta_type"]},"extends":"SmrtObject","exportName":"VoiceSample","collectionExportName":"VoiceSampleCollection","schema":{"tableName":"voice_samples","ddl":"CREATE TABLE IF NOT EXISTS \\"voice_samples\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"voice_profile_id\\" UUID,\\n \\"asset_id\\" UUID,\\n \\"duration\\" INTEGER DEFAULT 0,\\n \\"transcription\\" TEXT,\\n \\"quality\\" TEXT DEFAULT 'medium',\\n \\"sample_rate\\" INTEGER,\\n \\"channels\\" INTEGER,\\n \\"format\\" TEXT,\\n \\"is_primary\\" BOOLEAN DEFAULT FALSE\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"voice_profile_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"voice_profiles","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"asset_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false},"duration":{"type":"INTEGER","notNull":false,"default":0},"transcription":{"type":"TEXT","notNull":false},"quality":{"type":"TEXT","notNull":false,"default":"medium"},"sample_rate":{"type":"INTEGER","notNull":false},"channels":{"type":"INTEGER","notNull":false},"format":{"type":"TEXT","notNull":false},"is_primary":{"type":"BOOLEAN","notNull":false,"default":false}},"indexes":[{"name":"voice_samples_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"voice_samples_meta_type_idx","columns":["_meta_type"]},{"name":"voice_samples_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"voice_samples_voice_profile_id_idx","columns":["voice_profile_id"]},{"name":"voice_samples_asset_id_idx","columns":["asset_id"]}],"version":"cbb4acc4"},"importPath":"@happyvertical/smrt-voice"}},"moduleType":"smrt","smrtDependencies":["@happyvertical/smrt-assets","@happyvertical/smrt-content","@happyvertical/smrt-core","@happyvertical/smrt-tenancy"],"browser":{"status":"server-only","issues":["#3615","#3617","#3624","#3625","#3626","#3627","#3628"],"reason":"documents/spider SDK graph; CJS parse error","via":["@happyvertical/smrt-agents","@happyvertical/smrt-chat","@happyvertical/smrt-content","@happyvertical/smrt-images","@happyvertical/smrt-jobs","@happyvertical/smrt-profiles","@happyvertical/smrt-reports","@happyvertical/smrt-secrets","@happyvertical/smrt-tenancy","@happyvertical/smrt-users"]},"stampsConstructors":true}`));
5
+ ObjectRegistry.registerPackageManifest(JSON.parse(`{"version":"1.0.0","timestamp":0,"packageName":"@happyvertical/smrt-voice","packageVersion":"0.57.38","objects":{"@happyvertical/smrt-voice:VoiceOutput":{"name":"voiceoutput","className":"VoiceOutput","qualifiedName":"@happyvertical/smrt-voice:VoiceOutput","collection":"contents","description":"Generated audio output from text-to-speech synthesis","filePath":"/home/runner/work/smrt/smrt/packages/voice/src/voice-output.ts","packageName":"@happyvertical/smrt-voice","fields":{"created_at":{"type":"datetime","required":false},"updated_at":{"type":"datetime","required":false},"tenantId":{"type":"text","required":false,"_meta":{"generated":true,"source":"tenantScoped_decorator","sqlType":"UUID","__tenancy":{"isTenantIdField":true,"mode":"optional","field":"tenantId","autoFilter":true,"autoPopulate":true,"allowSuperAdminBypass":false}}},"type":{"type":"text","required":false,"description":"What kind of piece this is, such as an article or a document.","_meta":{"description":"What kind of piece this is, such as an article or a document."}},"variant":{"type":"text","required":false},"fileKey":{"type":"text","required":false},"author":{"type":"text","required":false,"description":"Who wrote this piece.","_meta":{"description":"Who wrote this piece."}},"name":{"type":"text","required":true,"default":"","description":"A short name used to find this piece in lists.","_meta":{"required":true,"description":"A short name used to find this piece in lists."}},"title":{"type":"text","required":false,"description":"The headline readers see.","_meta":{"description":"The headline readers see."}},"description":{"type":"text","required":false,"description":"A one or two sentence summary of the piece.","_meta":{"description":"A one or two sentence summary of the piece."}},"body":{"type":"text","required":false,"description":"The full text of the piece.","_meta":{"description":"The full text of the piece."}},"bodyFormat":{"type":"text","required":false,"enum":["markdown","html"]},"publish_date":{"type":"datetime","required":false,"description":"The date the piece went out, or is due to go out.","_meta":{"description":"The date the piece went out, or is due to go out."}},"url":{"type":"text","required":false},"source":{"type":"text","required":false},"original_url":{"type":"text","required":false},"language":{"type":"text","required":false},"tags":{"type":"json","required":false,"default":[],"description":"Words that group pieces by subject.","_meta":{"description":"Words that group pieces by subject."}},"category":{"type":"text","required":false,"description":"The one section the piece belongs to, such as news or local.","_meta":{"description":"The one section the piece belongs to, such as news or local."}},"status":{"type":"text","required":false,"default":"draft","description":"Where the piece stands: draft, in review, published or archived.","_meta":{"description":"Where the piece stands: draft, in review, published or archived."},"enum":["published","draft","review","archived","deleted"]},"state":{"type":"text","required":false,"default":"active","enum":["deprecated","active","highlighted"]},"metadata":{"type":"json","required":false,"default":{}},"thumbnailAssetId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-assets:Asset"},"voiceProfileId":{"type":"foreignKey","required":false,"related":"VoiceProfile","description":"The voice that read the text.","_meta":{"description":"The voice that read the text."}},"sourceText":{"type":"text","required":false,"default":"","description":"The text that was read aloud.","_meta":{"description":"The text that was read aloud."}},"audioAssetId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-assets:Asset","description":"The audio file of the recording.","_meta":{"description":"The audio file of the recording."}},"duration":{"type":"integer","required":false,"default":0,"description":"How long the recording runs, in seconds.","_meta":{"description":"How long the recording runs, in seconds."}},"wordTimings":{"type":"json","required":false,"default":[]},"audioMetadata":{"type":"json","required":false}},"methods":{"initialize":{"name":"initialize","async":true,"parameters":[],"returnType":"Promise<this>","isStatic":false,"isPublic":true},"save":{"name":"save","async":true,"parameters":[{"name":"options","type":"SmrtSaveOptions","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"resolveGovernance":{"name":"resolveGovernance","async":true,"parameters":[],"returnType":"Promise<ResolvedContentGovernance>","isStatic":false,"isPublic":true},"loadReferences":{"name":"loadReferences","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"addReference":{"name":"addReference","async":true,"parameters":[{"name":"content","type":"Content | string","optional":false,"unionBranches":[{"type":"Content"},{"type":"string"}]},{"name":"options","type":"object","optional":true,"memberTypes":["number | null"]}],"returnType":"any","isStatic":false,"isPublic":true},"removeReference":{"name":"removeReference","async":true,"parameters":[{"name":"targetId","type":"string","optional":false}],"returnType":"any","isStatic":false,"isPublic":true},"getReferences":{"name":"getReferences","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"getReferenceEdges":{"name":"getReferenceEdges","async":true,"parameters":[],"returnType":"Promise<Array<object>>","isStatic":false,"isPublic":true},"getReferenceDrift":{"name":"getReferenceDrift","async":true,"parameters":[],"returnType":"Promise<Array<object>>","isStatic":false,"isPublic":true},"isGoverned":{"name":"isGoverned","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"getFactLinks":{"name":"getFactLinks","async":true,"parameters":[{"name":"options","type":"object","optional":true,"memberTypes":["FactContentRelationship"]}],"returnType":"any","isStatic":false,"isPublic":true},"getFacts":{"name":"getFacts","async":true,"parameters":[{"name":"options","type":"object","optional":true,"memberTypes":["FactContentRelationship","boolean"]}],"returnType":"Promise<Fact[]>","isStatic":false,"isPublic":true},"addFact":{"name":"addFact","async":true,"parameters":[{"name":"fact","type":"Fact | string","optional":false,"unionBranches":[{"type":"Fact"},{"type":"string"}]},{"name":"relationship","type":"FactContentRelationship","optional":true},{"name":"metadata","type":"Record<string, unknown>","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"removeFact":{"name":"removeFact","async":true,"parameters":[{"name":"factId","type":"string","optional":false},{"name":"relationship","type":"FactContentRelationship","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"syncFacts":{"name":"syncFacts","async":true,"parameters":[{"name":"factIds","type":"string[]","optional":false},{"name":"relationship","type":"FactContentRelationship","optional":true}],"returnType":"Promise<object>","isStatic":false,"isPublic":true},"browseFacts":{"name":"browseFacts","async":true,"parameters":[{"name":"query","type":"any","optional":true,"default":""},{"name":"options","type":"object","optional":true,"memberTypes":["number","boolean"]}],"returnType":"Promise<Fact[]>","isStatic":false,"isPublic":true},"repairFactAudit":{"name":"repairFactAudit","async":true,"parameters":[{"name":"options","type":"object","optional":true,"memberTypes":["number","string"]}],"returnType":"any","isStatic":false,"isPublic":true},"repairFactAuditAction":{"name":"repairFactAuditAction","async":true,"parameters":[{"name":"options","type":"object","optional":true,"memberTypes":["number","string"]}],"returnType":"any","isStatic":false,"isPublic":true},"repairFactEvidence":{"name":"repairFactEvidence","async":true,"parameters":[{"name":"options","type":"FactAuditResourceRepairOptions","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"repairFactEvidenceAction":{"name":"repairFactEvidenceAction","async":true,"parameters":[{"name":"options","type":"FactAuditResourceRepairOptions","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"recheckFactClaims":{"name":"recheckFactClaims","async":true,"parameters":[{"name":"options","type":"FactAuditClaimRecheckOptions","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"recheckFactClaimsAction":{"name":"recheckFactClaimsAction","async":true,"parameters":[{"name":"options","type":"FactAuditClaimRecheckOptions","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"updateFactEvidenceStatus":{"name":"updateFactEvidenceStatus","async":true,"parameters":[{"name":"options","type":"FactEvidenceStatusUpdateOptions","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"updateFactEvidenceStatusAction":{"name":"updateFactEvidenceStatusAction","async":true,"parameters":[{"name":"options","type":"FactEvidenceStatusUpdateOptions","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"getFactAuditState":{"name":"getFactAuditState","async":true,"parameters":[],"returnType":"Promise<FactAuditState>","isStatic":false,"isPublic":true},"getFactAuditStateAction":{"name":"getFactAuditStateAction","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"getFactsState":{"name":"getFactsState","async":true,"parameters":[{"name":"options","type":"object","optional":true,"memberTypes":["FactContentRelationship"]}],"returnType":"any","isStatic":false,"isPublic":true},"syncFactsState":{"name":"syncFactsState","async":true,"parameters":[{"name":"options","type":"object","optional":true,"memberTypes":["string[]","FactContentRelationship"]}],"returnType":"any","isStatic":false,"isPublic":true},"createVersion":{"name":"createVersion","async":true,"parameters":[{"name":"options","type":"CreateContentVersionOptions","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"getVersions":{"name":"getVersions","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"restoreFromVersion":{"name":"restoreFromVersion","async":true,"parameters":[{"name":"versionNumber","type":"number","optional":false}],"returnType":"any","isStatic":false,"isPublic":true},"getReviews":{"name":"getReviews","async":true,"parameters":[{"name":"kind","type":"any","optional":true,"typeUnresolved":true}],"returnType":"any","isStatic":false,"isPublic":true},"listReviews":{"name":"listReviews","async":true,"parameters":[{"name":"options","type":"object","optional":true,"typeUnresolved":true}],"returnType":"any","isStatic":false,"isPublic":true},"getReviewRequirements":{"name":"getReviewRequirements","async":true,"parameters":[{"name":"profileKey","type":"string","optional":false},{"name":"governance","type":"ResolvedContentGovernance","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"getGovernanceState":{"name":"getGovernanceState","async":true,"parameters":[],"returnType":"Promise<ContentGovernanceState>","isStatic":false,"isPublic":true},"getGovernanceStateAction":{"name":"getGovernanceStateAction","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"listReviewProfilesAction":{"name":"listReviewProfilesAction","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"evaluateReviewProfile":{"name":"evaluateReviewProfile","async":true,"parameters":[{"name":"profileKey","type":"string","optional":false}],"returnType":"Promise<ContentReviewProfileEvaluation>","isStatic":false,"isPublic":true},"evaluateReviewProfileAction":{"name":"evaluateReviewProfileAction","async":true,"parameters":[{"name":"options","type":"object","optional":true,"memberTypes":["string"]}],"returnType":"any","isStatic":false,"isPublic":true},"isReadyForReviewProfile":{"name":"isReadyForReviewProfile","async":true,"parameters":[{"name":"profileKey","type":"string","optional":false}],"returnType":"Promise<boolean>","isStatic":false,"isPublic":true},"getPublishedTransparency":{"name":"getPublishedTransparency","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"getPublishedTransparencyAction":{"name":"getPublishedTransparencyAction","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"previewTransparency":{"name":"previewTransparency","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"previewTransparencyAction":{"name":"previewTransparencyAction","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"runReview":{"name":"runReview","async":true,"parameters":[{"name":"options","type":"RunContentReviewOptions","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"runReviewAction":{"name":"runReviewAction","async":true,"parameters":[{"name":"options","type":"RunContentReviewOptions","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"reviewFacts":{"name":"reviewFacts","async":true,"parameters":[{"name":"options","type":"Omit<RunContentReviewOptions, 'kind'>","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"reviewSafety":{"name":"reviewSafety","async":true,"parameters":[{"name":"options","type":"Omit<RunContentReviewOptions, 'kind'>","optional":true}],"returnType":"any","isStatic":false,"isPublic":true},"getCorrections":{"name":"getCorrections","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"listCorrections":{"name":"listCorrections","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"issueCorrection":{"name":"issueCorrection","async":true,"parameters":[{"name":"options","type":"IssueContentCorrectionOptions","optional":false}],"returnType":"any","isStatic":false,"isPublic":true},"issueCorrectionAction":{"name":"issueCorrectionAction","async":true,"parameters":[{"name":"options","type":"IssueContentCorrectionOptions","optional":false}],"returnType":"any","isStatic":false,"isPublic":true},"listVersions":{"name":"listVersions","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"mutateVersionAction":{"name":"mutateVersionAction","async":true,"parameters":[{"name":"options","type":"any","optional":true,"typeUnresolved":true}],"returnType":"any","isStatic":false,"isPublic":true},"getCategorySegments":{"name":"getCategorySegments","async":false,"parameters":[],"returnType":"string[]","isStatic":false,"isPublic":true},"getParentCategory":{"name":"getParentCategory","async":false,"parameters":[],"returnType":"string | null","isStatic":false,"isPublic":true},"getRootCategory":{"name":"getRootCategory","async":false,"parameters":[],"returnType":"string | null","isStatic":false,"isPublic":true},"getAncestorPaths":{"name":"getAncestorPaths","async":false,"parameters":[],"returnType":"string[]","isStatic":false,"isPublic":true},"isInCategory":{"name":"isInCategory","async":false,"parameters":[{"name":"categoryPath","type":"string","optional":false},{"name":"includeChildren","type":"any","optional":true}],"returnType":"boolean","isStatic":false,"isPublic":true},"getAssets":{"name":"getAssets","async":true,"parameters":[{"name":"relationship","type":"string","optional":true},{"name":"options","type":"object","optional":true,"typeUnresolved":true}],"returnType":"Promise<Asset[]>","isStatic":false,"isPublic":true},"getAssetIds":{"name":"getAssetIds","async":true,"parameters":[{"name":"relationship","type":"string","optional":true}],"returnType":"Promise<string[]>","isStatic":false,"isPublic":true},"addAsset":{"name":"addAsset","async":true,"parameters":[{"name":"asset","type":"Asset","optional":false},{"name":"relationship","type":"any","optional":true,"default":"attachment"},{"name":"sortOrder","type":"any","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"removeAsset":{"name":"removeAsset","async":true,"parameters":[{"name":"assetId","type":"string","optional":false},{"name":"relationship","type":"string","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"getMetadata":{"name":"getMetadata","async":false,"parameters":[],"returnType":"Record<string, unknown>","isStatic":false,"isPublic":true},"setMetadata":{"name":"setMetadata","async":false,"parameters":[{"name":"metadata","type":"Record<string, unknown> | null | undefined","optional":false,"unionBranches":[{"type":"Record<string, unknown>"},{"type":"null"},{"type":"undefined"}]}],"returnType":"void","isStatic":false,"isPublic":true},"updateMetadata":{"name":"updateMetadata","async":false,"parameters":[{"name":"patch","type":"Partial<Record<string, unknown>>","optional":false}],"returnType":"Record<string, unknown>","isStatic":false,"isPublic":true},"getThumbnail":{"name":"getThumbnail","async":true,"parameters":[],"returnType":"Promise<Image | null>","isStatic":false,"isPublic":true},"setThumbnail":{"name":"setThumbnail","async":true,"parameters":[{"name":"image","type":"Image","optional":false}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"generateThumbnail":{"name":"generateThumbnail","async":true,"parameters":[{"name":"options","type":"ThumbnailOptions","optional":false}],"returnType":"Promise<Image>","isStatic":false,"isPublic":true},"getWordAtTime":{"name":"getWordAtTime","async":false,"parameters":[{"name":"seconds","type":"number","optional":false}],"returnType":"WordTiming | null","isStatic":false,"isPublic":true},"fromSynthesizedSpeech":{"name":"fromSynthesizedSpeech","async":false,"parameters":[{"name":"options","type":"VoiceOutputFromSynthesizedSpeechOptions","optional":false}],"returnType":"VoiceOutput","isStatic":true,"isPublic":true}},"decoratorConfig":{"tableStrategy":"sti","api":{"include":["list","get","create","delete"]},"mcp":{"include":["list","get"]},"cli":true,"tenantScoped":{"mode":"optional"},"tableName":"contents"},"extends":"Content","extendsQualified":"@happyvertical/smrt-content:Content","exportName":"VoiceOutput","collectionExportName":"VoiceOutputCollection","displayLabelField":"name","validationRules":[{"field":"name","rule":"required","fieldType":"text"}],"schema":{"tableName":"contents","ddl":"CREATE TABLE IF NOT EXISTS \\"contents\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"type\\" TEXT,\\n \\"variant\\" TEXT,\\n \\"file_key\\" TEXT,\\n \\"author\\" TEXT,\\n \\"name\\" TEXT DEFAULT '',\\n \\"title\\" TEXT,\\n \\"description\\" TEXT,\\n \\"body\\" TEXT,\\n \\"body_format\\" TEXT,\\n \\"publish_date\\" TIMESTAMP,\\n \\"url\\" TEXT,\\n \\"source\\" TEXT,\\n \\"original_url\\" TEXT,\\n \\"language\\" TEXT,\\n \\"tags\\" JSON DEFAULT '[]',\\n \\"category\\" TEXT,\\n \\"status\\" TEXT DEFAULT 'draft',\\n \\"state\\" TEXT DEFAULT 'active',\\n \\"metadata\\" JSON DEFAULT '{}',\\n \\"thumbnail_asset_id\\" UUID,\\n \\"voice_profile_id\\" UUID,\\n \\"source_text\\" TEXT DEFAULT '',\\n \\"audio_asset_id\\" UUID,\\n \\"duration\\" INTEGER DEFAULT 0,\\n \\"word_timings\\" JSON DEFAULT '[]',\\n \\"audio_metadata\\" JSON,\\n \\"feed_source_id\\" UUID,\\n \\"source_guid\\" TEXT,\\n \\"source_name\\" TEXT,\\n \\"source_homepage_url\\" TEXT,\\n \\"external_url\\" TEXT,\\n \\"original_published_at\\" TIMESTAMP,\\n \\"dedupe_key\\" TEXT\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"type":{"type":"TEXT","notNull":false},"variant":{"type":"TEXT","notNull":false},"file_key":{"type":"TEXT","notNull":false},"author":{"type":"TEXT","notNull":false},"name":{"type":"TEXT","notNull":false,"default":""},"title":{"type":"TEXT","notNull":false},"description":{"type":"TEXT","notNull":false},"body":{"type":"TEXT","notNull":false},"body_format":{"type":"TEXT","notNull":false},"publish_date":{"type":"TIMESTAMP","notNull":false},"url":{"type":"TEXT","notNull":false},"source":{"type":"TEXT","notNull":false},"original_url":{"type":"TEXT","notNull":false},"language":{"type":"TEXT","notNull":false},"tags":{"type":"JSON","notNull":false,"default":[]},"category":{"type":"TEXT","notNull":false},"status":{"type":"TEXT","notNull":false,"default":"draft"},"state":{"type":"TEXT","notNull":false,"default":"active"},"metadata":{"type":"JSON","notNull":false,"default":{}},"thumbnail_asset_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false},"voice_profile_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"voice_profiles","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"source_text":{"type":"TEXT","notNull":false,"default":""},"audio_asset_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false},"duration":{"type":"INTEGER","notNull":false,"default":0},"word_timings":{"type":"JSON","notNull":false,"default":[]},"audio_metadata":{"type":"JSON","notNull":false},"feed_source_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false},"source_guid":{"type":"TEXT","notNull":false},"source_name":{"type":"TEXT","notNull":false},"source_homepage_url":{"type":"TEXT","notNull":false},"external_url":{"type":"TEXT","notNull":false},"original_published_at":{"type":"TIMESTAMP","notNull":false},"dedupe_key":{"type":"TEXT","notNull":false}},"indexes":[{"name":"contents_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"contents_meta_type_idx","columns":["_meta_type"]},{"name":"contents_tenant_id_publish_date_idx","columns":["tenant_id","publish_date"]},{"name":"contents_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"contents_thumbnail_asset_id_idx","columns":["thumbnail_asset_id"]},{"name":"contents_voice_profile_id_idx","columns":["voice_profile_id"]},{"name":"contents_audio_asset_id_idx","columns":["audio_asset_id"]},{"name":"contents_feed_source_id_idx","columns":["feed_source_id"]}],"version":"ee1272af"},"importPath":"@happyvertical/smrt-voice"},"@happyvertical/smrt-voice:VoiceProfile":{"name":"voiceprofile","className":"VoiceProfile","qualifiedName":"@happyvertical/smrt-voice:VoiceProfile","collection":"voiceprofiles","description":"Voice profile for AI-powered speech synthesis","filePath":"/home/runner/work/smrt/smrt/packages/voice/src/voice-profile.ts","packageName":"@happyvertical/smrt-voice","fields":{"created_at":{"type":"datetime","required":false},"updated_at":{"type":"datetime","required":false},"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"name":{"type":"text","required":false,"default":"","description":"What you call this voice, such as \\"Warm narrator\\".","_meta":{"description":"What you call this voice, such as \\"Warm narrator\\"."}},"description":{"type":"text","required":false,"description":"A note on how the voice sounds and what you use it for.","_meta":{"description":"A note on how the voice sounds and what you use it for."}},"language":{"type":"text","required":false,"default":"en-US","description":"The language the voice speaks.","_meta":{"description":"The language the voice speaks."}},"gender":{"type":"text","required":false,"default":"neutral","description":"Whether the voice sounds male, female or neutral.","_meta":{"description":"Whether the voice sounds male, female or neutral."},"enum":["male","female","neutral"]},"designPrompt":{"type":"text","required":false,"description":"Describe the voice you want in your own words, when there is no clip to copy.","_meta":{"description":"Describe the voice you want in your own words, when there is no clip to copy."}},"sampleAssetId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-assets:Asset","description":"The recorded clip the voice is copied from, when there is one. Leave it empty for a described voice.","_meta":{"description":"The recorded clip the voice is copied from, when there is one. Leave it empty for a described voice."}},"voiceData":{"type":"json","required":false,"default":{}},"defaultSpeed":{"type":"decimal","required":false,"default":1},"defaultPitch":{"type":"integer","required":false,"default":0},"status":{"type":"text","required":false,"default":"pending","description":"Where the voice stands: waiting, being prepared, ready to use, or failed. The speech service updates it.","_meta":{"description":"Where the voice stands: waiting, being prepared, ready to use, or failed. The speech service updates it."},"enum":["pending","processing","ready","failed"]},"provider":{"type":"text","required":false,"default":"qwen3-tts"},"errorMessage":{"type":"text","required":false}},"methods":{"toSpeechVoice":{"name":"toSpeechVoice","async":false,"parameters":[],"returnType":"SpeechVoice","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableStrategy":"sti","api":{"include":["list","get","create","update","delete"]},"mcp":{"include":["list","get"]},"cli":{"skipApiCheck":true},"tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context","_meta_type"]},"extends":"SmrtObject","exportName":"VoiceProfile","collectionExportName":"VoiceProfileCollection","displayLabelField":"name","schema":{"tableName":"voice_profiles","ddl":"CREATE TABLE IF NOT EXISTS \\"voice_profiles\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"name\\" TEXT DEFAULT '',\\n \\"description\\" TEXT,\\n \\"language\\" TEXT DEFAULT 'en-US',\\n \\"gender\\" TEXT DEFAULT 'neutral',\\n \\"design_prompt\\" TEXT,\\n \\"sample_asset_id\\" UUID,\\n \\"voice_data\\" JSON DEFAULT '{}',\\n \\"default_speed\\" REAL DEFAULT 1,\\n \\"default_pitch\\" INTEGER DEFAULT 0,\\n \\"status\\" TEXT DEFAULT 'pending',\\n \\"provider\\" TEXT DEFAULT 'qwen3-tts',\\n \\"error_message\\" TEXT\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"name":{"type":"TEXT","notNull":false,"default":""},"description":{"type":"TEXT","notNull":false},"language":{"type":"TEXT","notNull":false,"default":"en-US"},"gender":{"type":"TEXT","notNull":false,"default":"neutral"},"design_prompt":{"type":"TEXT","notNull":false},"sample_asset_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false},"voice_data":{"type":"JSON","notNull":false,"default":{}},"default_speed":{"type":"REAL","notNull":false,"default":1},"default_pitch":{"type":"INTEGER","notNull":false,"default":0},"status":{"type":"TEXT","notNull":false,"default":"pending"},"provider":{"type":"TEXT","notNull":false,"default":"qwen3-tts"},"error_message":{"type":"TEXT","notNull":false}},"indexes":[{"name":"voice_profiles_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"voice_profiles_meta_type_idx","columns":["_meta_type"]},{"name":"voice_profiles_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"voice_profiles_sample_asset_id_idx","columns":["sample_asset_id"]}],"version":"b3717c47"},"importPath":"@happyvertical/smrt-voice"},"@happyvertical/smrt-voice:VoiceSample":{"name":"voicesample","className":"VoiceSample","qualifiedName":"@happyvertical/smrt-voice:VoiceSample","collection":"voicesamples","description":"Audio sample for voice cloning","filePath":"/home/runner/work/smrt/smrt/packages/voice/src/voice-sample.ts","packageName":"@happyvertical/smrt-voice","fields":{"created_at":{"type":"datetime","required":false},"updated_at":{"type":"datetime","required":false},"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"voiceProfileId":{"type":"foreignKey","required":false,"related":"VoiceProfile","description":"The voice this clip belongs to.","_meta":{"description":"The voice this clip belongs to."}},"assetId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-assets:Asset","description":"The audio file of the recording.","_meta":{"description":"The audio file of the recording."}},"duration":{"type":"integer","required":false,"default":0,"description":"How long the clip runs, in seconds. At least three is needed.","_meta":{"description":"How long the clip runs, in seconds. At least three is needed."}},"transcription":{"type":"text","required":false,"description":"The words spoken in the clip, written out.","_meta":{"description":"The words spoken in the clip, written out."}},"quality":{"type":"text","required":false,"default":"medium","description":"How clean the recording is: low, medium or high. A low one cannot be used to copy a voice.","_meta":{"description":"How clean the recording is: low, medium or high. A low one cannot be used to copy a voice."},"enum":["low","medium","high"]},"sampleRate":{"type":"integer","required":false},"channels":{"type":"integer","required":false},"format":{"type":"text","required":false},"isPrimary":{"type":"boolean","required":false,"default":false,"description":"Tick the one clip that best represents the voice.","_meta":{"description":"Tick the one clip that best represents the voice."}}},"methods":{},"decoratorConfig":{"tableStrategy":"sti","api":{"include":["list","get","create","delete"]},"mcp":{"include":["list","get"]},"cli":true,"tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context","_meta_type"]},"extends":"SmrtObject","exportName":"VoiceSample","collectionExportName":"VoiceSampleCollection","schema":{"tableName":"voice_samples","ddl":"CREATE TABLE IF NOT EXISTS \\"voice_samples\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"voice_profile_id\\" UUID,\\n \\"asset_id\\" UUID,\\n \\"duration\\" INTEGER DEFAULT 0,\\n \\"transcription\\" TEXT,\\n \\"quality\\" TEXT DEFAULT 'medium',\\n \\"sample_rate\\" INTEGER,\\n \\"channels\\" INTEGER,\\n \\"format\\" TEXT,\\n \\"is_primary\\" BOOLEAN DEFAULT FALSE\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"voice_profile_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"voice_profiles","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"asset_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false},"duration":{"type":"INTEGER","notNull":false,"default":0},"transcription":{"type":"TEXT","notNull":false},"quality":{"type":"TEXT","notNull":false,"default":"medium"},"sample_rate":{"type":"INTEGER","notNull":false},"channels":{"type":"INTEGER","notNull":false},"format":{"type":"TEXT","notNull":false},"is_primary":{"type":"BOOLEAN","notNull":false,"default":false}},"indexes":[{"name":"voice_samples_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"voice_samples_meta_type_idx","columns":["_meta_type"]},{"name":"voice_samples_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"voice_samples_voice_profile_id_idx","columns":["voice_profile_id"]},{"name":"voice_samples_asset_id_idx","columns":["asset_id"]}],"version":"cbb4acc4"},"importPath":"@happyvertical/smrt-voice"}},"moduleType":"smrt","recipes":[{"id":"voice.profiles","className":"VoiceProfilesRecipe","label":"Voice","summary":"Set up the voices your app can speak in, from a description or a recorded clip, and keep the speech it generates.","synonyms":["voices","text to speech","read aloud","voice cloning","narration","speech"],"models":["@happyvertical/smrt-voice:VoiceProfile","@happyvertical/smrt-voice:VoiceSample","@happyvertical/smrt-voice:VoiceOutput"],"nav":[{"label":"Voices","model":"@happyvertical/smrt-voice:VoiceProfile","icon":"users","description":"The voices your app can speak in, described in words or copied from a clip.","noun":"voice"},{"label":"Samples","model":"@happyvertical/smrt-voice:VoiceSample","icon":"folder","description":"The recorded clips a voice is copied from.","noun":"sample"},{"label":"Generated speech","model":"@happyvertical/smrt-voice:VoiceOutput","icon":"fileText","description":"Every recording the app has read aloud, with its text.","noun":"recording"}],"requires":[],"section":{"id":"publish","label":"Publish","icon":"fileText","description":"What you write, record and put out."},"options":{"@happyvertical/smrt-voice:VoiceProfile":{"fields":{"name":{"order":1},"description":{"order":2},"language":{"order":3},"gender":{"order":4},"designPrompt":{"label":"Describe the voice","order":5},"sampleAssetId":{"label":"Sample clip","order":6},"status":{"order":7},"defaultSpeed":{"label":"Speed","visibility":"advanced"},"defaultPitch":{"label":"Pitch","visibility":"advanced"},"provider":{"label":"Speech service","visibility":"advanced"},"errorMessage":{"label":"What went wrong","visibility":"advanced"},"voiceData":{"visibility":"hidden"},"tenantId":{"visibility":"hidden"}}},"@happyvertical/smrt-voice:VoiceSample":{"fields":{"voiceProfileId":{"label":"Voice","order":1},"assetId":{"label":"Audio file","order":2},"duration":{"label":"Length in seconds","order":3},"transcription":{"label":"What is said","order":4},"quality":{"order":5},"isPrimary":{"label":"Main clip","order":6},"sampleRate":{"visibility":"advanced"},"channels":{"visibility":"advanced"},"format":{"visibility":"advanced"},"tenantId":{"visibility":"hidden"}}},"@happyvertical/smrt-voice:VoiceOutput":{"fields":{"name":{"label":"Title","order":1},"sourceText":{"label":"Text","order":2},"voiceProfileId":{"label":"Voice","order":3},"audioAssetId":{"label":"Audio file","order":4},"duration":{"label":"Length in seconds","order":5},"description":{"visibility":"advanced"},"author":{"visibility":"advanced"},"publish_date":{"label":"Date","visibility":"advanced"},"language":{"visibility":"advanced"},"wordTimings":{"visibility":"hidden"},"audioMetadata":{"visibility":"hidden"},"type":{"visibility":"hidden"},"variant":{"visibility":"hidden"},"fileKey":{"visibility":"hidden"},"body":{"visibility":"hidden"},"bodyFormat":{"visibility":"hidden"},"url":{"visibility":"hidden"},"source":{"visibility":"hidden"},"original_url":{"visibility":"hidden"},"tags":{"visibility":"hidden"},"category":{"visibility":"hidden"},"status":{"visibility":"hidden"},"state":{"visibility":"hidden"},"metadata":{"visibility":"hidden"},"thumbnailAssetId":{"visibility":"hidden"},"tenantId":{"visibility":"hidden"}}}},"help":{"markdown":"## Overview\\n\\nVoice is where you set up the voices your app can speak in and keep the speech\\nit has read aloud. A voice is either described in your own words, such as \\"a\\nwarm, unhurried narrator\\", or copied from a recorded clip of a real person. The\\nspeech service prepares the voice and shows where it stands, from waiting to\\nready. Once a voice is ready, the app can read any text aloud in it, and each\\nrecording it makes is kept here with the text it came from.\\n\\n## Tasks\\n\\n### Create a voice\\n\\n1. Open the list of voices and choose **New**.\\n2. Give the voice a **{field:VoiceProfile.name}** your team will recognise.\\n3. Pick the **{field:VoiceProfile.language}** it speaks and, if you like, the **{field:VoiceProfile.gender}** it should sound like.\\n4. Do one of the following, not both: write what you want to hear in **{field:VoiceProfile.designPrompt}**, or pick a recorded clip in **{field:VoiceProfile.sampleAssetId}** to copy a real voice.\\n5. Save. The **{field:VoiceProfile.status}** shows whether the speech service is still preparing the voice, has it ready, or could not make it. You do not set it yourself.\\n\\n### Add a sample clip\\n\\nA clip can only be used to copy a voice when it runs at least three seconds and\\nits quality is not low. One clear speaker with no background noise works best.\\n\\n1. Open the list of samples and choose **New**.\\n2. Pick the **{field:VoiceSample.voiceProfileId}** the clip is for and the **{field:VoiceSample.assetId}** holding the recording.\\n3. Enter the **{field:VoiceSample.duration}** and, if you know it, the **{field:VoiceSample.quality}** of the recording.\\n4. Write out **{field:VoiceSample.transcription}** so the words can be matched to the sound.\\n5. Tick **{field:VoiceSample.isPrimary}** on the clip that best represents the voice.\\n6. Save. To take a clip out, open it and remove it.\\n\\n### Find a recording the app has made\\n\\nRecordings are made by the speech service whenever the app reads text aloud in\\none of your voices. The sound itself always comes from the service; here you\\nfind, listen to and tidy up what it has made.\\n\\n1. Open the list of generated speech.\\n2. Look at the **{field:VoiceOutput.name}** and the **{field:VoiceOutput.voiceProfileId}** to find the one you want.\\n3. Open it to read the **{field:VoiceOutput.sourceText}** and play the **{field:VoiceOutput.audioAssetId}**; the **{field:VoiceOutput.duration}** tells you how long it runs.\\n4. To clear out a recording you no longer need, open it and remove it.\\n","fieldRefs":["VoiceOutput.audioAssetId","VoiceOutput.duration","VoiceOutput.name","VoiceOutput.sourceText","VoiceOutput.voiceProfileId","VoiceProfile.designPrompt","VoiceProfile.gender","VoiceProfile.language","VoiceProfile.name","VoiceProfile.sampleAssetId","VoiceProfile.status","VoiceSample.assetId","VoiceSample.duration","VoiceSample.isPrimary","VoiceSample.quality","VoiceSample.transcription","VoiceSample.voiceProfileId"]},"demo":{"mode":"server","reasons":["Needs a server because its package does not build for a browser: documents/spider SDK graph; CJS parse error; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-chat, @happyvertical/smrt-content, @happyvertical/smrt-images, @happyvertical/smrt-jobs, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3617, #3624, #3625, #3626, #3627, #3628)."]}}],"smrtDependencies":["@happyvertical/smrt-assets","@happyvertical/smrt-content","@happyvertical/smrt-core","@happyvertical/smrt-tenancy"],"browser":{"status":"server-only","issues":["#3615","#3617","#3624","#3625","#3626","#3627","#3628"],"reason":"documents/spider SDK graph; CJS parse error","via":["@happyvertical/smrt-agents","@happyvertical/smrt-chat","@happyvertical/smrt-content","@happyvertical/smrt-images","@happyvertical/smrt-jobs","@happyvertical/smrt-profiles","@happyvertical/smrt-reports","@happyvertical/smrt-secrets","@happyvertical/smrt-tenancy","@happyvertical/smrt-users"]},"stampsConstructors":true}`));
6
6
  //#endregion
7
7
  //#region src/voice-profile.ts
8
8
  var __defProp$2 = Object.defineProperty;
@@ -22,26 +22,10 @@ var __decorateClass$2 = (decorators, target, key, kind) => {
22
22
  var __publicField$2 = (obj, key, value) => __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
23
23
  var VoiceProfile = class extends SmrtObject {
24
24
  tenantId = null;
25
- /**
26
- * Human-readable name for the voice profile
27
- */
28
25
  name = "";
29
- /**
30
- * Description of the voice characteristics
31
- */
32
26
  description = null;
33
- /**
34
- * ISO language code (e.g., 'en-US', 'zh-CN')
35
- */
36
27
  language = "en-US";
37
- /**
38
- * Voice gender classification
39
- */
40
28
  gender = "neutral";
41
- /**
42
- * Natural language description for voice design
43
- * Used when creating a voice from scratch via AI
44
- */
45
29
  designPrompt = null;
46
30
  sampleAssetId = null;
47
31
  /**
@@ -59,13 +43,6 @@ var VoiceProfile = class extends SmrtObject {
59
43
  * 0 = no adjustment
60
44
  */
61
45
  defaultPitch = 0;
62
- /**
63
- * Voice profile status
64
- * - pending: Profile created but voice not yet generated
65
- * - processing: Voice generation/cloning in progress
66
- * - ready: Voice is ready for use
67
- * - failed: Voice generation failed
68
- */
69
46
  status = "pending";
70
47
  /**
71
48
  * TTS provider that created/manages this voice
@@ -140,7 +117,13 @@ var VoiceProfile = class extends SmrtObject {
140
117
  };
141
118
  __publicField$2(VoiceProfile, "__smrtPackage__", "@happyvertical/smrt-voice");
142
119
  __decorateClass$2([tenantId({ nullable: true })], VoiceProfile.prototype, "tenantId", 2);
143
- __decorateClass$2([crossPackageRef("@happyvertical/smrt-assets:Asset")], VoiceProfile.prototype, "sampleAssetId", 2);
120
+ __decorateClass$2([field({ description: "What you call this voice, such as \"Warm narrator\"." })], VoiceProfile.prototype, "name", 2);
121
+ __decorateClass$2([field({ description: "A note on how the voice sounds and what you use it for." })], VoiceProfile.prototype, "description", 2);
122
+ __decorateClass$2([field({ description: "The language the voice speaks." })], VoiceProfile.prototype, "language", 2);
123
+ __decorateClass$2([field({ description: "Whether the voice sounds male, female or neutral." })], VoiceProfile.prototype, "gender", 2);
124
+ __decorateClass$2([field({ description: "Describe the voice you want in your own words, when there is no clip to copy." })], VoiceProfile.prototype, "designPrompt", 2);
125
+ __decorateClass$2([field({ description: "The recorded clip the voice is copied from, when there is one. Leave it empty for a described voice." }), crossPackageRef("@happyvertical/smrt-assets:Asset")], VoiceProfile.prototype, "sampleAssetId", 2);
126
+ __decorateClass$2([field({ description: "Where the voice stands: waiting, being prepared, ready to use, or failed. The speech service updates it." })], VoiceProfile.prototype, "status", 2);
144
127
  VoiceProfile = __decorateClass$2([TenantScoped({ mode: "optional" }), smrt({
145
128
  tableStrategy: "sti",
146
129
  api: { include: [
@@ -178,14 +161,8 @@ var __decorateClass$1 = (decorators, target, key, kind) => {
178
161
  var __publicField$1 = (obj, key, value) => __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
179
162
  var VoiceOutput = class extends Content {
180
163
  voiceProfileId = null;
181
- /**
182
- * Original text that was synthesized
183
- */
184
164
  sourceText = "";
185
165
  audioAssetId = null;
186
- /**
187
- * Duration of the generated audio in seconds
188
- */
189
166
  duration = 0;
190
167
  /**
191
168
  * Word-level timing information for lip-sync alignment
@@ -253,8 +230,10 @@ var VoiceOutput = class extends Content {
253
230
  }
254
231
  };
255
232
  __publicField$1(VoiceOutput, "__smrtPackage__", "@happyvertical/smrt-voice");
256
- __decorateClass$1([foreignKey(() => VoiceProfile)], VoiceOutput.prototype, "voiceProfileId", 2);
257
- __decorateClass$1([crossPackageRef("@happyvertical/smrt-assets:Asset")], VoiceOutput.prototype, "audioAssetId", 2);
233
+ __decorateClass$1([field({ description: "The voice that read the text." }), foreignKey(() => VoiceProfile)], VoiceOutput.prototype, "voiceProfileId", 2);
234
+ __decorateClass$1([field({ description: "The text that was read aloud." })], VoiceOutput.prototype, "sourceText", 2);
235
+ __decorateClass$1([field({ description: "The audio file of the recording." }), crossPackageRef("@happyvertical/smrt-assets:Asset")], VoiceOutput.prototype, "audioAssetId", 2);
236
+ __decorateClass$1([field({ description: "How long the recording runs, in seconds." })], VoiceOutput.prototype, "duration", 2);
258
237
  VoiceOutput = __decorateClass$1([TenantScoped({ mode: "optional" }), smrt({
259
238
  tableStrategy: "sti",
260
239
  api: { include: [
@@ -313,21 +292,8 @@ var VoiceSample = class extends SmrtObject {
313
292
  tenantId = null;
314
293
  voiceProfileId = null;
315
294
  assetId = null;
316
- /**
317
- * Sample duration in seconds
318
- */
319
295
  duration = 0;
320
- /**
321
- * Transcription of what was said in the sample
322
- * Used for alignment and quality verification
323
- */
324
296
  transcription = null;
325
- /**
326
- * Quality rating based on audio analysis
327
- * - low: Noisy or short samples
328
- * - medium: Acceptable quality
329
- * - high: Clear audio, good length
330
- */
331
297
  quality = "medium";
332
298
  /**
333
299
  * Sample rate in Hz
@@ -341,9 +307,6 @@ var VoiceSample = class extends SmrtObject {
341
307
  * Audio format
342
308
  */
343
309
  format = null;
344
- /**
345
- * Whether this is the primary sample for the voice profile
346
- */
347
310
  isPrimary = false;
348
311
  constructor(options = {}) {
349
312
  super(options);
@@ -373,8 +336,12 @@ var VoiceSample = class extends SmrtObject {
373
336
  };
374
337
  __publicField(VoiceSample, "__smrtPackage__", "@happyvertical/smrt-voice");
375
338
  __decorateClass([tenantId({ nullable: true })], VoiceSample.prototype, "tenantId", 2);
376
- __decorateClass([foreignKey(() => VoiceProfile)], VoiceSample.prototype, "voiceProfileId", 2);
377
- __decorateClass([crossPackageRef("@happyvertical/smrt-assets:Asset")], VoiceSample.prototype, "assetId", 2);
339
+ __decorateClass([field({ description: "The voice this clip belongs to." }), foreignKey(() => VoiceProfile)], VoiceSample.prototype, "voiceProfileId", 2);
340
+ __decorateClass([field({ description: "The audio file of the recording." }), crossPackageRef("@happyvertical/smrt-assets:Asset")], VoiceSample.prototype, "assetId", 2);
341
+ __decorateClass([field({ description: "How long the clip runs, in seconds. At least three is needed." })], VoiceSample.prototype, "duration", 2);
342
+ __decorateClass([field({ description: "The words spoken in the clip, written out." })], VoiceSample.prototype, "transcription", 2);
343
+ __decorateClass([field({ description: "How clean the recording is: low, medium or high. A low one cannot be used to copy a voice." })], VoiceSample.prototype, "quality", 2);
344
+ __decorateClass([field({ description: "Tick the one clip that best represents the voice." })], VoiceSample.prototype, "isPrimary", 2);
378
345
  VoiceSample = __decorateClass([TenantScoped({ mode: "optional" }), smrt({
379
346
  tableStrategy: "sti",
380
347
  api: { include: [
@@ -387,6 +354,164 @@ VoiceSample = __decorateClass([TenantScoped({ mode: "optional" }), smrt({
387
354
  cli: true
388
355
  })], VoiceSample);
389
356
  //#endregion
390
- export { VoiceOutput, VoiceProfile, VoiceSample, metadataFromSynthesizedSpeech, wordTimingsFromSpeech };
357
+ //#region src/recipes.ts
358
+ var VoiceProfilesRecipe = class extends SmrtRecipe {
359
+ static id = "voice.profiles";
360
+ static help = "./profiles.recipe.md";
361
+ static label = "Voice";
362
+ static summary = "Set up the voices your app can speak in, from a description or a recorded clip, and keep the speech it generates.";
363
+ static synonyms = [
364
+ "voices",
365
+ "text to speech",
366
+ "read aloud",
367
+ "voice cloning",
368
+ "narration",
369
+ "speech"
370
+ ];
371
+ static section = {
372
+ id: "publish",
373
+ label: "Publish",
374
+ icon: "fileText",
375
+ description: "What you write, record and put out."
376
+ };
377
+ static models = [
378
+ VoiceProfile,
379
+ VoiceSample,
380
+ VoiceOutput
381
+ ];
382
+ static nav = [
383
+ {
384
+ label: "Voices",
385
+ model: VoiceProfile,
386
+ icon: "users",
387
+ description: "The voices your app can speak in, described in words or copied from a clip.",
388
+ noun: "voice"
389
+ },
390
+ {
391
+ label: "Samples",
392
+ model: VoiceSample,
393
+ icon: "folder",
394
+ description: "The recorded clips a voice is copied from.",
395
+ noun: "sample"
396
+ },
397
+ {
398
+ label: "Generated speech",
399
+ model: VoiceOutput,
400
+ icon: "fileText",
401
+ description: "Every recording the app has read aloud, with its text.",
402
+ noun: "recording"
403
+ }
404
+ ];
405
+ static options = {
406
+ VoiceProfile: { fields: {
407
+ name: { order: 1 },
408
+ description: { order: 2 },
409
+ language: { order: 3 },
410
+ gender: { order: 4 },
411
+ designPrompt: {
412
+ label: "Describe the voice",
413
+ order: 5
414
+ },
415
+ sampleAssetId: {
416
+ label: "Sample clip",
417
+ order: 6
418
+ },
419
+ status: { order: 7 },
420
+ defaultSpeed: {
421
+ label: "Speed",
422
+ visibility: "advanced"
423
+ },
424
+ defaultPitch: {
425
+ label: "Pitch",
426
+ visibility: "advanced"
427
+ },
428
+ provider: {
429
+ label: "Speech service",
430
+ visibility: "advanced"
431
+ },
432
+ errorMessage: {
433
+ label: "What went wrong",
434
+ visibility: "advanced"
435
+ },
436
+ voiceData: { visibility: "hidden" },
437
+ tenantId: { visibility: "hidden" }
438
+ } },
439
+ VoiceSample: { fields: {
440
+ voiceProfileId: {
441
+ label: "Voice",
442
+ order: 1
443
+ },
444
+ assetId: {
445
+ label: "Audio file",
446
+ order: 2
447
+ },
448
+ duration: {
449
+ label: "Length in seconds",
450
+ order: 3
451
+ },
452
+ transcription: {
453
+ label: "What is said",
454
+ order: 4
455
+ },
456
+ quality: { order: 5 },
457
+ isPrimary: {
458
+ label: "Main clip",
459
+ order: 6
460
+ },
461
+ sampleRate: { visibility: "advanced" },
462
+ channels: { visibility: "advanced" },
463
+ format: { visibility: "advanced" },
464
+ tenantId: { visibility: "hidden" }
465
+ } },
466
+ VoiceOutput: { fields: {
467
+ name: {
468
+ label: "Title",
469
+ order: 1
470
+ },
471
+ sourceText: {
472
+ label: "Text",
473
+ order: 2
474
+ },
475
+ voiceProfileId: {
476
+ label: "Voice",
477
+ order: 3
478
+ },
479
+ audioAssetId: {
480
+ label: "Audio file",
481
+ order: 4
482
+ },
483
+ duration: {
484
+ label: "Length in seconds",
485
+ order: 5
486
+ },
487
+ description: { visibility: "advanced" },
488
+ author: { visibility: "advanced" },
489
+ publish_date: {
490
+ label: "Date",
491
+ visibility: "advanced"
492
+ },
493
+ language: { visibility: "advanced" },
494
+ wordTimings: { visibility: "hidden" },
495
+ audioMetadata: { visibility: "hidden" },
496
+ type: { visibility: "hidden" },
497
+ variant: { visibility: "hidden" },
498
+ fileKey: { visibility: "hidden" },
499
+ body: { visibility: "hidden" },
500
+ bodyFormat: { visibility: "hidden" },
501
+ url: { visibility: "hidden" },
502
+ source: { visibility: "hidden" },
503
+ original_url: { visibility: "hidden" },
504
+ tags: { visibility: "hidden" },
505
+ category: { visibility: "hidden" },
506
+ status: { visibility: "hidden" },
507
+ state: { visibility: "hidden" },
508
+ metadata: { visibility: "hidden" },
509
+ thumbnailAssetId: { visibility: "hidden" },
510
+ tenantId: { visibility: "hidden" }
511
+ } }
512
+ };
513
+ };
514
+ //#endregion
515
+ export { VoiceOutput, VoiceProfile, VoiceProfilesRecipe, VoiceSample, metadataFromSynthesizedSpeech, wordTimingsFromSpeech };
391
516
 
392
517
  //# sourceMappingURL=index.js.map