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,99 @@
1
+ import type { RunWorldTrace } from "./runWorldTrace.js";
2
+ /**
3
+ * `RunTimeline` — the single merged, dense, causally-repaired event
4
+ * timeline `simfile view <run-dir>`'s run-replay mode scrubs (`docs/VIEW_DESIGN.md`
5
+ * rule 7: time is one axis everywhere). Built once per run by
6
+ * `buildRunTimeline` (`runTimeline.ts`) from every `causal.jsonl` stream
7
+ * (`../observe/causalStreams.ts`'s `collectCausalStreams`) plus every mneme
8
+ * bank's `events.jsonl` bank log. `t` is the scrub key: a dense integer
9
+ * `0..N-1` assigned after sorting and causal repair, never `recorded_at`
10
+ * directly (real clocks are not guaranteed monotonic across systems).
11
+ */
12
+ /**
13
+ * `agent:<id>` | `room:<network>:<room>` | `bank:<bank>` | `variable:<id>`
14
+ * (increment 4's variable storyline). `object:` remains reserved — no data
15
+ * to back it yet.
16
+ */
17
+ export type ElementRef = string;
18
+ /**
19
+ * `clock` (`clock.sync`) and `marker` (`marker.seen`) are increment 3's
20
+ * world-authority additions (`buildWorldRecord` in `runTimeline.ts`);
21
+ * `wake` is shared between `daimon`'s `control.wake.accepted` (already
22
+ * existed) and the world's `wake.recommended` — both name "an agent was
23
+ * recommended/accepted a wake," so one view class serves both authorities
24
+ * rather than forking it per-authority.
25
+ */
26
+ export type TimelineViewClass = "message" | "wake" | "clock" | "marker" | "turn.input" | "turn.output" | "memory.claimed" | "memory.observed" | "memory.recalled" | "other";
27
+ export interface TimelineEvent {
28
+ /** Dense scrub key, 0..N-1, assigned after sort + causal repair. */
29
+ t: number;
30
+ /** The real record id: a `causal.jsonl` `event_id` or a mneme bank log row's `id`. */
31
+ eventId: string;
32
+ /** The `raw/<authority>/...` directory this record was read from (`moltnet` | `daimon` | `mneme`). */
33
+ authority: string;
34
+ streamId: string;
35
+ seq: number;
36
+ type: string;
37
+ viewClass: TimelineViewClass;
38
+ /** The record's own timestamp — a display annotation; `t` is the scrub axis. */
39
+ recordedAt: string;
40
+ actor?: string;
41
+ /** Every element whose storyline includes this event. */
42
+ subjects: ElementRef[];
43
+ /** This record's own causal predecessor ids, verbatim (never invented). */
44
+ causes: string[];
45
+ /** Joined from the transcript or a mneme bank log by id — never invented. */
46
+ text?: string;
47
+ /**
48
+ * Increment 3 dedup join: on a `moltnet` `message.accepted` record, the
49
+ * `simfile_event_id` breadcrumb read from the transcript message's own
50
+ * `parts[].data` (`src/moltnet/world-participant.ts`'s
51
+ * `metadataFromEvent`) — the real `world.message`/`world.dm`/
52
+ * `wake.recommended` event this message echoes, when this message
53
+ * originated from a world action. Undefined for a message with no such
54
+ * breadcrumb (a genuine agent-authored message). The chat pane uses this
55
+ * to badge the echo "world" and to suppress its `world`-authority twin.
56
+ */
57
+ worldEventId?: string;
58
+ payload: unknown;
59
+ }
60
+ export type RunTimelineElementKind = "agent" | "room" | "bank" | "team" | "variable";
61
+ export interface RunTimelineElement {
62
+ ref: ElementRef;
63
+ kind: RunTimelineElementKind;
64
+ label: string;
65
+ }
66
+ /**
67
+ * An interior self-team (the "descend into a mind" structure): a team that
68
+ * owns its own Moltnet network (`interiorRooms`) and is represented on a
69
+ * parent floor by one of its members (`representative`). Derived from the
70
+ * run's `spawnfile-report.json` by `membranes.ts`'s `deriveMembranes`.
71
+ */
72
+ export interface RunTimelineMembrane {
73
+ /** `team:<id>`. */
74
+ ref: string;
75
+ label: string;
76
+ /** `agent:<id>` of the team's parent-floor representative (its lead/external face). */
77
+ representative: string;
78
+ /** `room:<network>:<room>` refs for the team's own interior council room(s). */
79
+ interiorRooms: string[];
80
+ /** `agent:<id>` refs for every member of the interior room(s). */
81
+ members: string[];
82
+ /**
83
+ * A `viewer.trace.v1` world trace scoped to exactly this membrane's
84
+ * `interiorRooms` — the "descend into a mind" mini map (`runWorldTrace.ts`'s
85
+ * `buildMembraneInteriorWorlds`, populated by `server.ts` once the full
86
+ * `RunTimeline` exists; `deriveMembranes`/`buildRunTimeline` never set this
87
+ * field themselves, since it needs the completed timeline). Undefined only
88
+ * before that population step runs.
89
+ */
90
+ interiorWorld?: RunWorldTrace;
91
+ }
92
+ export interface RunTimeline {
93
+ version: "simfile.run-timeline.v1";
94
+ runId: string;
95
+ events: TimelineEvent[];
96
+ elements: RunTimelineElement[];
97
+ membranes?: RunTimelineMembrane[];
98
+ }
99
+ //# sourceMappingURL=runTimelineTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runTimelineTypes.d.ts","sourceRoot":"","sources":["../../src/view/runTimelineTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;;;;;;;GASG;AAEH;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,MAAM,GACN,OAAO,GACP,QAAQ,GACR,YAAY,GACZ,aAAa,GACb,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,GACjB,OAAO,CAAC;AAEZ,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,CAAC,EAAE,MAAM,CAAC;IACV,sFAAsF;IACtF,OAAO,EAAE,MAAM,CAAC;IAChB,sGAAsG;IACtG,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,iBAAiB,CAAC;IAC7B,gFAAgF;IAChF,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAErF,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,UAAU,CAAC;IAChB,IAAI,EAAE,sBAAsB,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,mBAAmB;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,cAAc,EAAE,MAAM,CAAC;IACvB,gFAAgF;IAChF,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,kEAAkE;IAClE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,yBAAyB,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACnC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,21 @@
1
+ import type { RunViewModel } from "./runViewModelTypes.js";
2
+ /**
3
+ * Loads a sealed compose-and-observe run directory and builds the single
4
+ * `RunViewModel`: reconciles the causal streams via the existing
5
+ * `runObserve` (Slice B pipeline, never re-implemented here), reads the raw
6
+ * moltnet transcript for message text, and reads each mneme bank's
7
+ * `events.jsonl` for the per-agent memory portals. Pure orchestration —
8
+ * every field this returns traces back to one of those three
9
+ * already-audited sources (`observe/AGENTS.md`, `docs/VIEW_DESIGN.md` rule 2:
10
+ * observer tier only, no invented state). `server.ts`'s `/api/run-meta`
11
+ * serves this model's `verdict`/`provenance` fields to the React shell
12
+ * (`web/src/viewer/RunMetaPanels.tsx`); `thread`/`minds` are computed too
13
+ * but no longer served whole — the shell gets chat/minds content from
14
+ * `/api/timeline` instead. Increment 3 additionally passes through
15
+ * `runObserve`'s own `seed_spread`/`spread_summary` (never recomputed) and,
16
+ * only when the run has a non-empty `world/telemetry.json` variable
17
+ * sample set, that sample set too — also served via `/api/run-meta` for
18
+ * the spread readout and the (seam-only) variable gauge.
19
+ */
20
+ export declare const buildRunViewModel: (runDir: string) => Promise<RunViewModel>;
21
+ //# sourceMappingURL=runViewModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runViewModel.d.ts","sourceRoot":"","sources":["../../src/view/runViewModel.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAO3D;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,iBAAiB,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,YAAY,CA2C5E,CAAC"}
@@ -0,0 +1,66 @@
1
+ import { runObserve } from "../observe/index.js";
2
+ import { computeEngineProvenance } from "./engineProvenance.js";
3
+ import { computeMinds, computeProvenance, computeThread, computeVerdict } from "./runViewModelCompute.js";
4
+ import { hasVariableSamples, readMnemeEventsByBank, readTranscript, readUpReceiptEngines, readWorldTelemetry } from "./runRawArtifacts.js";
5
+ const stringField = (world, key) => {
6
+ const value = world[key];
7
+ return typeof value === "string" ? value : undefined;
8
+ };
9
+ /**
10
+ * Loads a sealed compose-and-observe run directory and builds the single
11
+ * `RunViewModel`: reconciles the causal streams via the existing
12
+ * `runObserve` (Slice B pipeline, never re-implemented here), reads the raw
13
+ * moltnet transcript for message text, and reads each mneme bank's
14
+ * `events.jsonl` for the per-agent memory portals. Pure orchestration —
15
+ * every field this returns traces back to one of those three
16
+ * already-audited sources (`observe/AGENTS.md`, `docs/VIEW_DESIGN.md` rule 2:
17
+ * observer tier only, no invented state). `server.ts`'s `/api/run-meta`
18
+ * serves this model's `verdict`/`provenance` fields to the React shell
19
+ * (`web/src/viewer/RunMetaPanels.tsx`); `thread`/`minds` are computed too
20
+ * but no longer served whole — the shell gets chat/minds content from
21
+ * `/api/timeline` instead. Increment 3 additionally passes through
22
+ * `runObserve`'s own `seed_spread`/`spread_summary` (never recomputed) and,
23
+ * only when the run has a non-empty `world/telemetry.json` variable
24
+ * sample set, that sample set too — also served via `/api/run-meta` for
25
+ * the spread readout and the (seam-only) variable gauge.
26
+ */
27
+ export const buildRunViewModel = async (runDir) => {
28
+ const observed = await runObserve(runDir);
29
+ const transcript = await readTranscript(runDir);
30
+ const mnemeEventsByBank = await readMnemeEventsByBank(runDir);
31
+ const telemetrySamples = await readWorldTelemetry(runDir);
32
+ const upReceiptEngines = await readUpReceiptEngines(runDir);
33
+ const allEvents = observed.streams.flatMap((stream) => stream.events);
34
+ const world = observed.manifest.world;
35
+ const members = world?.members;
36
+ // Prefer the up-receipt's per-agent engines[] (finer-grained, catches a
37
+ // mixed run) when the run-dir has one; otherwise fall back to the
38
+ // manifest's own single collapsed `engine` string, folded to one entry.
39
+ // No engine anywhere at all -> an empty list, which `computeEngineProvenance`
40
+ // reports as `"unknown"` rather than defaulting to real.
41
+ const engineEntries = upReceiptEngines ?? (observed.manifest.engine ? [{ engine: observed.manifest.engine }] : []);
42
+ return {
43
+ version: "simfile.run-view-model.v1",
44
+ runId: observed.manifest.run_id,
45
+ createdAt: observed.manifest.created_at,
46
+ engine: observed.manifest.engine,
47
+ engineProvenance: computeEngineProvenance(engineEntries),
48
+ world: world
49
+ ? {
50
+ networkId: stringField(world, "network_id"),
51
+ roomId: stringField(world, "room_id"),
52
+ members: Array.isArray(members)
53
+ ? members.filter((member) => typeof member === "string")
54
+ : undefined
55
+ }
56
+ : undefined,
57
+ participants: observed.report.participants,
58
+ verdict: computeVerdict(observed.report, observed.artifactIntegrity),
59
+ thread: computeThread(transcript, allEvents, mnemeEventsByBank),
60
+ minds: computeMinds(mnemeEventsByBank),
61
+ provenance: computeProvenance(observed.manifest, observed.report, observed.artifactIntegrity),
62
+ seedSpread: observed.report.seed_spread,
63
+ spreadSummary: observed.report.spread_summary,
64
+ variableSamples: hasVariableSamples(telemetrySamples) ? telemetrySamples : undefined
65
+ };
66
+ };
@@ -0,0 +1,24 @@
1
+ import type { ArtifactIntegrityCheck } from "../observe/artifacts.js";
2
+ import type { SimfileRunManifest } from "../observe/manifest.js";
3
+ import type { SimfileObserveReport } from "../observe/report.js";
4
+ import type { RawMnemeEvent, RawTranscript, RunMindPortal, RunMindRow, RunThreadMessage, RunVerdict, RunViewModel } from "./runViewModelTypes.js";
5
+ import type { CausalEvent } from "@noopolis/stele";
6
+ /**
7
+ * Merges every mneme bank's `events.jsonl` rows (in file-encounter order,
8
+ * banks iterated in map insertion order) and groups them by
9
+ * `principal.agentId`. Shared by `computeMinds` (aggregate portal view) and
10
+ * `computeThread` (per-turn memory-write grouping) so both read the exact
11
+ * same ordered record set.
12
+ */
13
+ export declare const mindRowsByAgent: (mnemeEventsByBank: ReadonlyMap<string, readonly RawMnemeEvent[]>) => Map<string, RunMindRow[]>;
14
+ export declare const computeMinds: (mnemeEventsByBank: ReadonlyMap<string, readonly RawMnemeEvent[]>) => RunMindPortal[];
15
+ /**
16
+ * Builds the conversation timeline: the seed message (transcript[0], no
17
+ * trace) followed by every reply, each carrying the causal trace
18
+ * `message -> wake -> turn -> reply` when the reconciled daimon stream for
19
+ * that reply's author resolves one (real ids only — docs/VIEW_DESIGN.md rule 3).
20
+ */
21
+ export declare const computeThread: (transcript: RawTranscript, events: readonly CausalEvent[], mnemeEventsByBank: ReadonlyMap<string, readonly RawMnemeEvent[]>) => RunThreadMessage[];
22
+ export declare const computeVerdict: (report: SimfileObserveReport, artifactIntegrity: readonly ArtifactIntegrityCheck[]) => RunVerdict;
23
+ export declare const computeProvenance: (manifest: SimfileRunManifest, report: SimfileObserveReport, artifactIntegrity: readonly ArtifactIntegrityCheck[]) => RunViewModel["provenance"];
24
+ //# sourceMappingURL=runViewModelCompute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runViewModelCompute.d.ts","sourceRoot":"","sources":["../../src/view/runViewModelCompute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EAEb,aAAa,EACb,UAAU,EAGV,gBAAgB,EAEhB,UAAU,EACV,YAAY,EACb,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAkBnD;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAC1B,mBAAmB,WAAW,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC,KAC/D,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAY1B,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,mBAAmB,WAAW,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC,KAC/D,aAAa,EAGqD,CAAC;AA8EtE;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GACxB,YAAY,aAAa,EACzB,QAAQ,SAAS,WAAW,EAAE,EAC9B,mBAAmB,WAAW,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC,KAC/D,gBAAgB,EAmDlB,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,QAAQ,oBAAoB,EAC5B,mBAAmB,SAAS,sBAAsB,EAAE,KACnD,UAeF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,UAAU,kBAAkB,EAC5B,QAAQ,oBAAoB,EAC5B,mBAAmB,SAAS,sBAAsB,EAAE,KACnD,YAAY,CAAC,YAAY,CAkB3B,CAAC"}
@@ -0,0 +1,157 @@
1
+ const MIND_STRATA = {
2
+ "memory.claimed": "claimed",
3
+ "memory.observed": "observed",
4
+ "memory.recalled": "recalled"
5
+ };
6
+ const agentIdFromFqid = (fqid) => fqid.split("/").pop();
7
+ const extractMentions = (message) => (message.mentions ?? [])
8
+ .map(agentIdFromFqid)
9
+ .filter((id) => typeof id === "string" && id.length > 0);
10
+ const messageText = (message) => message.parts.find((part) => part.kind === "text")?.text ?? "";
11
+ /**
12
+ * Merges every mneme bank's `events.jsonl` rows (in file-encounter order,
13
+ * banks iterated in map insertion order) and groups them by
14
+ * `principal.agentId`. Shared by `computeMinds` (aggregate portal view) and
15
+ * `computeThread` (per-turn memory-write grouping) so both read the exact
16
+ * same ordered record set.
17
+ */
18
+ export const mindRowsByAgent = (mnemeEventsByBank) => {
19
+ const byAgent = new Map();
20
+ for (const events of mnemeEventsByBank.values()) {
21
+ for (const event of events) {
22
+ const stratum = MIND_STRATA[event.type];
23
+ if (!stratum)
24
+ continue;
25
+ const rows = byAgent.get(event.principal.agentId) ?? [];
26
+ rows.push({ stratum, text: event.content.text, sourceId: event.id });
27
+ byAgent.set(event.principal.agentId, rows);
28
+ }
29
+ }
30
+ return byAgent;
31
+ };
32
+ export const computeMinds = (mnemeEventsByBank) => [...mindRowsByAgent(mnemeEventsByBank)]
33
+ .map(([agentId, rows]) => ({ agentId, eventCount: rows.length, rows }))
34
+ .sort((left, right) => left.agentId.localeCompare(right.agentId));
35
+ /**
36
+ * Splits one agent's ordered mind rows into per-turn groups: each
37
+ * `"claimed"` row (mneme's "took the wake request in" record — always the
38
+ * first write of a turn) opens a new group; every row until the next
39
+ * `"claimed"` belongs to that same turn. Purely structural — no content
40
+ * matching — so it generalizes to any run, not just the golden fixture.
41
+ */
42
+ const groupMindRowsByTurn = (rows) => {
43
+ const groups = [];
44
+ for (const row of rows) {
45
+ if (row.stratum === "claimed" || groups.length === 0) {
46
+ groups.push([row]);
47
+ }
48
+ else {
49
+ groups[groups.length - 1].push(row);
50
+ }
51
+ }
52
+ return groups;
53
+ };
54
+ const daimonEventsForAgent = (events, agentId) => events.filter((event) => event.emitter.system === "daimon" && event.emitter.stream_id === `agent:${agentId}`);
55
+ const findTurnInput = (agentEvents, triggerEventId) => agentEvents.find((event) => event.type === "turn.input.submitted" &&
56
+ Array.isArray(event.payload.input_message_ids) &&
57
+ event.payload.input_message_ids.includes(triggerEventId));
58
+ const findTurnOutput = (agentEvents, turnInputEventId) => agentEvents.find((event) => event.type === "turn.output.completed" && event.cause_event_ids.includes(turnInputEventId));
59
+ const findWake = (agentEvents, triggerEventId) => agentEvents.find((event) => event.type === "control.wake.accepted" && event.cause_event_ids.includes(triggerEventId));
60
+ const buildTrace = (agentEvents, triggerEventId, memoryWrites) => {
61
+ const turnInput = findTurnInput(agentEvents, triggerEventId);
62
+ if (!turnInput)
63
+ return undefined;
64
+ const turnOutput = findTurnOutput(agentEvents, turnInput.event_id);
65
+ const wake = findWake(agentEvents, triggerEventId);
66
+ return {
67
+ inEventId: triggerEventId,
68
+ wakeEventId: wake?.event_id,
69
+ turnInputEventId: turnInput.event_id,
70
+ turnOutputEventId: turnOutput?.event_id,
71
+ turnInputCauses: turnInput.cause_event_ids,
72
+ recalledMemoryEventIds: turnInput.cause_event_ids.filter((causeId) => causeId.startsWith("mneme:")),
73
+ memoryWrites: [...memoryWrites]
74
+ };
75
+ };
76
+ /**
77
+ * Builds the conversation timeline: the seed message (transcript[0], no
78
+ * trace) followed by every reply, each carrying the causal trace
79
+ * `message -> wake -> turn -> reply` when the reconciled daimon stream for
80
+ * that reply's author resolves one (real ids only — docs/VIEW_DESIGN.md rule 3).
81
+ */
82
+ export const computeThread = (transcript, events, mnemeEventsByBank) => {
83
+ const rowsByAgent = mindRowsByAgent(mnemeEventsByBank);
84
+ const turnGroupsByAgent = new Map([...rowsByAgent].map(([agentId, rows]) => [agentId, groupMindRowsByTurn(rows)]));
85
+ const turnOrdinalByAgent = new Map();
86
+ let turnCounter = 0;
87
+ return transcript.transcript.map((message, index) => {
88
+ const isSeed = index === 0;
89
+ const agentId = message.from.type === "agent" ? message.from.id : null;
90
+ const previous = transcript.transcript[index - 1];
91
+ // "woken by @<agentId>" names the @mention in the PRIOR message that
92
+ // caused this agent's wake (the same mention `control.wake.accepted`
93
+ // resolves against) — not that message's author. The seed (index 0) is
94
+ // always the special case: even though it also @mentions the first
95
+ // responder, it is the conversation's opening move, not a reply-trigger.
96
+ const role = isSeed
97
+ ? `${message.from.type} · seed`
98
+ : index === 1
99
+ ? "woken by seed"
100
+ : agentId && previous && extractMentions(previous).includes(agentId)
101
+ ? `woken by @${agentId}`
102
+ : "woken by message";
103
+ const base = {
104
+ messageId: message.id,
105
+ agentId,
106
+ fromName: message.from.name,
107
+ turn: null,
108
+ role,
109
+ createdAt: message.created_at,
110
+ text: messageText(message),
111
+ mentions: extractMentions(message)
112
+ };
113
+ if (isSeed || !agentId || !previous) {
114
+ return base;
115
+ }
116
+ turnCounter += 1;
117
+ const ordinal = (turnOrdinalByAgent.get(agentId) ?? 0) + 1;
118
+ turnOrdinalByAgent.set(agentId, ordinal);
119
+ const memoryWrites = turnGroupsByAgent.get(agentId)?.[ordinal - 1] ?? [];
120
+ const triggerEventId = `moltnet:${previous.id}`;
121
+ const trace = buildTrace(daimonEventsForAgent(events, agentId), triggerEventId, memoryWrites);
122
+ return { ...base, turn: turnCounter, trace };
123
+ });
124
+ };
125
+ export const computeVerdict = (report, artifactIntegrity) => {
126
+ const artifactsVerified = artifactIntegrity.filter((check) => check.ok).length;
127
+ return {
128
+ healthy: report.failures.length === 0
129
+ && report.chains.incomplete.length === 0
130
+ && artifactsVerified === artifactIntegrity.length,
131
+ turnCount: report.agent_turns.count,
132
+ chainsComplete: report.chains.complete,
133
+ chainsIncomplete: report.chains.incomplete.length,
134
+ memoryEvents: report.memory.reduce((sum, bank) => sum + bank.events, 0),
135
+ memoryRecalls: report.memory.reduce((sum, bank) => sum + bank.recalls, 0),
136
+ artifactsVerified,
137
+ artifactsTotal: artifactIntegrity.length,
138
+ failures: report.failures.length
139
+ };
140
+ };
141
+ export const computeProvenance = (manifest, report, artifactIntegrity) => {
142
+ const okByPath = new Map(artifactIntegrity.map((check) => [check.path, check.ok]));
143
+ const artifacts = manifest.artifacts.map((artifact) => ({
144
+ path: artifact.path,
145
+ sha256: artifact.sha256,
146
+ ok: okByPath.get(artifact.path) ?? false
147
+ }));
148
+ const entries = [
149
+ { key: "participants", value: report.participants.join(", ") || "—" },
150
+ { key: "turn sequence", value: report.agent_turns.sequence.join(" → ") || "—" },
151
+ { key: "chains complete", value: String(report.chains.complete) },
152
+ { key: "chains incomplete", value: String(report.chains.incomplete.length) },
153
+ { key: "failures", value: String(report.failures.length) },
154
+ { key: "contract", value: report.version }
155
+ ];
156
+ return { artifacts, entries };
157
+ };
@@ -0,0 +1,177 @@
1
+ import type { CausalEvent } from "@noopolis/stele";
2
+ import type { EngineProvenance } from "./engineProvenance.js";
3
+ import type { SeedSpreadEntry, SpreadSummary } from "../observe/report.js";
4
+ /**
5
+ * `RunViewModel` — the data-driven model the run-reader page renders
6
+ * (`docs/VIEW_DESIGN.md` rule 3: every rendered element traces to a record id).
7
+ * Built once per `simfile view <run-dir>` invocation by
8
+ * `buildRunViewModel` (`runViewModel.ts`) from a sealed compose-and-observe
9
+ * run directory: the reconciled `simfile.observe.v1` report, the raw
10
+ * moltnet transcript, and the raw per-bank mneme event logs. Nothing here
11
+ * is invented; fields that cannot be derived from a real record are simply
12
+ * omitted (`trace`, `recallEventIds` on non-agent messages).
13
+ */
14
+ export interface RunVerdict {
15
+ healthy: boolean;
16
+ turnCount: number;
17
+ chainsComplete: number;
18
+ chainsIncomplete: number;
19
+ memoryEvents: number;
20
+ memoryRecalls: number;
21
+ artifactsVerified: number;
22
+ artifactsTotal: number;
23
+ failures: number;
24
+ }
25
+ /** One hop the causal trace names, each a real `event_id` from a causal stream. */
26
+ export interface RunThreadTrace {
27
+ /** The moltnet message event_id that triggered this turn. */
28
+ inEventId: string;
29
+ /** `daimon` `control.wake.accepted` event_id for this turn, when reconciled. */
30
+ wakeEventId?: string;
31
+ turnInputEventId: string;
32
+ turnOutputEventId?: string;
33
+ /** `turn.input.submitted`'s own `cause_event_ids`, verbatim. */
34
+ turnInputCauses: string[];
35
+ /** The subset of `turnInputCauses` prefixed `mneme:` — memories that fed this turn. */
36
+ recalledMemoryEventIds: string[];
37
+ /** This turn's mneme bank writes (claimed/observed/recalled), in file order. */
38
+ memoryWrites: RunMindRow[];
39
+ }
40
+ export interface RunThreadMessage {
41
+ messageId: string;
42
+ /** `null` for a human/operator message — it has no daimon turn. */
43
+ agentId: string | null;
44
+ fromName: string;
45
+ /** 1-based ordinal among agent-authored messages; `null` for the seed. */
46
+ turn: number | null;
47
+ role: string;
48
+ createdAt: string;
49
+ text: string;
50
+ /** Agent ids `@mentioned` in this message's text. */
51
+ mentions: string[];
52
+ trace?: RunThreadTrace;
53
+ }
54
+ export type RunMindStratum = "claimed" | "observed" | "recalled";
55
+ export interface RunMindRow {
56
+ stratum: RunMindStratum;
57
+ text: string;
58
+ sourceId: string;
59
+ }
60
+ export interface RunMindPortal {
61
+ agentId: string;
62
+ eventCount: number;
63
+ rows: RunMindRow[];
64
+ }
65
+ export interface RunProvenanceArtifact {
66
+ path: string;
67
+ sha256: string;
68
+ ok: boolean;
69
+ }
70
+ export interface RunProvenanceEntry {
71
+ key: string;
72
+ value: string;
73
+ }
74
+ export interface RunViewModel {
75
+ version: "simfile.run-view-model.v1";
76
+ runId: string;
77
+ createdAt: string;
78
+ engine?: string;
79
+ /**
80
+ * The honesty-critical disclosure (docs/VIEW_DESIGN.md / the run-replay badge):
81
+ * whether this run's dialogue came from a deterministic scripted
82
+ * screenplay or a real engine, derived by `engineProvenance.ts` from
83
+ * `spawnfile/up-receipt.json`'s per-agent `engines[]` when present, else
84
+ * this same `engine` field collapsed to one entry. Never absent — an
85
+ * engine-less manifest still yields `{mode: "unknown", ...}` rather than
86
+ * omitting the field, so the viewer always has something to badge.
87
+ */
88
+ engineProvenance: EngineProvenance;
89
+ world?: {
90
+ networkId?: string;
91
+ roomId?: string;
92
+ members?: string[];
93
+ };
94
+ participants: string[];
95
+ verdict: RunVerdict;
96
+ thread: RunThreadMessage[];
97
+ minds: RunMindPortal[];
98
+ provenance: {
99
+ artifacts: RunProvenanceArtifact[];
100
+ entries: RunProvenanceEntry[];
101
+ };
102
+ /**
103
+ * Increment 3: `runObserve`'s already-computed `seed_spread`/
104
+ * `spread_summary` (`../observe/seedSpread.ts`), passed through verbatim
105
+ * — never recomputed here. Both are DEFINED-BUT-OPTIONAL
106
+ * (`../observe/report.ts`): a run with no `manifest.seed_declaration`
107
+ * (e.g. `office-sim-golden`) simply omits them, and the viewer renders no
108
+ * spread UI at all rather than fake reach/latency numbers.
109
+ */
110
+ seedSpread?: SeedSpreadEntry[];
111
+ spreadSummary?: SpreadSummary;
112
+ /**
113
+ * Increment 3: `world/telemetry.json`'s per-tick variable samples, when
114
+ * the run has any (`readWorldTelemetry` in `runRawArtifacts.ts`).
115
+ * Omitted — never a fabricated empty gauge — when the run has no
116
+ * telemetry file, or every sample's `variables` map is empty (e.g.
117
+ * `office-secret-v0-golden`, which drives no variable).
118
+ */
119
+ variableSamples?: RunTelemetrySample[];
120
+ }
121
+ /** One `world/telemetry.json` sample row (`simfile.telemetry.v1`, `src/runtime/run-record.ts`'s `TelemetryArtifact`). */
122
+ export interface RunTelemetrySample {
123
+ tick: number;
124
+ simTime: number;
125
+ phase?: string;
126
+ variables: Record<string, number>;
127
+ }
128
+ /** The raw `raw/moltnet/transcript.json` shape this package writes and reads. */
129
+ export interface RawTranscriptMessage {
130
+ id: string;
131
+ from: {
132
+ type: string;
133
+ id: string;
134
+ name: string;
135
+ };
136
+ /**
137
+ * `data` is the `simfile_event_id`/`simfile_event_kind`/`simfile_rule_id`
138
+ * breadcrumb `src/moltnet/world-participant.ts`'s `metadataFromEvent`
139
+ * attaches to a message that originated from a world action
140
+ * (`world.message`/`world.dm`/`wake.recommended`) — absent on a genuine
141
+ * agent-authored message.
142
+ */
143
+ parts: {
144
+ kind: string;
145
+ text?: string;
146
+ data?: Record<string, unknown>;
147
+ }[];
148
+ mentions?: string[];
149
+ created_at: string;
150
+ }
151
+ export interface RawTranscript {
152
+ seedMessageText?: string;
153
+ transcript: RawTranscriptMessage[];
154
+ }
155
+ /** One line of a mneme bank's `events.jsonl` (the human-readable memory log). */
156
+ export interface RawMnemeEvent {
157
+ id: string;
158
+ type: string;
159
+ createdAt: string;
160
+ principal: {
161
+ agentId: string;
162
+ };
163
+ content: {
164
+ kind: string;
165
+ text: string;
166
+ };
167
+ /** This bank log's own causal predecessors (distinct id space from `causal.jsonl`'s `event_id`s). */
168
+ parentEventIds?: string[];
169
+ /** Per-principal sequence number within this bank's `events.jsonl`. */
170
+ seq?: number;
171
+ }
172
+ export interface RunViewModelSource {
173
+ events: readonly CausalEvent[];
174
+ mnemeEventsByBank: ReadonlyMap<string, readonly RawMnemeEvent[]>;
175
+ transcript: RawTranscript;
176
+ }
177
+ //# sourceMappingURL=runViewModelTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runViewModelTypes.d.ts","sourceRoot":"","sources":["../../src/view/runViewModelTypes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};