foldkit 0.109.0 → 0.111.0

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.
@@ -0,0 +1,85 @@
1
+ import { Option, Order } from 'effect';
2
+ import type { MessageTagCount } from './protocol.js';
3
+ import { type HistoryEntry, type StoreState } from './store.js';
4
+ /**
5
+ * Test a diff path against a dot-string pattern. Segments compare pairwise
6
+ * for the length of the shorter list; `*` in the pattern matches any single
7
+ * segment. Because the comparison stops at the shorter list, a pattern
8
+ * matches changes below it (`root.grid` matches a change at `root.grid.5.3`)
9
+ * and above it (`root.grid.5.3` matches a wholesale replacement recorded at
10
+ * `root.grid`).
11
+ */
12
+ export declare const matchesPathPattern: (path: string, pattern: string) => boolean;
13
+ /** Test a diff path against every pattern, succeeding on the first match. */
14
+ export declare const matchesAnyPathPattern: (path: string, patterns: ReadonlyArray<string>) => boolean;
15
+ /**
16
+ * Find the first pattern that can never match a diff path: one whose first
17
+ * segment is neither `root` nor `*`. Diff paths are always anchored at
18
+ * `root`, so accepting such a pattern would silently return no results.
19
+ */
20
+ export declare const findUnanchoredPattern: (patterns: ReadonlyArray<string>) => Option.Option<string>;
21
+ /** A retained history entry paired with its absolute history index. */
22
+ export type IndexedEntry = Readonly<{
23
+ entry: HistoryEntry;
24
+ index: number;
25
+ }>;
26
+ /**
27
+ * Materialize the retained history entries with their absolute indices,
28
+ * dropping entries before `maybeSinceIndex` and entries whose `changedPaths`
29
+ * match none of the patterns. `Some([])` is treated as no filter so callers
30
+ * never have to special-case an empty pattern list. Entries that did not
31
+ * change the Model have no changed paths and never match a pattern filter.
32
+ */
33
+ export declare const collectMatchingEntries: (state: StoreState, maybeSinceIndex: Option.Option<number>, maybeChangedPathsMatch: Option.Option<ReadonlyArray<string>>) => ReadonlyArray<IndexedEntry>;
34
+ /** One page of matching history entries plus the cursor for the next page. */
35
+ export type MessagesPage = Readonly<{
36
+ page: ReadonlyArray<IndexedEntry>;
37
+ maybeNextIndex: Option.Option<number>;
38
+ }>;
39
+ /**
40
+ * Page a filtered candidate list. Forward pages take the first `limit`
41
+ * candidates and report the absolute index of the next matching entry, which
42
+ * a follow-up call passes back as the since index. Tail pages (`isFromEnd`)
43
+ * take the final `limit` candidates, still in chronological order, and never
44
+ * have a next index.
45
+ */
46
+ export declare const pageMatchingEntries: (candidates: ReadonlyArray<IndexedEntry>, limit: number, isFromEnd: boolean) => MessagesPage;
47
+ /**
48
+ * Count entries by Message tag, sorted by count descending then tag ascending
49
+ * so the noisiest Messages surface first.
50
+ */
51
+ export declare const countEntriesByTag: (entries: ReadonlyArray<IndexedEntry>) => ReadonlyArray<MessageTagCount>;
52
+ /**
53
+ * The oldest non-init index `getModelAtIndex` can answer. The keyframe
54
+ * stored at `startIndex` is the Model right after entry `startIndex - 1`, so
55
+ * the index one before the oldest retained entry is still readable even
56
+ * though its entry was evicted.
57
+ */
58
+ export declare const oldestReadableIndex: (state: StoreState) => number;
59
+ /**
60
+ * Whether `getModelAtIndex` can answer for this index: `INIT_INDEX` once the
61
+ * init Model is recorded, otherwise an index between `oldestReadableIndex`
62
+ * and the latest entry. Indices outside this range have been evicted (or
63
+ * have not happened yet) and must be rejected rather than silently replayed
64
+ * from the wrong keyframe.
65
+ */
66
+ export declare const isIndexReadable: (state: StoreState, index: number) => boolean;
67
+ /**
68
+ * Format a clear error for an index `isIndexReadable` rejected, listing the
69
+ * index ranges the runtime can still answer for.
70
+ */
71
+ export declare const formatIndexNotReadable: (state: StoreState, index: number) => string;
72
+ /**
73
+ * Order diff paths for readability: segments compare pairwise, numeric
74
+ * segments compare as numbers so `root.items.2` sorts before
75
+ * `root.items.10`, and a path that is a prefix of another sorts first.
76
+ */
77
+ export declare const pathOrder: Order.Order<string>;
78
+ /**
79
+ * Read the summarized value at a diff path on a Model snapshot. `None` when
80
+ * the path does not exist on this side of the diff (a key or element that was
81
+ * added or removed). Resolution happens on the `toInspectableValue` transform
82
+ * of the Model, the same tree the diff handler walks.
83
+ */
84
+ export declare const readSummarizedValueAt: (model: unknown, path: string) => Option.Option<unknown>;
85
+ //# sourceMappingURL=historyQuery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"historyQuery.d.ts","sourceRoot":"","sources":["../../src/devTools/historyQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,MAAM,EAAE,KAAK,EAAgB,MAAM,QAAQ,CAAA;AAE3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAEpD,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,UAAU,EAEhB,MAAM,YAAY,CAAA;AAOnB;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,KAAG,OAOhE,CAAA;AAEH,6EAA6E;AAC7E,eAAO,MAAM,qBAAqB,GAChC,MAAM,MAAM,EACZ,UAAU,aAAa,CAAC,MAAM,CAAC,KAC9B,OAA6E,CAAA;AAEhF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAChC,UAAU,aAAa,CAAC,MAAM,CAAC,KAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAQpB,CAAA;AAcH,uEAAuE;AACvE,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;IAClC,KAAK,EAAE,YAAY,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;CACd,CAAC,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,GACjC,OAAO,UAAU,EACjB,iBAAiB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EACtC,wBAAwB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAC3D,aAAa,CAAC,YAAY,CAoB5B,CAAA;AAED,8EAA8E;AAC9E,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;IAClC,IAAI,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;IACjC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;CACtC,CAAC,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAC9B,YAAY,aAAa,CAAC,YAAY,CAAC,EACvC,OAAO,MAAM,EACb,WAAW,OAAO,KACjB,YAYI,CAAA;AAOP;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,SAAS,aAAa,CAAC,YAAY,CAAC,KACnC,aAAa,CAAC,eAAe,CAO7B,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,OAAO,UAAU,KAAG,MACrB,CAAA;AAEnC;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,UAAU,EAAE,OAAO,MAAM,KAAG,OAGU,CAAA;AAE7E;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GACjC,OAAO,UAAU,EACjB,OAAO,MAAM,KACZ,MAcF,CAAA;AAID;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAgBxC,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,OAAO,OAAO,EACd,MAAM,MAAM,KACX,MAAM,CAAC,MAAM,CAAC,OAAO,CAIrB,CAAA"}
@@ -0,0 +1,123 @@
1
+ import { Array, HashSet, Match, Option, Order, Record, pipe } from 'effect';
2
+ import { toInspectableValue } from './serialize.js';
3
+ import { INIT_INDEX, latestEntryIndex, } from './store.js';
4
+ import { resolvePath, summarizeValue } from './summarize.js';
5
+ const ROOT = 'root';
6
+ const PATH_SEPARATOR = '.';
7
+ const WILDCARD = '*';
8
+ /**
9
+ * Test a diff path against a dot-string pattern. Segments compare pairwise
10
+ * for the length of the shorter list; `*` in the pattern matches any single
11
+ * segment. Because the comparison stops at the shorter list, a pattern
12
+ * matches changes below it (`root.grid` matches a change at `root.grid.5.3`)
13
+ * and above it (`root.grid.5.3` matches a wholesale replacement recorded at
14
+ * `root.grid`).
15
+ */
16
+ export const matchesPathPattern = (path, pattern) => pipe(Array.zip(path.split(PATH_SEPARATOR), pattern.split(PATH_SEPARATOR)), Array.every(([pathSegment, patternSegment]) => patternSegment === WILDCARD || patternSegment === pathSegment));
17
+ /** Test a diff path against every pattern, succeeding on the first match. */
18
+ export const matchesAnyPathPattern = (path, patterns) => Array.some(patterns, pattern => matchesPathPattern(path, pattern));
19
+ /**
20
+ * Find the first pattern that can never match a diff path: one whose first
21
+ * segment is neither `root` nor `*`. Diff paths are always anchored at
22
+ * `root`, so accepting such a pattern would silently return no results.
23
+ */
24
+ export const findUnanchoredPattern = (patterns) => Array.findFirst(patterns, pattern => !Option.exists(Array.head(pattern.split(PATH_SEPARATOR)), firstSegment => firstSegment === ROOT || firstSegment === WILDCARD));
25
+ const entryMatchesPatterns = (entry, maybePatterns) => Option.match(maybePatterns, {
26
+ onNone: () => true,
27
+ onSome: patterns => HashSet.some(entry.diff.changedPaths, path => matchesAnyPathPattern(path, patterns)),
28
+ });
29
+ /**
30
+ * Materialize the retained history entries with their absolute indices,
31
+ * dropping entries before `maybeSinceIndex` and entries whose `changedPaths`
32
+ * match none of the patterns. `Some([])` is treated as no filter so callers
33
+ * never have to special-case an empty pattern list. Entries that did not
34
+ * change the Model have no changed paths and never match a pattern filter.
35
+ */
36
+ export const collectMatchingEntries = (state, maybeSinceIndex, maybeChangedPathsMatch) => {
37
+ const maybePatterns = Option.filter(maybeChangedPathsMatch, Array.isReadonlyArrayNonEmpty);
38
+ const startAbsolute = Option.getOrElse(maybeSinceIndex, () => state.startIndex);
39
+ const startRelative = Math.max(0, startAbsolute - state.startIndex);
40
+ return pipe(state.entries, Array.map((entry, relativeIndex) => ({
41
+ entry,
42
+ index: state.startIndex + relativeIndex,
43
+ })), Array.drop(startRelative), Array.filter(({ entry }) => entryMatchesPatterns(entry, maybePatterns)));
44
+ };
45
+ /**
46
+ * Page a filtered candidate list. Forward pages take the first `limit`
47
+ * candidates and report the absolute index of the next matching entry, which
48
+ * a follow-up call passes back as the since index. Tail pages (`isFromEnd`)
49
+ * take the final `limit` candidates, still in chronological order, and never
50
+ * have a next index.
51
+ */
52
+ export const pageMatchingEntries = (candidates, limit, isFromEnd) => isFromEnd
53
+ ? {
54
+ page: Array.takeRight(candidates, limit),
55
+ maybeNextIndex: Option.none(),
56
+ }
57
+ : {
58
+ page: Array.take(candidates, limit),
59
+ maybeNextIndex: Option.map(Array.get(candidates, limit), ({ index }) => index),
60
+ };
61
+ const tagCountOrder = Order.combine(Order.mapInput(Order.flip(Order.Number), ({ count }) => count), Order.mapInput(Order.String, ({ tag }) => tag));
62
+ /**
63
+ * Count entries by Message tag, sorted by count descending then tag ascending
64
+ * so the noisiest Messages surface first.
65
+ */
66
+ export const countEntriesByTag = (entries) => pipe(entries, Array.groupBy(({ entry }) => entry.tag), Record.toEntries, Array.map(([tag, group]) => ({ tag, count: group.length })), Array.sort(tagCountOrder));
67
+ /**
68
+ * The oldest non-init index `getModelAtIndex` can answer. The keyframe
69
+ * stored at `startIndex` is the Model right after entry `startIndex - 1`, so
70
+ * the index one before the oldest retained entry is still readable even
71
+ * though its entry was evicted.
72
+ */
73
+ export const oldestReadableIndex = (state) => Math.max(0, state.startIndex - 1);
74
+ /**
75
+ * Whether `getModelAtIndex` can answer for this index: `INIT_INDEX` once the
76
+ * init Model is recorded, otherwise an index between `oldestReadableIndex`
77
+ * and the latest entry. Indices outside this range have been evicted (or
78
+ * have not happened yet) and must be rejected rather than silently replayed
79
+ * from the wrong keyframe.
80
+ */
81
+ export const isIndexReadable = (state, index) => index === INIT_INDEX
82
+ ? Option.isSome(state.maybeInitModel)
83
+ : index >= oldestReadableIndex(state) && index <= latestEntryIndex(state);
84
+ /**
85
+ * Format a clear error for an index `isIndexReadable` rejected, listing the
86
+ * index ranges the runtime can still answer for.
87
+ */
88
+ export const formatIndexNotReadable = (state, index) => {
89
+ const latest = latestEntryIndex(state);
90
+ const initRange = Option.isSome(state.maybeInitModel) ? ['-1 (init)'] : [];
91
+ const entryRange = latest >= state.startIndex
92
+ ? [`${oldestReadableIndex(state)} to ${latest}`]
93
+ : [];
94
+ const ranges = [...initRange, ...entryRange];
95
+ return Array.match(ranges, {
96
+ onEmpty: () => `No Model at index ${index}: the runtime has not recorded init yet.`,
97
+ onNonEmpty: nonEmptyRanges => `No Model at index ${index}. Readable indices: ${nonEmptyRanges.join(' and ')}. Indices outside this range were either evicted from the rolling history buffer or have not been recorded yet.`,
98
+ });
99
+ };
100
+ const isArrayIndexSegment = (segment) => /^\d+$/.test(segment);
101
+ /**
102
+ * Order diff paths for readability: segments compare pairwise, numeric
103
+ * segments compare as numbers so `root.items.2` sorts before
104
+ * `root.items.10`, and a path that is a prefix of another sorts first.
105
+ */
106
+ export const pathOrder = Order.make((self, that) => {
107
+ const selfSegments = self.split(PATH_SEPARATOR);
108
+ const thatSegments = that.split(PATH_SEPARATOR);
109
+ const maybeFirstDifference = pipe(Array.zip(selfSegments, thatSegments), Array.findFirst(([selfSegment, thatSegment]) => selfSegment !== thatSegment));
110
+ return Option.match(maybeFirstDifference, {
111
+ onNone: () => Order.Number(selfSegments.length, thatSegments.length),
112
+ onSome: ([selfSegment, thatSegment]) => isArrayIndexSegment(selfSegment) && isArrayIndexSegment(thatSegment)
113
+ ? Order.Number(Number(selfSegment), Number(thatSegment))
114
+ : Order.String(selfSegment, thatSegment),
115
+ });
116
+ });
117
+ /**
118
+ * Read the summarized value at a diff path on a Model snapshot. `None` when
119
+ * the path does not exist on this side of the diff (a key or element that was
120
+ * added or removed). Resolution happens on the `toInspectableValue` transform
121
+ * of the Model, the same tree the diff handler walks.
122
+ */
123
+ export const readSummarizedValueAt = (model, path) => Match.value(resolvePath(toInspectableValue(model), path)).pipe(Match.tag('Found', ({ value }) => Option.some(summarizeValue(value))), Match.orElse(() => Option.none()));
@@ -1 +1 @@
1
- {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../src/devTools/overlay.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,OAAO,EACP,MAAM,EAGN,OAAO,EAGP,MAAM,EAKN,MAAM,IAAI,CAAC,EAGX,eAAe,EAEhB,MAAM,QAAQ,CAAA;AAEf,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAA;AAa9C,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAQ3E,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,aAAa,EAElB,KAAK,WAAW,EAChB,KAAK,UAAU,EAChB,MAAM,YAAY,CAAA;;oFAkaG,CAAC;;;;;;;;;;;;;;AAxHvB,cAAM,YAAa,SAAQ,iBAE1B;CAAG;;AAEJ,cAAM,iBAAkB,SAAQ,sBAGC;CAAG;AAEpC,eAAO,MAAM,UAAU;;iBAGsB,CAAA;AAE7C,eAAO,MAAM,YAAY;;iBAGwB,CAAA;AAWjD,eAAO,MAAM,MAAM;;;;wBAUlB,CAAA;AAED,eAAO,MAAM,YAAY;;;;;;;;wBAIqB,CAAA;AAE9C,eAAO,MAAM,aAAa;;;;;;wBAYzB,CAAA;AAED,eAAO,MAAM,MAAM;;wBASlB,CAAA;AAED,eAAO,MAAM,KAAK;;wBASjB,CAAA;AAED,eAAO,MAAM,WAAW;;6BAYvB,CAAA;AA+rDD,eAAO,MAAM,aAAa,GACxB,OAAO,aAAa,EACpB,UAAU,gBAAgB,EAC1B,MAAM,YAAY,EAClB,aAAa,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,6DAuEhC,CAAA"}
1
+ {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../src/devTools/overlay.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,OAAO,EACP,MAAM,EAGN,OAAO,EAGP,MAAM,EAKN,MAAM,IAAI,CAAC,EAGX,eAAe,EAEhB,MAAM,QAAQ,CAAA;AAEf,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAA;AAa9C,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAQ3E,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,aAAa,EAElB,KAAK,WAAW,EAChB,KAAK,UAAU,EAEhB,MAAM,YAAY,CAAA;;oFAgbT,CAAF;;;;;;;;;;;;;;AAtIR,cAAM,YAAa,SAAQ,iBAE1B;CAAG;;AAEJ,cAAM,iBAAkB,SAAQ,sBAGC;CAAG;AAEpC,eAAO,MAAM,UAAU;;iBAGsB,CAAA;AAE7C,eAAO,MAAM,YAAY;;iBAGwB,CAAA;AAWjD,eAAO,MAAM,MAAM;;;;wBAUlB,CAAA;AAED,eAAO,MAAM,YAAY;;;;;;;;wBAIqB,CAAA;AAE9C,eAAO,MAAM,aAAa;;;;;;wBASzB,CAAA;AAED,eAAO,MAAM,MAAM;;wBASlB,CAAA;AAED,eAAO,MAAM,KAAK;;wBASjB,CAAA;AAED,eAAO,MAAM,WAAW;;6BAYvB,CAAA;AA+rDD,eAAO,MAAM,aAAa,GACxB,OAAO,aAAa,EACpB,UAAU,gBAAgB,EAC1B,MAAM,YAAY,EAClB,aAAa,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,6DAuEhC,CAAA"}
@@ -13,7 +13,7 @@ import * as Slider from '../ui/slider/public.js';
13
13
  import * as Tabs from '../ui/tabs/public.js';
14
14
  import { overlayStyles } from './overlay-styles.js';
15
15
  import { toInspectableValue } from './serialize.js';
16
- import { INIT_INDEX, } from './store.js';
16
+ import { INIT_INDEX, latestEntryIndex, } from './store.js';
17
17
  import { GOT_MESSAGE_PATTERN, extractSubmodelInfo, isTagged, } from './submodelPath.js';
18
18
  const SubmodelFilterListbox = Listbox.create();
19
19
  // MODEL
@@ -250,10 +250,7 @@ export const InspectState = Command.define('InspectState', { index: S.Number },
250
250
  export const InspectLatest = Command.define('InspectLatest', ReceivedInspectedState)(Effect.gen(function* () {
251
251
  const store = yield* StoreService;
252
252
  const state = yield* SubscriptionRef.get(store.stateRef);
253
- const latestIndex = Array_.isReadonlyArrayEmpty(state.entries)
254
- ? INIT_INDEX
255
- : state.startIndex + state.entries.length - 1;
256
- return yield* buildInspectionEffect(latestIndex);
253
+ return yield* buildInspectionEffect(latestEntryIndex(state));
257
254
  }));
258
255
  export const Resume = Command.define('Resume', CompletedResume)(Effect.gen(function* () {
259
256
  const store = yield* StoreService;
@@ -64,10 +64,23 @@ export declare const RequestGetModelAt: import("../schema/index.js").CallableTag
64
64
  maybePath: S.OptionFromNullOr<S.String>;
65
65
  expand: S.Boolean;
66
66
  }>;
67
- /** Request recent history entries, optionally starting from a given index. */
67
+ /** Request recent history entries. `maybeSinceIndex` starts the page at an absolute index; `fromEnd` returns the final entries instead (the two are mutually exclusive). `maybeChangedPathsMatch` filters entries server-side to those whose `changedPaths` match at least one dot-string pattern: segments compare pairwise for the length of the shorter list and `*` matches any single segment, so `root.grid` matches changes anywhere inside the grid subtree and `root.grid.5.3` also matches a wholesale replacement recorded at `root.grid`. The two newer fields decode with defaults when absent, so requests from an older MCP server keep working against a newer runtime. */
68
68
  export declare const RequestListMessages: import("../schema/index.js").CallableTaggedStruct<"RequestListMessages", {
69
69
  limit: S.Number;
70
70
  maybeSinceIndex: S.OptionFromNullOr<S.Number>;
71
+ maybeChangedPathsMatch: S.withDecodingDefault<S.OptionFromNullOr<S.$Array<S.String>>, never>;
72
+ fromEnd: S.withDecodingDefault<S.Boolean, never>;
73
+ }>;
74
+ /** Request a histogram of retained history entries by Message tag. Accepts the same `maybeSinceIndex` / `maybeChangedPathsMatch` filters as `RequestListMessages` but returns only counts, so the response stays small regardless of history size. */
75
+ export declare const RequestCountMessagesByTag: import("../schema/index.js").CallableTaggedStruct<"RequestCountMessagesByTag", {
76
+ maybeSinceIndex: S.OptionFromNullOr<S.Number>;
77
+ maybeChangedPathsMatch: S.OptionFromNullOr<S.$Array<S.String>>;
78
+ }>;
79
+ /** Request a path-level diff between the Models at two absolute history indices. Each index follows `RequestGetModelAt` semantics (the Model right after that entry was applied; -1 is the initial Model). `maybeChangedPathsMatch` narrows the reported changes with the same pattern semantics as `RequestListMessages`. */
80
+ export declare const RequestDiffModels: import("../schema/index.js").CallableTaggedStruct<"RequestDiffModels", {
81
+ fromIndex: S.Number;
82
+ toIndex: S.Number;
83
+ maybeChangedPathsMatch: S.OptionFromNullOr<S.$Array<S.String>>;
71
84
  }>;
72
85
  /** Request a single history entry by index. To inspect the Model around the entry, call `RequestGetModelAt` with `index - 1` (before) and `index` (after). */
73
86
  export declare const RequestGetMessage: import("../schema/index.js").CallableTaggedStruct<"RequestGetMessage", {
@@ -106,6 +119,15 @@ export declare const Request: S.Union<readonly [import("../schema/index.js").Cal
106
119
  }>, import("../schema/index.js").CallableTaggedStruct<"RequestListMessages", {
107
120
  limit: S.Number;
108
121
  maybeSinceIndex: S.OptionFromNullOr<S.Number>;
122
+ maybeChangedPathsMatch: S.withDecodingDefault<S.OptionFromNullOr<S.$Array<S.String>>, never>;
123
+ fromEnd: S.withDecodingDefault<S.Boolean, never>;
124
+ }>, import("../schema/index.js").CallableTaggedStruct<"RequestCountMessagesByTag", {
125
+ maybeSinceIndex: S.OptionFromNullOr<S.Number>;
126
+ maybeChangedPathsMatch: S.OptionFromNullOr<S.$Array<S.String>>;
127
+ }>, import("../schema/index.js").CallableTaggedStruct<"RequestDiffModels", {
128
+ fromIndex: S.Number;
129
+ toIndex: S.Number;
130
+ maybeChangedPathsMatch: S.OptionFromNullOr<S.$Array<S.String>>;
109
131
  }>, import("../schema/index.js").CallableTaggedStruct<"RequestGetMessage", {
110
132
  index: S.Number;
111
133
  }>, import("../schema/index.js").CallableTaggedStruct<"RequestListKeyframes", {}>, import("../schema/index.js").CallableTaggedStruct<"RequestReplayToKeyframe", {
@@ -123,7 +145,7 @@ export declare const ResponseModel: import("../schema/index.js").CallableTaggedS
123
145
  atPath: S.String;
124
146
  summarized: S.Boolean;
125
147
  }>;
126
- /** Response carrying a page of history entries. `maybeNextIndex` is `Some` when more entries are available beyond this page (pass it as `RequestListMessages.maybeSinceIndex` to fetch the next page) and `None` when this page reaches the current end of history. */
148
+ /** Response carrying a page of history entries. For forward reads, `maybeNextIndex` is `Some` of the absolute index of the next entry matching the request's filters (pass it as `RequestListMessages.maybeSinceIndex` to fetch the next page) and `None` when the page reaches the end of matching history. Tail reads (`fromEnd`) always carry `None`. */
127
149
  export declare const ResponseMessages: import("../schema/index.js").CallableTaggedStruct<"ResponseMessages", {
128
150
  entries: S.$Array<S.Struct<{
129
151
  readonly index: S.Number;
@@ -176,6 +198,61 @@ export declare const ResponseMessage: import("../schema/index.js").CallableTagge
176
198
  readonly maybeLeafTag: S.OptionFromNullOr<S.String>;
177
199
  }>;
178
200
  }>;
201
+ /** One row of a Message-tag histogram. */
202
+ export declare const MessageTagCount: S.Struct<{
203
+ readonly tag: S.String;
204
+ readonly count: S.Number;
205
+ }>;
206
+ /** One row of a Message-tag histogram. */
207
+ export type MessageTagCount = typeof MessageTagCount.Type;
208
+ /** Response carrying a Message-tag histogram, sorted by count descending then tag ascending. `totalCount` is the number of entries counted after filters. `scannedFromIndex` / `scannedToIndex` bound the absolute index range scanned (`scannedToIndex` is -1 when no entries are retained), so callers learn the live history bounds without a separate runtime-state call. */
209
+ export declare const ResponseMessageCounts: import("../schema/index.js").CallableTaggedStruct<"ResponseMessageCounts", {
210
+ counts: S.$Array<S.Struct<{
211
+ readonly tag: S.String;
212
+ readonly count: S.Number;
213
+ }>>;
214
+ totalCount: S.Number;
215
+ scannedFromIndex: S.Number;
216
+ scannedToIndex: S.Number;
217
+ }>;
218
+ /** The value on one side of a Model diff path: `Present` carries the summarized value; `Absent` means the path does not exist on that side (an added or removed key or element). The tagged shape is deliberate: a nullable encoding could not distinguish an absent path from a path whose value is literally `null`. `undefined`, which JSON cannot represent, is reported as `null`. */
219
+ export declare const DiffValueAbsent: import("../schema/index.js").CallableTaggedStruct<"Absent", {}>;
220
+ /** The value on one side of a Model diff path. See `DiffValue`. */
221
+ export declare const DiffValuePresent: import("../schema/index.js").CallableTaggedStruct<"Present", {
222
+ value: S.Unknown;
223
+ }>;
224
+ /** The value on one side of a Model diff path. */
225
+ export declare const DiffValue: S.Union<readonly [import("../schema/index.js").CallableTaggedStruct<"Absent", {}>, import("../schema/index.js").CallableTaggedStruct<"Present", {
226
+ value: S.Unknown;
227
+ }>]>;
228
+ /** The value on one side of a Model diff path. */
229
+ export type DiffValue = typeof DiffValue.Type;
230
+ /** One changed path in a Model diff. `before` is the value at `fromIndex`, `after` the value at `toIndex`. */
231
+ export declare const ModelDiffChange: S.Struct<{
232
+ readonly path: S.String;
233
+ readonly before: S.Union<readonly [import("../schema/index.js").CallableTaggedStruct<"Absent", {}>, import("../schema/index.js").CallableTaggedStruct<"Present", {
234
+ value: S.Unknown;
235
+ }>]>;
236
+ readonly after: S.Union<readonly [import("../schema/index.js").CallableTaggedStruct<"Absent", {}>, import("../schema/index.js").CallableTaggedStruct<"Present", {
237
+ value: S.Unknown;
238
+ }>]>;
239
+ }>;
240
+ /** One changed path in a Model diff. */
241
+ export type ModelDiffChange = typeof ModelDiffChange.Type;
242
+ /** Response carrying a path-level Model diff between two history indices. Changes list the leaf paths where the Models differ, sorted by path with numeric segments in numeric order; values are summarized with the same rules `ResponseModel` applies when `expand` is false. */
243
+ export declare const ResponseModelDiff: import("../schema/index.js").CallableTaggedStruct<"ResponseModelDiff", {
244
+ fromIndex: S.Number;
245
+ toIndex: S.Number;
246
+ changes: S.$Array<S.Struct<{
247
+ readonly path: S.String;
248
+ readonly before: S.Union<readonly [import("../schema/index.js").CallableTaggedStruct<"Absent", {}>, import("../schema/index.js").CallableTaggedStruct<"Present", {
249
+ value: S.Unknown;
250
+ }>]>;
251
+ readonly after: S.Union<readonly [import("../schema/index.js").CallableTaggedStruct<"Absent", {}>, import("../schema/index.js").CallableTaggedStruct<"Present", {
252
+ value: S.Unknown;
253
+ }>]>;
254
+ }>>;
255
+ }>;
179
256
  /** Response carrying the list of available keyframes. */
180
257
  export declare const ResponseKeyframes: import("../schema/index.js").CallableTaggedStruct<"ResponseKeyframes", {
181
258
  keyframes: S.$Array<S.Struct<{
@@ -338,6 +415,26 @@ export declare const Response: S.Union<readonly [import("../schema/index.js").Ca
338
415
  readonly submodelPath: S.$Array<S.String>;
339
416
  readonly maybeLeafTag: S.OptionFromNullOr<S.String>;
340
417
  }>;
418
+ }>, import("../schema/index.js").CallableTaggedStruct<"ResponseMessageCounts", {
419
+ counts: S.$Array<S.Struct<{
420
+ readonly tag: S.String;
421
+ readonly count: S.Number;
422
+ }>>;
423
+ totalCount: S.Number;
424
+ scannedFromIndex: S.Number;
425
+ scannedToIndex: S.Number;
426
+ }>, import("../schema/index.js").CallableTaggedStruct<"ResponseModelDiff", {
427
+ fromIndex: S.Number;
428
+ toIndex: S.Number;
429
+ changes: S.$Array<S.Struct<{
430
+ readonly path: S.String;
431
+ readonly before: S.Union<readonly [import("../schema/index.js").CallableTaggedStruct<"Absent", {}>, import("../schema/index.js").CallableTaggedStruct<"Present", {
432
+ value: S.Unknown;
433
+ }>]>;
434
+ readonly after: S.Union<readonly [import("../schema/index.js").CallableTaggedStruct<"Absent", {}>, import("../schema/index.js").CallableTaggedStruct<"Present", {
435
+ value: S.Unknown;
436
+ }>]>;
437
+ }>>;
341
438
  }>, import("../schema/index.js").CallableTaggedStruct<"ResponseKeyframes", {
342
439
  keyframes: S.$Array<S.Struct<{
343
440
  readonly index: S.Number;
@@ -424,6 +521,15 @@ export declare const RequestFrame: S.Struct<{
424
521
  }>, import("../schema/index.js").CallableTaggedStruct<"RequestListMessages", {
425
522
  limit: S.Number;
426
523
  maybeSinceIndex: S.OptionFromNullOr<S.Number>;
524
+ maybeChangedPathsMatch: S.withDecodingDefault<S.OptionFromNullOr<S.$Array<S.String>>, never>;
525
+ fromEnd: S.withDecodingDefault<S.Boolean, never>;
526
+ }>, import("../schema/index.js").CallableTaggedStruct<"RequestCountMessagesByTag", {
527
+ maybeSinceIndex: S.OptionFromNullOr<S.Number>;
528
+ maybeChangedPathsMatch: S.OptionFromNullOr<S.$Array<S.String>>;
529
+ }>, import("../schema/index.js").CallableTaggedStruct<"RequestDiffModels", {
530
+ fromIndex: S.Number;
531
+ toIndex: S.Number;
532
+ maybeChangedPathsMatch: S.OptionFromNullOr<S.$Array<S.String>>;
427
533
  }>, import("../schema/index.js").CallableTaggedStruct<"RequestGetMessage", {
428
534
  index: S.Number;
429
535
  }>, import("../schema/index.js").CallableTaggedStruct<"RequestListKeyframes", {}>, import("../schema/index.js").CallableTaggedStruct<"RequestReplayToKeyframe", {
@@ -492,6 +598,26 @@ export declare const ResponseFrame: S.Struct<{
492
598
  readonly submodelPath: S.$Array<S.String>;
493
599
  readonly maybeLeafTag: S.OptionFromNullOr<S.String>;
494
600
  }>;
601
+ }>, import("../schema/index.js").CallableTaggedStruct<"ResponseMessageCounts", {
602
+ counts: S.$Array<S.Struct<{
603
+ readonly tag: S.String;
604
+ readonly count: S.Number;
605
+ }>>;
606
+ totalCount: S.Number;
607
+ scannedFromIndex: S.Number;
608
+ scannedToIndex: S.Number;
609
+ }>, import("../schema/index.js").CallableTaggedStruct<"ResponseModelDiff", {
610
+ fromIndex: S.Number;
611
+ toIndex: S.Number;
612
+ changes: S.$Array<S.Struct<{
613
+ readonly path: S.String;
614
+ readonly before: S.Union<readonly [import("../schema/index.js").CallableTaggedStruct<"Absent", {}>, import("../schema/index.js").CallableTaggedStruct<"Present", {
615
+ value: S.Unknown;
616
+ }>]>;
617
+ readonly after: S.Union<readonly [import("../schema/index.js").CallableTaggedStruct<"Absent", {}>, import("../schema/index.js").CallableTaggedStruct<"Present", {
618
+ value: S.Unknown;
619
+ }>]>;
620
+ }>>;
495
621
  }>, import("../schema/index.js").CallableTaggedStruct<"ResponseKeyframes", {
496
622
  keyframes: S.$Array<S.Struct<{
497
623
  readonly index: S.Number;
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/devTools/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/devTools/protocol.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Schema as S } from 'effect';
1
+ import { Effect, Schema as S } from 'effect';
2
2
  import { ts } from '../schema/index.js';
3
3
  // SHARED
4
4
  /** A serialized Command produced during a Message dispatch (or `init`). `args` is `Some` when the Command's definition declared an args record, and carries the runtime values used to construct the Command instance. */
@@ -48,10 +48,23 @@ export const RequestGetModelAt = ts('RequestGetModelAt', {
48
48
  maybePath: S.OptionFromNullOr(S.String),
49
49
  expand: S.Boolean,
50
50
  });
51
- /** Request recent history entries, optionally starting from a given index. */
51
+ /** Request recent history entries. `maybeSinceIndex` starts the page at an absolute index; `fromEnd` returns the final entries instead (the two are mutually exclusive). `maybeChangedPathsMatch` filters entries server-side to those whose `changedPaths` match at least one dot-string pattern: segments compare pairwise for the length of the shorter list and `*` matches any single segment, so `root.grid` matches changes anywhere inside the grid subtree and `root.grid.5.3` also matches a wholesale replacement recorded at `root.grid`. The two newer fields decode with defaults when absent, so requests from an older MCP server keep working against a newer runtime. */
52
52
  export const RequestListMessages = ts('RequestListMessages', {
53
53
  limit: S.Number,
54
54
  maybeSinceIndex: S.OptionFromNullOr(S.Number),
55
+ maybeChangedPathsMatch: S.OptionFromNullOr(S.Array(S.String)).pipe(S.withDecodingDefault(Effect.succeed(null))),
56
+ fromEnd: S.Boolean.pipe(S.withDecodingDefault(Effect.succeed(false))),
57
+ });
58
+ /** Request a histogram of retained history entries by Message tag. Accepts the same `maybeSinceIndex` / `maybeChangedPathsMatch` filters as `RequestListMessages` but returns only counts, so the response stays small regardless of history size. */
59
+ export const RequestCountMessagesByTag = ts('RequestCountMessagesByTag', {
60
+ maybeSinceIndex: S.OptionFromNullOr(S.Number),
61
+ maybeChangedPathsMatch: S.OptionFromNullOr(S.Array(S.String)),
62
+ });
63
+ /** Request a path-level diff between the Models at two absolute history indices. Each index follows `RequestGetModelAt` semantics (the Model right after that entry was applied; -1 is the initial Model). `maybeChangedPathsMatch` narrows the reported changes with the same pattern semantics as `RequestListMessages`. */
64
+ export const RequestDiffModels = ts('RequestDiffModels', {
65
+ fromIndex: S.Number,
66
+ toIndex: S.Number,
67
+ maybeChangedPathsMatch: S.OptionFromNullOr(S.Array(S.String)),
55
68
  });
56
69
  /** Request a single history entry by index. To inspect the Model around the entry, call `RequestGetModelAt` with `index - 1` (before) and `index` (after). */
57
70
  export const RequestGetMessage = ts('RequestGetMessage', {
@@ -84,6 +97,8 @@ export const Request = S.Union([
84
97
  RequestGetModel,
85
98
  RequestGetModelAt,
86
99
  RequestListMessages,
100
+ RequestCountMessagesByTag,
101
+ RequestDiffModels,
87
102
  RequestGetMessage,
88
103
  RequestListKeyframes,
89
104
  RequestReplayToKeyframe,
@@ -101,7 +116,7 @@ export const ResponseModel = ts('ResponseModel', {
101
116
  atPath: S.String,
102
117
  summarized: S.Boolean,
103
118
  });
104
- /** Response carrying a page of history entries. `maybeNextIndex` is `Some` when more entries are available beyond this page (pass it as `RequestListMessages.maybeSinceIndex` to fetch the next page) and `None` when this page reaches the current end of history. */
119
+ /** Response carrying a page of history entries. For forward reads, `maybeNextIndex` is `Some` of the absolute index of the next entry matching the request's filters (pass it as `RequestListMessages.maybeSinceIndex` to fetch the next page) and `None` when the page reaches the end of matching history. Tail reads (`fromEnd`) always carry `None`. */
105
120
  export const ResponseMessages = ts('ResponseMessages', {
106
121
  entries: S.Array(SerializedEntry),
107
122
  maybeNextIndex: S.OptionFromNullOr(S.Number),
@@ -110,6 +125,36 @@ export const ResponseMessages = ts('ResponseMessages', {
110
125
  export const ResponseMessage = ts('ResponseMessage', {
111
126
  entry: SerializedEntry,
112
127
  });
128
+ /** One row of a Message-tag histogram. */
129
+ export const MessageTagCount = S.Struct({
130
+ tag: S.String,
131
+ count: S.Number,
132
+ });
133
+ /** Response carrying a Message-tag histogram, sorted by count descending then tag ascending. `totalCount` is the number of entries counted after filters. `scannedFromIndex` / `scannedToIndex` bound the absolute index range scanned (`scannedToIndex` is -1 when no entries are retained), so callers learn the live history bounds without a separate runtime-state call. */
134
+ export const ResponseMessageCounts = ts('ResponseMessageCounts', {
135
+ counts: S.Array(MessageTagCount),
136
+ totalCount: S.Number,
137
+ scannedFromIndex: S.Number,
138
+ scannedToIndex: S.Number,
139
+ });
140
+ /** The value on one side of a Model diff path: `Present` carries the summarized value; `Absent` means the path does not exist on that side (an added or removed key or element). The tagged shape is deliberate: a nullable encoding could not distinguish an absent path from a path whose value is literally `null`. `undefined`, which JSON cannot represent, is reported as `null`. */
141
+ export const DiffValueAbsent = ts('Absent');
142
+ /** The value on one side of a Model diff path. See `DiffValue`. */
143
+ export const DiffValuePresent = ts('Present', { value: S.Unknown });
144
+ /** The value on one side of a Model diff path. */
145
+ export const DiffValue = S.Union([DiffValueAbsent, DiffValuePresent]);
146
+ /** One changed path in a Model diff. `before` is the value at `fromIndex`, `after` the value at `toIndex`. */
147
+ export const ModelDiffChange = S.Struct({
148
+ path: S.String,
149
+ before: DiffValue,
150
+ after: DiffValue,
151
+ });
152
+ /** Response carrying a path-level Model diff between two history indices. Changes list the leaf paths where the Models differ, sorted by path with numeric segments in numeric order; values are summarized with the same rules `ResponseModel` applies when `expand` is false. */
153
+ export const ResponseModelDiff = ts('ResponseModelDiff', {
154
+ fromIndex: S.Number,
155
+ toIndex: S.Number,
156
+ changes: S.Array(ModelDiffChange),
157
+ });
113
158
  /** Response carrying the list of available keyframes. */
114
159
  export const ResponseKeyframes = ts('ResponseKeyframes', {
115
160
  keyframes: S.Array(KeyframeInfo),
@@ -178,6 +223,8 @@ export const Response = S.Union([
178
223
  ResponseModel,
179
224
  ResponseMessages,
180
225
  ResponseMessage,
226
+ ResponseMessageCounts,
227
+ ResponseModelDiff,
181
228
  ResponseKeyframes,
182
229
  ResponseReplayed,
183
230
  ResponseResumed,
@@ -1,2 +1,2 @@
1
- export { EventConnected, EventDisconnected, EventFrame, Event, KeyframeInfo, RequestDispatchMessage, RequestFrame, RequestGetInit, RequestGetMessage, RequestGetMessageSchema, RequestGetModel, RequestGetModelAt, RequestGetRuntimeState, RequestListKeyframes, RequestListMessages, RequestListRuntimes, RequestReplayToKeyframe, RequestResume, Request, ResponseDispatched, ResponseError, ResponseFrame, ResponseInit, ResponseKeyframes, ResponseMessage, ResponseMessages, ResponseMessageSchema, ResponseModel, ResponseReplayed, ResponseResumed, ResponseRuntimes, ResponseRuntimeState, Response, RuntimeInfo, SerializedEntry, } from './protocol.js';
1
+ export { EventConnected, EventDisconnected, EventFrame, Event, KeyframeInfo, DiffValue, DiffValueAbsent, DiffValuePresent, MessageTagCount, ModelDiffChange, RequestCountMessagesByTag, RequestDiffModels, RequestDispatchMessage, RequestFrame, RequestGetInit, RequestGetMessage, RequestGetMessageSchema, RequestGetModel, RequestGetModelAt, RequestGetRuntimeState, RequestListKeyframes, RequestListMessages, RequestListRuntimes, RequestReplayToKeyframe, RequestResume, Request, ResponseDispatched, ResponseError, ResponseFrame, ResponseInit, ResponseKeyframes, ResponseMessage, ResponseMessageCounts, ResponseMessages, ResponseMessageSchema, ResponseModel, ResponseModelDiff, ResponseReplayed, ResponseResumed, ResponseRuntimes, ResponseRuntimeState, Response, RuntimeInfo, SerializedEntry, } from './protocol.js';
2
2
  //# sourceMappingURL=public.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/devTools/public.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,UAAU,EACV,KAAK,EACL,YAAY,EACZ,sBAAsB,EACtB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,aAAa,EACb,OAAO,EACP,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,QAAQ,EACR,WAAW,EACX,eAAe,GAChB,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/devTools/public.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,UAAU,EACV,KAAK,EACL,YAAY,EACZ,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,iBAAiB,EACjB,sBAAsB,EACtB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,aAAa,EACb,OAAO,EACP,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,QAAQ,EACR,WAAW,EACX,eAAe,GAChB,MAAM,eAAe,CAAA"}
@@ -1 +1 @@
1
- export { EventConnected, EventDisconnected, EventFrame, Event, KeyframeInfo, RequestDispatchMessage, RequestFrame, RequestGetInit, RequestGetMessage, RequestGetMessageSchema, RequestGetModel, RequestGetModelAt, RequestGetRuntimeState, RequestListKeyframes, RequestListMessages, RequestListRuntimes, RequestReplayToKeyframe, RequestResume, Request, ResponseDispatched, ResponseError, ResponseFrame, ResponseInit, ResponseKeyframes, ResponseMessage, ResponseMessages, ResponseMessageSchema, ResponseModel, ResponseReplayed, ResponseResumed, ResponseRuntimes, ResponseRuntimeState, Response, RuntimeInfo, SerializedEntry, } from './protocol.js';
1
+ export { EventConnected, EventDisconnected, EventFrame, Event, KeyframeInfo, DiffValue, DiffValueAbsent, DiffValuePresent, MessageTagCount, ModelDiffChange, RequestCountMessagesByTag, RequestDiffModels, RequestDispatchMessage, RequestFrame, RequestGetInit, RequestGetMessage, RequestGetMessageSchema, RequestGetModel, RequestGetModelAt, RequestGetRuntimeState, RequestListKeyframes, RequestListMessages, RequestListRuntimes, RequestReplayToKeyframe, RequestResume, Request, ResponseDispatched, ResponseError, ResponseFrame, ResponseInit, ResponseKeyframes, ResponseMessage, ResponseMessageCounts, ResponseMessages, ResponseMessageSchema, ResponseModel, ResponseModelDiff, ResponseReplayed, ResponseResumed, ResponseRuntimes, ResponseRuntimeState, Response, RuntimeInfo, SerializedEntry, } from './protocol.js';
@@ -40,6 +40,11 @@ export type Bridge = Readonly<{
40
40
  render: (model: unknown) => Effect.Effect<void>;
41
41
  markRenderPending: Effect.Effect<void>;
42
42
  }>;
43
+ /**
44
+ * The absolute index of the most recently recorded entry, or `INIT_INDEX`
45
+ * when no Messages have been recorded yet.
46
+ */
47
+ export declare const latestEntryIndex: (state: StoreState) => number;
43
48
  /**
44
49
  * Options for `createDevToolsStore`.
45
50
  *
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/devTools/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/devTools/store.ts"],"names":[],"mappings":"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"}