modelstage 0.5.28 → 0.6.1

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 (78) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/README.md +2 -63
  3. package/config/models/live2d.assetbundls.json +1 -1
  4. package/config/models/live2d.azurlane.json +1 -1
  5. package/config/models/live2d.azurlane_bundle.json +1 -1
  6. package/config/models/live2d.azurlane_bundle.jsonl +2 -0
  7. package/config/models/live2d.azurlane_spine.json +1 -1
  8. package/config/models/live2d.bd2.json +1 -1
  9. package/config/models/live2d.bd2.jsonl +2 -0
  10. package/config/models/live2d.bluearchive.json +1 -1
  11. package/config/models/live2d.nikke.json +1 -1
  12. package/config/models/live2d.nikke.jsonl +2 -0
  13. package/config/models/live2d.nikke_2.json +1 -1
  14. package/config/models/live2d.npc.json +1 -1
  15. package/config/models/spine.assetbundls.json +1 -1
  16. package/config/models/spine.azurlane.json +1 -1
  17. package/config/models/spine.azurlane_bundle.json +1 -1
  18. package/config/models/spine.azurlane_bundle.jsonl +2 -0
  19. package/config/models/spine.azurlane_spine.json +1 -1
  20. package/config/models/spine.bd2.json +1 -1
  21. package/config/models/spine.bd2.jsonl +433 -0
  22. package/config/models/spine.bluearchive.json +1 -1
  23. package/config/models/spine.nikke.json +1 -1
  24. package/config/models/spine.nikke_2.json +1 -1
  25. package/config/models/spine.npc.json +1 -1
  26. package/package.json +2 -1
  27. package/src/server/assets/probe.mjs +1 -1
  28. package/src/server/core/config.mjs +2 -2
  29. package/src/server/core/log.mjs +1 -1
  30. package/src/server/data/catalog.mjs +11 -14
  31. package/src/server/data/live2d.mjs +139 -40
  32. package/src/server/data/manifest-cache.mjs +53 -10
  33. package/src/server/data/manifest-jsonl.mjs +264 -0
  34. package/src/server/data/manifest-stamp.mjs +52 -2
  35. package/src/server/data/scan-progress.mjs +305 -0
  36. package/src/server/data/scan-queue.mjs +99 -0
  37. package/src/server/data/spine.mjs +324 -106
  38. package/src/server/plugins/registry.mjs +1 -1
  39. package/src/server/routes/data.mjs +76 -17
  40. package/src/server/serve.mjs +9 -4
  41. package/src/server/unpack/plugin-store.mjs +1 -1
  42. package/src/server/unpack/runtime/exec.mjs +37 -8
  43. package/src/server/unpack/worker-client.mjs +23 -8
  44. package/src/shared/scan-limits.mjs +23 -0
  45. package/src/web/app/anim-list.js +1 -1
  46. package/src/web/app/backgrounds.js +4 -8
  47. package/src/web/app/dir-picker.js +3 -5
  48. package/src/web/app/memory-budget.js +0 -1
  49. package/src/web/app/memory-guard.js +0 -1
  50. package/src/web/app/model-actions.js +18 -15
  51. package/src/web/app/root-manager.js +2 -4
  52. package/src/web/app/transport-actions.js +1 -1
  53. package/src/web/app/ui-state.js +1 -1
  54. package/src/web/components.css +90 -0
  55. package/src/web/debug/race-probe.js +36 -13
  56. package/src/web/engine/textures.js +1 -2
  57. package/src/web/infra/api.js +10 -19
  58. package/src/web/infra/document.js +3 -3
  59. package/src/web/infra/plugin-host-unpack.mjs +81 -9
  60. package/src/web/infra/ready.js +177 -39
  61. package/src/web/live2d/bridge.js +1 -1
  62. package/src/web/live2d/runtime-adapter.js +2 -4
  63. package/src/web/panel/panel-settings.js +88 -3
  64. package/src/web/roster/events.js +159 -0
  65. package/src/web/roster/filter.js +4 -4
  66. package/src/web/roster/list.js +3 -3
  67. package/src/web/roster/load.js +440 -0
  68. package/src/web/roster/persist.js +46 -37
  69. package/src/web/roster/render.js +284 -0
  70. package/src/web/roster/reveal.js +4 -9
  71. package/src/web/roster/rows.js +35 -13
  72. package/src/web/roster/scan-stream.js +346 -0
  73. package/src/web/roster/snapshot.js +14 -8
  74. package/src/web/roster/store.js +292 -0
  75. package/src/web/roster/type-filter.js +5 -5
  76. package/src/web/roster/view.js +147 -634
  77. package/src/web/spine/canvas-runtime.js +4 -5
  78. package/src/web/spine/runtimes.js +1 -1
@@ -34,16 +34,16 @@ export function typeKeyOf(variant) {
34
34
  * scope 参数是为将来扩维度(如按资源根)预留的:当前只消费 keyword,新增维度时只加 scope 字段,
35
35
  * 不动本函数的排序/计数逻辑(设计稿 §5.4)。
36
36
  *
37
- * @param {{games: object[], gameChars: Map, keyword?: string,
37
+ * @param {{groups: object[], groupChars: Map, keyword?: string,
38
38
  * scope?: {keyword?: string}}} input
39
39
  * @returns {Array<{key: string, count: number}>} 按数量降序,并列按 key 字典序(稳定)
40
40
  */
41
- export function deriveTypeCounts({ games, gameChars, keyword = '', scope = null }) {
41
+ export function deriveTypeCounts({ groups, groupChars, keyword = '', scope = null }) {
42
42
  const effectiveKeyword = String((scope && scope.keyword) != null ? scope.keyword : keyword || '').toLowerCase();
43
43
  const counts = new Map();
44
- for (const game of games || []) {
44
+ for (const group of groups || []) {
45
45
  // 复用关键词过滤的同一口径(角色整组判定),保证"数字"与"列表可见性"不会两套算法
46
- const chars = visibleChars(game, { gameChars, keyword: effectiveKeyword });
46
+ const chars = visibleChars(group, { groupChars, keyword: effectiveKeyword });
47
47
  for (const char of chars) {
48
48
  for (const variant of char.variants || []) {
49
49
  const typeKey = typeKeyOf(variant);
@@ -60,7 +60,7 @@ export function deriveTypeCounts({ games, gameChars, keyword = '', scope = null
60
60
  * 按选中类型过滤角色(并把每个角色的变体裁到命中集合)。
61
61
  *
62
62
  * 语义:selectedTypes 为空 ⇒ 不过滤(等于"全部");否则 = 并集(命中任一选中类型即保留)。
63
- * 注意返回的是**新数组/新角色对象**,不改动 state.gameChars 里的原对象(渲染层只读)。
63
+ * 注意返回的是**新数组/新角色对象**,不改动 state.groupChars 里的原对象(渲染层只读)。
64
64
  *
65
65
  * @param {object[]} chars 角色数组(每个带 variants)
66
66
  * @param {Set<string>|string[]} selectedTypes