@aura3d/cli 1.0.10 → 1.3.0

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/dist/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
- export { cartoonCliAssetProfiles, getCartoonAssetProfileDefinition } from "./cartoon-asset-profiles.js";
2
- export type { AuraCliCartoonAssetProfile, AuraCliCartoonAssetProfileDefinition } from "./cartoon-asset-profiles.js";
1
+ export { animationCliAssetProfiles, getAnimationAssetProfileDefinition } from "./animation-asset-profiles.js";
2
+ export { validateAnimationAssets, parseAnimationClipMap, DEFAULT_ANIMATION_ACTIONS } from "./animation-asset-validator.js";
3
+ export type { AnimationAssetValidationOptions, AnimationAssetValidationReport } from "./animation-asset-validator.js";
4
+ export type { AuraCliAnimationAssetProfile, AuraCliAnimationAssetProfileDefinition } from "./animation-asset-profiles.js";
3
5
  export type AuraCliAssetType = "model" | "texture" | "environment" | "audio";
4
6
  export type AuraCliHumanoidStatus = "humanoid" | "non-humanoid" | "unknown";
5
7
  export type AuraCliHumanoidConfidence = "high" | "medium" | "low";
@@ -79,6 +81,10 @@ export interface AuraCliAssetProvenance {
79
81
  readonly author?: string;
80
82
  readonly sourceFamily?: string;
81
83
  readonly attribution?: string;
84
+ /** sha256 of the downloaded bytes (provenance for pulled catalog assets). */
85
+ readonly sha256?: string;
86
+ /** ISO timestamp the asset was retrieved from its source (injectable). */
87
+ readonly retrievedAt?: string;
82
88
  readonly evidence?: readonly string[];
83
89
  readonly checkedAt: string;
84
90
  }
@@ -129,6 +135,13 @@ export interface AddAssetOptions {
129
135
  readonly author?: string;
130
136
  readonly sourceFamily?: string;
131
137
  readonly attribution?: string;
138
+ /** sha256 of the retrieved bytes, captured by the pull/resolve flow. */
139
+ readonly sha256?: string;
140
+ /**
141
+ * ISO timestamp the asset was retrieved. Injectable so deterministic builds can
142
+ * pin it; when omitted, provenance falls back to wall-clock `checkedAt`.
143
+ */
144
+ readonly retrievedAt?: string;
132
145
  }
133
146
  export interface AssetCliResult {
134
147
  readonly ok: boolean;
@@ -147,13 +160,14 @@ export interface AssetValidationOptions {
147
160
  readonly provenanceFile?: string;
148
161
  readonly assetIds?: readonly string[];
149
162
  }
150
- export type AuraAssetReadinessProfile = "game" | "cartoon";
163
+ export type AuraAssetReadinessProfile = "game" | "animation";
151
164
  export type AuraGameAssetReadinessProfile = "fighting-character";
152
165
  export type AuraAssetReadinessStatus = "passed" | "failed";
153
166
  export interface AssetReadinessOptions {
154
167
  readonly projectDir?: string;
155
168
  readonly output?: string;
156
169
  readonly gameProfile?: AuraGameAssetReadinessProfile;
170
+ readonly episode?: boolean;
157
171
  readonly noPlaceholders?: boolean;
158
172
  readonly requireLicense?: boolean;
159
173
  readonly provenanceFile?: string;
@@ -170,6 +184,7 @@ export interface AssetReadinessReport {
170
184
  readonly manifestPath: string;
171
185
  readonly artifacts: AssetReadinessArtifacts;
172
186
  readonly contracts: readonly AssetReadinessValidationContract[];
187
+ readonly animationEpisode?: AnimationEpisodeReadinessReport;
173
188
  readonly summary: {
174
189
  readonly totalAssets: number;
175
190
  readonly modelAssets: number;
@@ -179,6 +194,12 @@ export interface AssetReadinessReport {
179
194
  readonly environmentAssets: number;
180
195
  readonly animationClips: number;
181
196
  readonly humanoidModels: number;
197
+ readonly animationCharacters?: number;
198
+ readonly animationSets?: number;
199
+ readonly animationProps?: number;
200
+ readonly episodeReadyCharacters?: number;
201
+ readonly mouthReadyCharacters?: number;
202
+ readonly animationReadyCharacters?: number;
182
203
  readonly profileTargetAssets?: number;
183
204
  readonly profileReadyAssets?: number;
184
205
  readonly profileSkippedAssets?: number;
@@ -188,9 +209,48 @@ export interface AssetReadinessReport {
188
209
  readonly warnings: readonly string[];
189
210
  readonly messages: readonly string[];
190
211
  }
212
+ export type AnimationEpisodeAssetRole = "character" | "set" | "prop" | "environment" | "audio" | "texture" | "unknown";
213
+ export type AnimationEpisodeMouthReadinessMode = "blendshape-lip-sync" | "primitive-mouth-card" | "amplitude-only" | "missing-mouth-motion";
214
+ export interface AnimationEpisodeAssetReadiness {
215
+ readonly id: string;
216
+ readonly role: AnimationEpisodeAssetRole;
217
+ readonly episodeReady: boolean;
218
+ readonly distinctHash?: string;
219
+ readonly licenseVerified: boolean;
220
+ readonly provenanceReady: boolean;
221
+ readonly placeholderFree: boolean;
222
+ readonly animationReady: boolean;
223
+ readonly mouthReady: boolean;
224
+ readonly mouthMode?: AnimationEpisodeMouthReadinessMode;
225
+ readonly setReady?: boolean;
226
+ readonly warnings: readonly string[];
227
+ readonly failures: readonly string[];
228
+ }
229
+ export interface AnimationEpisodeReadinessReport {
230
+ readonly enabled: boolean;
231
+ readonly ok: boolean;
232
+ readonly mode: "episode-ready";
233
+ readonly requirements: {
234
+ readonly minDistinctCharacters: number;
235
+ readonly minSets: number;
236
+ readonly requireLicense: boolean;
237
+ readonly noPlaceholders: boolean;
238
+ readonly requireAnimation: boolean;
239
+ readonly requireMouthMotion: boolean;
240
+ readonly requireSetScale: boolean;
241
+ };
242
+ readonly selectedCharacters: readonly string[];
243
+ readonly selectedSets: readonly string[];
244
+ readonly selectedProps: readonly string[];
245
+ readonly selectedAudio: readonly string[];
246
+ readonly readiness: readonly AnimationEpisodeAssetReadiness[];
247
+ readonly assetProvenanceArtifact: string;
248
+ readonly failures: readonly string[];
249
+ readonly warnings: readonly string[];
250
+ }
191
251
  export interface AssetReadinessValidatorEvidence {
192
- readonly id: "aura-clash-game-assets" | "aura-voice-cartoon-assets";
193
- readonly command: "assets validate-game" | "assets validate-cartoon";
252
+ readonly id: "aura-clash-game-assets" | "aura-voice-animation-assets";
253
+ readonly command: "assets validate-game" | "assets validate-animation";
194
254
  readonly label: string;
195
255
  }
196
256
  export interface AssetReadinessValidationContract {
@@ -198,7 +258,7 @@ export interface AssetReadinessValidationContract {
198
258
  readonly label: string;
199
259
  readonly profile: AuraAssetReadinessProfile;
200
260
  readonly sourceFamily?: "Quaternius" | "AuraVoice" | "custom";
201
- readonly intendedUse?: "fighter" | "cartoon-character" | "set" | "prop";
261
+ readonly intendedUse?: "fighter" | "animation-character" | "set" | "prop";
202
262
  readonly sourceOnly: boolean;
203
263
  readonly requiredChecks: readonly string[];
204
264
  readonly requiredAnimationClips?: readonly string[];
@@ -236,6 +296,7 @@ export interface AssetReadinessAssetReport {
236
296
  readonly source: string;
237
297
  readonly outputPath: string;
238
298
  readonly url: string;
299
+ readonly hash: string;
239
300
  readonly sizeBytes: number;
240
301
  readonly bounds?: readonly [number, number, number];
241
302
  readonly boundsMetadata?: AuraCliAssetBoundsInspection;
@@ -255,7 +316,7 @@ export interface AssetReadinessAssetReport {
255
316
  readonly nodeNames?: readonly string[];
256
317
  readonly artifactPaths: AssetReadinessAssetArtifacts;
257
318
  readonly gameReady: boolean;
258
- readonly cartoonReady: boolean;
319
+ readonly animationReady: boolean;
259
320
  readonly profileTarget?: boolean;
260
321
  readonly profileReady?: boolean;
261
322
  readonly profileSkippedReason?: string;
@@ -355,7 +416,7 @@ export declare function checkDeploy(options?: {
355
416
  readonly distDir?: string;
356
417
  }): AssetValidationResult;
357
418
  export declare function validateGameAssets(options?: AssetReadinessOptions): AssetReadinessReport;
358
- export declare function validateCartoonAssets(options?: AssetReadinessOptions): AssetReadinessReport;
419
+ export declare function validateAnimationStudioAssets(options?: AssetReadinessOptions): AssetReadinessReport;
359
420
  export declare function createCharacterAssemblyPlan(options: CharacterAssemblyPlanOptions): CharacterAssemblyPlanResult;
360
421
  export declare function initAgentFiles(options: {
361
422
  readonly projectDir?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/aura3d-cli/src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/aura3d-cli/src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import { copyFileSync, existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from "node:fs";
2
2
  import { createHash } from "node:crypto";
3
3
  import { dirname, extname, join, relative, resolve } from "node:path";
4
- export { cartoonCliAssetProfiles, getCartoonAssetProfileDefinition } from "./cartoon-asset-profiles.js";
4
+ export { animationCliAssetProfiles, getAnimationAssetProfileDefinition } from "./animation-asset-profiles.js";
5
+ export { validateAnimationAssets, parseAnimationClipMap, DEFAULT_ANIMATION_ACTIONS } from "./animation-asset-validator.js";
5
6
  export const DEFAULT_AURA_ASSET_MANIFEST = "aura.assets.json";
6
7
  export const DEFAULT_AURA_ASSET_OUTPUT_DIR = "public/aura-assets";
7
8
  export const DEFAULT_AURA_ASSET_PUBLIC_PATH = "/aura-assets/";
@@ -14,6 +15,9 @@ export function addAsset(options) {
14
15
  }
15
16
  const manifestPath = resolve(projectDir, DEFAULT_AURA_ASSET_MANIFEST);
16
17
  const current = readAssetManifest(projectDir);
18
+ // Re-adding (e.g. resolve overwriting) must not silently drop hand-authored
19
+ // provenance the new add does not re-supply (license/attribution/author/etc.).
20
+ const existing = current.assets.find((asset) => asset.id === options.name);
17
21
  const outputDir = normalizeRelativePath(options.outputDir ?? current.outputDir ?? DEFAULT_AURA_ASSET_OUTPUT_DIR);
18
22
  const publicPath = normalizePublicPath(options.publicPath ?? current.assetBasePath ?? DEFAULT_AURA_ASSET_PUBLIC_PATH);
19
23
  const typegen = normalizeRelativePath(options.typegen ?? current.typegen ?? DEFAULT_AURA_ASSET_TYPEGEN);
@@ -47,7 +51,7 @@ export function addAsset(options) {
47
51
  humanoid: inspection.humanoid,
48
52
  skeleton: inspection.skeleton,
49
53
  morphTargets: inspection.morphTargets,
50
- provenance: createAssetProvenance(projectDir, sourcePath, options, inspection.provenance),
54
+ provenance: createAssetProvenance(projectDir, sourcePath, options, mergeDetectedProvenance(existing?.provenance, inspection.provenance)),
51
55
  textures: inspection.textures,
52
56
  dependencies: inspection.dependencies,
53
57
  orientation: inspection.orientation,
@@ -305,8 +309,8 @@ export function checkDeploy(options = {}) {
305
309
  export function validateGameAssets(options = {}) {
306
310
  return validateAssetReadiness("game", options);
307
311
  }
308
- export function validateCartoonAssets(options = {}) {
309
- return validateAssetReadiness("cartoon", options);
312
+ export function validateAnimationStudioAssets(options = {}) {
313
+ return validateAssetReadiness("animation", options);
310
314
  }
311
315
  export function createCharacterAssemblyPlan(options) {
312
316
  const projectDir = resolve(options.projectDir ?? process.cwd());
@@ -468,7 +472,7 @@ function validateAssetReadiness(profile, options) {
468
472
  pushUnique(warnings, [...readinessIssues.warnings, ...profileIssues.warnings]);
469
473
  const gameReady = asset.type === "model" && Boolean(asset.bounds) && asset.materials.length > 0 && asset.sizeBytes <= 50 * 1024 * 1024 && readinessIssues.failures.length === 0 && profileIssues.failures.length === 0;
470
474
  const profileReady = profileTarget && gameReady;
471
- const cartoonReady = asset.type === "model"
475
+ const animationReady = asset.type === "model"
472
476
  ? Boolean(asset.bounds) && (asset.animations.length > 0 || /prop|set|stage|background|environment/i.test(asset.id))
473
477
  : asset.type === "audio" || asset.type === "texture";
474
478
  const artifactPaths = artifacts.assetFiles.find((entry) => entry.id === asset.id) ?? createReadinessAssetArtifacts(projectDir, manifest, asset);
@@ -479,6 +483,7 @@ function validateAssetReadiness(profile, options) {
479
483
  source: asset.source,
480
484
  outputPath: asset.outputPath,
481
485
  url: asset.url,
486
+ hash: asset.hash,
482
487
  sizeBytes: asset.sizeBytes,
483
488
  bounds: asset.bounds,
484
489
  boundsMetadata: asset.boundsMetadata,
@@ -498,7 +503,7 @@ function validateAssetReadiness(profile, options) {
498
503
  nodeNames: asset.nodeNames,
499
504
  artifactPaths,
500
505
  gameReady,
501
- cartoonReady,
506
+ animationReady,
502
507
  ...(gameProfile === "fighting-character" ? { profileTarget, profileReady, ...(profileSkippedReason ? { profileSkippedReason } : {}) } : {}),
503
508
  warnings: assetWarnings
504
509
  };
@@ -543,18 +548,25 @@ function validateAssetReadiness(profile, options) {
543
548
  }
544
549
  else {
545
550
  if (modelAssets.length === 0)
546
- failures.push("Cartoon readiness requires at least one typed model/set/prop GLB or GLTF.");
551
+ failures.push("Animation readiness requires at least one typed model/set/prop GLB or GLTF.");
547
552
  if (animatedModels.length === 0)
548
553
  warnings.push("No animated character clips detected. Prompt-to-episode output can use transform animation, but character acting needs skeletal or pose clips.");
549
554
  if (animatedModels.length > 0 && humanoidModels === 0)
550
- warnings.push("No humanoid model metadata detected. Acting-heavy cartoon routes should confirm character rigs with assets inspect --humanoid.");
555
+ warnings.push("No humanoid model metadata detected. Acting-heavy animation routes should confirm character rigs with assets inspect --humanoid.");
551
556
  const audioAssets = manifest.assets.filter((asset) => asset.type === "audio");
552
557
  if (audioAssets.length === 0)
553
558
  warnings.push("No audio assets detected. AuraVoice bridge can still reference external narration manifests, but local episode proof is stronger with audio registered.");
554
559
  }
560
+ const animationEpisode = profile === "animation"
561
+ ? createAnimationEpisodeReadinessReport(manifest, assets, options)
562
+ : undefined;
563
+ if (animationEpisode && options.episode) {
564
+ pushUnique(failures, animationEpisode.failures);
565
+ pushUnique(warnings, animationEpisode.warnings);
566
+ }
555
567
  const ok = failures.length === 0;
556
568
  const baseMessage = ok
557
- ? `${profile === "game" ? "Game" : "Cartoon"} asset readiness report completed.`
569
+ ? `${profile === "game" ? "Game" : "Animation"} asset readiness report completed.`
558
570
  : failures;
559
571
  const messages = [
560
572
  ...(Array.isArray(baseMessage) ? baseMessage : [baseMessage]),
@@ -571,6 +583,7 @@ function validateAssetReadiness(profile, options) {
571
583
  manifestPath,
572
584
  artifacts,
573
585
  contracts: createReadinessValidationContracts(profile),
586
+ ...(animationEpisode ? { animationEpisode } : {}),
574
587
  summary: {
575
588
  totalAssets: manifest.assets.length,
576
589
  modelAssets: modelAssets.length,
@@ -580,6 +593,16 @@ function validateAssetReadiness(profile, options) {
580
593
  environmentAssets: manifest.assets.filter((asset) => asset.type === "environment").length,
581
594
  animationClips,
582
595
  humanoidModels,
596
+ ...(animationEpisode
597
+ ? {
598
+ animationCharacters: animationEpisode.selectedCharacters.length,
599
+ animationSets: animationEpisode.selectedSets.length,
600
+ animationProps: animationEpisode.selectedProps.length,
601
+ episodeReadyCharacters: animationEpisode.readiness.filter((entry) => entry.role === "character" && entry.episodeReady).length,
602
+ mouthReadyCharacters: animationEpisode.readiness.filter((entry) => entry.role === "character" && entry.mouthReady).length,
603
+ animationReadyCharacters: animationEpisode.readiness.filter((entry) => entry.role === "character" && entry.animationReady).length
604
+ }
605
+ : {}),
583
606
  ...(gameProfile === "fighting-character"
584
607
  ? {
585
608
  profileTargetAssets: profileTargetAssets.length,
@@ -641,9 +664,9 @@ function createReadinessValidatorEvidence(profile) {
641
664
  label: "AuraClash game asset validator"
642
665
  }
643
666
  : {
644
- id: "aura-voice-cartoon-assets",
645
- command: "assets validate-cartoon",
646
- label: "AuraVoice cartoon asset validator"
667
+ id: "aura-voice-animation-assets",
668
+ command: "assets validate-animation",
669
+ label: "AuraVoice animation asset validator"
647
670
  };
648
671
  }
649
672
  function createReadinessValidationContracts(profile) {
@@ -675,11 +698,11 @@ function createReadinessValidationContracts(profile) {
675
698
  }
676
699
  return [
677
700
  {
678
- id: "auravoice-cartoon-character-asset-validation-contract",
679
- label: "AuraVoice cartoon asset validation contract",
680
- profile: "cartoon",
701
+ id: "auravoice-animation-character-asset-validation-contract",
702
+ label: "AuraVoice animation asset validation contract",
703
+ profile: "animation",
681
704
  sourceFamily: "AuraVoice",
682
- intendedUse: "cartoon-character",
705
+ intendedUse: "animation-character",
683
706
  sourceOnly: true,
684
707
  requiredChecks: [
685
708
  "typed Aura model, texture, audio, or environment asset entry",
@@ -687,7 +710,7 @@ function createReadinessValidationContracts(profile) {
687
710
  "animation or transform-ready character metadata",
688
711
  "audio or external AuraVoice manifest references for stronger episode proof"
689
712
  ],
690
- evidenceBoundary: "This CLI contract is source-only. It does not prove cartoon route readiness until validate-cartoon output, rendered frames, timing proof, and AuraVoice evidence are archived."
713
+ evidenceBoundary: "This CLI contract is source-only. It does not prove animation route readiness until validate-animation output, rendered frames, timing proof, and AuraVoice evidence are archived."
691
714
  }
692
715
  ];
693
716
  }
@@ -725,6 +748,198 @@ function createReadinessAnimationMetadata(animations) {
725
748
  clips: animations.map((name, index) => ({ index, name }))
726
749
  };
727
750
  }
751
+ function createAnimationEpisodeReadinessReport(manifest, assets, options) {
752
+ const readiness = assets.map(createAnimationEpisodeAssetReadiness);
753
+ const characters = readiness.filter((entry) => entry.role === "character");
754
+ const sets = readiness.filter((entry) => entry.role === "set");
755
+ const props = readiness.filter((entry) => entry.role === "prop");
756
+ const audio = readiness.filter((entry) => entry.role === "audio");
757
+ const failures = [];
758
+ const warnings = [];
759
+ const distinctCharacterHashes = new Set(characters.map((entry) => entry.distinctHash).filter(Boolean));
760
+ const readyCharacters = characters.filter((entry) => entry.episodeReady);
761
+ const readySets = sets.filter((entry) => entry.episodeReady);
762
+ if (characters.length < 2) {
763
+ failures.push(`animation episode validation requires at least 2 typed animation character assets; found ${characters.length}${characters.length ? `: ${characters.map((entry) => entry.id).join(", ")}` : ""}.`);
764
+ }
765
+ if (characters.length >= 2 && distinctCharacterHashes.size < characters.length) {
766
+ failures.push("animation episode validation requires distinct character files/hashes; duplicated character assets cannot prove a two-character episode cast.");
767
+ }
768
+ if (readyCharacters.length < 2) {
769
+ failures.push(`animation episode validation found only ${readyCharacters.length} episode-ready character asset${readyCharacters.length === 1 ? "" : "s"}; required 2 with license, provenance, animation, and mouth readiness.`);
770
+ }
771
+ if (sets.length < 1) {
772
+ failures.push("animation episode validation requires at least 1 typed animation set/location asset.");
773
+ }
774
+ if (readySets.length < 1) {
775
+ failures.push("animation episode validation requires at least 1 episode-ready set with license, provenance, bounds, readable materials, and walkable scale.");
776
+ }
777
+ for (const entry of readiness) {
778
+ pushUnique(failures, entry.failures);
779
+ pushUnique(warnings, entry.warnings);
780
+ }
781
+ if (audio.length === 0) {
782
+ warnings.push("animation episode validation found no typed audio assets; publish-ready dialogue/audio proof will need registered dialogue, music, or SFX stems.");
783
+ }
784
+ const evidenceDirectory = options.output ? dirname(normalizeRelativePath(options.output)) : "artifacts/aura3d";
785
+ return {
786
+ enabled: Boolean(options.episode),
787
+ ok: failures.length === 0,
788
+ mode: "episode-ready",
789
+ requirements: {
790
+ minDistinctCharacters: 2,
791
+ minSets: 1,
792
+ requireLicense: true,
793
+ noPlaceholders: true,
794
+ requireAnimation: true,
795
+ requireMouthMotion: true,
796
+ requireSetScale: true
797
+ },
798
+ selectedCharacters: characters.map((entry) => entry.id),
799
+ selectedSets: sets.map((entry) => entry.id),
800
+ selectedProps: props.map((entry) => entry.id),
801
+ selectedAudio: audio.map((entry) => entry.id),
802
+ readiness,
803
+ assetProvenanceArtifact: normalizeRelativePath(join(evidenceDirectory, "asset-provenance.json")),
804
+ failures,
805
+ warnings
806
+ };
807
+ }
808
+ function createAnimationEpisodeAssetReadiness(asset) {
809
+ const role = inferAnimationEpisodeAssetRole(asset);
810
+ const failures = [];
811
+ const warnings = [];
812
+ const provenanceReady = Boolean(asset.provenance?.sourceUrl || asset.provenance?.sourceFamily || asset.provenance?.sourcePath);
813
+ const animationReady = role === "character" ? isAnimationCharacterAnimationReady(asset) : asset.animations.length > 0;
814
+ const mouthMode = role === "character" ? inferAnimationMouthMode(asset) : undefined;
815
+ const mouthReady = role === "character" ? mouthMode !== "missing-mouth-motion" : false;
816
+ const setReady = role === "set" ? isAnimationSetReady(asset) : undefined;
817
+ if (role === "character") {
818
+ if (asset.type !== "model")
819
+ failures.push(`${asset.id}: animation character must be a typed model asset, found ${asset.type}.`);
820
+ if (!asset.licenseVerified)
821
+ failures.push(`${asset.id}: animation character requires verified redistributable license evidence.`);
822
+ if (!provenanceReady)
823
+ failures.push(`${asset.id}: animation character requires source provenance for episode packaging.`);
824
+ if (!asset.placeholderFree)
825
+ failures.push(`${asset.id}: animation character is placeholder-tagged and cannot satisfy episode-ready validation.`);
826
+ if (!asset.boundsMetadata && !asset.bounds)
827
+ failures.push(`${asset.id}: animation character requires bounds metadata for framing and motion analysis.`);
828
+ if (!animationReady)
829
+ failures.push(`${asset.id}: animation character requires embedded animation clips or explicit segmented-rig metadata.`);
830
+ if (!mouthReady)
831
+ failures.push(`${asset.id}: animation character requires blendshape, mouth-card, viseme, talk, face, or primitive mouth fallback metadata.`);
832
+ if (asset.materials.length === 0)
833
+ failures.push(`${asset.id}: animation character requires at least one readable material.`);
834
+ if (asset.sizeBytes > 45 * 1024 * 1024)
835
+ failures.push(`${asset.id}: animation character payload is ${asset.sizeBytes} bytes; expected <= 47185920 for browser episode playback.`);
836
+ if (mouthMode === "amplitude-only")
837
+ warnings.push(`${asset.id}: mouth readiness is amplitude-only; add blendshape or mouth-card metadata for stronger lip-sync proof.`);
838
+ }
839
+ else if (role === "set") {
840
+ if (asset.type !== "model")
841
+ failures.push(`${asset.id}: animation set must be a typed model asset, found ${asset.type}.`);
842
+ if (!asset.licenseVerified)
843
+ failures.push(`${asset.id}: animation set requires verified redistributable license evidence.`);
844
+ if (!provenanceReady)
845
+ failures.push(`${asset.id}: animation set requires source provenance for episode packaging.`);
846
+ if (!asset.placeholderFree)
847
+ failures.push(`${asset.id}: animation set is placeholder-tagged and cannot satisfy episode-ready validation.`);
848
+ if (!setReady)
849
+ failures.push(`${asset.id}: animation set requires bounds, readable materials, and at least 1.5m walkable/framing scale.`);
850
+ if (asset.sizeBytes > 90 * 1024 * 1024)
851
+ failures.push(`${asset.id}: animation set payload is ${asset.sizeBytes} bytes; expected <= 94371840 for browser episode playback.`);
852
+ }
853
+ else if (role === "prop" || role === "environment") {
854
+ if (!asset.licenseVerified)
855
+ warnings.push(`${asset.id}: optional animation ${role} lacks verified license evidence; publish packages should include provenance for every visible asset.`);
856
+ if (!provenanceReady)
857
+ warnings.push(`${asset.id}: optional animation ${role} lacks source provenance.`);
858
+ }
859
+ return {
860
+ id: asset.id,
861
+ role,
862
+ episodeReady: role === "character"
863
+ ? failures.length === 0 && animationReady && mouthReady
864
+ : role === "set"
865
+ ? failures.length === 0 && Boolean(setReady)
866
+ : failures.length === 0,
867
+ distinctHash: role === "character" ? asset.hash : undefined,
868
+ licenseVerified: asset.licenseVerified,
869
+ provenanceReady,
870
+ placeholderFree: asset.placeholderFree,
871
+ animationReady,
872
+ mouthReady,
873
+ ...(mouthMode ? { mouthMode } : {}),
874
+ ...(typeof setReady === "boolean" ? { setReady } : {}),
875
+ warnings,
876
+ failures
877
+ };
878
+ }
879
+ function inferAnimationEpisodeAssetRole(asset) {
880
+ if (asset.type === "audio")
881
+ return "audio";
882
+ if (asset.type === "texture")
883
+ return "texture";
884
+ const text = animationAssetText(asset);
885
+ if (asset.type === "environment" || /\b(environment|skybox|backdrop|background|world|terrain|horizon)\b/i.test(text))
886
+ return "environment";
887
+ if (/\b(set|stage|room|garden|park|school|street|house|classroom|moon garden|walkable|floor|location)\b/i.test(text))
888
+ return "set";
889
+ if (/\b(character|humanoid|kid|child|hero|sidekick|villain|narrator|avatar|actor|miko|luma|robot|mascot|npc)\b/i.test(text))
890
+ return "character";
891
+ if (asset.humanoid?.humanoid || (asset.skeleton?.jointCount ?? 0) >= 6)
892
+ return "character";
893
+ if (asset.animations.length > 0 && asset.boundsMetadata && asset.boundsMetadata.size[1] >= 0.45 && asset.boundsMetadata.size[1] <= 4.5)
894
+ return "character";
895
+ if (asset.boundsMetadata && Math.max(...asset.boundsMetadata.size) >= 1.5 && asset.animations.length === 0)
896
+ return "set";
897
+ if (asset.type === "model")
898
+ return "prop";
899
+ return "unknown";
900
+ }
901
+ function isAnimationCharacterAnimationReady(asset) {
902
+ if (asset.animations.length > 0)
903
+ return true;
904
+ return /\b(segmented rig|segmented-rig|puppet rig|body parts|armature|skinned|skeleton)\b/i.test(animationAssetText(asset));
905
+ }
906
+ function inferAnimationMouthMode(asset) {
907
+ const morphNames = asset.morphTargets?.targetNames ?? [];
908
+ if (morphNames.some((name) => /\b(aa|oh|ee|mouth|lip|jaw|viseme|smile|frown|blink|expression)\b/i.test(name))) {
909
+ return "blendshape-lip-sync";
910
+ }
911
+ const text = animationAssetText(asset);
912
+ if (/\b(primitive mouth|mouth card|mouth-card|mouth sprite|face card|viseme card|2d mouth)\b/i.test(text)) {
913
+ return "primitive-mouth-card";
914
+ }
915
+ if (/\b(mouth|lip sync|lipsync|viseme|jaw|talk|speak|facial|face|expression|blendshape|blend shape|morph)\b/i.test(text)) {
916
+ return asset.morphTargets && asset.morphTargets.targetCount > 0 ? "blendshape-lip-sync" : "amplitude-only";
917
+ }
918
+ return "missing-mouth-motion";
919
+ }
920
+ function isAnimationSetReady(asset) {
921
+ const size = asset.boundsMetadata?.size ?? asset.bounds;
922
+ if (!size)
923
+ return false;
924
+ const largest = Math.max(...size);
925
+ return largest >= 1.5 && asset.materials.length > 0;
926
+ }
927
+ function animationAssetText(asset) {
928
+ return [
929
+ asset.id,
930
+ asset.source,
931
+ asset.url,
932
+ asset.outputPath,
933
+ asset.provenance?.sourceUrl ?? "",
934
+ asset.provenance?.sourceFamily ?? "",
935
+ asset.provenance?.author ?? "",
936
+ asset.provenance?.attribution ?? "",
937
+ ...(asset.provenance?.evidence ?? []),
938
+ ...(asset.nodeNames ?? []),
939
+ ...asset.materials,
940
+ ...asset.animations,
941
+ ].join(" ").toLowerCase();
942
+ }
728
943
  function createAssetReadinessIssues(profile, asset) {
729
944
  if (asset.type !== "model")
730
945
  return { failures: [], warnings: [] };
@@ -1342,10 +1557,35 @@ function createAssetProvenance(projectDir, sourcePath, options, detected) {
1342
1557
  ...(options.author ?? detected?.author ? { author: options.author ?? detected?.author } : {}),
1343
1558
  ...(options.sourceFamily ?? detected?.sourceFamily ? { sourceFamily: options.sourceFamily ?? detected?.sourceFamily } : {}),
1344
1559
  ...(options.attribution ?? detected?.attribution ? { attribution: options.attribution ?? detected?.attribution } : {}),
1560
+ ...(options.sha256 ?? detected?.sha256 ? { sha256: options.sha256 ?? detected?.sha256 } : {}),
1561
+ ...(options.retrievedAt ?? detected?.retrievedAt ? { retrievedAt: options.retrievedAt ?? detected?.retrievedAt } : {}),
1345
1562
  ...(detected?.evidence && detected.evidence.length > 0 ? { evidence: detected.evidence } : {}),
1346
1563
  checkedAt: new Date().toISOString()
1347
1564
  };
1348
1565
  }
1566
+ /**
1567
+ * Merge a freshly inspected asset's auto-detected provenance over the entry that
1568
+ * already exists in the manifest, so a re-add/re-resolve preserves hand-authored
1569
+ * fields (license, attribution, author, sourceUrl, sourceFamily, evidence,
1570
+ * sha256) that the new pass did not re-detect. Freshly detected values win over
1571
+ * the prior entry; explicit `addAsset` options still win over both (applied in
1572
+ * {@link createAssetProvenance}). (#26)
1573
+ */
1574
+ function mergeDetectedProvenance(existing, detected) {
1575
+ if (!existing)
1576
+ return detected;
1577
+ const evidence = [...(detected?.evidence ?? []), ...(existing.evidence ?? [])];
1578
+ return {
1579
+ sourceUrl: detected?.sourceUrl ?? existing.sourceUrl,
1580
+ license: detected?.license ?? existing.license,
1581
+ author: detected?.author ?? existing.author,
1582
+ sourceFamily: detected?.sourceFamily ?? existing.sourceFamily,
1583
+ attribution: detected?.attribution ?? existing.attribution,
1584
+ sha256: detected?.sha256 ?? existing.sha256,
1585
+ retrievedAt: detected?.retrievedAt ?? existing.retrievedAt,
1586
+ ...(evidence.length > 0 ? { evidence: [...new Set(evidence)] } : {})
1587
+ };
1588
+ }
1349
1589
  function readExternalProvenance(projectDir, provenanceFile) {
1350
1590
  if (!provenanceFile)
1351
1591
  return new Map();
@@ -1375,6 +1615,8 @@ function readExternalProvenance(projectDir, provenanceFile) {
1375
1615
  const sourceFamily = stringValue(record.sourceFamily ?? nestedProvenance?.sourceFamily ?? nestedProvenance?.sourcePack);
1376
1616
  const author = stringValue(record.author ?? nestedProvenance?.author);
1377
1617
  const attribution = stringValue(record.attribution ?? record.credit ?? nestedProvenance?.attribution);
1618
+ const sha256 = stringValue(record.sha256 ?? nestedProvenance?.sha256);
1619
+ const retrievedAt = stringValue(record.retrievedAt ?? nestedProvenance?.retrievedAt);
1378
1620
  const evidence = [
1379
1621
  ...stringArrayValue(record.evidence),
1380
1622
  ...stringArrayValue(record.intendedRouteUsage),
@@ -1387,6 +1629,8 @@ function readExternalProvenance(projectDir, provenanceFile) {
1387
1629
  ...(author ? { author } : {}),
1388
1630
  ...(sourceFamily ? { sourceFamily } : {}),
1389
1631
  ...(attribution ? { attribution } : {}),
1632
+ ...(sha256 ? { sha256 } : {}),
1633
+ ...(retrievedAt ? { retrievedAt } : {}),
1390
1634
  ...(evidence.length > 0 ? { evidence } : {}),
1391
1635
  checkedAt
1392
1636
  });