@forgeax/engine-assets-runtime 0.1.4 → 0.1.6

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.
Files changed (311) hide show
  1. package/README.md +442 -175
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/__tests__/aabb.unit.test.d.ts +2 -0
  4. package/dist/__tests__/aabb.unit.test.d.ts.map +1 -0
  5. package/dist/__tests__/artifact-integrity.unit.test.d.ts +2 -0
  6. package/dist/__tests__/artifact-integrity.unit.test.d.ts.map +1 -0
  7. package/dist/__tests__/artifact-io.unit.test.d.ts +2 -0
  8. package/dist/__tests__/artifact-io.unit.test.d.ts.map +1 -0
  9. package/dist/__tests__/asset-evidence-sdk.integration.test.d.ts +2 -0
  10. package/dist/__tests__/asset-evidence-sdk.integration.test.d.ts.map +1 -0
  11. package/dist/__tests__/asset-evidence.unit.test.d.ts +2 -0
  12. package/dist/__tests__/asset-evidence.unit.test.d.ts.map +1 -0
  13. package/dist/__tests__/asset-kind.unit.test.d.ts +2 -0
  14. package/dist/__tests__/asset-kind.unit.test.d.ts.map +1 -0
  15. package/dist/__tests__/asset-registry-catalog-reconcile.integration.test.d.ts +2 -0
  16. package/dist/__tests__/asset-registry-catalog-reconcile.integration.test.d.ts.map +1 -0
  17. package/dist/__tests__/asset-registry-catalog-reconcile.unit.test.d.ts +2 -0
  18. package/dist/__tests__/asset-registry-catalog-reconcile.unit.test.d.ts.map +1 -0
  19. package/dist/__tests__/asset-registry-catalog.unit.test.d.ts +2 -0
  20. package/dist/__tests__/asset-registry-catalog.unit.test.d.ts.map +1 -0
  21. package/dist/__tests__/asset-registry.pack-cache.test.d.ts +2 -0
  22. package/dist/__tests__/asset-registry.pack-cache.test.d.ts.map +1 -0
  23. package/dist/__tests__/asset-registry.unit.test.d.ts +2 -0
  24. package/dist/__tests__/asset-registry.unit.test.d.ts.map +1 -0
  25. package/dist/__tests__/asset-runtime-error-code-owner.test-d.d.ts +2 -0
  26. package/dist/__tests__/asset-runtime-error-code-owner.test-d.d.ts.map +1 -0
  27. package/dist/__tests__/catalog-replica.unit.test.d.ts +2 -0
  28. package/dist/__tests__/catalog-replica.unit.test.d.ts.map +1 -0
  29. package/dist/__tests__/catalog-source-v2.unit.test.d.ts +2 -0
  30. package/dist/__tests__/catalog-source-v2.unit.test.d.ts.map +1 -0
  31. package/dist/__tests__/catalog-source.unit.test.d.ts +2 -0
  32. package/dist/__tests__/catalog-source.unit.test.d.ts.map +1 -0
  33. package/dist/__tests__/catalog-subscription-order.unit.test.d.ts +2 -0
  34. package/dist/__tests__/catalog-subscription-order.unit.test.d.ts.map +1 -0
  35. package/dist/__tests__/catalog-subscription.unit.test.d.ts +2 -0
  36. package/dist/__tests__/catalog-subscription.unit.test.d.ts.map +1 -0
  37. package/dist/__tests__/decode-image-bytes-pass-through.test.d.ts +2 -0
  38. package/dist/__tests__/decode-image-bytes-pass-through.test.d.ts.map +1 -0
  39. package/dist/__tests__/decode-image-bytes.browser.test.d.ts +2 -0
  40. package/dist/__tests__/decode-image-bytes.browser.test.d.ts.map +1 -0
  41. package/dist/__tests__/decode-image-bytes.test-d.d.ts +2 -0
  42. package/dist/__tests__/decode-image-bytes.test-d.d.ts.map +1 -0
  43. package/dist/__tests__/decode-image-bytes.test.d.ts +2 -0
  44. package/dist/__tests__/decode-image-bytes.test.d.ts.map +1 -0
  45. package/dist/__tests__/dynamic-texture-store.unit.test.d.ts +2 -0
  46. package/dist/__tests__/dynamic-texture-store.unit.test.d.ts.map +1 -0
  47. package/dist/__tests__/errors-asset.unit.test.d.ts +2 -0
  48. package/dist/__tests__/errors-asset.unit.test.d.ts.map +1 -0
  49. package/dist/__tests__/inline-pack-loaders.unit.test.d.ts +2 -0
  50. package/dist/__tests__/inline-pack-loaders.unit.test.d.ts.map +1 -0
  51. package/dist/__tests__/instantiate-context.unit.test.d.ts +2 -0
  52. package/dist/__tests__/instantiate-context.unit.test.d.ts.map +1 -0
  53. package/dist/__tests__/instantiate-publication-fence.unit.test.d.ts +2 -0
  54. package/dist/__tests__/instantiate-publication-fence.unit.test.d.ts.map +1 -0
  55. package/dist/__tests__/instantiate.unit.test.d.ts +2 -0
  56. package/dist/__tests__/instantiate.unit.test.d.ts.map +1 -0
  57. package/dist/__tests__/loader-input-contract.unit.test.d.ts +2 -0
  58. package/dist/__tests__/loader-input-contract.unit.test.d.ts.map +1 -0
  59. package/dist/__tests__/loader-registry.unit.test.d.ts +2 -0
  60. package/dist/__tests__/loader-registry.unit.test.d.ts.map +1 -0
  61. package/dist/__tests__/material-dependency-invalidation.unit.test.d.ts +2 -0
  62. package/dist/__tests__/material-dependency-invalidation.unit.test.d.ts.map +1 -0
  63. package/dist/__tests__/material-generation-cache.unit.test.d.ts +2 -0
  64. package/dist/__tests__/material-generation-cache.unit.test.d.ts.map +1 -0
  65. package/dist/__tests__/material-load-consumer.test-d.d.ts +2 -0
  66. package/dist/__tests__/material-load-consumer.test-d.d.ts.map +1 -0
  67. package/dist/__tests__/material-ready.integration.test.d.ts +2 -0
  68. package/dist/__tests__/material-ready.integration.test.d.ts.map +1 -0
  69. package/dist/__tests__/material-stale-generation.unit.test.d.ts +2 -0
  70. package/dist/__tests__/material-stale-generation.unit.test.d.ts.map +1 -0
  71. package/dist/__tests__/mesh-bin-morph-v3.test.d.ts +2 -0
  72. package/dist/__tests__/mesh-bin-morph-v3.test.d.ts.map +1 -0
  73. package/dist/__tests__/mesh-bin.unit.test.d.ts +2 -0
  74. package/dist/__tests__/mesh-bin.unit.test.d.ts.map +1 -0
  75. package/dist/__tests__/mipmap-generator.unit.test.d.ts +2 -0
  76. package/dist/__tests__/mipmap-generator.unit.test.d.ts.map +1 -0
  77. package/dist/__tests__/pack-artifact-transcode-model-owner.test.d.ts +2 -0
  78. package/dist/__tests__/pack-artifact-transcode-model-owner.test.d.ts.map +1 -0
  79. package/dist/__tests__/pack-basis-load.integration.test.d.ts +2 -0
  80. package/dist/__tests__/pack-basis-load.integration.test.d.ts.map +1 -0
  81. package/dist/__tests__/payload-validate.unit.test.d.ts +2 -0
  82. package/dist/__tests__/payload-validate.unit.test.d.ts.map +1 -0
  83. package/dist/__tests__/plugin.test.d.ts +2 -0
  84. package/dist/__tests__/plugin.test.d.ts.map +1 -0
  85. package/dist/__tests__/registry-concurrency.bench.test.d.ts +2 -0
  86. package/dist/__tests__/registry-concurrency.bench.test.d.ts.map +1 -0
  87. package/dist/__tests__/registry-failure-retry.integration.test.d.ts +2 -0
  88. package/dist/__tests__/registry-failure-retry.integration.test.d.ts.map +1 -0
  89. package/dist/__tests__/registry-load-graph.integration.test.d.ts +2 -0
  90. package/dist/__tests__/registry-load-graph.integration.test.d.ts.map +1 -0
  91. package/dist/__tests__/registry-load-state.unit.test.d.ts +2 -0
  92. package/dist/__tests__/registry-load-state.unit.test.d.ts.map +1 -0
  93. package/dist/__tests__/registry-package-cache.unit.test.d.ts +2 -0
  94. package/dist/__tests__/registry-package-cache.unit.test.d.ts.map +1 -0
  95. package/dist/__tests__/registry-public-ready.unit.test.d.ts +2 -0
  96. package/dist/__tests__/registry-public-ready.unit.test.d.ts.map +1 -0
  97. package/dist/__tests__/resolve-asset-handle.unit.test.d.ts +2 -0
  98. package/dist/__tests__/resolve-asset-handle.unit.test.d.ts.map +1 -0
  99. package/dist/__tests__/scene-handle-fields.unit.test.d.ts +2 -0
  100. package/dist/__tests__/scene-handle-fields.unit.test.d.ts.map +1 -0
  101. package/dist/__tests__/scene-payload.unit.test.d.ts +2 -0
  102. package/dist/__tests__/scene-payload.unit.test.d.ts.map +1 -0
  103. package/dist/__tests__/scene-publication-fence.test.d.ts +2 -0
  104. package/dist/__tests__/scene-publication-fence.test.d.ts.map +1 -0
  105. package/dist/__tests__/scriptable-pack-public-surface.test-d.d.ts +2 -0
  106. package/dist/__tests__/scriptable-pack-public-surface.test-d.d.ts.map +1 -0
  107. package/dist/__tests__/static-rig.integration.test.d.ts +2 -0
  108. package/dist/__tests__/static-rig.integration.test.d.ts.map +1 -0
  109. package/dist/__tests__/validate-material.unit.test.d.ts +2 -0
  110. package/dist/__tests__/validate-material.unit.test.d.ts.map +1 -0
  111. package/dist/__tests__/video-pack-loader.integration.test.d.ts +2 -0
  112. package/dist/__tests__/video-pack-loader.integration.test.d.ts.map +1 -0
  113. package/dist/aabb.d.ts +3 -0
  114. package/dist/aabb.d.ts.map +1 -0
  115. package/dist/asset-registry.d.ts +552 -0
  116. package/dist/asset-registry.d.ts.map +1 -0
  117. package/dist/builtin-asset-registry.d.ts +22 -0
  118. package/dist/builtin-asset-registry.d.ts.map +1 -0
  119. package/dist/catalog-source.d.ts +2 -1
  120. package/dist/catalog-source.d.ts.map +1 -1
  121. package/dist/decode-image-bytes.d.ts +57 -0
  122. package/dist/decode-image-bytes.d.ts.map +1 -0
  123. package/dist/dynamic-texture-store.d.ts +89 -0
  124. package/dist/dynamic-texture-store.d.ts.map +1 -0
  125. package/dist/errors/asset.d.ts +201 -0
  126. package/dist/errors/asset.d.ts.map +1 -0
  127. package/dist/handles.d.ts +141 -0
  128. package/dist/handles.d.ts.map +1 -0
  129. package/dist/image-error.d.ts +6 -0
  130. package/dist/image-error.d.ts.map +1 -0
  131. package/dist/index.d.ts +32 -3
  132. package/dist/index.d.ts.map +1 -1
  133. package/dist/index.mjs +7218 -114
  134. package/dist/index.mjs.map +1 -1
  135. package/dist/internal.d.ts +1 -1
  136. package/dist/internal.d.ts.map +1 -1
  137. package/dist/loader-registry.d.ts +63 -0
  138. package/dist/loader-registry.d.ts.map +1 -0
  139. package/dist/loaders/inline-pack.d.ts +72 -0
  140. package/dist/loaders/inline-pack.d.ts.map +1 -0
  141. package/dist/loaders/mesh-bin.d.ts +21 -0
  142. package/dist/loaders/mesh-bin.d.ts.map +1 -0
  143. package/dist/loaders/pack-artifact.d.ts +20 -0
  144. package/dist/loaders/pack-artifact.d.ts.map +1 -0
  145. package/dist/material/dependency-graph.d.ts +9 -0
  146. package/dist/material/dependency-graph.d.ts.map +1 -0
  147. package/dist/material/generation-cache.d.ts +24 -0
  148. package/dist/material/generation-cache.d.ts.map +1 -0
  149. package/dist/material/inspection.d.ts +24 -0
  150. package/dist/material/inspection.d.ts.map +1 -0
  151. package/dist/material/loader.d.ts +59 -0
  152. package/dist/material/loader.d.ts.map +1 -0
  153. package/dist/material/runtime-shader.d.ts +14 -0
  154. package/dist/material/runtime-shader.d.ts.map +1 -0
  155. package/dist/mesh-bin.d.ts +3 -0
  156. package/dist/mesh-bin.d.ts.map +1 -0
  157. package/dist/mipmap-generator.d.ts +132 -0
  158. package/dist/mipmap-generator.d.ts.map +1 -0
  159. package/dist/payload-validate.d.ts +60 -0
  160. package/dist/payload-validate.d.ts.map +1 -0
  161. package/dist/plugin.d.ts +16 -0
  162. package/dist/plugin.d.ts.map +1 -0
  163. package/dist/registry/artifact-io.d.ts +16 -0
  164. package/dist/registry/artifact-io.d.ts.map +1 -0
  165. package/dist/registry/asset-evidence.d.ts +13 -0
  166. package/dist/registry/asset-evidence.d.ts.map +1 -0
  167. package/dist/registry/catalog-state.d.ts +47 -0
  168. package/dist/registry/catalog-state.d.ts.map +1 -0
  169. package/dist/registry/catalog.d.ts +48 -0
  170. package/dist/registry/catalog.d.ts.map +1 -0
  171. package/dist/registry/instantiate.d.ts +153 -0
  172. package/dist/registry/instantiate.d.ts.map +1 -0
  173. package/dist/registry/load-by-guid.d.ts +247 -0
  174. package/dist/registry/load-by-guid.d.ts.map +1 -0
  175. package/dist/registry/load-state.d.ts +26 -0
  176. package/dist/registry/load-state.d.ts.map +1 -0
  177. package/dist/registry/runtime-projection.d.ts +16 -0
  178. package/dist/registry/runtime-projection.d.ts.map +1 -0
  179. package/dist/registry/scene-publication-fence.d.ts +38 -0
  180. package/dist/registry/scene-publication-fence.d.ts.map +1 -0
  181. package/dist/registry/validate-material.d.ts +77 -0
  182. package/dist/registry/validate-material.d.ts.map +1 -0
  183. package/dist/resolve-asset-handle.d.ts +43 -0
  184. package/dist/resolve-asset-handle.d.ts.map +1 -0
  185. package/dist/resolve-tileset-runtime.d.ts +23 -0
  186. package/dist/resolve-tileset-runtime.d.ts.map +1 -0
  187. package/dist/scene-handle-fields.d.ts +88 -0
  188. package/dist/scene-handle-fields.d.ts.map +1 -0
  189. package/dist/scene-payload.d.ts +15 -0
  190. package/dist/scene-payload.d.ts.map +1 -0
  191. package/dist/wire-default-loaders.d.ts +29 -0
  192. package/dist/wire-default-loaders.d.ts.map +1 -0
  193. package/package.json +22 -9
  194. package/src/__tests__/aabb.unit.test.ts +97 -0
  195. package/src/__tests__/artifact-integrity.unit.test.ts +99 -0
  196. package/src/__tests__/artifact-io.unit.test.ts +127 -0
  197. package/src/__tests__/asset-evidence-sdk.integration.test.ts +32 -0
  198. package/src/__tests__/asset-evidence.unit.test.ts +32 -0
  199. package/src/__tests__/{asset-kind.test.ts → asset-kind.unit.test.ts} +1 -1
  200. package/src/__tests__/asset-registry-catalog-reconcile.integration.test.ts +74 -0
  201. package/src/__tests__/asset-registry-catalog-reconcile.unit.test.ts +89 -0
  202. package/src/__tests__/asset-registry-catalog.unit.test.ts +170 -0
  203. package/src/__tests__/asset-registry.pack-cache.test.ts +96 -0
  204. package/src/__tests__/asset-registry.unit.test.ts +511 -0
  205. package/src/__tests__/asset-runtime-error-code-owner.test-d.ts +63 -0
  206. package/src/__tests__/catalog-replica.unit.test.ts +196 -0
  207. package/src/__tests__/catalog-source-v2.unit.test.ts +158 -0
  208. package/src/__tests__/catalog-source.unit.test.ts +126 -0
  209. package/src/__tests__/catalog-subscription-order.unit.test.ts +65 -0
  210. package/src/__tests__/catalog-subscription.unit.test.ts +28 -0
  211. package/src/__tests__/decode-image-bytes-pass-through.test.ts +34 -0
  212. package/src/__tests__/decode-image-bytes.browser.test.ts +102 -0
  213. package/src/__tests__/decode-image-bytes.test-d.ts +108 -0
  214. package/src/__tests__/decode-image-bytes.test.ts +90 -0
  215. package/src/__tests__/decode-image-mime-owner.test.ts +2 -5
  216. package/src/__tests__/dynamic-texture-store.unit.test.ts +115 -0
  217. package/src/__tests__/errors-asset.unit.test.ts +92 -0
  218. package/src/__tests__/inline-pack-loaders.unit.test.ts +548 -0
  219. package/src/__tests__/instantiate-context.unit.test.ts +65 -0
  220. package/src/__tests__/instantiate-publication-fence.unit.test.ts +158 -0
  221. package/src/__tests__/instantiate.unit.test.ts +684 -0
  222. package/src/__tests__/loader-input-contract.unit.test.ts +89 -0
  223. package/src/__tests__/loader-registry.unit.test.ts +101 -0
  224. package/src/__tests__/material-dependency-invalidation.unit.test.ts +14 -0
  225. package/src/__tests__/material-generation-cache.unit.test.ts +46 -0
  226. package/src/__tests__/material-load-consumer.test-d.ts +42 -0
  227. package/src/__tests__/material-ready.integration.test.ts +492 -0
  228. package/src/__tests__/material-stale-generation.unit.test.ts +152 -0
  229. package/src/__tests__/mesh-bin-morph-v3.test.ts +22 -0
  230. package/src/__tests__/mesh-bin.unit.test.ts +152 -0
  231. package/src/__tests__/mipmap-generator.unit.test.ts +202 -0
  232. package/src/__tests__/pack-artifact-transcode-model-owner.test.ts +32 -0
  233. package/src/__tests__/pack-basis-load.integration.test.ts +168 -0
  234. package/src/__tests__/payload-validate.unit.test.ts +285 -0
  235. package/src/__tests__/plugin.test.ts +55 -0
  236. package/src/__tests__/registry-concurrency.bench.test.ts +40 -0
  237. package/src/__tests__/registry-failure-retry.integration.test.ts +69 -0
  238. package/src/__tests__/registry-load-graph.integration.test.ts +246 -0
  239. package/src/__tests__/registry-load-state.unit.test.ts +35 -0
  240. package/src/__tests__/registry-package-cache.unit.test.ts +53 -0
  241. package/src/__tests__/registry-public-ready.unit.test.ts +38 -0
  242. package/src/__tests__/resolve-asset-handle.unit.test.ts +238 -0
  243. package/src/__tests__/scene-handle-fields.unit.test.ts +129 -0
  244. package/src/__tests__/scene-payload.unit.test.ts +151 -0
  245. package/src/__tests__/scene-publication-fence.test.ts +129 -0
  246. package/src/__tests__/scriptable-pack-public-surface.test-d.ts +16 -0
  247. package/src/__tests__/static-rig.integration.test.ts +8 -0
  248. package/src/__tests__/validate-material.unit.test.ts +359 -0
  249. package/src/__tests__/video-pack-loader.integration.test.ts +83 -0
  250. package/src/aabb.ts +107 -0
  251. package/src/asset-registry.ts +2040 -0
  252. package/src/builtin-asset-registry.ts +164 -0
  253. package/src/catalog-source.ts +14 -70
  254. package/src/decode-image-bytes.ts +126 -0
  255. package/src/dynamic-texture-store.ts +234 -0
  256. package/src/errors/asset.ts +347 -0
  257. package/src/handles.ts +180 -0
  258. package/src/image-error.ts +45 -0
  259. package/src/index.ts +177 -19
  260. package/src/internal.ts +1 -0
  261. package/src/loader-registry.ts +157 -0
  262. package/src/loaders/inline-pack.ts +837 -0
  263. package/src/loaders/mesh-bin.ts +304 -0
  264. package/src/loaders/pack-artifact.ts +665 -0
  265. package/src/material/dependency-graph.ts +46 -0
  266. package/src/material/generation-cache.ts +177 -0
  267. package/src/material/inspection.ts +46 -0
  268. package/src/material/loader.ts +326 -0
  269. package/src/material/runtime-shader.ts +133 -0
  270. package/src/mesh-bin.ts +5 -0
  271. package/src/mipmap-generator.ts +450 -0
  272. package/src/payload-validate.ts +573 -0
  273. package/src/plugin.ts +48 -0
  274. package/src/registry/artifact-io.ts +259 -0
  275. package/src/registry/asset-evidence.ts +51 -0
  276. package/src/registry/catalog-state.ts +409 -0
  277. package/src/registry/catalog.ts +369 -0
  278. package/src/registry/instantiate.ts +1056 -0
  279. package/src/registry/load-by-guid.ts +1657 -0
  280. package/src/registry/load-state.ts +115 -0
  281. package/src/registry/runtime-projection.ts +63 -0
  282. package/src/registry/scene-publication-fence.ts +256 -0
  283. package/src/registry/validate-material.ts +386 -0
  284. package/src/resolve-asset-handle.ts +147 -0
  285. package/src/resolve-tileset-runtime.ts +72 -0
  286. package/src/scene-handle-fields.ts +221 -0
  287. package/src/scene-payload.ts +207 -0
  288. package/src/wire-default-loaders.ts +79 -0
  289. package/dist/__tests__/asset-graph-red.integration.test.d.ts +0 -2
  290. package/dist/__tests__/asset-graph-red.integration.test.d.ts.map +0 -1
  291. package/dist/__tests__/asset-kind.test.d.ts +0 -2
  292. package/dist/__tests__/asset-kind.test.d.ts.map +0 -1
  293. package/dist/__tests__/asset-registry-core.integration.test.d.ts +0 -2
  294. package/dist/__tests__/asset-registry-core.integration.test.d.ts.map +0 -1
  295. package/dist/__tests__/asset-registry-public-api.test-d.d.ts +0 -2
  296. package/dist/__tests__/asset-registry-public-api.test-d.d.ts.map +0 -1
  297. package/dist/__tests__/asset-runtime-core-lifecycle.integration.test.d.ts +0 -2
  298. package/dist/__tests__/asset-runtime-core-lifecycle.integration.test.d.ts.map +0 -1
  299. package/dist/__tests__/asset-runtime-snapshot.unit.test.d.ts +0 -2
  300. package/dist/__tests__/asset-runtime-snapshot.unit.test.d.ts.map +0 -1
  301. package/dist/__tests__/catalog-session-red.unit.test.d.ts +0 -2
  302. package/dist/__tests__/catalog-session-red.unit.test.d.ts.map +0 -1
  303. package/dist/__tests__/registry-lifecycle-red.integration.test.d.ts +0 -2
  304. package/dist/__tests__/registry-lifecycle-red.integration.test.d.ts.map +0 -1
  305. package/src/__tests__/asset-graph-red.integration.test.ts +0 -113
  306. package/src/__tests__/asset-registry-core.integration.test.ts +0 -161
  307. package/src/__tests__/asset-registry-public-api.test-d.ts +0 -31
  308. package/src/__tests__/asset-runtime-core-lifecycle.integration.test.ts +0 -79
  309. package/src/__tests__/asset-runtime-snapshot.unit.test.ts +0 -23
  310. package/src/__tests__/catalog-session-red.unit.test.ts +0 -276
  311. package/src/__tests__/registry-lifecycle-red.integration.test.ts +0 -80
@@ -0,0 +1,13 @@
1
+ import { type AssetEvidence, type AssetEvidenceError, type AssetEvidenceInputs, type Result } from '@forgeax/engine-types';
2
+ /** Host-injected runtime bridge; the adapter never imports CLI, Vite, or Node policy. */
3
+ export interface RuntimeEvidenceSource {
4
+ readonly evidence: (guid: string) => Promise<AssetEvidenceInputs | Result<AssetEvidenceInputs, AssetEvidenceError>>;
5
+ }
6
+ /** Runtime SDK view over the shared AssetEvidence projector. */
7
+ export interface RuntimeAssetEvidenceAdapter {
8
+ readonly inspect: (guid: string) => Promise<Result<AssetEvidence, AssetEvidenceError>>;
9
+ readonly verifyByGuid: (guid: string) => Promise<Result<AssetEvidence, AssetEvidenceError>>;
10
+ }
11
+ /** Create an adapter; omitted source intentionally returns capability-missing errors. */
12
+ export declare function createRuntimeAssetEvidenceAdapter(source?: RuntimeEvidenceSource): RuntimeAssetEvidenceAdapter;
13
+ //# sourceMappingURL=asset-evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-evidence.d.ts","sourceRoot":"","sources":["../../src/registry/asset-evidence.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EAGxB,KAAK,MAAM,EACZ,MAAM,uBAAuB,CAAC;AAE/B,yFAAyF;AACzF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,CACjB,IAAI,EAAE,MAAM,KACT,OAAO,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC,CAAC;CACrF;AAED,gEAAgE;AAChE,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACvF,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC;CAC7F;AAuBD,yFAAyF;AACzF,wBAAgB,iCAAiC,CAC/C,MAAM,CAAC,EAAE,qBAAqB,GAC7B,2BAA2B,CAI7B"}
@@ -0,0 +1,47 @@
1
+ import { type Result } from '@forgeax/engine-rhi';
2
+ import type { AssetError, CatalogDelta, CatalogDiagnostic, CatalogEntry } from '@forgeax/engine-types';
3
+ import type { CatalogSource } from '../catalog-source';
4
+ export interface CatalogReplicaSnapshot {
5
+ readonly version: number;
6
+ readonly entries: readonly CatalogEntry[];
7
+ readonly stale: boolean;
8
+ readonly diagnostics: readonly CatalogDiagnostic[];
9
+ }
10
+ type SnapshotResult = Result<CatalogReplicaSnapshot, AssetError>;
11
+ type CatalogDeltaListener = (delta: CatalogDelta) => void;
12
+ /**
13
+ * One authoritative catalog read model owned by AssetRegistry.
14
+ *
15
+ * The source subscription is installed before the first enumeration. Deltas
16
+ * observed during that baseline read are buffered and folded afterwards, so
17
+ * an early publication cannot disappear between the two operations.
18
+ */
19
+ export declare class CatalogReplica {
20
+ private readonly source;
21
+ private readonly listeners;
22
+ private readonly entries;
23
+ private pendingBeforeBaseline;
24
+ private pendingDuringReconcile;
25
+ private unsubscribe;
26
+ private startPromise;
27
+ private baselineReady;
28
+ private version;
29
+ private stale;
30
+ private diagnostics;
31
+ private currentSnapshot;
32
+ private readonly expectedScope;
33
+ constructor(source: CatalogSource);
34
+ subscribe(listener: CatalogDeltaListener): () => void;
35
+ snapshot(): CatalogReplicaSnapshot;
36
+ dispose(): void;
37
+ start(): Promise<SnapshotResult>;
38
+ reconcile(): Promise<SnapshotResult>;
39
+ private loadBaseline;
40
+ private receive;
41
+ private fold;
42
+ private safeDelta;
43
+ private publish;
44
+ private makeSnapshot;
45
+ }
46
+ export {};
47
+ //# sourceMappingURL=catalog-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-state.d.ts","sourceRoot":"","sources":["../../src/registry/catalog-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,YAAY,EAIb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACpD;AAED,KAAK,cAAc,GAAG,MAAM,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;AACjE,KAAK,oBAAoB,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;AAmM1D;;;;;;GAMG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmC;IAC7D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,qBAAqB,CAAsB;IACnD,OAAO,CAAC,sBAAsB,CAA6B;IAC3D,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkE;gBAEpF,MAAM,EAAE,aAAa;IAWjC,SAAS,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,IAAI;IAKrD,QAAQ,IAAI,sBAAsB;IAIlC,OAAO,IAAI,IAAI;IAST,KAAK,IAAI,OAAO,CAAC,cAAc,CAAC;IAahC,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC;YAQ5B,YAAY;IAuB1B,OAAO,CAAC,OAAO;IAef,OAAO,CAAC,IAAI;IAiCZ,OAAO,CAAC,SAAS;IA4BjB,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,YAAY;CAYrB"}
@@ -0,0 +1,48 @@
1
+ import { type Result } from '@forgeax/engine-rhi';
2
+ import { type Asset, type AssetEnvelope, AssetError, type AssetPublicationEnvelope, type AssetRelation, type CatalogDiagnostic, type CatalogLifecycle, type CatalogProjection, type CatalogSubject, type CookExecution, type ProviderProvenance, type ResourceRevision, type RuntimeAssetBinding, type SourceOverrideDescriptor, type SourceOverrideMap } from '@forgeax/engine-types';
3
+ import type { AssetRegistry } from '../asset-registry';
4
+ /** Runtime catalog row parsed from the shared pack-index POD shape. */
5
+ export interface CatalogRecord {
6
+ readonly packageUrl: string;
7
+ readonly kind: string;
8
+ readonly authoring?: import('@forgeax/engine-types').AssetAuthoringCapability;
9
+ readonly name?: string;
10
+ readonly refs?: readonly string[];
11
+ readonly sourcePath?: string;
12
+ readonly cookReceiptUrl?: string;
13
+ readonly packageId?: string;
14
+ readonly provenance?: ProviderProvenance;
15
+ readonly revision?: ResourceRevision;
16
+ readonly sourceKey?: string;
17
+ readonly sourceIndex?: number;
18
+ readonly sourceOverrides?: SourceOverrideMap;
19
+ readonly sourceOverrideDescriptors?: readonly SourceOverrideDescriptor[];
20
+ readonly relations?: readonly AssetRelation[];
21
+ readonly diagnostics?: readonly CatalogDiagnostic[];
22
+ /** Producer-owned projection axes; never infer these from locators. */
23
+ readonly subject?: CatalogSubject;
24
+ readonly execution?: CookExecution;
25
+ readonly lifecycle?: CatalogLifecycle;
26
+ readonly projection?: CatalogProjection;
27
+ /** Complete producer publication tuple used by Scene publication fences. */
28
+ readonly publication?: AssetPublicationEnvelope;
29
+ }
30
+ /** Build the canonical row for an inline asset without inventing producer facts. */
31
+ export declare function createInlineCatalogRecord(envelope: AssetEnvelope<Asset>, name: string): CatalogRecord;
32
+ type CatalogFetch = (input: string, init?: {
33
+ readonly cache?: 'no-store';
34
+ }) => PromiseLike<{
35
+ readonly ok: boolean;
36
+ json(): Promise<unknown>;
37
+ }>;
38
+ /** Resolve a catalog entry URL against the configured pack-index URL. */
39
+ export declare function resolveCatalogAssetUrl(registry: AssetRegistry, packageUrl: string): string;
40
+ /** Parse the shared pack-index/catalog wire shape without loading payloads. */
41
+ export declare function parseCatalog(raw: unknown, resolveUrl?: (packageUrl: string) => string, expectedRevision?: ResourceRevision, expectedScope?: Pick<RuntimeAssetBinding, 'scopeId' | 'generation'>): Result<Map<string, CatalogRecord>, AssetError>;
42
+ /** Fetch and parse a catalog using the shared JSON/error boundary. */
43
+ export declare function fetchCatalog(url: string, fetch: CatalogFetch, resolveUrl?: (packageUrl: string) => string, expectedRevision?: ResourceRevision, expectedScope?: Pick<RuntimeAssetBinding, 'scopeId' | 'generation'>, requestInit?: {
44
+ readonly cache?: 'no-store';
45
+ }): Promise<Result<Map<string, CatalogRecord>, AssetError>>;
46
+ export declare function fetchPackIndex(registry: AssetRegistry): Promise<Result<Map<string, CatalogRecord>, AssetError>>;
47
+ export {};
48
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/registry/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,153 @@
1
+ import type { EcsError, EntityHandle, World } from '@forgeax/engine-ecs';
2
+ import type { PackError } from '@forgeax/engine-pack/errors';
3
+ import { type Result } from '@forgeax/engine-rhi';
4
+ import { type Asset, AssetError, type Handle, type SceneAsset, type SceneInstanceMount, type SkinAsset, type TagOf } from '@forgeax/engine-types';
5
+ import type { AssetRegistry } from '../asset-registry';
6
+ import { type ScenePublicationFence, type ScenePublicationFenceError } from './scene-publication-fence';
7
+ /**
8
+ * Resolver contract consumed by {@link postSpawnResolveJoints} (D-1: relocated
9
+ * here from scene-instances/post-spawn-resolve-joints.ts so the hook contract
10
+ * travels with the instantiate cluster into @forgeax/engine-assets-runtime).
11
+ */
12
+ export interface SkinJointResolver {
13
+ resolveSkinAsset(skeletonHandleRaw: number): SkinAsset | undefined;
14
+ }
15
+ /**
16
+ * Post-spawn hook contract (D-1). A hook runs after instantiate spawns the
17
+ * scene subtree; the shipped implementation is runtime's `postSpawnResolveJoints`
18
+ * (auto-wire Skin.joints). Injected at the sole production assembly point
19
+ * (createRenderer) in w9/w10; when absent, instantiate skips joint wiring.
20
+ */
21
+ export type PostSpawnHook = (world: World, resolver: SkinJointResolver, root: EntityHandle) => {
22
+ ok: true;
23
+ } | {
24
+ ok: false;
25
+ error: unknown;
26
+ };
27
+ /**
28
+ * Materialise a `SceneAsset` into an existing `World` and return the
29
+ * synthetic root `Entity` (feat-20260514 w31 sugar wrapper; AC-03 +
30
+ * requirements §IN-3; M3: returns Entity not SceneInstanceId).
31
+ *
32
+ * Before spawning, handle-type component fields (e.g. `assetHandle`,
33
+ * `material`, `skeleton`) containing GUID strings are resolved to fresh
34
+ * user-tier `Handle` numbers via `world.allocSharedRef` (feat-20260614 M8
35
+ * D-19 instantiate-time GUID->handle mint; supersedes the pre-D-17
36
+ * `resolveGuid` map). GUIDs that fail to parse or are not catalogued return
37
+ * `AssetError(code='asset-not-found')` with a hint containing the GUID,
38
+ * node localId, and field name.
39
+ *
40
+ * Errors propagate verbatim through the closed
41
+ * `AssetError | PackError | EcsError` union so AI users that already
42
+ * narrow `loadByGuid<SceneAsset>` results reuse the same `switch
43
+ * (err.code)` exhaustively (charter proposition 3 machine-readable
44
+ * union; plan-strategy §3.3 closed-union transparency).
45
+ *
46
+ * @example
47
+ * ```ts
48
+ * const sceneRes = await engine.assets.loadByGuid<SceneAsset>(roomGuid); // payload (D-17)
49
+ * if (!sceneRes.ok) return;
50
+ * const handle = world.allocSharedRef('SceneAsset', sceneRes.value); // mint column handle
51
+ * const r = engine.assets.instantiate(handle, world);
52
+ * if (!r.ok) {
53
+ * switch (r.error.code) {
54
+ * case 'asset-not-found':
55
+ * case 'pack-cyclic-reference':
56
+ * // ... AssetErrorCode | PackErrorCode | EcsErrorCode exhaustive
57
+ * }
58
+ * }
59
+ * ```
60
+ */
61
+ export declare function instantiate<T extends SceneAsset>(registry: AssetRegistry, handle: Handle<TagOf<T>, 'shared'>, world: World, parent?: EntityHandle, expectedPublication?: ScenePublicationFence): Result<EntityHandle, AssetError | PackError | EcsError | ScenePublicationFenceError>;
62
+ /**
63
+ * Materialise a `SceneAsset` FLAT into an existing `World` — the "edit the
64
+ * scene itself" registry entry (#655). Shares the GUID-resolution + shared-ref +
65
+ * SceneAssetResolver prelude with {@link instantiate}, but calls
66
+ * `worldInstantiateSceneFlat` instead of `worldInstantiateScene`: NO synthetic
67
+ * SceneInstance root, NO forced `ChildOf` on top-level members. The scene's own
68
+ * entities become plain top-level world entities; nested prefabs (`mounts[]`)
69
+ * still become their own SceneInstance anchors. Returns the set of top-level
70
+ * entity handles.
71
+ *
72
+ * Use this to OPEN a scene for authoring; use {@link instantiate} (anchor) at
73
+ * runtime / Play and for nested prefabs.
74
+ *
75
+ * The post-spawn Skin.joints hook (when wired via `registry.postSpawnHook`)
76
+ * runs once per top-level root: each GLB root keeps its own `ChildOf` subtree,
77
+ * so joint resolution is scoped to each subtree exactly as the anchor path
78
+ * scopes it to the single synthetic root.
79
+ */
80
+ export declare function instantiateFlat<T extends SceneAsset>(registry: AssetRegistry, handle: Handle<TagOf<T>, 'shared'>, world: World, expectedPublication?: ScenePublicationFence): Result<EntityHandle[], AssetError | PackError | EcsError | ScenePublicationFenceError>;
81
+ /**
82
+ * m3-i2: Recursively resolve mounts[].source GUID strings.
83
+ * Returns a PackError-shaped object on cycle (R-9) or AssetError
84
+ * on child resolution failure.
85
+ *
86
+ * feat-20260713 M3 / w13: also down-drills `mounts[].overrides[].value`,
87
+ * resolving any GUID string bound to a `shared<...>` / `array<shared<...>>`
88
+ * schema field to a live handle (D-2). `guidToHandle` is the caller's per-scene
89
+ * dedup map (shared with the entity-field resolution in `_resolveSceneGuids`) so
90
+ * the same catalogued GUID mints exactly one user-tier handle across entity
91
+ * fields and override values (D-15/D-17 dedup contract); it defaults to a fresh
92
+ * map so standalone callers keep working. Override resolution runs for every
93
+ * mount regardless of `source` branch — an unresolvable GUID fail-fasts here,
94
+ * before any spawn (P3: no half-initialized member).
95
+ */
96
+ export declare function resolveMountsRec(registry: AssetRegistry, mounts: readonly SceneInstanceMount[], world: World, visited: Set<string>, guidToHandle?: Map<string, number>, resolvedSceneHandles?: Map<string, number>): Result<SceneInstanceMount[], AssetError | {
97
+ readonly code: 'pack-cyclic-reference';
98
+ readonly expected: string;
99
+ readonly hint: string;
100
+ readonly detail: {
101
+ readonly code: 'pack-cyclic-reference';
102
+ readonly kind: 'mount-asset';
103
+ readonly cycle: readonly string[];
104
+ };
105
+ } | ScenePublicationFenceError>;
106
+ /**
107
+ * Resolve one GUID string to a live user-tier handle (feat-20260713 M3 / w13
108
+ * SSOT). Parses the GUID, uses `guidToHandle` as the per-resolution fast path,
109
+ * and on a miss looks the envelope up in the catalog + interns its shared ref
110
+ * by `(target, payload identity)` in the World. An unparseable / uncatalogued
111
+ * GUID returns `AssetError(code='asset-not-found')` with a breadcrumb hint
112
+ * (`fieldPath` + `location`) for AI-user debuggability (P3). Shared by the
113
+ * entity-field fallback in `_resolveSceneGuids` and the override-value down-drill
114
+ * in {@link resolveMountOverrides} so the parse/dedup/lookup/mint idiom has one
115
+ * home (architecture-principles §1 SSOT).
116
+ */
117
+ export declare function resolveHandleGuid(registry: AssetRegistry, world: World, guidString: string, guidToHandle: Map<string, number>, fieldPath: string, location: string): Result<number, AssetError>;
118
+ /**
119
+ * tweak-20260609 M1 helper: build the per-sub-ref parent context for a
120
+ * SceneAsset child. feat-20260622 M3 / w9: re-sourced to lookup in the
121
+ * scene envelope's ``refs[]`` edges instead of walking entity components
122
+ * via extractSceneEntityHandleGuids (D-7). When the scene envelope is not
123
+ * found in the catalog, falls back to the entity-walk path (backward compat
124
+ * for call sites that lack a catalogued envelope).
125
+ *
126
+ * Texture edges (sourceField=undefined) produce ``componentField:
127
+ * undefined`` — the breadcrumb will show GUID+kind only, no per-entity
128
+ * detail (D-2: texture has no per-entity origin).
129
+ */
130
+ export declare function buildSceneChildContext(registry: AssetRegistry, scene: Asset & {
131
+ kind: 'scene';
132
+ }, subGuidKey: string, sceneGuidKey?: string): {
133
+ sceneEntityId?: number;
134
+ componentField?: string;
135
+ sourceField?: {
136
+ componentName?: string;
137
+ fieldName: string;
138
+ arrayIndex?: number;
139
+ };
140
+ } | undefined;
141
+ /**
142
+ * tweak-20260609 M1 helper: build the error-hint breadcrumb string
143
+ * containing the parent asset's GUID + kind, enriched with the
144
+ * caller-provided `parentContext` (entity localId + component.field).
145
+ *
146
+ * Per D-7 / B-8: the breadcrumb appears before the sub-asset's own hint,
147
+ * separated by " / ".
148
+ */
149
+ export declare function buildBreadcrumbHint(parentGuidKey: string, parentKind: string, subGuidKey: string, parentContext?: {
150
+ sceneEntityId?: number;
151
+ componentField?: string;
152
+ }): string;
153
+ //# sourceMappingURL=instantiate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instantiate.d.ts","sourceRoot":"","sources":["../../src/registry/instantiate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,247 @@
1
+ import { AssetGuid } from '@forgeax/engine-pack/guid';
2
+ import { type Result, type RhiError } from '@forgeax/engine-rhi';
3
+ import { type Asset, type AssetCompression, AssetError, type AssetErrorCode, type AssetRef, type CatalogSubject, type ImageError, type ImageMetadata, type LoadContext, type ParseErrorDetail } from '@forgeax/engine-types';
4
+ import type { AssetRegistry } from '../asset-registry';
5
+ import { type MaterialLoadError, type MaterialLoadRequest, type MaterialReady } from '../material/loader';
6
+ /**
7
+ * Load an asset and all its transitively referenced sub-assets by GUID;
8
+ * returns `ok(handle)` only when the asset and every sub-asset are in the
9
+ * registry.
10
+ *
11
+ * **Post-condition:** `ok(payload)` is returned ONLY when the asset AND every
12
+ * transitively referenced sub-asset (per the asset envelope's `refs[]`) are
13
+ * present in this registry. The implementation walks `envelope.refs` and
14
+ * recursively calls `loadByGuid` on each ref before cataloguing the top-level
15
+ * asset. The resolved value is the PAYLOAD `T`
16
+ * (D-17), never a handle -- mint a column handle with
17
+ * `world.allocSharedRef('Kind', payload)` when one is needed (e.g. before
18
+ * `instantiate`).
19
+ *
20
+ * Two paths:
21
+ * - **Dev / fallback** (no `configurePackIndex` call): synchronous catalogue
22
+ * lookup wrapped in `Promise.resolve`. Returns `Err(asset-not-found)` if not
23
+ * catalogued.
24
+ * - **Prod** (after `configurePackIndex(url)`): fetches `pack-index.json`
25
+ * on the first call (cached as a `Map<guid, {packageUrl, kind}>`), then
26
+ * fetches the individual resource URL and parses the asset payload, then
27
+ * catalogues it (GUID -> payload) and returns the payload.
28
+ *
29
+ * Error union: `AssetError | PackError | ImageError | RhiError` (closed -- no
30
+ * new codes were introduced by the recursive walk; every code is pre-existing).
31
+ *
32
+ * An in-flight `Map` (D-5) deduplicates concurrent calls for the same GUID and
33
+ * prevents stack overflow on cycles (A->B->A).
34
+ *
35
+ * **Breaking-change classification:** this is a semantic strengthening, not a
36
+ * shape change. Sub-assets catalogued by a prior `catalog(guid, payload)` /
37
+ * `loadByGuid` call are protected by the catalogue fast-path: the recursive
38
+ * walk hits cache on every node and incurs zero additional fetch.
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * const res = await engine.assets.loadByGuid<SceneAsset>(sceneGuid);
43
+ * if (!res.ok) {
44
+ * switch (res.error.code) {
45
+ * case 'asset-not-found':
46
+ * // top GUID or any sub-asset GUID is missing from the catalog
47
+ * break;
48
+ * case 'asset-fetch-failed':
49
+ * // network / CORS
50
+ * break;
51
+ * case 'asset-parse-failed':
52
+ * // payload malformed
53
+ * break;
54
+ * // ... AssetErrorCode | PackErrorCode | ImageErrorCode | RhiErrorCode exhaustive
55
+ * }
56
+ * return;
57
+ * }
58
+ * ```
59
+ */
60
+ export declare function loadByGuid<T = Asset>(registry: AssetRegistry, guid: AssetGuid, parentContext?: {
61
+ sceneEntityId?: number;
62
+ componentField?: string;
63
+ }): Promise<Result<T, AssetError | ImageError | RhiError>>;
64
+ export declare function loadMaterialReadyByGuid(registry: AssetRegistry, request: MaterialLoadRequest): Promise<MaterialReady | MaterialLoadError>;
65
+ /**
66
+ * feat-20260603-asset-import-loader-injection M1 / w6: load an
67
+ * upstream-branch kind (texture / font) straight from its catalog entry
68
+ * through the injected async loader, then register the produced POD. Replaces
69
+ * the bespoke `loadTextureFromEntry` / `loadFontFromEntry` methods; the decode
70
+ * / glyph-parse logic moved verbatim into the loader bodies (D-2 — loader is
71
+ * pure of `registerWithGuid`, which stays here).
72
+ */
73
+ export declare function loadFromUpstreamEntry<T = Asset>(registry: AssetRegistry, guidKey: string, entry: {
74
+ packageUrl: string;
75
+ kind: string;
76
+ name?: string;
77
+ metadata?: ImageMetadata | undefined;
78
+ }): Promise<Result<T, AssetError | ImageError | RhiError>>;
79
+ /**
80
+ * Internal: prod fetch path for `loadByGuid`.
81
+ * Fetches pack-index.json (cached), then fetches the pack file, parses the
82
+ * asset payload, and registers it.
83
+ */
84
+ export declare function loadByGuidProd<T = Asset>(registry: AssetRegistry, guid: AssetGuid, guidKey: string, parentContext?: {
85
+ sceneEntityId?: number;
86
+ componentField?: string;
87
+ }, ancestry?: ReadonlySet<string>): Promise<Result<T, AssetError | ImageError | RhiError>>;
88
+ /**
89
+ * Resolve the catalog entry for a GUID, lazily fetching the pack-index on
90
+ * first call. Returns `undefined` when the GUID is absent from the catalog.
91
+ */
92
+ export declare function resolveCatalogEntry(registry: AssetRegistry, guidKey: string): Promise<{
93
+ packageUrl: string;
94
+ kind: string;
95
+ name?: string;
96
+ metadata?: ImageMetadata | undefined;
97
+ compression?: AssetCompression;
98
+ } | undefined>;
99
+ /**
100
+ * feat-20260618 M3 (D-2): once the pack-index is parsed, group every row by
101
+ * its `packageUrl` and register each package fully -- all of its GUIDs and
102
+ * their entry display names in one `registerPackage` call. Registering the
103
+ * whole package at once (rather than one GUID per load) means the package
104
+ * cardinality is known up front, so `resolveName` returns the basename for a
105
+ * genuinely single-asset package and the entry name for a multi-asset one,
106
+ * with no incremental 1->N promotion needed on the prod path. The name travels
107
+ * entry -> Package, never through the payload (Risk-3 JSON-roundtrip safety),
108
+ * and covers both the sync (parseAssetPayload) and async (texture/font) loads.
109
+ */
110
+ export declare function registerPackagesFromIndex(registry: AssetRegistry, catalog: Map<string, {
111
+ packageUrl: string;
112
+ name?: string;
113
+ sourcePath?: string;
114
+ subject?: CatalogSubject;
115
+ }>): void;
116
+ /**
117
+ * Load an asset through the DDC (catalog entry -> fetch pack -> loader.load
118
+ * -> register). Returns `Err(asset-not-found)` or `Err(asset-fetch-failed)`
119
+ * on DDC miss (the caller then decides whether to route through the
120
+ * import transport).
121
+ *
122
+ * This path is IDENTICAL in studio and shipped forms -- the only difference
123
+ * between the two is whether `registry.importTransport` exists when the caller
124
+ * falls back to `transportOrFail` (AC-23 key invariant).
125
+ */
126
+ export declare function ddcLoad<T = Asset>(registry: AssetRegistry, guid: AssetGuid, guidKey: string, entry: {
127
+ packageUrl: string;
128
+ kind: string;
129
+ name?: string;
130
+ metadata?: ImageMetadata | undefined;
131
+ compression?: AssetCompression;
132
+ }, parentContext?: {
133
+ sceneEntityId?: number;
134
+ componentField?: string;
135
+ }, ancestry?: ReadonlySet<string>): Promise<Result<T, AssetError | ImageError | RhiError>>;
136
+ /**
137
+ * M4 transport fallback: try the injected {@link ImportTransport} to lazily
138
+ * import a missing DDC, then re-enter the DDC load path. When no transport
139
+ * is wired (shipped form), fail fast with `asset-not-imported` (AC-22).
140
+ */
141
+ export declare function transportOrFail<T = Asset>(registry: AssetRegistry, guid: AssetGuid, guidKey: string, _missReason: AssetErrorCode): Promise<Result<T, AssetError | ImageError | RhiError>>;
142
+ /**
143
+ * Register a parsed asset POD (the synchronous tail of the DDC load path:
144
+ * `registerWithGuid`). Material parent preload is handled asynchronously
145
+ * inside `ddcLoad` before calling this method; the registered asset is
146
+ * always fully resolved by the time it reaches here.
147
+ *
148
+ * Extracted from the old `loadByGuidProd` body so `ddcLoad` and
149
+ * `transportOrFail` share an identical load path (AC-23 key invariant).
150
+ */
151
+ export declare function registerParsedAsset<T = Asset>(registry: AssetRegistry, guid: AssetGuid, asset: Asset, _guidKey: string, refs?: readonly AssetRef[]): Result<T, AssetError | ImageError | RhiError>;
152
+ /**
153
+ * Fetch a .pack.json file, find the asset entry matching guidKey, and
154
+ * reconstruct the Asset from its payload.
155
+ */
156
+ /**
157
+ * bug-20260610: fetch one pack file and return the raw asset entry without
158
+ * parsing. Used by `loadByGuidProd` for material kinds so the caller can
159
+ * recursively preload `refs[]` (texture sub-assets) BEFORE the synchronous
160
+ * materialLoader runs and rewrites values handle fields to their refs[]
161
+ * GUID strings (feat-20260614 M8 / D-19: GUID verbatim, no handle minting).
162
+ */
163
+ export declare function fetchPackEntry(_registry: AssetRegistry, packageUrl: string, guidKey: string): Promise<Result<{
164
+ kind: string;
165
+ payload: Record<string, unknown>;
166
+ refs?: string[];
167
+ }, AssetError>>;
168
+ /**
169
+ * Fetch one pack file, locate the requested asset entry, and either parse it
170
+ * inline or expose the entry to the caller (for kinds that need to preload
171
+ * `refs[]` BEFORE running the loader — currently 'material', whose
172
+ * values handle fields are rewritten to their refs[] GUID strings
173
+ * (feat-20260614 M8 / D-19: GUID verbatim, no handle minting at load time)).
174
+ *
175
+ * bug-20260610 Fix B (M3 / D-4): the fetch+parse result is cached per
176
+ * `packageUrl` in `packFileCache`; concurrent calls for the same URL share
177
+ * a single in-flight promise via `packFileInFlight`. Only the raw parsed
178
+ * body is cached — `parseAssetPayload` still runs per-call (CON-2).
179
+ */
180
+ export declare function fetchPackFile(registry: AssetRegistry, packageUrl: string, guidKey: string, _kind: string): Promise<Result<{
181
+ asset: Asset;
182
+ refs: readonly string[];
183
+ }, AssetError>>;
184
+ /**
185
+ * Parse the asset payload from a pack-file entry and return the result.
186
+ * Extracted so cache-hit and in-flight-dedup paths share the same
187
+ * parseAssetPayload + error-wrapping logic.
188
+ */
189
+ export declare function parseAndReturnAsset(registry: AssetRegistry, assetEntry: {
190
+ kind: string;
191
+ payload: Record<string, unknown>;
192
+ refs?: string[];
193
+ }): Result<{
194
+ asset: Asset;
195
+ refs: readonly string[];
196
+ }, AssetError>;
197
+ /**
198
+ * Fetch a pack file from the network, parse the JSON body, store the
199
+ * result in the cache, and return the requested asset entry.
200
+ *
201
+ * Registers the in-flight promise in `packFileInFlight` so concurrent
202
+ * callers share a single fetch. On success the body moves to
203
+ * `packFileCache`; on failure the in-flight entry is removed so
204
+ * subsequent retries re-fetch (D-7).
205
+ */
206
+ export declare function fetchAndCachePackFile(registry: AssetRegistry, packageUrl: string, guidKey: string): Promise<Result<{
207
+ asset: Asset;
208
+ refs: readonly string[];
209
+ }, AssetError>>;
210
+ /**
211
+ * Reconstruct a typed `Asset` from a raw payload object.
212
+ *
213
+ * @param kind The asset kind discriminant (matches the pack entry or
214
+ * dev-register dispatch).
215
+ * @param payload The serialised asset payload (keys mirror the asset
216
+ * interface field names).
217
+ * @param refs Pack-file refs array for Handle fields — when a field
218
+ * value is `number` it resolves to `refs[N]` (glTF-style index).
219
+ * Optional to preserve compatibility with callers outside the pack
220
+ * ingestion path (e.g., direct `registerWithGuid`).
221
+ */
222
+ export declare function parseAssetPayload(registry: AssetRegistry, kind: string, payload: Record<string, unknown>, refs?: string[]): Asset | Record<string, unknown> | undefined | {
223
+ readonly ok: false;
224
+ readonly error: ParseErrorDetail;
225
+ };
226
+ /**
227
+ * Build the {@link LoadContext} passed to a loader's `load`.
228
+ * `fetchBinary` / `resolveRef` / `device` are wired for the async texture /
229
+ * font loaders (w6).
230
+ */
231
+ export declare function makeLoadContext(registry: AssetRegistry): LoadContext;
232
+ /**
233
+ * Return a runtime snapshot of every catalogued asset. Each entry exposes
234
+ * `{ guid, kind, name }` where `kind` is the asset discriminant string
235
+ * from `payload.kind`. feat-20260614 M8 (D-15): the registry holds no
236
+ * handles -- entries are keyed by GUID (the catalogue key).
237
+ *
238
+ * AI-user narrowing flow (AC-11 + plan-strategy §7.4):
239
+ * ```ts
240
+ * for (const e of registry.inspect().assets) {
241
+ * if (e.kind === 'texture') {
242
+ * // re-query via registry.lookup(e.guid) to get the typed Asset value.
243
+ * }
244
+ * }
245
+ * ```
246
+ */
247
+ //# sourceMappingURL=load-by-guid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-by-guid.d.ts","sourceRoot":"","sources":["../../src/registry/load-by-guid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export type LoadStatus = 'unloaded' | 'provisional' | 'ready' | 'failed';
2
+ export interface LoadRecord {
3
+ readonly status: LoadStatus;
4
+ readonly refs: readonly string[];
5
+ readonly value?: unknown;
6
+ readonly error?: unknown;
7
+ }
8
+ export declare class LoadStateStore {
9
+ private readonly records;
10
+ get(guid: string): LoadRecord | undefined;
11
+ getReady<T = unknown>(guid: string): T | undefined;
12
+ /**
13
+ * Return a provisional value only for the internal SCC back-edge bridge.
14
+ * Public callers must use getReady so promotion remains the visibility gate.
15
+ */
16
+ getProvisional<T = unknown>(guid: string): T | undefined;
17
+ begin(guid: string, refs: readonly string[]): LoadRecord;
18
+ resolveAsset(guid: string, value: unknown): void;
19
+ registerReady(guid: string, value: unknown): void;
20
+ promoteReady(guid: string): void;
21
+ fail(guid: string, error: unknown): readonly string[];
22
+ remove(guid: string): void;
23
+ clear(): void;
24
+ private provisionalGroup;
25
+ }
26
+ //# sourceMappingURL=load-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-state.d.ts","sourceRoot":"","sources":["../../src/registry/load-state.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,aAAa,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEzE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AASD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwC;IAEhE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIzC,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAKlD;;;OAGG;IACH,cAAc,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAKxD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU;IAYxD,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAUhD,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAMjD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAkBhC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE;IAWrD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI1B,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,gBAAgB;CAYzB"}
@@ -0,0 +1,16 @@
1
+ import { type Result } from '@forgeax/engine-rhi';
2
+ import { AssetError, type CatalogProjection } from '@forgeax/engine-types';
3
+ import type { CatalogRecord } from './catalog';
4
+ export interface RuntimeProjection {
5
+ readonly subject: CatalogProjection['subject'];
6
+ readonly execution: CatalogProjection['execution'];
7
+ readonly lifecycle: CatalogProjection['lifecycle'];
8
+ readonly packageUrl: string;
9
+ }
10
+ /**
11
+ * Resolve the producer-declared runtime projection. Legacy rows return
12
+ * undefined so inline/dev assets retain their existing registration path;
13
+ * rows that publish any projection axis must publish all three axes.
14
+ */
15
+ export declare function resolveRuntimeProjection(guid: string, record: CatalogRecord): Result<RuntimeProjection | undefined, AssetError>;
16
+ //# sourceMappingURL=runtime-projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-projection.d.ts","sourceRoot":"","sources":["../../src/registry/runtime-projection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAqB,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC9F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACnD,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAUD;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,GACpB,MAAM,CAAC,iBAAiB,GAAG,SAAS,EAAE,UAAU,CAAC,CAmCnD"}
@@ -0,0 +1,38 @@
1
+ import { type Result } from '@forgeax/engine-rhi';
2
+ import type { AssetPublicationEnvelope, CatalogEntry, ScenePublicationFence as EngineScenePublicationFence } from '@forgeax/engine-types';
3
+ export declare const SCENE_PUBLICATION_FENCE_SCHEMA: "scene-publication-fence/1";
4
+ export declare const SCENE_PUBLICATION_RECOVERY_ACTIONS: readonly ["continue-last-known-good", "retry-rebuild", "fresh-reopen"];
5
+ export type ScenePublicationFence = EngineScenePublicationFence;
6
+ export type ScenePublicationFencePhase = 'publication' | 'catalog' | 'observation' | 'instantiate';
7
+ export interface ScenePublicationFenceError {
8
+ readonly code: 'asset-generation-fence-mismatch';
9
+ readonly phase: ScenePublicationFencePhase;
10
+ readonly hint: string;
11
+ readonly sourcePath?: string;
12
+ readonly sourceRevision?: string;
13
+ readonly expected?: ScenePublicationFence;
14
+ readonly actual?: ScenePublicationFence;
15
+ readonly currentGeneration?: number;
16
+ readonly lastKnownGood?: ScenePublicationFence;
17
+ readonly retryable: boolean;
18
+ readonly recoveryActions: readonly string[];
19
+ }
20
+ export interface ScenePublicationObservation {
21
+ readonly fence: ScenePublicationFence;
22
+ readonly outputs: readonly string[];
23
+ }
24
+ /** Convert one complete Engine publication into the serializable Scene fence. */
25
+ export declare function createScenePublicationFence(publication: AssetPublicationEnvelope): Result<ScenePublicationFence, ScenePublicationFenceError>;
26
+ /** Parse the persisted fence without guessing legacy generation or identity. */
27
+ export declare function parseScenePublicationFence(value: unknown): Result<ScenePublicationFence, ScenePublicationFenceError>;
28
+ /** Compare all fence fields; no single generation or GUID may stand in for it. */
29
+ export declare function compareScenePublicationFences(expected: ScenePublicationFence, actual: ScenePublicationFence, lastKnownGood?: ScenePublicationFence): Result<ScenePublicationFence, ScenePublicationFenceError>;
30
+ /** Derive a fence only when every Catalog row for the source publication is present and aligned. */
31
+ export declare function scenePublicationFenceFromCatalog(entries: readonly CatalogEntry[], outputGuid: string): Result<ScenePublicationFence, ScenePublicationFenceError>;
32
+ export declare function observeScenePublication(input: {
33
+ readonly publication: AssetPublicationEnvelope;
34
+ readonly waitForOutput: (guid: string) => Promise<void>;
35
+ readonly timeoutMs?: number;
36
+ readonly lastKnownGood?: ScenePublicationFence;
37
+ }): Promise<Result<ScenePublicationObservation, ScenePublicationFenceError>>;
38
+ //# sourceMappingURL=scene-publication-fence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scene-publication-fence.d.ts","sourceRoot":"","sources":["../../src/registry/scene-publication-fence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EACV,wBAAwB,EACxB,YAAY,EACZ,qBAAqB,IAAI,2BAA2B,EACrD,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,8BAA8B,EAAG,2BAAoC,CAAC;AACnF,eAAO,MAAM,kCAAkC,wEAIpC,CAAC;AAEZ,MAAM,MAAM,qBAAqB,GAAG,2BAA2B,CAAC;AAEhE,MAAM,MAAM,0BAA0B,GAAG,aAAa,GAAG,SAAS,GAAG,aAAa,GAAG,aAAa,CAAC;AAEnG,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,iCAAiC,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,0BAA0B,CAAC;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,qBAAqB,CAAC;IACxC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,aAAa,CAAC,EAAE,qBAAqB,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAkDD,iFAAiF;AACjF,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,wBAAwB,GACpC,MAAM,CAAC,qBAAqB,EAAE,0BAA0B,CAAC,CA4C3D;AAED,gFAAgF;AAChF,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,GACb,MAAM,CAAC,qBAAqB,EAAE,0BAA0B,CAAC,CA0B3D;AAED,kFAAkF;AAClF,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,qBAAqB,EAC/B,MAAM,EAAE,qBAAqB,EAC7B,aAAa,CAAC,EAAE,qBAAqB,GACpC,MAAM,CAAC,qBAAqB,EAAE,0BAA0B,CAAC,CAW3D;AAED,oGAAoG;AACpG,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,qBAAqB,EAAE,0BAA0B,CAAC,CAyB3D;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,QAAQ,CAAC,WAAW,EAAE,wBAAwB,CAAC;IAC/C,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,qBAAqB,CAAC;CAChD,GAAG,OAAO,CAAC,MAAM,CAAC,2BAA2B,EAAE,0BAA0B,CAAC,CAAC,CAoC3E"}