simfile 0.0.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 (249) hide show
  1. package/README.md +143 -0
  2. package/dist/cli/index.d.ts +3 -0
  3. package/dist/cli/index.d.ts.map +1 -0
  4. package/dist/cli/index.js +348 -0
  5. package/dist/coverage/index.d.ts +2 -0
  6. package/dist/coverage/index.d.ts.map +1 -0
  7. package/dist/coverage/index.js +1 -0
  8. package/dist/coverage/matrix.d.ts +21 -0
  9. package/dist/coverage/matrix.d.ts.map +1 -0
  10. package/dist/coverage/matrix.js +173 -0
  11. package/dist/coverage/render.d.ts +3 -0
  12. package/dist/coverage/render.d.ts.map +1 -0
  13. package/dist/coverage/render.js +26 -0
  14. package/dist/index.d.ts +8 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +7 -0
  17. package/dist/kernel/duration.d.ts +9 -0
  18. package/dist/kernel/duration.d.ts.map +1 -0
  19. package/dist/kernel/duration.js +44 -0
  20. package/dist/kernel/index.d.ts +4 -0
  21. package/dist/kernel/index.d.ts.map +1 -0
  22. package/dist/kernel/index.js +3 -0
  23. package/dist/kernel/range.d.ts +6 -0
  24. package/dist/kernel/range.d.ts.map +1 -0
  25. package/dist/kernel/range.js +16 -0
  26. package/dist/kernel/stochastic.d.ts +10 -0
  27. package/dist/kernel/stochastic.d.ts.map +1 -0
  28. package/dist/kernel/stochastic.js +25 -0
  29. package/dist/ledger/index.d.ts +4 -0
  30. package/dist/ledger/index.d.ts.map +1 -0
  31. package/dist/ledger/index.js +3 -0
  32. package/dist/ledger/markers.d.ts +46 -0
  33. package/dist/ledger/markers.d.ts.map +1 -0
  34. package/dist/ledger/markers.js +108 -0
  35. package/dist/ledger/stable.d.ts +65 -0
  36. package/dist/ledger/stable.d.ts.map +1 -0
  37. package/dist/ledger/stable.js +78 -0
  38. package/dist/ledger/validation.d.ts +16 -0
  39. package/dist/ledger/validation.d.ts.map +1 -0
  40. package/dist/ledger/validation.js +127 -0
  41. package/dist/moltnet/index.d.ts +3 -0
  42. package/dist/moltnet/index.d.ts.map +1 -0
  43. package/dist/moltnet/index.js +2 -0
  44. package/dist/moltnet/transcript-export.d.ts +34 -0
  45. package/dist/moltnet/transcript-export.d.ts.map +1 -0
  46. package/dist/moltnet/transcript-export.js +68 -0
  47. package/dist/moltnet/world-participant.d.ts +77 -0
  48. package/dist/moltnet/world-participant.d.ts.map +1 -0
  49. package/dist/moltnet/world-participant.js +221 -0
  50. package/dist/observe/artifacts.d.ts +16 -0
  51. package/dist/observe/artifacts.d.ts.map +1 -0
  52. package/dist/observe/artifacts.js +31 -0
  53. package/dist/observe/causalStreams.d.ts +19 -0
  54. package/dist/observe/causalStreams.d.ts.map +1 -0
  55. package/dist/observe/causalStreams.js +38 -0
  56. package/dist/observe/compute.d.ts +17 -0
  57. package/dist/observe/compute.d.ts.map +1 -0
  58. package/dist/observe/compute.js +97 -0
  59. package/dist/observe/index.d.ts +11 -0
  60. package/dist/observe/index.d.ts.map +1 -0
  61. package/dist/observe/index.js +10 -0
  62. package/dist/observe/manifest.d.ts +79 -0
  63. package/dist/observe/manifest.d.ts.map +1 -0
  64. package/dist/observe/manifest.js +87 -0
  65. package/dist/observe/memoryBanks.d.ts +38 -0
  66. package/dist/observe/memoryBanks.d.ts.map +1 -0
  67. package/dist/observe/memoryBanks.js +86 -0
  68. package/dist/observe/observe.d.ts +32 -0
  69. package/dist/observe/observe.d.ts.map +1 -0
  70. package/dist/observe/observe.js +73 -0
  71. package/dist/observe/report.d.ts +165 -0
  72. package/dist/observe/report.d.ts.map +1 -0
  73. package/dist/observe/report.js +138 -0
  74. package/dist/observe/seedSpread.d.ts +49 -0
  75. package/dist/observe/seedSpread.d.ts.map +1 -0
  76. package/dist/observe/seedSpread.js +262 -0
  77. package/dist/observe/seedSpreadArtifacts.d.ts +49 -0
  78. package/dist/observe/seedSpreadArtifacts.d.ts.map +1 -0
  79. package/dist/observe/seedSpreadArtifacts.js +118 -0
  80. package/dist/observe/spreadMatcher.d.ts +45 -0
  81. package/dist/observe/spreadMatcher.d.ts.map +1 -0
  82. package/dist/observe/spreadMatcher.js +124 -0
  83. package/dist/report/index.d.ts +4 -0
  84. package/dist/report/index.d.ts.map +1 -0
  85. package/dist/report/index.js +3 -0
  86. package/dist/report/probeArtifact.d.ts +26 -0
  87. package/dist/report/probeArtifact.d.ts.map +1 -0
  88. package/dist/report/probeArtifact.js +119 -0
  89. package/dist/report/probes.d.ts +52 -0
  90. package/dist/report/probes.d.ts.map +1 -0
  91. package/dist/report/probes.js +164 -0
  92. package/dist/report/score.d.ts +27 -0
  93. package/dist/report/score.d.ts.map +1 -0
  94. package/dist/report/score.js +14 -0
  95. package/dist/report/transcripts.d.ts +12 -0
  96. package/dist/report/transcripts.d.ts.map +1 -0
  97. package/dist/report/transcripts.js +17 -0
  98. package/dist/runtime/causal-fixture.d.ts +26 -0
  99. package/dist/runtime/causal-fixture.d.ts.map +1 -0
  100. package/dist/runtime/causal-fixture.js +36 -0
  101. package/dist/runtime/clock.d.ts +25 -0
  102. package/dist/runtime/clock.d.ts.map +1 -0
  103. package/dist/runtime/clock.js +63 -0
  104. package/dist/runtime/condition.d.ts +55 -0
  105. package/dist/runtime/condition.d.ts.map +1 -0
  106. package/dist/runtime/condition.js +122 -0
  107. package/dist/runtime/emit-causal-fixture.d.ts +2 -0
  108. package/dist/runtime/emit-causal-fixture.d.ts.map +1 -0
  109. package/dist/runtime/emit-causal-fixture.js +45 -0
  110. package/dist/runtime/expression.d.ts +11 -0
  111. package/dist/runtime/expression.d.ts.map +1 -0
  112. package/dist/runtime/expression.js +305 -0
  113. package/dist/runtime/numeric.d.ts +7 -0
  114. package/dist/runtime/numeric.d.ts.map +1 -0
  115. package/dist/runtime/numeric.js +11 -0
  116. package/dist/runtime/rule-actions.d.ts +5 -0
  117. package/dist/runtime/rule-actions.d.ts.map +1 -0
  118. package/dist/runtime/rule-actions.js +82 -0
  119. package/dist/runtime/run-record.d.ts +73 -0
  120. package/dist/runtime/run-record.d.ts.map +1 -0
  121. package/dist/runtime/run-record.js +179 -0
  122. package/dist/runtime/step-tick.d.ts +43 -0
  123. package/dist/runtime/step-tick.d.ts.map +1 -0
  124. package/dist/runtime/step-tick.js +177 -0
  125. package/dist/runtime/trace-compile.d.ts +66 -0
  126. package/dist/runtime/trace-compile.d.ts.map +1 -0
  127. package/dist/runtime/trace-compile.js +157 -0
  128. package/dist/runtime/trace-export.d.ts +5 -0
  129. package/dist/runtime/trace-export.d.ts.map +1 -0
  130. package/dist/runtime/trace-export.js +4 -0
  131. package/dist/runtime/trace-run.d.ts +15 -0
  132. package/dist/runtime/trace-run.d.ts.map +1 -0
  133. package/dist/runtime/trace-run.js +92 -0
  134. package/dist/runtime/trace.d.ts +10 -0
  135. package/dist/runtime/trace.d.ts.map +1 -0
  136. package/dist/runtime/trace.js +9 -0
  137. package/dist/runtime/types.d.ts +61 -0
  138. package/dist/runtime/types.d.ts.map +1 -0
  139. package/dist/runtime/types.js +1 -0
  140. package/dist/runtime/viewer-trace.d.ts +64 -0
  141. package/dist/runtime/viewer-trace.d.ts.map +1 -0
  142. package/dist/runtime/viewer-trace.js +164 -0
  143. package/dist/runtime/world-act.d.ts +55 -0
  144. package/dist/runtime/world-act.d.ts.map +1 -0
  145. package/dist/runtime/world-act.js +156 -0
  146. package/dist/schema/binding.d.ts +23 -0
  147. package/dist/schema/binding.d.ts.map +1 -0
  148. package/dist/schema/binding.js +249 -0
  149. package/dist/schema/index.d.ts +5 -0
  150. package/dist/schema/index.d.ts.map +1 -0
  151. package/dist/schema/index.js +4 -0
  152. package/dist/schema/model.d.ts +244 -0
  153. package/dist/schema/model.d.ts.map +1 -0
  154. package/dist/schema/model.js +222 -0
  155. package/dist/schema/parse.d.ts +10 -0
  156. package/dist/schema/parse.d.ts.map +1 -0
  157. package/dist/schema/parse.js +15 -0
  158. package/dist/schema/semantic.d.ts +3 -0
  159. package/dist/schema/semantic.d.ts.map +1 -0
  160. package/dist/schema/semantic.js +135 -0
  161. package/dist/sims/composeRunManifest.d.ts +54 -0
  162. package/dist/sims/composeRunManifest.d.ts.map +1 -0
  163. package/dist/sims/composeRunManifest.js +40 -0
  164. package/dist/sims/composedJungianSimDriver.d.ts +50 -0
  165. package/dist/sims/composedJungianSimDriver.d.ts.map +1 -0
  166. package/dist/sims/composedJungianSimDriver.js +199 -0
  167. package/dist/sims/composedOfficeSimDriver.d.ts +53 -0
  168. package/dist/sims/composedOfficeSimDriver.d.ts.map +1 -0
  169. package/dist/sims/composedOfficeSimDriver.js +162 -0
  170. package/dist/sims/exchangeWait.d.ts +56 -0
  171. package/dist/sims/exchangeWait.d.ts.map +1 -0
  172. package/dist/sims/exchangeWait.js +66 -0
  173. package/dist/sims/index.d.ts +14 -0
  174. package/dist/sims/index.d.ts.map +1 -0
  175. package/dist/sims/index.js +13 -0
  176. package/dist/sims/moltnetRoomClient.d.ts +47 -0
  177. package/dist/sims/moltnetRoomClient.d.ts.map +1 -0
  178. package/dist/sims/moltnetRoomClient.js +41 -0
  179. package/dist/sims/poll.d.ts +19 -0
  180. package/dist/sims/poll.d.ts.map +1 -0
  181. package/dist/sims/poll.js +23 -0
  182. package/dist/sims/spawnfileCli.d.ts +49 -0
  183. package/dist/sims/spawnfileCli.d.ts.map +1 -0
  184. package/dist/sims/spawnfileCli.js +90 -0
  185. package/dist/sims/spawnfileReceipts.d.ts +76 -0
  186. package/dist/sims/spawnfileReceipts.d.ts.map +1 -0
  187. package/dist/sims/spawnfileReceipts.js +107 -0
  188. package/dist/sims/worldDrivenOfficeSimDriver.d.ts +59 -0
  189. package/dist/sims/worldDrivenOfficeSimDriver.d.ts.map +1 -0
  190. package/dist/sims/worldDrivenOfficeSimDriver.js +182 -0
  191. package/dist/sims/worldLedgerWriter.d.ts +32 -0
  192. package/dist/sims/worldLedgerWriter.d.ts.map +1 -0
  193. package/dist/sims/worldLedgerWriter.js +39 -0
  194. package/dist/sims/worldSeedLint.d.ts +42 -0
  195. package/dist/sims/worldSeedLint.d.ts.map +1 -0
  196. package/dist/sims/worldSeedLint.js +73 -0
  197. package/dist/sims/worldTickIngest.d.ts +27 -0
  198. package/dist/sims/worldTickIngest.d.ts.map +1 -0
  199. package/dist/sims/worldTickIngest.js +35 -0
  200. package/dist/sims/worldTickLoop.d.ts +64 -0
  201. package/dist/sims/worldTickLoop.d.ts.map +1 -0
  202. package/dist/sims/worldTickLoop.js +122 -0
  203. package/dist/view/engineProvenance.d.ts +46 -0
  204. package/dist/view/engineProvenance.d.ts.map +1 -0
  205. package/dist/view/engineProvenance.js +76 -0
  206. package/dist/view/index.d.ts +14 -0
  207. package/dist/view/index.d.ts.map +1 -0
  208. package/dist/view/index.js +107 -0
  209. package/dist/view/membranes.d.ts +14 -0
  210. package/dist/view/membranes.d.ts.map +1 -0
  211. package/dist/view/membranes.js +127 -0
  212. package/dist/view/runDetect.d.ts +2 -0
  213. package/dist/view/runDetect.d.ts.map +1 -0
  214. package/dist/view/runDetect.js +47 -0
  215. package/dist/view/runRawArtifacts.d.ts +48 -0
  216. package/dist/view/runRawArtifacts.d.ts.map +1 -0
  217. package/dist/view/runRawArtifacts.js +143 -0
  218. package/dist/view/runTimeline.d.ts +24 -0
  219. package/dist/view/runTimeline.d.ts.map +1 -0
  220. package/dist/view/runTimeline.js +204 -0
  221. package/dist/view/runTimelineRecords.d.ts +42 -0
  222. package/dist/view/runTimelineRecords.d.ts.map +1 -0
  223. package/dist/view/runTimelineRecords.js +244 -0
  224. package/dist/view/runTimelineRefs.d.ts +27 -0
  225. package/dist/view/runTimelineRefs.d.ts.map +1 -0
  226. package/dist/view/runTimelineRefs.js +31 -0
  227. package/dist/view/runTimelineTypes.d.ts +99 -0
  228. package/dist/view/runTimelineTypes.d.ts.map +1 -0
  229. package/dist/view/runTimelineTypes.js +1 -0
  230. package/dist/view/runViewModel.d.ts +21 -0
  231. package/dist/view/runViewModel.d.ts.map +1 -0
  232. package/dist/view/runViewModel.js +66 -0
  233. package/dist/view/runViewModelCompute.d.ts +24 -0
  234. package/dist/view/runViewModelCompute.d.ts.map +1 -0
  235. package/dist/view/runViewModelCompute.js +157 -0
  236. package/dist/view/runViewModelTypes.d.ts +177 -0
  237. package/dist/view/runViewModelTypes.d.ts.map +1 -0
  238. package/dist/view/runViewModelTypes.js +1 -0
  239. package/dist/view/runWorldTrace.d.ts +97 -0
  240. package/dist/view/runWorldTrace.d.ts.map +1 -0
  241. package/dist/view/runWorldTrace.js +88 -0
  242. package/dist/view/server.d.ts +12 -0
  243. package/dist/view/server.d.ts.map +1 -0
  244. package/dist/view/server.js +306 -0
  245. package/package.json +65 -0
  246. package/web/dist/assets/index-CJHLjfsG.js +49 -0
  247. package/web/dist/assets/index-DJOsPsU8.css +1 -0
  248. package/web/dist/index.html +13 -0
  249. package/web/dist/models/AnimatedMushnub.glb +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,wEAAwE;AACxE,MAAM,MAAM,qBAAqB,GAC7B,kBAAkB,GAClB,gBAAgB,GAChB,cAAc,GACd,YAAY,GACZ,WAAW,GACX,YAAY,CAAC;AAEjB,kEAAkE;AAClE,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,qBAAqB,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CACvC;AAED,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAEnH;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,wBAAwB,CAAC,CAAC;AAE9E,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,64 @@
1
+ import type { MarkerCoverageResult } from "../ledger/markers.js";
2
+ import type { ProbeEvaluationResult } from "../report/probes.js";
3
+ import type { Simfile } from "../schema/model.js";
4
+ import type { RuntimeTrace, RuntimeTraceEvent } from "./types.js";
5
+ export interface ViewerTraceRoom {
6
+ id: string;
7
+ label: string;
8
+ members: string[];
9
+ scene: [number, number, number];
10
+ scale?: [number, number];
11
+ scope: string;
12
+ }
13
+ export interface ViewerTraceCorridor {
14
+ from_room: string;
15
+ id: string;
16
+ path: Array<{
17
+ x: number;
18
+ y: number;
19
+ }>;
20
+ to_room: string;
21
+ width?: number;
22
+ }
23
+ export interface ViewerTraceAgent {
24
+ detail?: string;
25
+ id: string;
26
+ label?: string;
27
+ label_hint?: string;
28
+ scope: string;
29
+ }
30
+ export interface ViewerTraceFact {
31
+ actor: string;
32
+ detail: string;
33
+ event_id: string;
34
+ kind: string;
35
+ payload: RuntimeTraceEvent["payload"];
36
+ provenance: RuntimeTraceEvent["provenance"];
37
+ scope?: string;
38
+ sim_time: number;
39
+ target: string;
40
+ tick: number;
41
+ type: "clock.sync" | "world.message" | "world.dm" | "wake.recommended" | "rule.fired" | "marker.seen" | "probe" | "other";
42
+ }
43
+ export interface ViewerTraceSignal {
44
+ detail: string;
45
+ id: string;
46
+ kind: "variable" | "marker" | "probe";
47
+ label: string;
48
+ scene: [number, number, number];
49
+ scope: string;
50
+ value: string;
51
+ }
52
+ export interface ViewerContractTrace {
53
+ agents: ViewerTraceAgent[];
54
+ corridors: ViewerTraceCorridor[];
55
+ ledger_facts: ViewerTraceFact[];
56
+ presence: [];
57
+ rooms: ViewerTraceRoom[];
58
+ run_id: string;
59
+ run_name: string;
60
+ signals: ViewerTraceSignal[];
61
+ version: "viewer.trace.v1";
62
+ }
63
+ export declare const buildViewerTrace: (simfile: Simfile, trace: RuntimeTrace, markers: readonly MarkerCoverageResult[], probes: readonly ProbeEvaluationResult[]) => ViewerContractTrace;
64
+ //# sourceMappingURL=viewer-trace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewer-trace.d.ts","sourceRoot":"","sources":["../../src/runtime/viewer-trace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAElE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACtC,UAAU,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,GAAG,eAAe,GAAG,UAAU,GAAG,kBAAkB,GAAG,YAAY,GAAG,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC;CAC3H;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,QAAQ,EAAE,EAAE,CAAC;IACb,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,OAAO,EAAE,iBAAiB,CAAC;CAC5B;AA0KD,eAAO,MAAM,gBAAgB,GAC3B,SAAS,OAAO,EAChB,OAAO,YAAY,EACnB,SAAS,SAAS,oBAAoB,EAAE,EACxC,QAAQ,SAAS,qBAAqB,EAAE,KACvC,mBAaF,CAAC"}
@@ -0,0 +1,164 @@
1
+ const roomScopePattern = /^room:([^:]+):([^:]+)$/u;
2
+ const agentScopePattern = /^agent:([^:]+)$/u;
3
+ const roomIdFromScope = (scope) => scope.match(roomScopePattern)?.[2];
4
+ const agentIdFromScope = (scope) => scope.match(agentScopePattern)?.[1];
5
+ const roomScopesFromEvent = (event) => [event.scope, event.target].filter((scope) => roomScopePattern.test(scope));
6
+ const contentDetail = (event) => {
7
+ const payload = typeof event.payload === "object" && event.payload !== null
8
+ ? event.payload
9
+ : {};
10
+ const content = payload.content;
11
+ if (typeof content === "string") {
12
+ return content;
13
+ }
14
+ const reason = payload.reason;
15
+ if (typeof reason === "string") {
16
+ return reason;
17
+ }
18
+ return event.kind;
19
+ };
20
+ const tickForEvent = (trace, event) => {
21
+ const matching = trace.samples.find((sample) => sample.sim_time === event.sim_time);
22
+ return matching?.tick ?? 0;
23
+ };
24
+ const sceneForIndex = (index, count) => {
25
+ const cols = Math.max(1, Math.ceil(Math.sqrt(count)));
26
+ const row = Math.floor(index / cols);
27
+ const col = index % cols;
28
+ const x = (col - (cols - 1) / 2) * 2.4;
29
+ const y = (row - Math.max(0, Math.ceil(count / cols) - 1) / 2) * 1.85;
30
+ return [Number(x.toFixed(2)), Number(y.toFixed(2)), 0];
31
+ };
32
+ const buildRooms = (simfile, trace) => {
33
+ const scopes = new Set();
34
+ for (const variable of Object.values(simfile.variables)) {
35
+ if (roomScopePattern.test(variable.scope))
36
+ scopes.add(variable.scope);
37
+ }
38
+ for (const marker of Object.values(simfile.markers)) {
39
+ for (const scope of marker.scopes)
40
+ if (roomScopePattern.test(scope))
41
+ scopes.add(scope);
42
+ }
43
+ for (const event of trace.events) {
44
+ for (const scope of roomScopesFromEvent(event))
45
+ scopes.add(scope);
46
+ }
47
+ return [...scopes].sort().map((scope, index, all) => {
48
+ const id = roomIdFromScope(scope) ?? `room-${index}`;
49
+ return {
50
+ id,
51
+ label: id,
52
+ members: [],
53
+ scene: sceneForIndex(index, all.length),
54
+ scale: [1.4, 0.9],
55
+ scope
56
+ };
57
+ });
58
+ };
59
+ const buildCorridors = (rooms) => rooms.slice(1).map((room, index) => {
60
+ const from = rooms[index];
61
+ const [ax, ay] = from.scene;
62
+ const [bx, by] = room.scene;
63
+ return {
64
+ from_room: from.id,
65
+ id: `${from.id}--${room.id}`,
66
+ path: [
67
+ { x: ax, y: ay },
68
+ { x: bx, y: ay },
69
+ { x: bx, y: by }
70
+ ],
71
+ to_room: room.id,
72
+ width: 0.08
73
+ };
74
+ });
75
+ const buildAgents = (trace) => {
76
+ const agents = new Set();
77
+ for (const event of trace.events) {
78
+ const target = agentIdFromScope(event.target);
79
+ if (target)
80
+ agents.add(target);
81
+ if (event.provenance === "agentic" && event.actor !== "@world")
82
+ agents.add(event.actor);
83
+ }
84
+ return [...agents].sort().map((id) => ({
85
+ detail: "Heuristic placement: trace has this agent but no presence stream yet.",
86
+ id,
87
+ label: id,
88
+ label_hint: "heuristic",
89
+ scope: `agent:${id}`
90
+ }));
91
+ };
92
+ const factType = (kind) => {
93
+ if (kind === "clock.sync"
94
+ || kind === "world.message"
95
+ || kind === "world.dm"
96
+ || kind === "wake.recommended"
97
+ || kind === "rule.fired"
98
+ || kind === "marker.seen") {
99
+ return kind;
100
+ }
101
+ return "other";
102
+ };
103
+ const buildFacts = (trace) => trace.events.map((event) => ({
104
+ actor: event.actor,
105
+ detail: contentDetail(event),
106
+ event_id: event.event_id,
107
+ kind: event.kind,
108
+ payload: event.payload,
109
+ provenance: event.provenance,
110
+ scope: event.scope,
111
+ sim_time: event.sim_time,
112
+ target: event.target,
113
+ tick: tickForEvent(trace, event),
114
+ type: factType(event.kind)
115
+ }));
116
+ const buildSignals = (simfile, trace, markers, probes, rooms) => {
117
+ const roomByScope = new Map(rooms.map((room) => [room.scope, room.scene]));
118
+ const signalAt = (scope, offset) => {
119
+ const [x, y] = roomByScope.get(scope) ?? [0, 0, 0];
120
+ return [x + offset, y - 0.8, 0.58];
121
+ };
122
+ const variables = Object.entries(simfile.variables).map(([id, variable], index) => ({
123
+ detail: "Final variable value from runtime samples.",
124
+ id,
125
+ kind: "variable",
126
+ label: id,
127
+ scene: signalAt(variable.scope, index * 0.22),
128
+ scope: variable.scope,
129
+ value: String(trace.variables[id] ?? 0)
130
+ }));
131
+ const markerSignals = markers.map((marker, index) => ({
132
+ detail: marker.detail,
133
+ id: marker.markerId,
134
+ kind: "marker",
135
+ label: marker.markerId,
136
+ scene: signalAt(simfile.markers[marker.markerId]?.scopes[0] ?? "global", index * 0.22),
137
+ scope: simfile.markers[marker.markerId]?.scopes[0] ?? "global",
138
+ value: marker.passed ? "pass" : "fail"
139
+ }));
140
+ const probeSignals = probes.map((probe, index) => ({
141
+ detail: `${probe.count} matching event(s)`,
142
+ id: probe.probeId,
143
+ kind: "probe",
144
+ label: probe.probeId,
145
+ scene: [index * 0.26, -1.8, 0.58],
146
+ scope: `probe:${probe.probeId}`,
147
+ value: probe.passed ? "pass" : "fail"
148
+ }));
149
+ return [...variables, ...markerSignals, ...probeSignals];
150
+ };
151
+ export const buildViewerTrace = (simfile, trace, markers, probes) => {
152
+ const rooms = buildRooms(simfile, trace);
153
+ return {
154
+ agents: buildAgents(trace),
155
+ corridors: buildCorridors(rooms),
156
+ ledger_facts: buildFacts(trace),
157
+ presence: [],
158
+ rooms,
159
+ run_id: trace.runId,
160
+ run_name: simfile.name,
161
+ signals: buildSignals(simfile, trace, markers, probes, rooms),
162
+ version: "viewer.trace.v1"
163
+ };
164
+ };
@@ -0,0 +1,55 @@
1
+ import type { RangeSpec } from "./numeric.js";
2
+ import type { QueuedWorldAct, RuntimeTraceEvent, WorldActResult, WorldActRejectionCode } from "./types.js";
3
+ /** Simfile's single generic act kind. Its only action at B58 is `variable:set`. */
4
+ export declare const WORLD_ACT_KIND: "world.act";
5
+ export interface WorldActValidationContext {
6
+ ticks: number;
7
+ ranges: ReadonlyMap<string, RangeSpec>;
8
+ variableFedBy: ReadonlyMap<string, string>;
9
+ seenActIds: Set<string>;
10
+ }
11
+ /**
12
+ * Ingestion order (exact, per B58 protocol):
13
+ * 1. dedup (act_id registers on first ingestion regardless of outcome)
14
+ * 2. run_closed (batch: at_tick >= options.ticks)
15
+ * 3. unknown_variable
16
+ * 4. not_authorized (no fed_by, or fed_by !== actor)
17
+ * 5. not_finite / out_of_range (reject, never clamp)
18
+ */
19
+ export declare const validateWorldAct: (act: QueuedWorldAct, ctx: WorldActValidationContext) => WorldActRejectionCode | undefined;
20
+ export interface WorldActIngestion {
21
+ /** Every queued act's result, in original submission (ingress) order. Objects are shared with `resultsByActId` and get their `event_id` filled in as accepted acts are applied. */
22
+ results: WorldActResult[];
23
+ resultsByActId: Map<string, WorldActResult>;
24
+ /** Accepted acts grouped by `at_tick`, preserving ingress order (last write wins on apply). */
25
+ queueByTick: Map<number, QueuedWorldAct[]>;
26
+ }
27
+ /**
28
+ * Validates every queued act up front (all inputs the checks depend on —
29
+ * declared ranges, declared fed_by, total tick count — are static for a run),
30
+ * without minting any ledger events yet. Accepted acts are grouped by their
31
+ * `at_tick` for `applyWorldActsAtTick` to apply and mint during the trace loop.
32
+ */
33
+ export declare const ingestWorldActs: (acts: readonly QueuedWorldAct[], ctx: {
34
+ ticks: number;
35
+ ranges: ReadonlyMap<string, RangeSpec>;
36
+ variableFedBy: ReadonlyMap<string, string>;
37
+ }) => WorldActIngestion;
38
+ export interface ApplyWorldActsContext {
39
+ runId: string;
40
+ precision: number;
41
+ ranges: ReadonlyMap<string, RangeSpec>;
42
+ variableScopes: ReadonlyMap<string, string>;
43
+ resultsByActId: ReadonlyMap<string, WorldActResult>;
44
+ nextSeq: number;
45
+ emit: (event: RuntimeTraceEvent) => void;
46
+ }
47
+ /**
48
+ * Applies every accepted act queued for this tick, in ingress order (last
49
+ * write wins on shared var/tick). Called at the START of tick processing,
50
+ * after that tick's clock.sync and before generators/derived/rules, so the
51
+ * write lands in `tickState` and the minted event is visible to same-tick
52
+ * `event: world.act` conditions and rules.
53
+ */
54
+ export declare const applyWorldActsAtTick: (tick: number, simTime: number, queuedForTick: readonly QueuedWorldAct[] | undefined, tickState: Record<string, number>, ctx: ApplyWorldActsContext) => number;
55
+ //# sourceMappingURL=world-act.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"world-act.d.ts","sourceRoot":"","sources":["../../src/runtime/world-act.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE3G,mFAAmF;AACnF,eAAO,MAAM,cAAc,EAAG,WAAoB,CAAC;AAyCnD,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACvC,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAC3B,KAAK,cAAc,EACnB,KAAK,yBAAyB,KAC7B,qBAAqB,GAAG,SA6B1B,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,mLAAmL;IACnL,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC5C,+FAA+F;IAC/F,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;CAC5C;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAM,SAAS,cAAc,EAAE,EAC/B,KAAK;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAAC,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,KACzG,iBA8BF,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACvC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,MAAM,EACZ,SAAS,MAAM,EACf,eAAe,SAAS,cAAc,EAAE,GAAG,SAAS,EACpD,WAAW,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,KAAK,qBAAqB,KACzB,MAoDF,CAAC"}
@@ -0,0 +1,156 @@
1
+ import { createCanonicalEventEnvelope, DEFAULT_EMITTER_STREAM_ID } from "../ledger/stable.js";
2
+ import { clampAndRound } from "./numeric.js";
3
+ /** Simfile's single generic act kind. Its only action at B58 is `variable:set`. */
4
+ export const WORLD_ACT_KIND = "world.act";
5
+ const MAX_ACT_ID_LENGTH = 128;
6
+ const isNonEmptyString = (value) => typeof value === "string" && value.length > 0;
7
+ /**
8
+ * Malformed acts (missing fields, unknown action, non-numeric value) are
9
+ * transport/schema errors — rejected before ingestion, not surfaced as a
10
+ * `WorldActResult` rejection code.
11
+ */
12
+ const assertWellFormedQueuedWorldAct = (act) => {
13
+ if (!Number.isInteger(act.at_tick) || act.at_tick < 0) {
14
+ throw new Error(`world.act at_tick must be a non-negative integer: ${String(act.at_tick)}`);
15
+ }
16
+ if (!isNonEmptyString(act.act_id) || act.act_id.length > MAX_ACT_ID_LENGTH) {
17
+ throw new Error("world.act act_id must be a non-empty string of at most 128 characters");
18
+ }
19
+ if (act.action !== "variable:set") {
20
+ throw new Error(`world.act action must be variable:set, got ${String(act.action)}`);
21
+ }
22
+ if (!isNonEmptyString(act.variable)) {
23
+ throw new Error("world.act variable must be a non-empty string");
24
+ }
25
+ if (typeof act.value !== "number") {
26
+ throw new Error(`world.act value must be numeric for act ${act.act_id}`);
27
+ }
28
+ if (!isNonEmptyString(act.actor)) {
29
+ throw new Error("world.act actor must be a non-empty string");
30
+ }
31
+ if (!isNonEmptyString(act.principal_id)) {
32
+ throw new Error("world.act principal_id must be a non-empty string");
33
+ }
34
+ if (act.cause_event_ids !== undefined) {
35
+ if (!Array.isArray(act.cause_event_ids) || act.cause_event_ids.some((id) => !isNonEmptyString(id))) {
36
+ throw new Error("world.act cause_event_ids must be an array of non-empty strings");
37
+ }
38
+ }
39
+ };
40
+ /**
41
+ * Ingestion order (exact, per B58 protocol):
42
+ * 1. dedup (act_id registers on first ingestion regardless of outcome)
43
+ * 2. run_closed (batch: at_tick >= options.ticks)
44
+ * 3. unknown_variable
45
+ * 4. not_authorized (no fed_by, or fed_by !== actor)
46
+ * 5. not_finite / out_of_range (reject, never clamp)
47
+ */
48
+ export const validateWorldAct = (act, ctx) => {
49
+ if (ctx.seenActIds.has(act.act_id)) {
50
+ return "duplicate";
51
+ }
52
+ ctx.seenActIds.add(act.act_id);
53
+ if (act.at_tick >= ctx.ticks) {
54
+ return "run_closed";
55
+ }
56
+ const range = ctx.ranges.get(act.variable);
57
+ if (!range) {
58
+ return "unknown_variable";
59
+ }
60
+ const fedBy = ctx.variableFedBy.get(act.variable);
61
+ if (fedBy === undefined || fedBy !== act.actor) {
62
+ return "not_authorized";
63
+ }
64
+ if (!Number.isFinite(act.value)) {
65
+ return "not_finite";
66
+ }
67
+ if (act.value < range.min || act.value > range.max) {
68
+ return "out_of_range";
69
+ }
70
+ return undefined;
71
+ };
72
+ /**
73
+ * Validates every queued act up front (all inputs the checks depend on —
74
+ * declared ranges, declared fed_by, total tick count — are static for a run),
75
+ * without minting any ledger events yet. Accepted acts are grouped by their
76
+ * `at_tick` for `applyWorldActsAtTick` to apply and mint during the trace loop.
77
+ */
78
+ export const ingestWorldActs = (acts, ctx) => {
79
+ const seenActIds = new Set();
80
+ const results = [];
81
+ const resultsByActId = new Map();
82
+ const queueByTick = new Map();
83
+ for (const act of acts) {
84
+ assertWellFormedQueuedWorldAct(act);
85
+ const code = validateWorldAct(act, {
86
+ ticks: ctx.ticks,
87
+ ranges: ctx.ranges,
88
+ variableFedBy: ctx.variableFedBy,
89
+ seenActIds
90
+ });
91
+ const result = code
92
+ ? { accepted: false, act_id: act.act_id, code }
93
+ : { accepted: true, act_id: act.act_id, apply_tick: act.at_tick };
94
+ results.push(result);
95
+ resultsByActId.set(act.act_id, result);
96
+ if (!code) {
97
+ const queued = queueByTick.get(act.at_tick) ?? [];
98
+ queued.push(act);
99
+ queueByTick.set(act.at_tick, queued);
100
+ }
101
+ }
102
+ return { results, resultsByActId, queueByTick };
103
+ };
104
+ /**
105
+ * Applies every accepted act queued for this tick, in ingress order (last
106
+ * write wins on shared var/tick). Called at the START of tick processing,
107
+ * after that tick's clock.sync and before generators/derived/rules, so the
108
+ * write lands in `tickState` and the minted event is visible to same-tick
109
+ * `event: world.act` conditions and rules.
110
+ */
111
+ export const applyWorldActsAtTick = (tick, simTime, queuedForTick, tickState, ctx) => {
112
+ if (!queuedForTick || queuedForTick.length === 0) {
113
+ return ctx.nextSeq;
114
+ }
115
+ let seq = ctx.nextSeq;
116
+ for (const act of queuedForTick) {
117
+ const range = ctx.ranges.get(act.variable);
118
+ if (!range) {
119
+ throw new Error(`world.act references unknown variable ${act.variable}`);
120
+ }
121
+ tickState[act.variable] = clampAndRound(act.value, range, ctx.precision);
122
+ const scope = ctx.variableScopes.get(act.variable) ?? "global";
123
+ const payload = {
124
+ sim_time: simTime,
125
+ provenance: "agentic",
126
+ actor: act.actor,
127
+ target: act.variable,
128
+ scope,
129
+ act_id: act.act_id,
130
+ action: act.action,
131
+ value: act.value
132
+ };
133
+ const event = createCanonicalEventEnvelope({
134
+ runId: ctx.runId,
135
+ seq,
136
+ kind: WORLD_ACT_KIND,
137
+ simTime,
138
+ provenance: "agentic",
139
+ actor: act.actor,
140
+ target: act.variable,
141
+ scope,
142
+ payload,
143
+ streamId: DEFAULT_EMITTER_STREAM_ID,
144
+ principalId: act.principal_id,
145
+ causeEventIds: act.cause_event_ids ?? []
146
+ });
147
+ ctx.emit(event);
148
+ const result = ctx.resultsByActId.get(act.act_id);
149
+ if (result) {
150
+ result.event_id = event.event_id;
151
+ result.apply_tick = tick;
152
+ }
153
+ seq += 1;
154
+ }
155
+ return seq;
156
+ };
@@ -0,0 +1,23 @@
1
+ import type { Simfile } from "./model.js";
2
+ export interface BindingDiagnostic {
3
+ level: "error" | "warn";
4
+ message: string;
5
+ }
6
+ export interface SpawnfileReportNode {
7
+ id?: unknown;
8
+ active_environments?: unknown;
9
+ }
10
+ export interface SpawnfileReport {
11
+ nodes?: unknown;
12
+ }
13
+ interface ScopeIndex {
14
+ agents: Set<string>;
15
+ rooms: Set<string>;
16
+ teams: Set<string>;
17
+ }
18
+ export declare const createReportScopeIndex: (report: SpawnfileReport) => ScopeIndex;
19
+ export declare const createBindingDiagnostics: (simfile: Simfile, report: SpawnfileReport | null) => BindingDiagnostic[];
20
+ export declare const parseSpawnfileReportJson: (reportJson: string) => SpawnfileReport;
21
+ export declare const loadSpawnfileReport: (pathOrJson: string) => Promise<SpawnfileReport>;
22
+ export {};
23
+ //# sourceMappingURL=binding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../../src/schema/binding.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,OAAO,EAKR,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,UAAU,UAAU;IAClB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACpB;AAwFD,eAAO,MAAM,sBAAsB,GAAI,QAAQ,eAAe,KAAG,UAgBhE,CAAC;AAqLF,eAAO,MAAM,wBAAwB,GAAI,SAAS,OAAO,EAAE,QAAQ,eAAe,GAAG,IAAI,KAAG,iBAAiB,EAqB5G,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,YAAY,MAAM,KAAG,eAa7D,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAU,YAAY,MAAM,KAAG,OAAO,CAAC,eAAe,CAcrF,CAAC"}