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.
- package/README.md +143 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +348 -0
- package/dist/coverage/index.d.ts +2 -0
- package/dist/coverage/index.d.ts.map +1 -0
- package/dist/coverage/index.js +1 -0
- package/dist/coverage/matrix.d.ts +21 -0
- package/dist/coverage/matrix.d.ts.map +1 -0
- package/dist/coverage/matrix.js +173 -0
- package/dist/coverage/render.d.ts +3 -0
- package/dist/coverage/render.d.ts.map +1 -0
- package/dist/coverage/render.js +26 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/kernel/duration.d.ts +9 -0
- package/dist/kernel/duration.d.ts.map +1 -0
- package/dist/kernel/duration.js +44 -0
- package/dist/kernel/index.d.ts +4 -0
- package/dist/kernel/index.d.ts.map +1 -0
- package/dist/kernel/index.js +3 -0
- package/dist/kernel/range.d.ts +6 -0
- package/dist/kernel/range.d.ts.map +1 -0
- package/dist/kernel/range.js +16 -0
- package/dist/kernel/stochastic.d.ts +10 -0
- package/dist/kernel/stochastic.d.ts.map +1 -0
- package/dist/kernel/stochastic.js +25 -0
- package/dist/ledger/index.d.ts +4 -0
- package/dist/ledger/index.d.ts.map +1 -0
- package/dist/ledger/index.js +3 -0
- package/dist/ledger/markers.d.ts +46 -0
- package/dist/ledger/markers.d.ts.map +1 -0
- package/dist/ledger/markers.js +108 -0
- package/dist/ledger/stable.d.ts +65 -0
- package/dist/ledger/stable.d.ts.map +1 -0
- package/dist/ledger/stable.js +78 -0
- package/dist/ledger/validation.d.ts +16 -0
- package/dist/ledger/validation.d.ts.map +1 -0
- package/dist/ledger/validation.js +127 -0
- package/dist/moltnet/index.d.ts +3 -0
- package/dist/moltnet/index.d.ts.map +1 -0
- package/dist/moltnet/index.js +2 -0
- package/dist/moltnet/transcript-export.d.ts +34 -0
- package/dist/moltnet/transcript-export.d.ts.map +1 -0
- package/dist/moltnet/transcript-export.js +68 -0
- package/dist/moltnet/world-participant.d.ts +77 -0
- package/dist/moltnet/world-participant.d.ts.map +1 -0
- package/dist/moltnet/world-participant.js +221 -0
- package/dist/observe/artifacts.d.ts +16 -0
- package/dist/observe/artifacts.d.ts.map +1 -0
- package/dist/observe/artifacts.js +31 -0
- package/dist/observe/causalStreams.d.ts +19 -0
- package/dist/observe/causalStreams.d.ts.map +1 -0
- package/dist/observe/causalStreams.js +38 -0
- package/dist/observe/compute.d.ts +17 -0
- package/dist/observe/compute.d.ts.map +1 -0
- package/dist/observe/compute.js +97 -0
- package/dist/observe/index.d.ts +11 -0
- package/dist/observe/index.d.ts.map +1 -0
- package/dist/observe/index.js +10 -0
- package/dist/observe/manifest.d.ts +79 -0
- package/dist/observe/manifest.d.ts.map +1 -0
- package/dist/observe/manifest.js +87 -0
- package/dist/observe/memoryBanks.d.ts +38 -0
- package/dist/observe/memoryBanks.d.ts.map +1 -0
- package/dist/observe/memoryBanks.js +86 -0
- package/dist/observe/observe.d.ts +32 -0
- package/dist/observe/observe.d.ts.map +1 -0
- package/dist/observe/observe.js +73 -0
- package/dist/observe/report.d.ts +165 -0
- package/dist/observe/report.d.ts.map +1 -0
- package/dist/observe/report.js +138 -0
- package/dist/observe/seedSpread.d.ts +49 -0
- package/dist/observe/seedSpread.d.ts.map +1 -0
- package/dist/observe/seedSpread.js +262 -0
- package/dist/observe/seedSpreadArtifacts.d.ts +49 -0
- package/dist/observe/seedSpreadArtifacts.d.ts.map +1 -0
- package/dist/observe/seedSpreadArtifacts.js +118 -0
- package/dist/observe/spreadMatcher.d.ts +45 -0
- package/dist/observe/spreadMatcher.d.ts.map +1 -0
- package/dist/observe/spreadMatcher.js +124 -0
- package/dist/report/index.d.ts +4 -0
- package/dist/report/index.d.ts.map +1 -0
- package/dist/report/index.js +3 -0
- package/dist/report/probeArtifact.d.ts +26 -0
- package/dist/report/probeArtifact.d.ts.map +1 -0
- package/dist/report/probeArtifact.js +119 -0
- package/dist/report/probes.d.ts +52 -0
- package/dist/report/probes.d.ts.map +1 -0
- package/dist/report/probes.js +164 -0
- package/dist/report/score.d.ts +27 -0
- package/dist/report/score.d.ts.map +1 -0
- package/dist/report/score.js +14 -0
- package/dist/report/transcripts.d.ts +12 -0
- package/dist/report/transcripts.d.ts.map +1 -0
- package/dist/report/transcripts.js +17 -0
- package/dist/runtime/causal-fixture.d.ts +26 -0
- package/dist/runtime/causal-fixture.d.ts.map +1 -0
- package/dist/runtime/causal-fixture.js +36 -0
- package/dist/runtime/clock.d.ts +25 -0
- package/dist/runtime/clock.d.ts.map +1 -0
- package/dist/runtime/clock.js +63 -0
- package/dist/runtime/condition.d.ts +55 -0
- package/dist/runtime/condition.d.ts.map +1 -0
- package/dist/runtime/condition.js +122 -0
- package/dist/runtime/emit-causal-fixture.d.ts +2 -0
- package/dist/runtime/emit-causal-fixture.d.ts.map +1 -0
- package/dist/runtime/emit-causal-fixture.js +45 -0
- package/dist/runtime/expression.d.ts +11 -0
- package/dist/runtime/expression.d.ts.map +1 -0
- package/dist/runtime/expression.js +305 -0
- package/dist/runtime/numeric.d.ts +7 -0
- package/dist/runtime/numeric.d.ts.map +1 -0
- package/dist/runtime/numeric.js +11 -0
- package/dist/runtime/rule-actions.d.ts +5 -0
- package/dist/runtime/rule-actions.d.ts.map +1 -0
- package/dist/runtime/rule-actions.js +82 -0
- package/dist/runtime/run-record.d.ts +73 -0
- package/dist/runtime/run-record.d.ts.map +1 -0
- package/dist/runtime/run-record.js +179 -0
- package/dist/runtime/step-tick.d.ts +43 -0
- package/dist/runtime/step-tick.d.ts.map +1 -0
- package/dist/runtime/step-tick.js +177 -0
- package/dist/runtime/trace-compile.d.ts +66 -0
- package/dist/runtime/trace-compile.d.ts.map +1 -0
- package/dist/runtime/trace-compile.js +157 -0
- package/dist/runtime/trace-export.d.ts +5 -0
- package/dist/runtime/trace-export.d.ts.map +1 -0
- package/dist/runtime/trace-export.js +4 -0
- package/dist/runtime/trace-run.d.ts +15 -0
- package/dist/runtime/trace-run.d.ts.map +1 -0
- package/dist/runtime/trace-run.js +92 -0
- package/dist/runtime/trace.d.ts +10 -0
- package/dist/runtime/trace.d.ts.map +1 -0
- package/dist/runtime/trace.js +9 -0
- package/dist/runtime/types.d.ts +61 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +1 -0
- package/dist/runtime/viewer-trace.d.ts +64 -0
- package/dist/runtime/viewer-trace.d.ts.map +1 -0
- package/dist/runtime/viewer-trace.js +164 -0
- package/dist/runtime/world-act.d.ts +55 -0
- package/dist/runtime/world-act.d.ts.map +1 -0
- package/dist/runtime/world-act.js +156 -0
- package/dist/schema/binding.d.ts +23 -0
- package/dist/schema/binding.d.ts.map +1 -0
- package/dist/schema/binding.js +249 -0
- package/dist/schema/index.d.ts +5 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +4 -0
- package/dist/schema/model.d.ts +244 -0
- package/dist/schema/model.d.ts.map +1 -0
- package/dist/schema/model.js +222 -0
- package/dist/schema/parse.d.ts +10 -0
- package/dist/schema/parse.d.ts.map +1 -0
- package/dist/schema/parse.js +15 -0
- package/dist/schema/semantic.d.ts +3 -0
- package/dist/schema/semantic.d.ts.map +1 -0
- package/dist/schema/semantic.js +135 -0
- package/dist/sims/composeRunManifest.d.ts +54 -0
- package/dist/sims/composeRunManifest.d.ts.map +1 -0
- package/dist/sims/composeRunManifest.js +40 -0
- package/dist/sims/composedJungianSimDriver.d.ts +50 -0
- package/dist/sims/composedJungianSimDriver.d.ts.map +1 -0
- package/dist/sims/composedJungianSimDriver.js +199 -0
- package/dist/sims/composedOfficeSimDriver.d.ts +53 -0
- package/dist/sims/composedOfficeSimDriver.d.ts.map +1 -0
- package/dist/sims/composedOfficeSimDriver.js +162 -0
- package/dist/sims/exchangeWait.d.ts +56 -0
- package/dist/sims/exchangeWait.d.ts.map +1 -0
- package/dist/sims/exchangeWait.js +66 -0
- package/dist/sims/index.d.ts +14 -0
- package/dist/sims/index.d.ts.map +1 -0
- package/dist/sims/index.js +13 -0
- package/dist/sims/moltnetRoomClient.d.ts +47 -0
- package/dist/sims/moltnetRoomClient.d.ts.map +1 -0
- package/dist/sims/moltnetRoomClient.js +41 -0
- package/dist/sims/poll.d.ts +19 -0
- package/dist/sims/poll.d.ts.map +1 -0
- package/dist/sims/poll.js +23 -0
- package/dist/sims/spawnfileCli.d.ts +49 -0
- package/dist/sims/spawnfileCli.d.ts.map +1 -0
- package/dist/sims/spawnfileCli.js +90 -0
- package/dist/sims/spawnfileReceipts.d.ts +76 -0
- package/dist/sims/spawnfileReceipts.d.ts.map +1 -0
- package/dist/sims/spawnfileReceipts.js +107 -0
- package/dist/sims/worldDrivenOfficeSimDriver.d.ts +59 -0
- package/dist/sims/worldDrivenOfficeSimDriver.d.ts.map +1 -0
- package/dist/sims/worldDrivenOfficeSimDriver.js +182 -0
- package/dist/sims/worldLedgerWriter.d.ts +32 -0
- package/dist/sims/worldLedgerWriter.d.ts.map +1 -0
- package/dist/sims/worldLedgerWriter.js +39 -0
- package/dist/sims/worldSeedLint.d.ts +42 -0
- package/dist/sims/worldSeedLint.d.ts.map +1 -0
- package/dist/sims/worldSeedLint.js +73 -0
- package/dist/sims/worldTickIngest.d.ts +27 -0
- package/dist/sims/worldTickIngest.d.ts.map +1 -0
- package/dist/sims/worldTickIngest.js +35 -0
- package/dist/sims/worldTickLoop.d.ts +64 -0
- package/dist/sims/worldTickLoop.d.ts.map +1 -0
- package/dist/sims/worldTickLoop.js +122 -0
- package/dist/view/engineProvenance.d.ts +46 -0
- package/dist/view/engineProvenance.d.ts.map +1 -0
- package/dist/view/engineProvenance.js +76 -0
- package/dist/view/index.d.ts +14 -0
- package/dist/view/index.d.ts.map +1 -0
- package/dist/view/index.js +107 -0
- package/dist/view/membranes.d.ts +14 -0
- package/dist/view/membranes.d.ts.map +1 -0
- package/dist/view/membranes.js +127 -0
- package/dist/view/runDetect.d.ts +2 -0
- package/dist/view/runDetect.d.ts.map +1 -0
- package/dist/view/runDetect.js +47 -0
- package/dist/view/runRawArtifacts.d.ts +48 -0
- package/dist/view/runRawArtifacts.d.ts.map +1 -0
- package/dist/view/runRawArtifacts.js +143 -0
- package/dist/view/runTimeline.d.ts +24 -0
- package/dist/view/runTimeline.d.ts.map +1 -0
- package/dist/view/runTimeline.js +204 -0
- package/dist/view/runTimelineRecords.d.ts +42 -0
- package/dist/view/runTimelineRecords.d.ts.map +1 -0
- package/dist/view/runTimelineRecords.js +244 -0
- package/dist/view/runTimelineRefs.d.ts +27 -0
- package/dist/view/runTimelineRefs.d.ts.map +1 -0
- package/dist/view/runTimelineRefs.js +31 -0
- package/dist/view/runTimelineTypes.d.ts +99 -0
- package/dist/view/runTimelineTypes.d.ts.map +1 -0
- package/dist/view/runTimelineTypes.js +1 -0
- package/dist/view/runViewModel.d.ts +21 -0
- package/dist/view/runViewModel.d.ts.map +1 -0
- package/dist/view/runViewModel.js +66 -0
- package/dist/view/runViewModelCompute.d.ts +24 -0
- package/dist/view/runViewModelCompute.d.ts.map +1 -0
- package/dist/view/runViewModelCompute.js +157 -0
- package/dist/view/runViewModelTypes.d.ts +177 -0
- package/dist/view/runViewModelTypes.d.ts.map +1 -0
- package/dist/view/runViewModelTypes.js +1 -0
- package/dist/view/runWorldTrace.d.ts +97 -0
- package/dist/view/runWorldTrace.d.ts.map +1 -0
- package/dist/view/runWorldTrace.js +88 -0
- package/dist/view/server.d.ts +12 -0
- package/dist/view/server.d.ts.map +1 -0
- package/dist/view/server.js +306 -0
- package/package.json +65 -0
- package/web/dist/assets/index-CJHLjfsG.js +49 -0
- package/web/dist/assets/index-DJOsPsU8.css +1 -0
- package/web/dist/index.html +13 -0
- 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 {};
|