rig-c 0.0.0-stage → 2.20.4

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 (213) hide show
  1. package/.claude-plugin/marketplace.json +19 -0
  2. package/.claude-plugin/plugin.json +13 -0
  3. package/LICENSE +30 -0
  4. package/NOTICE.md +145 -0
  5. package/README.md +817 -3
  6. package/bin/rigc.cjs +83 -0
  7. package/cli.ts +61 -0
  8. package/cli_core.ts +46 -0
  9. package/docs/AUTHORING.md +9923 -0
  10. package/docs/FACE.md +1948 -0
  11. package/docs/INGEST.md +1488 -0
  12. package/docs/MOTION.md +1241 -0
  13. package/docs/PROMPTING.md +109 -0
  14. package/docs/RIGGING.md +1441 -0
  15. package/docs/SPEC_COVERAGE.md +357 -0
  16. package/package.json +108 -4
  17. package/skills/rigc/SKILL.md +133 -0
  18. package/skills/rigc-face/SKILL.md +60 -0
  19. package/skills/rigc-ingest/SKILL.md +78 -0
  20. package/skills/rigc-motion/SKILL.md +51 -0
  21. package/skills/rigc-rigging/SKILL.md +49 -0
  22. package/src/areaband.ts +159 -0
  23. package/src/assertions/bodies/a01.ts +23 -0
  24. package/src/assertions/bodies/a02.ts +21 -0
  25. package/src/assertions/bodies/a03.ts +27 -0
  26. package/src/assertions/bodies/a04.ts +40 -0
  27. package/src/assertions/bodies/a05.ts +56 -0
  28. package/src/assertions/bodies/a06.ts +245 -0
  29. package/src/assertions/bodies/a07.ts +68 -0
  30. package/src/assertions/bodies/a08.ts +76 -0
  31. package/src/assertions/bodies/a09.ts +82 -0
  32. package/src/assertions/bodies/a10.ts +116 -0
  33. package/src/assertions/bodies/a11.ts +15 -0
  34. package/src/assertions/bodies/a12.ts +30 -0
  35. package/src/assertions/bodies/a13.ts +51 -0
  36. package/src/assertions/bodies/a14.ts +35 -0
  37. package/src/assertions/bodies/a15.ts +97 -0
  38. package/src/assertions/bodies/a16.ts +24 -0
  39. package/src/assertions/bodies/a17.ts +26 -0
  40. package/src/assertions/bodies/a18.ts +62 -0
  41. package/src/assertions/bodies/a19.ts +404 -0
  42. package/src/assertions/bodies/a20.ts +122 -0
  43. package/src/assertions/bodies/a21.ts +190 -0
  44. package/src/assertions/bodies/a22.ts +39 -0
  45. package/src/assertions/bodies/a23.ts +305 -0
  46. package/src/assertions/bodies/a24.ts +68 -0
  47. package/src/assertions/bodies/a25.ts +39 -0
  48. package/src/assertions/bodies/a26.ts +61 -0
  49. package/src/assertions/bodies/a27.ts +33 -0
  50. package/src/assertions/bodies/a28.ts +70 -0
  51. package/src/assertions/bodies/a29.ts +34 -0
  52. package/src/assertions/bodies/a30.ts +50 -0
  53. package/src/assertions/bodies/a31.ts +61 -0
  54. package/src/assertions/bodies/a32.ts +44 -0
  55. package/src/assertions/bodies/a33.ts +110 -0
  56. package/src/assertions/bodies/a34.ts +133 -0
  57. package/src/assertions/bodies/a35.ts +160 -0
  58. package/src/assertions/bodies/a36.ts +81 -0
  59. package/src/assertions/bodies/a37.ts +77 -0
  60. package/src/assertions/bodies/a38.ts +73 -0
  61. package/src/assertions/bodies/a39.ts +303 -0
  62. package/src/assertions/bodies/a40.ts +128 -0
  63. package/src/assertions/bodies/a42.ts +97 -0
  64. package/src/assertions/bodies/a43.ts +181 -0
  65. package/src/assertions/bodies/a44.ts +23 -0
  66. package/src/assertions/bodies/a45.ts +172 -0
  67. package/src/assertions/bodies/a46.ts +224 -0
  68. package/src/assertions/bodies/a47.ts +126 -0
  69. package/src/assertions/bodies/a48.ts +83 -0
  70. package/src/assertions/bodies/a49.ts +81 -0
  71. package/src/assertions/bodies/a50.ts +97 -0
  72. package/src/assertions/constraint_words.ts +169 -0
  73. package/src/assertions/emitted/index.ts +148 -0
  74. package/src/assertions/facts/animated_bones.ts +30 -0
  75. package/src/assertions/facts/animation_durations.ts +37 -0
  76. package/src/assertions/facts/atlas_pages.ts +19 -0
  77. package/src/assertions/facts/atlas_regions.ts +52 -0
  78. package/src/assertions/facts/bone_timelines.ts +37 -0
  79. package/src/assertions/facts/constraint_targets.ts +56 -0
  80. package/src/assertions/facts/constraints.ts +155 -0
  81. package/src/assertions/facts/deform_survey.ts +27 -0
  82. package/src/assertions/facts/event_keys.ts +55 -0
  83. package/src/assertions/facts/linked_meshes.ts +38 -0
  84. package/src/assertions/facts/mesh_attachments.ts +100 -0
  85. package/src/assertions/facts/region_joins.ts +34 -0
  86. package/src/assertions/facts/sequences.ts +85 -0
  87. package/src/assertions/facts/skeleton_roster.ts +45 -0
  88. package/src/assertions/facts/skin_entries.ts +37 -0
  89. package/src/assertions/facts/skin_members.ts +53 -0
  90. package/src/assertions/facts/slider_composition.ts +78 -0
  91. package/src/assertions/facts/slot_colour.ts +43 -0
  92. package/src/assertions/facts/stage.ts +27 -0
  93. package/src/assertions/facts/stage_box.ts +65 -0
  94. package/src/assertions/facts/stepped_poses.ts +74 -0
  95. package/src/assertions/facts/two_colour.ts +52 -0
  96. package/src/assertions/facts/vertex_polygons.ts +53 -0
  97. package/src/assertions/footprints.ts +367 -0
  98. package/src/assertions/harness.ts +109 -0
  99. package/src/assertions/inward_advance.ts +58 -0
  100. package/src/assertions/kinds.ts +105 -0
  101. package/src/assertions/mesh_kinds.ts +56 -0
  102. package/src/assertions/model/animated_bones.ts +38 -0
  103. package/src/assertions/model/animation_durations.ts +57 -0
  104. package/src/assertions/model/atlas_pages.ts +15 -0
  105. package/src/assertions/model/atlas_regions.ts +76 -0
  106. package/src/assertions/model/bone_timelines.ts +58 -0
  107. package/src/assertions/model/constraint_targets.ts +82 -0
  108. package/src/assertions/model/constraints.ts +233 -0
  109. package/src/assertions/model/declared.ts +125 -0
  110. package/src/assertions/model/deform_survey.ts +24 -0
  111. package/src/assertions/model/event_keys.ts +45 -0
  112. package/src/assertions/model/given.ts +45 -0
  113. package/src/assertions/model/index.ts +398 -0
  114. package/src/assertions/model/linked_meshes.ts +24 -0
  115. package/src/assertions/model/mesh_attachments.ts +119 -0
  116. package/src/assertions/model/parse.ts +146 -0
  117. package/src/assertions/model/region_joins.ts +67 -0
  118. package/src/assertions/model/runtime_timelines.ts +78 -0
  119. package/src/assertions/model/sequences.ts +157 -0
  120. package/src/assertions/model/skeleton_roster.ts +23 -0
  121. package/src/assertions/model/skin_entries.ts +69 -0
  122. package/src/assertions/model/skin_members.ts +64 -0
  123. package/src/assertions/model/slider_composition.ts +193 -0
  124. package/src/assertions/model/slot_colour.ts +81 -0
  125. package/src/assertions/model/stage.ts +28 -0
  126. package/src/assertions/model/stage_box.ts +51 -0
  127. package/src/assertions/model/stepped_poses.ts +105 -0
  128. package/src/assertions/model/two_colour.ts +61 -0
  129. package/src/assertions/model/vertex_polygons.ts +72 -0
  130. package/src/assertions/reasons.ts +129 -0
  131. package/src/assertions/region_lookups.ts +61 -0
  132. package/src/assertions/report.ts +189 -0
  133. package/src/assertions/values.ts +39 -0
  134. package/src/atlas.ts +2870 -0
  135. package/src/ballot.ts +866 -0
  136. package/src/bonedist.ts +643 -0
  137. package/src/chainfit.ts +2752 -0
  138. package/src/chains.ts +170 -0
  139. package/src/check.ts +4303 -0
  140. package/src/checkpics.ts +295 -0
  141. package/src/cli/core_commands.ts +1627 -0
  142. package/src/cli/repack.ts +414 -0
  143. package/src/cli/shared.ts +2776 -0
  144. package/src/cli/spine_commands.ts +820 -0
  145. package/src/compile.ts +9414 -0
  146. package/src/core/additive.ts +458 -0
  147. package/src/core/animation.ts +1050 -0
  148. package/src/core/clipping.ts +696 -0
  149. package/src/core/constraints.ts +1876 -0
  150. package/src/core/constraints_path.ts +964 -0
  151. package/src/core/constraints_physics.ts +881 -0
  152. package/src/core/constraints_slider.ts +635 -0
  153. package/src/core/deform.ts +613 -0
  154. package/src/core/draw_order.ts +125 -0
  155. package/src/core/events.ts +135 -0
  156. package/src/core/hooks.ts +249 -0
  157. package/src/core/index.ts +1400 -0
  158. package/src/core/raw.ts +739 -0
  159. package/src/core/skins.ts +129 -0
  160. package/src/core/uvs.ts +469 -0
  161. package/src/core/vertices.ts +490 -0
  162. package/src/core/walk.ts +197 -0
  163. package/src/core/world.ts +289 -0
  164. package/src/correspondence.ts +15 -0
  165. package/src/deformbuild.ts +60 -0
  166. package/src/deformgen.ts +630 -0
  167. package/src/deformmeasure.ts +732 -0
  168. package/src/deformreport.ts +373 -0
  169. package/src/deformstructure.ts +386 -0
  170. package/src/deformsurvey.ts +2162 -0
  171. package/src/depth.ts +784 -0
  172. package/src/diff.ts +2252 -0
  173. package/src/emit.ts +134 -0
  174. package/src/emit_spine.ts +854 -0
  175. package/src/errors.ts +53 -0
  176. package/src/framing.ts +819 -0
  177. package/src/generation.ts +139 -0
  178. package/src/ingest.ts +2293 -0
  179. package/src/json-position.ts +253 -0
  180. package/src/keyorder.ts +587 -0
  181. package/src/keys.ts +486 -0
  182. package/src/ladder.ts +121 -0
  183. package/src/mesh.ts +2382 -0
  184. package/src/meshcompare.ts +1188 -0
  185. package/src/meshquality.ts +2042 -0
  186. package/src/meshrasters.ts +944 -0
  187. package/src/meshreduce.ts +1425 -0
  188. package/src/model.ts +1245 -0
  189. package/src/motion.ts +809 -0
  190. package/src/nonfinite.ts +54 -0
  191. package/src/package_meta.ts +48 -0
  192. package/src/png.ts +297 -0
  193. package/src/pose.ts +2324 -0
  194. package/src/preview.ts +434 -0
  195. package/src/region_joins.ts +54 -0
  196. package/src/render.ts +1013 -0
  197. package/src/render_core.ts +871 -0
  198. package/src/render_shared.ts +2958 -0
  199. package/src/repack.ts +495 -0
  200. package/src/rig.ts +2941 -0
  201. package/src/slots.ts +892 -0
  202. package/src/spine_side.ts +138 -0
  203. package/src/timelines.ts +837 -0
  204. package/src/trackgen.ts +364 -0
  205. package/src/transform.ts +310 -0
  206. package/src/types.ts +1797 -0
  207. package/src/validate.ts +3875 -0
  208. package/tools/contact.ts +126 -0
  209. package/tools/editor_roundtrip.ts +1641 -0
  210. package/tools/font5x7.ts +101 -0
  211. package/tools/measure_contact_depth.ts +105 -0
  212. package/tools/plate.ts +508 -0
  213. package/tools/png_probe.mjs +72 -0
@@ -0,0 +1,138 @@
1
+ /**
2
+ * The seam the Spine side registers into (issue #1052, step 4e of #380).
3
+ *
4
+ * ⭐ Everything rigc does without spine-core lives in modules that link
5
+ * nothing of it — the posing seam and its samplers, the candidate and its
6
+ * poser choice, the framing and the rasteriser (`./render_shared.ts`), the
7
+ * deform survey's choice of reader (`./deformbuild.ts`). Where one of those
8
+ * reaches an input only the runtime can read — a Spine export, `--poser
9
+ * spine`, a fallback the poser line names, a skeleton spine-core already
10
+ * parsed — it asks this registry for the Spine side instead of importing it.
11
+ * The modules that link the runtime fill it when they are loaded:
12
+ * `./render.ts` registers the posing side (spine-core's poser, the export's
13
+ * loader, its atlas reader), `./deformmeasure.ts` the survey's spine-core
14
+ * reader and poser. So a program that imports either of them — `cli.ts`, the
15
+ * tools, the selftest — behaves exactly as it did before the registry
16
+ * existed, and an entry that imports neither links nothing of the runtime and
17
+ * refuses such an input by name (`SpineRuntimeError`, the sentence below).
18
+ *
19
+ * 🔒 Nothing here is a fallback or a default. With nothing registered, the
20
+ * question "what would spine-core say about this input" has no answer, and
21
+ * the refusal says which input asked it and why it needed the runtime.
22
+ */
23
+ import type { DeformSurvey } from './deformsurvey.ts';
24
+ import type { DeformSurveyInput } from './deformbuild.ts';
25
+ import type { Poser, SkeletonFacts, SkinRoster, SubstituteRegion } from './render_shared.ts';
26
+
27
+ /**
28
+ * A skeleton spine-core parsed, as the side of the seam that does not link
29
+ * the runtime holds it: opaque. Only the module that registered the posing
30
+ * side reads it (`SkeletonData` in `./render.ts`), so nothing here names the
31
+ * runtime's type.
32
+ */
33
+ export type SpineSkeletonData = object;
34
+
35
+ /**
36
+ * Posing an input through spine-core when the runtime cannot be reached —
37
+ * refused naming the input and why it needs the runtime (issue #1014).
38
+ *
39
+ * A Spine export, `--poser spine` and a fallback the poser line names are what
40
+ * spine-core is loaded for; a rigc build the core poses reads nothing through
41
+ * it. So the one run that can meet a runtime it cannot use is one of those
42
+ * three, and it says so rather than surfacing whatever the first access threw.
43
+ *
44
+ * Since issue #1052 it is also the refusal of an entry that registered no
45
+ * Spine side (`SPINE_SIDE_ABSENT`): the same three inputs, the same sentence,
46
+ * and the reason is that the runtime is not linked at all.
47
+ */
48
+ export class SpineRuntimeError extends Error {}
49
+
50
+ /** What `render` and `check` say after the reason, naming what the runtime is for. */
51
+ export const POSING_RUNTIME_TAIL =
52
+ 'spine-core is what poses a Spine export, --poser spine and a fallback the poser line names; ' +
53
+ 'a rigc build the core poses reads nothing through it';
54
+
55
+ /** What `explain`'s deform survey says after the reason. */
56
+ export const SURVEY_RUNTIME_TAIL =
57
+ 'spine-core is what reads and poses a Spine export, --poser spine and a fallback the survey names; ' +
58
+ 'a rigc build the core poses reads nothing through it';
59
+
60
+ /**
61
+ * The reason an entry that registered no Spine side gives — in the place the
62
+ * runtime's own error stands when it is linked and cannot be used.
63
+ */
64
+ export const SPINE_SIDE_ABSENT = 'the runtime side is not installed in this entry, which links nothing of spine-core';
65
+
66
+ /**
67
+ * What an entry that registered no Spine side adds after the tail: where the
68
+ * runtime is (issue #1079). On an install `bin/rigc.cjs` runs this entry
69
+ * wherever `@esotericsoftware/spine-core` does not resolve, so "the runtime is
70
+ * not linked" there means "it is not installed" — and a clone runs it as
71
+ * `bun cli_core.ts`, so both routes are named, each for its reader.
72
+ *
73
+ * ⚠️ Only the absent side says it. A runtime that is linked and fails to load
74
+ * (`./render.ts`, `./deformmeasure.ts`) is installed already, and "install it
75
+ * beside the package" would be the wrong sentence there.
76
+ */
77
+ export const SPINE_SIDE_ROUTE =
78
+ 'the entry that links it runs them — installed, the same `rigc` once @esotericsoftware/spine-core is installed beside the package; ' +
79
+ 'from a source checkout, `bun cli.ts`';
80
+
81
+ /** The one sentence a run that needs the runtime and cannot use it is refused in — `tail` says what the runtime is for. */
82
+ export function spineRuntimeSentence(label: string, why: string, reason: string, tail: string): string {
83
+ return `${label} is posed through spine-core (${why}), and the runtime could not be used: ${reason}. ${tail}`;
84
+ }
85
+
86
+ /** What `./render.ts` registers: spine-core's poser, the export's loader and its atlas reader. */
87
+ export interface SpinePosingSide {
88
+ /** Touch the runtime once and refuse by name when it cannot be used (`SpineRuntimeError`). */
89
+ requireRuntime(label: string, why: string): void;
90
+ /** A skeleton parsed against its atlas; a pair the runtime cannot load is `refuse`'s refusal, given the runtime's message. */
91
+ skeletonData(skeletonText: string, atlasText: string, refuse: (runtime: string) => Error): SpineSkeletonData;
92
+ /** What `render` and `check` read off a skeleton spine-core parsed, `atlasText` the atlas it was parsed through. */
93
+ facts(data: SpineSkeletonData, atlasText: string | null): SkeletonFacts;
94
+ /** spine-core's implementation of the posing seam over a parsed skeleton. */
95
+ poser(data: SpineSkeletonData): Poser;
96
+ /** The skin roster of a parsed skeleton, as the runtime flags its bones under each skin. */
97
+ skinRoster(data: SpineSkeletonData): SkinRoster;
98
+ /** The page names an atlas declares, in its order, as the runtime's atlas reader reads them. */
99
+ atlasPageNames(atlasText: string): string[];
100
+ /** An atlas's pages and regions as the runtime reads them, for a texture substitution. */
101
+ substitution(atlasText: string): { pages: string[]; regions: Map<string, SubstituteRegion> };
102
+ }
103
+
104
+ /** What `./deformmeasure.ts` registers: the deform survey read and posed through spine-core. */
105
+ export interface SpineSurveySide {
106
+ /** The survey of `input`'s Spine skeleton through the runtime; `why` the reason the survey names (`null`: `--poser spine`). */
107
+ throughSpine(label: string, why: string | null, input: DeformSurveyInput, exempt: ReadonlySet<string>): DeformSurvey;
108
+ }
109
+
110
+ let posing: SpinePosingSide | null = null;
111
+ let survey: SpineSurveySide | null = null;
112
+
113
+ /** Called by `./render.ts` when it is loaded. */
114
+ export function registerSpinePosing(side: SpinePosingSide): void {
115
+ posing = side;
116
+ }
117
+
118
+ /** Called by `./deformmeasure.ts` when it is loaded. */
119
+ export function registerSpineSurvey(side: SpineSurveySide): void {
120
+ survey = side;
121
+ }
122
+
123
+ /** The posing side, or a refusal of `label` (needed for `why`) naming the runtime as absent. */
124
+ export function spinePosingFor(label: string, why: string): SpinePosingSide {
125
+ if (posing === null) throw new SpineRuntimeError(spineRuntimeSentence(label, why, SPINE_SIDE_ABSENT, `${POSING_RUNTIME_TAIL}; ${SPINE_SIDE_ROUTE}`));
126
+ return posing;
127
+ }
128
+
129
+ /** The survey side, or a refusal of `label` (needed for `why`) naming the runtime as absent. */
130
+ export function spineSurveyFor(label: string, why: string): SpineSurveySide {
131
+ if (survey === null) throw new SpineRuntimeError(spineRuntimeSentence(label, why, SPINE_SIDE_ABSENT, `${SURVEY_RUNTIME_TAIL}; ${SPINE_SIDE_ROUTE}`));
132
+ return survey;
133
+ }
134
+
135
+ /** Which sides are registered in this process — what an entry's own report of itself reads. */
136
+ export function registeredSpineSides(): { posing: boolean; survey: boolean } {
137
+ return { posing: posing !== null, survey: survey !== null };
138
+ }