4faf7a527b
Security (from a dynamic security audit of the branch): - H1: UnityWebRequestTransport disables auto-redirect on auth-bearing requests (redirectLimit=0) so a provider 3xx can't re-send the API key to a redirect host. - H2/P8: per-kind result-extension allowlist in AssetGenJobManager.WriteFile (+ defense-in-depth in the audio/image import pipelines) — a provider can no longer land a .cs/.asmdef/.meta/.asset under Assets/ (Editor RCE). - H3: ProviderHttp.RequireHost pins the submit URL and the provider-supplied response_url to https://queue.fal.run before the fal key is attached (both fal image + audio adapters). Correctness (from code review): - C1: Tripo image->3D now sends model_version. - C2/C3/C6/C10: FalAudioAdapter.BuildBody is catalog-driven — duration- required models (CassetteAI SFX/Music, Stable Audio) send a default duration when the caller passes 0 (fixes the default-input 422), fractional durations floor to >=1, Lyria stays prompt-only and its GUI no longer advertises a duration it ignores, and the clamp ceilings come from the catalog (no more duplicated 190/30/180). - C4: an unmapped fal poll status now fails fast instead of polling to the 600s timeout (both fal adapters). - C5: a stale/invalid selected-model pref is cleared on dropdown fallback. - C7: the audio fal-key status refreshes when the shared 2D fal key changes. Cleanup: extract AssetGenModelCatalog.ResolveModel (dedupes the model- resolution chain across the three generate tools) + DefaultModelId no-alloc. Verified: full EditMode suite 1166 tests, 0 failures (+19 new regression tests); 34 Python asset-gen tests pass. Claude-Session: https://claude.ai/code/session_015KYy51gwBuhDuLZXXoqc98