footprintjs 6.1.2 → 7.0.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.
- package/CLAUDE.md +31 -26
- package/README.md +1 -1
- package/dist/advanced.js +2 -6
- package/dist/esm/advanced.js +1 -3
- package/dist/esm/lib/builder/structure/StructureRecorder.js +2 -2
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +59 -24
- package/dist/esm/lib/recorder/InOutRecorder.js +31 -15
- package/dist/esm/lib/recorder/QualityRecorder.js +40 -13
- package/dist/esm/lib/recorder/RecorderOperation.js +3 -3
- package/dist/esm/lib/recorder/index.js +1 -8
- package/dist/esm/lib/recorder/qualityTrace.js +1 -1
- package/dist/esm/lib/runner/ExecutionRuntime.js +1 -1
- package/dist/esm/lib/scope/recorders/MetricRecorder.js +37 -9
- package/dist/esm/trace.js +1 -12
- package/dist/lib/builder/structure/StructureRecorder.js +2 -2
- package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +59 -24
- package/dist/lib/recorder/InOutRecorder.js +31 -15
- package/dist/lib/recorder/QualityRecorder.js +40 -13
- package/dist/lib/recorder/RecorderOperation.js +3 -3
- package/dist/lib/recorder/index.js +2 -12
- package/dist/lib/recorder/qualityTrace.js +1 -1
- package/dist/lib/runner/ExecutionRuntime.js +1 -1
- package/dist/lib/scope/recorders/MetricRecorder.js +37 -9
- package/dist/trace.js +2 -16
- package/dist/types/advanced.d.ts +0 -2
- package/dist/types/lib/builder/structure/StructureRecorder.d.ts +1 -1
- package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +26 -5
- package/dist/types/lib/recorder/InOutRecorder.d.ts +17 -6
- package/dist/types/lib/recorder/QualityRecorder.d.ts +17 -3
- package/dist/types/lib/recorder/RecorderOperation.d.ts +2 -2
- package/dist/types/lib/recorder/index.d.ts +0 -3
- package/dist/types/lib/recorder/qualityTrace.d.ts +5 -2
- package/dist/types/lib/runner/ExecutionRuntime.d.ts +1 -1
- package/dist/types/lib/scope/recorders/MetricRecorder.d.ts +18 -3
- package/dist/types/trace.d.ts +0 -3
- package/package.json +1 -1
- package/dist/esm/lib/recorder/BoundaryStateTracker.js +0 -260
- package/dist/esm/lib/recorder/KeyedRecorder.js +0 -94
- package/dist/esm/lib/recorder/SequenceRecorder.js +0 -193
- package/dist/lib/recorder/BoundaryStateTracker.js +0 -264
- package/dist/lib/recorder/KeyedRecorder.js +0 -98
- package/dist/lib/recorder/SequenceRecorder.js +0 -197
- package/dist/types/lib/recorder/BoundaryStateTracker.d.ts +0 -212
- package/dist/types/lib/recorder/KeyedRecorder.d.ts +0 -56
- package/dist/types/lib/recorder/SequenceRecorder.d.ts +0 -112
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
* MetricRecorder — per-step timing and execution counts, keyed by runtimeStageId.
|
|
4
4
|
*
|
|
5
5
|
* Stores per-invocation data during traversal. Aggregated views computed on read.
|
|
6
|
-
*
|
|
6
|
+
* Composes a `KeyedStore<StepMetrics>` for O(1) lookup and standard operations
|
|
7
|
+
* (Convention 1 — one purpose per recorder: this is the ScopeRecorder; the store
|
|
8
|
+
* is the storage).
|
|
7
9
|
*
|
|
8
10
|
* @example
|
|
9
11
|
* ```typescript
|
|
@@ -23,16 +25,17 @@
|
|
|
23
25
|
*/
|
|
24
26
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
27
|
exports.MetricRecorder = void 0;
|
|
26
|
-
const
|
|
27
|
-
class MetricRecorder
|
|
28
|
+
const KeyedStore_js_1 = require("../../recorder/KeyedStore.js");
|
|
29
|
+
class MetricRecorder {
|
|
28
30
|
static _counter = 0;
|
|
29
31
|
id;
|
|
30
32
|
preferredOperation;
|
|
33
|
+
/** 1:1 per-step storage (Convention 1 — composed, not inherited). */
|
|
34
|
+
store = new KeyedStore_js_1.KeyedStore();
|
|
31
35
|
stageStartTimes = new Map();
|
|
32
36
|
currentRuntimeStageId = '';
|
|
33
37
|
stageFilter;
|
|
34
38
|
constructor(idOrOptions) {
|
|
35
|
-
super();
|
|
36
39
|
if (typeof idOrOptions === 'string') {
|
|
37
40
|
this.id = idOrOptions;
|
|
38
41
|
this.preferredOperation = 'aggregate';
|
|
@@ -49,13 +52,38 @@ class MetricRecorder extends KeyedRecorder_js_1.KeyedRecorder {
|
|
|
49
52
|
/** Get or create the StepMetrics for the current stage. */
|
|
50
53
|
current() {
|
|
51
54
|
const key = this.currentRuntimeStageId;
|
|
52
|
-
let m = this.
|
|
55
|
+
let m = this.store.get(key);
|
|
53
56
|
if (!m) {
|
|
54
57
|
m = { stageName: '', readCount: 0, writeCount: 0, commitCount: 0, pauseCount: 0, duration: 0 };
|
|
55
|
-
this.store(key, m);
|
|
58
|
+
this.store.set(key, m);
|
|
56
59
|
}
|
|
57
60
|
return m;
|
|
58
61
|
}
|
|
62
|
+
// ── Per-step query API (delegates to the composed store) ───────────────
|
|
63
|
+
/** Translate: per-step metrics by runtimeStageId. */
|
|
64
|
+
getByKey(runtimeStageId) {
|
|
65
|
+
return this.store.get(runtimeStageId);
|
|
66
|
+
}
|
|
67
|
+
/** All per-step metrics as a read-only Map (insertion-ordered). */
|
|
68
|
+
getMap() {
|
|
69
|
+
return this.store.getMap();
|
|
70
|
+
}
|
|
71
|
+
/** All per-step metrics (insertion-ordered). */
|
|
72
|
+
values() {
|
|
73
|
+
return this.store.values();
|
|
74
|
+
}
|
|
75
|
+
/** Number of recorded steps. */
|
|
76
|
+
get size() {
|
|
77
|
+
return this.store.size;
|
|
78
|
+
}
|
|
79
|
+
/** Aggregate: reduce ALL steps to a single value (dashboards, totals). */
|
|
80
|
+
aggregate(fn, initial) {
|
|
81
|
+
return this.store.aggregate(fn, initial);
|
|
82
|
+
}
|
|
83
|
+
/** Accumulate: reduce steps up to a slider position (progressive view). */
|
|
84
|
+
accumulate(fn, initial, keys) {
|
|
85
|
+
return this.store.accumulate(fn, initial, keys);
|
|
86
|
+
}
|
|
59
87
|
onStageStart(event) {
|
|
60
88
|
if (!this.shouldRecord(event.stageName))
|
|
61
89
|
return;
|
|
@@ -145,7 +173,7 @@ class MetricRecorder extends KeyedRecorder_js_1.KeyedRecorder {
|
|
|
145
173
|
}
|
|
146
174
|
return {
|
|
147
175
|
name: 'Metrics',
|
|
148
|
-
description: 'Aggregator (
|
|
176
|
+
description: 'Aggregator (KeyedStore) — per-step timing and I/O counts',
|
|
149
177
|
preferredOperation: this.preferredOperation,
|
|
150
178
|
data: {
|
|
151
179
|
numericField: 'readCount',
|
|
@@ -161,7 +189,7 @@ class MetricRecorder extends KeyedRecorder_js_1.KeyedRecorder {
|
|
|
161
189
|
}
|
|
162
190
|
/** Clear all state — called by executor before each run(). */
|
|
163
191
|
clear() {
|
|
164
|
-
|
|
192
|
+
this.store.clear();
|
|
165
193
|
this.stageStartTimes.clear();
|
|
166
194
|
this.currentRuntimeStageId = '';
|
|
167
195
|
}
|
|
@@ -171,4 +199,4 @@ class MetricRecorder extends KeyedRecorder_js_1.KeyedRecorder {
|
|
|
171
199
|
}
|
|
172
200
|
}
|
|
173
201
|
exports.MetricRecorder = MetricRecorder;
|
|
174
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWV0cmljUmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3Njb3BlL3JlY29yZGVycy9NZXRyaWNSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRzs7O0FBRUgsc0VBQWdFO0FBb0RoRSxNQUFhLGNBQWUsU0FBUSxnQ0FBMEI7SUFDcEQsTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFFbkIsRUFBRSxDQUFTO0lBQ1gsa0JBQWtCLENBQW9CO0lBQ3ZDLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUM1QyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7SUFDM0IsV0FBVyxDQUFrQztJQUVyRCxZQUFZLFdBQTRDO1FBQ3RELEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxPQUFPLFdBQVcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsRUFBRSxHQUFHLFdBQVcsQ0FBQztZQUN0QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsV0FBVyxDQUFDO1FBQ3hDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLEVBQUUsR0FBRyxXQUFXLEVBQUUsRUFBRSxJQUFJLFdBQVcsRUFBRSxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLEVBQUUsV0FBVyxDQUFDO1lBQzVDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxXQUFXLEVBQUUsa0JBQWtCLElBQUksV0FBVyxDQUFDO1FBQzNFLENBQUM7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLFNBQWlCO1FBQ3BDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELDJEQUEyRDtJQUNuRCxPQUFPO1FBQ2IsTUFBTSxHQUFHLEdBQUcs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QztZQUN6QyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLFNBQVM7WUFDZixXQUFXLEVBQUUsNkRBQTZEO1lBQzFFLGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0I7WUFDM0MsSUFBSSxFQUFFO2dCQUNKLFlBQVksRUFBRSxXQUFXO2dCQUN6QixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7Z0JBQzlCLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYTtnQkFDcEMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO2dCQUM5QixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7Z0JBQ2hDLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtnQkFDbEMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO2dCQUNoQyxLQUFLO2FBQ047U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELDhEQUE4RDtJQUNyRCxLQUFLO1FBQ1osS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCwyQ0FBMkM7SUFDM0MsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7O0FBekpILHdDQTBKQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTWV0cmljUmVjb3JkZXIg4oCUIHBlci1zdGVwIHRpbWluZyBhbmQgZXhlY3V0aW9uIGNvdW50cywga2V5ZWQgYnkgcnVudGltZVN0YWdlSWQuXG4gKlxuICogU3RvcmVzIHBlci1pbnZvY2F0aW9uIGRhdGEgZHVyaW5nIHRyYXZlcnNhbC4gQWdncmVnYXRlZCB2aWV3cyBjb21wdXRlZCBvbiByZWFkLlxuICogRXh0ZW5kcyBLZXllZFJlY29yZGVyPFN0ZXBNZXRyaWNzPiBmb3IgTygxKSBsb29rdXAgYW5kIHN0YW5kYXJkIG9wZXJhdGlvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG1ldHJpYyA9IG5ldyBNZXRyaWNSZWNvcmRlcigpO1xuICogZXhlY3V0b3IuYXR0YWNoU2NvcGVSZWNvcmRlcihtZXRyaWMpO1xuICogYXdhaXQgZXhlY3V0b3IucnVuKCk7XG4gKlxuICogLy8gUGVyLXN0ZXAgKHRpbWUtdHJhdmVsKTpcbiAqIG1ldHJpYy5nZXRCeUtleSgnY2FsbC1sbG0jNScpOyAgLy8geyBzdGFnZU5hbWUsIHJlYWRDb3VudCwgd3JpdGVDb3VudCwgZHVyYXRpb24gfVxuICpcbiAqIC8vIEFnZ3JlZ2F0ZWQgKGJhY2t3YXJkIGNvbXBhdCk6XG4gKiBtZXRyaWMuZ2V0TWV0cmljcygpOyAgLy8geyB0b3RhbER1cmF0aW9uLCB0b3RhbFJlYWRzLCBzdGFnZU1ldHJpY3M6IE1hcDxzdGFnZU5hbWUsIGFnZ3JlZ2F0ZWQ+IH1cbiAqXG4gKiAvLyBQcm9ncmVzc2l2ZSAoc2xpZGVyKTpcbiAqIG1ldHJpYy5hY2N1bXVsYXRlKChzdW0sIG0pID0+IHN1bSArIG0uZHVyYXRpb24sIDAsIHZpc2libGVLZXlzKTtcbiAqIGBgYFxuICovXG5cbmltcG9ydCB7IEtleWVkUmVjb3JkZXIgfSBmcm9tICcuLi8uLi9yZWNvcmRlci9LZXllZFJlY29yZGVyLmpzJztcbmltcG9ydCB0eXBlIHsgUmVjb3JkZXJPcGVyYXRpb24gfSBmcm9tICcuLi8uLi9yZWNvcmRlci9SZWNvcmRlck9wZXJhdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEV2ZW50LCBQYXVzZUV2ZW50LCBSZWFkRXZlbnQsIFNjb3BlUmVjb3JkZXIsIFN0YWdlRXZlbnQsIFdyaXRlRXZlbnQgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbi8qKiBQZXItaW52b2NhdGlvbiBtZXRyaWNzIGZvciBhIHNpbmdsZSBleGVjdXRpb24gc3RlcC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcE1ldHJpY3Mge1xuICAvKiogSHVtYW4tcmVhZGFibGUgc3RhZ2UgbmFtZS4gKi9cbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIC8qKiBOdW1iZXIgb2Ygc2NvcGUgcmVhZHMgZHVyaW5nIHRoaXMgaW52b2NhdGlvbi4gKi9cbiAgcmVhZENvdW50OiBudW1iZXI7XG4gIC8qKiBOdW1iZXIgb2Ygc2NvcGUgd3JpdGVzIGR1cmluZyB0aGlzIGludm9jYXRpb24uICovXG4gIHdyaXRlQ291bnQ6IG51bWJlcjtcbiAgLyoqIE51bWJlciBvZiBjb21taXRzIGR1cmluZyB0aGlzIGludm9jYXRpb24uICovXG4gIGNvbW1pdENvdW50OiBudW1iZXI7XG4gIC8qKiBOdW1iZXIgb2YgcGF1c2VzIGR1cmluZyB0aGlzIGludm9jYXRpb24uICovXG4gIHBhdXNlQ291bnQ6IG51bWJlcjtcbiAgLyoqIER1cmF0aW9uIGluIG1zIGZvciB0aGlzIGludm9jYXRpb24uICovXG4gIGR1cmF0aW9uOiBudW1iZXI7XG59XG5cbi8qKiBBZ2dyZWdhdGVkIG1ldHJpY3MgYWNyb3NzIGFsbCBpbnZvY2F0aW9ucyAoYmFja3dhcmQgY29tcGF0aWJsZSkuICovXG5leHBvcnQgaW50ZXJmYWNlIEFnZ3JlZ2F0ZWRNZXRyaWNzIHtcbiAgdG90YWxEdXJhdGlvbjogbnVtYmVyO1xuICB0b3RhbFJlYWRzOiBudW1iZXI7XG4gIHRvdGFsV3JpdGVzOiBudW1iZXI7XG4gIHRvdGFsQ29tbWl0czogbnVtYmVyO1xuICB0b3RhbFBhdXNlczogbnVtYmVyO1xuICAvKiogQWdncmVnYXRlZCBieSBzdGFnZU5hbWUg4oCUIHN1bXMgYWNyb3NzIGxvb3AgaW52b2NhdGlvbnMuICovXG4gIHN0YWdlTWV0cmljczogTWFwPHN0cmluZywgU3RhZ2VNZXRyaWNzPjtcbn1cblxuLyoqIEFnZ3JlZ2F0ZWQgcGVyLXN0YWdlTmFtZSAoYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIHByZS1ydW50aW1lU3RhZ2VJZCBBUEkpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFnZU1ldHJpY3Mge1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgcmVhZENvdW50OiBudW1iZXI7XG4gIHdyaXRlQ291bnQ6IG51bWJlcjtcbiAgY29tbWl0Q291bnQ6IG51bWJlcjtcbiAgcGF1c2VDb3VudDogbnVtYmVyO1xuICB0b3RhbER1cmF0aW9uOiBudW1iZXI7XG4gIGludm9jYXRpb25Db3VudDogbnVtYmVyO1xufVxuXG4vKiogT3B0aW9ucyBmb3IgTWV0cmljUmVjb3JkZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIE1ldHJpY1JlY29yZGVyT3B0aW9ucyB7XG4gIC8qKiBTY29wZVJlY29yZGVyIElELiBEZWZhdWx0cyB0byBhdXRvLWluY3JlbWVudCAoYG1ldHJpY3MtMWAsIGBtZXRyaWNzLTJgLCAuLi4pLiAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqIEZpbHRlciB3aGljaCBzdGFnZXMgYXJlIHJlY29yZGVkLiBSZXR1cm4gYHRydWVgIHRvIHJlY29yZCwgYGZhbHNlYCB0byBza2lwLiAqL1xuICBzdGFnZUZpbHRlcj86IChzdGFnZU5hbWU6IHN0cmluZykgPT4gYm9vbGVhbjtcbiAgLyoqIFByZWZlcnJlZCBVSSBvcGVyYXRpb24uIERlZmF1bHRzIHRvICdhZ2dyZWdhdGUnIChkYXNoYm9hcmQgdG90YWxzKS4gKi9cbiAgcHJlZmVycmVkT3BlcmF0aW9uPzogUmVjb3JkZXJPcGVyYXRpb247XG59XG5cbmV4cG9ydCBjbGFzcyBNZXRyaWNSZWNvcmRlciBleHRlbmRzIEtleWVkUmVjb3JkZXI8U3RlcE1ldHJpY3M+IGltcGxlbWVudHMgU2NvcGVSZWNvcmRlciB7XG4gIHByaXZhdGUgc3RhdGljIF9jb3VudGVyID0gMDtcblxuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBwcmVmZXJyZWRPcGVyYXRpb246IFJlY29yZGVyT3BlcmF0aW9uO1xuICBwcml2YXRlIHN0YWdlU3RhcnRUaW1lcyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIHByaXZhdGUgY3VycmVudFJ1bnRpbWVTdGFnZUlkID0gJyc7XG4gIHByaXZhdGUgc3RhZ2VGaWx0ZXI/OiAoc3RhZ2VOYW1lOiBzdHJpbmcpID0+IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoaWRPck9wdGlvbnM/OiBzdHJpbmcgfCBNZXRyaWNSZWNvcmRlck9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICh0eXBlb2YgaWRPck9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLmlkID0gaWRPck9wdGlvbnM7XG4gICAgICB0aGlzLnByZWZlcnJlZE9wZXJhdGlvbiA9ICdhZ2dyZWdhdGUnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlkID0gaWRPck9wdGlvbnM/LmlkID8/IGBtZXRyaWNzLSR7KytNZXRyaWNSZWNvcmRlci5fY291bnRlcn1gO1xuICAgICAgdGhpcy5zdGFnZUZpbHRlciA9IGlkT3JPcHRpb25zPy5zdGFnZUZpbHRlcjtcbiAgICAgIHRoaXMucHJlZmVycmVkT3BlcmF0aW9uID0gaWRPck9wdGlvbnM/LnByZWZlcnJlZE9wZXJhdGlvbiA/PyAnYWdncmVnYXRlJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3VsZFJlY29yZChzdGFnZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5zdGFnZUZpbHRlciB8fCB0aGlzLnN0YWdlRmlsdGVyKHN0YWdlTmFtZSk7XG4gIH1cblxuICAvKiogR2V0IG9yIGNyZWF0ZSB0aGUgU3RlcE1ldHJpY3MgZm9yIHRoZSBjdXJyZW50IHN0YWdlLiAqL1xuICBwcml2YXRlIGN1cnJlbnQoKTogU3RlcE1ldHJpY3Mge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuY3VycmVudFJ1bnRpbWVTdGFnZUlkO1xuICAgIGxldCBtID0gdGhpcy5nZXRCeUtleShrZXkpO1xuICAgIGlmICghbSkge1xuICAgICAgbSA9IHsgc3RhZ2VOYW1lOiAnJywgcmVhZENvdW50OiAwLCB3cml0ZUNvdW50OiAwLCBjb21taXRDb3VudDogMCwgcGF1c2VDb3VudDogMCwgZHVyYXRpb246IDAgfTtcbiAgICAgIHRoaXMuc3RvcmUoa2V5LCBtKTtcbiAgICB9XG4gICAgcmV0dXJuIG07XG4gIH1cblxuICBvblN0YWdlU3RhcnQoZXZlbnQ6IFN0YWdlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkUmVjb3JkKGV2ZW50LnN0YWdlTmFtZSkpIHJldHVybjtcbiAgICB0aGlzLmN1cnJlbnRSdW50aW1lU3RhZ2VJZCA9IGV2ZW50LnJ1bnRpbWVTdGFnZUlkO1xuICAgIHRoaXMuc3RhZ2VTdGFydFRpbWVzLnNldChldmVudC5ydW50aW1lU3RhZ2VJZCwgZXZlbnQudGltZXN0YW1wKTtcbiAgICBjb25zdCBtID0gdGhpcy5jdXJyZW50KCk7XG4gICAgbS5zdGFnZU5hbWUgPSBldmVudC5zdGFnZU5hbWU7XG4gIH1cblxuICBvblJlYWQoZXZlbnQ6IFJlYWRFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaG91bGRSZWNvcmQoZXZlbnQuc3RhZ2VOYW1lKSkgcmV0dXJuO1xuICAgIHRoaXMuY3VycmVudCgpLnJlYWRDb3VudCsrO1xuICB9XG5cbiAgb25Xcml0ZShldmVudDogV3JpdGVFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaG91bGRSZWNvcmQoZXZlbnQuc3RhZ2VOYW1lKSkgcmV0dXJuO1xuICAgIHRoaXMuY3VycmVudCgpLndyaXRlQ291bnQrKztcbiAgfVxuXG4gIG9uQ29tbWl0KGV2ZW50OiBDb21taXRFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaG91bGRSZWNvcmQoZXZlbnQuc3RhZ2VOYW1lKSkgcmV0dXJuO1xuICAgIHRoaXMuY3VycmVudCgpLmNvbW1pdENvdW50Kys7XG4gIH1cblxuICBvblBhdXNlKGV2ZW50OiBQYXVzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3VsZFJlY29yZChldmVudC5zdGFnZU5hbWUpKSByZXR1cm47XG4gICAgdGhpcy5jdXJyZW50KCkucGF1c2VDb3VudCsrO1xuICB9XG5cbiAgb25TdGFnZUVuZChldmVudDogU3RhZ2VFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaG91bGRSZWNvcmQoZXZlbnQuc3RhZ2VOYW1lKSkgcmV0dXJuO1xuICAgIGNvbnN0IG0gPSB0aGlzLmN1cnJlbnQoKTtcbiAgICBpZiAoZXZlbnQuZHVyYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgbS5kdXJhdGlvbiA9IGV2ZW50LmR1cmF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSB0aGlzLnN0YWdlU3RhcnRUaW1lcy5nZXQoZXZlbnQucnVudGltZVN0YWdlSWQpO1xuICAgICAgbS5kdXJhdGlvbiA9IHN0YXJ0VGltZSAhPT0gdW5kZWZpbmVkID8gZXZlbnQudGltZXN0YW1wIC0gc3RhcnRUaW1lIDogMDtcbiAgICB9XG4gICAgdGhpcy5zdGFnZVN0YXJ0VGltZXMuZGVsZXRlKGV2ZW50LnJ1bnRpbWVTdGFnZUlkKTtcbiAgfVxuXG4gIC8qKiBBZ2dyZWdhdGVkIG1ldHJpY3Mg4oCUIGNvbXB1dGVzIHRvdGFscyBvbiB0aGUgZmx5IGZyb20gcGVyLXN0ZXAgZGF0YSAoYmFja3dhcmQgY29tcGF0aWJsZSkuICovXG4gIGdldE1ldHJpY3MoKTogQWdncmVnYXRlZE1ldHJpY3Mge1xuICAgIGNvbnN0IGJ5TmFtZSA9IG5ldyBNYXA8c3RyaW5nLCBTdGFnZU1ldHJpY3M+KCk7XG5cbiAgICBjb25zdCB0b3RhbER1cmF0aW9uID0gdGhpcy5hZ2dyZWdhdGUoKHN1bSwgbSkgPT4gc3VtICsgbS5kdXJhdGlvbiwgMCk7XG4gICAgY29uc3QgdG90YWxSZWFkcyA9IHRoaXMuYWdncmVnYXRlKChzdW0sIG0pID0+IHN1bSArIG0ucmVhZENvdW50LCAwKTtcbiAgICBjb25zdCB0b3RhbFdyaXRlcyA9IHRoaXMuYWdncmVnYXRlKChzdW0sIG0pID0+IHN1bSArIG0ud3JpdGVDb3VudCwgMCk7XG4gICAgY29uc3QgdG90YWxDb21taXRzID0gdGhpcy5hZ2dyZWdhdGUoKHN1bSwgbSkgPT4gc3VtICsgbS5jb21taXRDb3VudCwgMCk7XG4gICAgY29uc3QgdG90YWxQYXVzZXMgPSB0aGlzLmFnZ3JlZ2F0ZSgoc3VtLCBtKSA9PiBzdW0gKyBtLnBhdXNlQ291bnQsIDApO1xuXG4gICAgLy8gR3JvdXAgYnkgc3RhZ2VOYW1lIGZvciBiYWNrd2FyZCBjb21wYXRcbiAgICBmb3IgKGNvbnN0IG0gb2YgdGhpcy52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBieU5hbWUuZ2V0KG0uc3RhZ2VOYW1lKTtcbiAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICBleGlzdGluZy5yZWFkQ291bnQgKz0gbS5yZWFkQ291bnQ7XG4gICAgICAgIGV4aXN0aW5nLndyaXRlQ291bnQgKz0gbS53cml0ZUNvdW50O1xuICAgICAgICBleGlzdGluZy5jb21taXRDb3VudCArPSBtLmNvbW1pdENvdW50O1xuICAgICAgICBleGlzdGluZy5wYXVzZUNvdW50ICs9IG0ucGF1c2VDb3VudDtcbiAgICAgICAgZXhpc3RpbmcudG90YWxEdXJhdGlvbiArPSBtLmR1cmF0aW9uO1xuICAgICAgICBleGlzdGluZy5pbnZvY2F0aW9uQ291bnQrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ5TmFtZS5zZXQobS5zdGFnZU5hbWUsIHtcbiAgICAgICAgICBzdGFnZU5hbWU6IG0uc3RhZ2VOYW1lLFxuICAgICAgICAgIHJlYWRDb3VudDogbS5yZWFkQ291bnQsXG4gICAgICAgICAgd3JpdGVDb3VudDogbS53cml0ZUNvdW50LFxuICAgICAgICAgIGNvbW1pdENvdW50OiBtLmNvbW1pdENvdW50LFxuICAgICAgICAgIHBhdXNlQ291bnQ6IG0ucGF1c2VDb3VudCxcbiAgICAgICAgICB0b3RhbER1cmF0aW9uOiBtLmR1cmF0aW9uLFxuICAgICAgICAgIGludm9jYXRpb25Db3VudDogMSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdG90YWxEdXJhdGlvbiwgdG90YWxSZWFkcywgdG90YWxXcml0ZXMsIHRvdGFsQ29tbWl0cywgdG90YWxQYXVzZXMsIHN0YWdlTWV0cmljczogYnlOYW1lIH07XG4gIH1cblxuICAvKiogR2V0IGFnZ3JlZ2F0ZWQgbWV0cmljcyBmb3IgYSBzcGVjaWZpYyBzdGFnZSBuYW1lIChiYWNrd2FyZCBjb21wYXRpYmxlKS4gKi9cbiAgZ2V0U3RhZ2VNZXRyaWNzKHN0YWdlTmFtZTogc3RyaW5nKTogU3RhZ2VNZXRyaWNzIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBtZXRyaWNzID0gdGhpcy5nZXRNZXRyaWNzKCk7XG4gICAgcmV0dXJuIG1ldHJpY3Muc3RhZ2VNZXRyaWNzLmdldChzdGFnZU5hbWUpO1xuICB9XG5cbiAgdG9TbmFwc2hvdCgpIHtcbiAgICBjb25zdCBtZXRyaWNzID0gdGhpcy5nZXRNZXRyaWNzKCk7XG4gICAgLy8gRXhwb3NlIHBlci1zdGVwIGRhdGEga2V5ZWQgYnkgcnVudGltZVN0YWdlSWQgKGZvciB0aW1lLXRyYXZlbCBVSSlcbiAgICAvLyBhbG9uZ3NpZGUgdGhlIGFnZ3JlZ2F0ZWQgdG90YWxzXG4gICAgY29uc3Qgc3RlcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5nZXRNYXAoKSkge1xuICAgICAgc3RlcHNba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ01ldHJpY3MnLFxuICAgICAgZGVzY3JpcHRpb246ICdBZ2dyZWdhdG9yIChLZXllZFJlY29yZGVyKSDigJQgcGVyLXN0ZXAgdGltaW5nIGFuZCBJL08gY291bnRzJyxcbiAgICAgIHByZWZlcnJlZE9wZXJhdGlvbjogdGhpcy5wcmVmZXJyZWRPcGVyYXRpb24sXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG51bWVyaWNGaWVsZDogJ3JlYWRDb3VudCcsXG4gICAgICAgIGdyYW5kVG90YWw6IG1ldHJpY3MudG90YWxSZWFkcyxcbiAgICAgICAgdG90YWxEdXJhdGlvbjogbWV0cmljcy50b3RhbER1cmF0aW9uLFxuICAgICAgICB0b3RhbFJlYWRzOiBtZXRyaWNzLnRvdGFsUmVhZHMsXG4gICAgICAgIHRvdGFsV3JpdGVzOiBtZXRyaWNzLnRvdGFsV3JpdGVzLFxuICAgICAgICB0b3RhbENvbW1pdHM6IG1ldHJpY3MudG90YWxDb21taXRzLFxuICAgICAgICB0b3RhbFBhdXNlczogbWV0cmljcy50b3RhbFBhdXNlcyxcbiAgICAgICAgc3RlcHMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKiogQ2xlYXIgYWxsIHN0YXRlIOKAlCBjYWxsZWQgYnkgZXhlY3V0b3IgYmVmb3JlIGVhY2ggcnVuKCkuICovXG4gIG92ZXJyaWRlIGNsZWFyKCk6IHZvaWQge1xuICAgIHN1cGVyLmNsZWFyKCk7XG4gICAgdGhpcy5zdGFnZVN0YXJ0VGltZXMuY2xlYXIoKTtcbiAgICB0aGlzLmN1cnJlbnRSdW50aW1lU3RhZ2VJZCA9ICcnO1xuICB9XG5cbiAgLyoqIEFsaWFzIGZvciBjbGVhcigpIChiYWNrd2FyZCBjb21wYXQpLiAqL1xuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gIH1cbn1cbiJdfQ==
|
|
202
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWV0cmljUmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3Njb3BlL3JlY29yZGVycy9NZXRyaWNSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHOzs7QUFFSCxnRUFBMEQ7QUFvRDFELE1BQWEsY0FBYztJQUNqQixNQUFNLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUVuQixFQUFFLENBQVM7SUFDWCxrQkFBa0IsQ0FBb0I7SUFDL0MscUVBQXFFO0lBQ3BELEtBQUssR0FBRyxJQUFJLDBCQUFVLEVBQWUsQ0FBQztJQUMvQyxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDNUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO0lBQzNCLFdBQVcsQ0FBa0M7SUFFckQsWUFBWSxXQUE0QztRQUN0RCxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxXQUFXLENBQUM7UUFDeEMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsRUFBRSxHQUFHLFdBQVcsRUFBRSxFQUFFLElBQUksV0FBVyxFQUFFLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwRSxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsRUFBRSxXQUFXLENBQUM7WUFDNUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFdBQVcsRUFBRSxrQkFBa0IsSUFBSSxXQUFXLENBQUM7UUFDM0UsQ0FBQztJQUNILENBQUM7SUFFTyxZQUFZLENBQUMsU0FBaUI7UUFDcEMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsMkRBQTJEO0lBQ25ELE9BQU87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cEMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO2dCQUM5QixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7Z0JBQ2hDLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtnQkFDbEMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO2dCQUNoQyxLQUFLO2FBQ047U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELDhEQUE4RDtJQUM5RCxLQUFLO1FBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELDJDQUEyQztJQUMzQyxLQUFLO1FBQ0gsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQzs7QUExTEgsd0NBMkxDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNZXRyaWNSZWNvcmRlciDigJQgcGVyLXN0ZXAgdGltaW5nIGFuZCBleGVjdXRpb24gY291bnRzLCBrZXllZCBieSBydW50aW1lU3RhZ2VJZC5cbiAqXG4gKiBTdG9yZXMgcGVyLWludm9jYXRpb24gZGF0YSBkdXJpbmcgdHJhdmVyc2FsLiBBZ2dyZWdhdGVkIHZpZXdzIGNvbXB1dGVkIG9uIHJlYWQuXG4gKiBDb21wb3NlcyBhIGBLZXllZFN0b3JlPFN0ZXBNZXRyaWNzPmAgZm9yIE8oMSkgbG9va3VwIGFuZCBzdGFuZGFyZCBvcGVyYXRpb25zXG4gKiAoQ29udmVudGlvbiAxIOKAlCBvbmUgcHVycG9zZSBwZXIgcmVjb3JkZXI6IHRoaXMgaXMgdGhlIFNjb3BlUmVjb3JkZXI7IHRoZSBzdG9yZVxuICogaXMgdGhlIHN0b3JhZ2UpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBtZXRyaWMgPSBuZXcgTWV0cmljUmVjb3JkZXIoKTtcbiAqIGV4ZWN1dG9yLmF0dGFjaFNjb3BlUmVjb3JkZXIobWV0cmljKTtcbiAqIGF3YWl0IGV4ZWN1dG9yLnJ1bigpO1xuICpcbiAqIC8vIFBlci1zdGVwICh0aW1lLXRyYXZlbCk6XG4gKiBtZXRyaWMuZ2V0QnlLZXkoJ2NhbGwtbGxtIzUnKTsgIC8vIHsgc3RhZ2VOYW1lLCByZWFkQ291bnQsIHdyaXRlQ291bnQsIGR1cmF0aW9uIH1cbiAqXG4gKiAvLyBBZ2dyZWdhdGVkIChiYWNrd2FyZCBjb21wYXQpOlxuICogbWV0cmljLmdldE1ldHJpY3MoKTsgIC8vIHsgdG90YWxEdXJhdGlvbiwgdG90YWxSZWFkcywgc3RhZ2VNZXRyaWNzOiBNYXA8c3RhZ2VOYW1lLCBhZ2dyZWdhdGVkPiB9XG4gKlxuICogLy8gUHJvZ3Jlc3NpdmUgKHNsaWRlcik6XG4gKiBtZXRyaWMuYWNjdW11bGF0ZSgoc3VtLCBtKSA9PiBzdW0gKyBtLmR1cmF0aW9uLCAwLCB2aXNpYmxlS2V5cyk7XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgeyBLZXllZFN0b3JlIH0gZnJvbSAnLi4vLi4vcmVjb3JkZXIvS2V5ZWRTdG9yZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlY29yZGVyT3BlcmF0aW9uIH0gZnJvbSAnLi4vLi4vcmVjb3JkZXIvUmVjb3JkZXJPcGVyYXRpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBDb21taXRFdmVudCwgUGF1c2VFdmVudCwgUmVhZEV2ZW50LCBTY29wZVJlY29yZGVyLCBTdGFnZUV2ZW50LCBXcml0ZUV2ZW50IH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG4vKiogUGVyLWludm9jYXRpb24gbWV0cmljcyBmb3IgYSBzaW5nbGUgZXhlY3V0aW9uIHN0ZXAuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBNZXRyaWNzIHtcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIHN0YWdlIG5hbWUuICovXG4gIHN0YWdlTmFtZTogc3RyaW5nO1xuICAvKiogTnVtYmVyIG9mIHNjb3BlIHJlYWRzIGR1cmluZyB0aGlzIGludm9jYXRpb24uICovXG4gIHJlYWRDb3VudDogbnVtYmVyO1xuICAvKiogTnVtYmVyIG9mIHNjb3BlIHdyaXRlcyBkdXJpbmcgdGhpcyBpbnZvY2F0aW9uLiAqL1xuICB3cml0ZUNvdW50OiBudW1iZXI7XG4gIC8qKiBOdW1iZXIgb2YgY29tbWl0cyBkdXJpbmcgdGhpcyBpbnZvY2F0aW9uLiAqL1xuICBjb21taXRDb3VudDogbnVtYmVyO1xuICAvKiogTnVtYmVyIG9mIHBhdXNlcyBkdXJpbmcgdGhpcyBpbnZvY2F0aW9uLiAqL1xuICBwYXVzZUNvdW50OiBudW1iZXI7XG4gIC8qKiBEdXJhdGlvbiBpbiBtcyBmb3IgdGhpcyBpbnZvY2F0aW9uLiAqL1xuICBkdXJhdGlvbjogbnVtYmVyO1xufVxuXG4vKiogQWdncmVnYXRlZCBtZXRyaWNzIGFjcm9zcyBhbGwgaW52b2NhdGlvbnMgKGJhY2t3YXJkIGNvbXBhdGlibGUpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZ2dyZWdhdGVkTWV0cmljcyB7XG4gIHRvdGFsRHVyYXRpb246IG51bWJlcjtcbiAgdG90YWxSZWFkczogbnVtYmVyO1xuICB0b3RhbFdyaXRlczogbnVtYmVyO1xuICB0b3RhbENvbW1pdHM6IG51bWJlcjtcbiAgdG90YWxQYXVzZXM6IG51bWJlcjtcbiAgLyoqIEFnZ3JlZ2F0ZWQgYnkgc3RhZ2VOYW1lIOKAlCBzdW1zIGFjcm9zcyBsb29wIGludm9jYXRpb25zLiAqL1xuICBzdGFnZU1ldHJpY3M6IE1hcDxzdHJpbmcsIFN0YWdlTWV0cmljcz47XG59XG5cbi8qKiBBZ2dyZWdhdGVkIHBlci1zdGFnZU5hbWUgKGJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aCBwcmUtcnVudGltZVN0YWdlSWQgQVBJKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2VNZXRyaWNzIHtcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIHJlYWRDb3VudDogbnVtYmVyO1xuICB3cml0ZUNvdW50OiBudW1iZXI7XG4gIGNvbW1pdENvdW50OiBudW1iZXI7XG4gIHBhdXNlQ291bnQ6IG51bWJlcjtcbiAgdG90YWxEdXJhdGlvbjogbnVtYmVyO1xuICBpbnZvY2F0aW9uQ291bnQ6IG51bWJlcjtcbn1cblxuLyoqIE9wdGlvbnMgZm9yIE1ldHJpY1JlY29yZGVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXRyaWNSZWNvcmRlck9wdGlvbnMge1xuICAvKiogU2NvcGVSZWNvcmRlciBJRC4gRGVmYXVsdHMgdG8gYXV0by1pbmNyZW1lbnQgKGBtZXRyaWNzLTFgLCBgbWV0cmljcy0yYCwgLi4uKS4gKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKiBGaWx0ZXIgd2hpY2ggc3RhZ2VzIGFyZSByZWNvcmRlZC4gUmV0dXJuIGB0cnVlYCB0byByZWNvcmQsIGBmYWxzZWAgdG8gc2tpcC4gKi9cbiAgc3RhZ2VGaWx0ZXI/OiAoc3RhZ2VOYW1lOiBzdHJpbmcpID0+IGJvb2xlYW47XG4gIC8qKiBQcmVmZXJyZWQgVUkgb3BlcmF0aW9uLiBEZWZhdWx0cyB0byAnYWdncmVnYXRlJyAoZGFzaGJvYXJkIHRvdGFscykuICovXG4gIHByZWZlcnJlZE9wZXJhdGlvbj86IFJlY29yZGVyT3BlcmF0aW9uO1xufVxuXG5leHBvcnQgY2xhc3MgTWV0cmljUmVjb3JkZXIgaW1wbGVtZW50cyBTY29wZVJlY29yZGVyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvdW50ZXIgPSAwO1xuXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByZWZlcnJlZE9wZXJhdGlvbjogUmVjb3JkZXJPcGVyYXRpb247XG4gIC8qKiAxOjEgcGVyLXN0ZXAgc3RvcmFnZSAoQ29udmVudGlvbiAxIOKAlCBjb21wb3NlZCwgbm90IGluaGVyaXRlZCkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUgPSBuZXcgS2V5ZWRTdG9yZTxTdGVwTWV0cmljcz4oKTtcbiAgcHJpdmF0ZSBzdGFnZVN0YXJ0VGltZXMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBwcml2YXRlIGN1cnJlbnRSdW50aW1lU3RhZ2VJZCA9ICcnO1xuICBwcml2YXRlIHN0YWdlRmlsdGVyPzogKHN0YWdlTmFtZTogc3RyaW5nKSA9PiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKGlkT3JPcHRpb25zPzogc3RyaW5nIHwgTWV0cmljUmVjb3JkZXJPcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBpZE9yT3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuaWQgPSBpZE9yT3B0aW9ucztcbiAgICAgIHRoaXMucHJlZmVycmVkT3BlcmF0aW9uID0gJ2FnZ3JlZ2F0ZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaWQgPSBpZE9yT3B0aW9ucz8uaWQgPz8gYG1ldHJpY3MtJHsrK01ldHJpY1JlY29yZGVyLl9jb3VudGVyfWA7XG4gICAgICB0aGlzLnN0YWdlRmlsdGVyID0gaWRPck9wdGlvbnM/LnN0YWdlRmlsdGVyO1xuICAgICAgdGhpcy5wcmVmZXJyZWRPcGVyYXRpb24gPSBpZE9yT3B0aW9ucz8ucHJlZmVycmVkT3BlcmF0aW9uID8/ICdhZ2dyZWdhdGUnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkUmVjb3JkKHN0YWdlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnN0YWdlRmlsdGVyIHx8IHRoaXMuc3RhZ2VGaWx0ZXIoc3RhZ2VOYW1lKTtcbiAgfVxuXG4gIC8qKiBHZXQgb3IgY3JlYXRlIHRoZSBTdGVwTWV0cmljcyBmb3IgdGhlIGN1cnJlbnQgc3RhZ2UuICovXG4gIHByaXZhdGUgY3VycmVudCgpOiBTdGVwTWV0cmljcyB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5jdXJyZW50UnVudGltZVN0YWdlSWQ7XG4gICAgbGV0IG0gPSB0aGlzLnN0b3JlLmdldChrZXkpO1xuICAgIGlmICghbSkge1xuICAgICAgbSA9IHsgc3RhZ2VOYW1lOiAnJywgcmVhZENvdW50OiAwLCB3cml0ZUNvdW50OiAwLCBjb21taXRDb3VudDogMCwgcGF1c2VDb3VudDogMCwgZHVyYXRpb246IDAgfTtcbiAgICAgIHRoaXMuc3RvcmUuc2V0KGtleSwgbSk7XG4gICAgfVxuICAgIHJldHVybiBtO1xuICB9XG5cbiAgLy8g4pSA4pSAIFBlci1zdGVwIHF1ZXJ5IEFQSSAoZGVsZWdhdGVzIHRvIHRoZSBjb21wb3NlZCBzdG9yZSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIFRyYW5zbGF0ZTogcGVyLXN0ZXAgbWV0cmljcyBieSBydW50aW1lU3RhZ2VJZC4gKi9cbiAgZ2V0QnlLZXkocnVudGltZVN0YWdlSWQ6IHN0cmluZyk6IFN0ZXBNZXRyaWNzIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXQocnVudGltZVN0YWdlSWQpO1xuICB9XG5cbiAgLyoqIEFsbCBwZXItc3RlcCBtZXRyaWNzIGFzIGEgcmVhZC1vbmx5IE1hcCAoaW5zZXJ0aW9uLW9yZGVyZWQpLiAqL1xuICBnZXRNYXAoKTogUmVhZG9ubHlNYXA8c3RyaW5nLCBTdGVwTWV0cmljcz4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLmdldE1hcCgpO1xuICB9XG5cbiAgLyoqIEFsbCBwZXItc3RlcCBtZXRyaWNzIChpbnNlcnRpb24tb3JkZXJlZCkuICovXG4gIHZhbHVlcygpOiBTdGVwTWV0cmljc1tdIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS52YWx1ZXMoKTtcbiAgfVxuXG4gIC8qKiBOdW1iZXIgb2YgcmVjb3JkZWQgc3RlcHMuICovXG4gIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc2l6ZTtcbiAgfVxuXG4gIC8qKiBBZ2dyZWdhdGU6IHJlZHVjZSBBTEwgc3RlcHMgdG8gYSBzaW5nbGUgdmFsdWUgKGRhc2hib2FyZHMsIHRvdGFscykuICovXG4gIGFnZ3JlZ2F0ZTxSPihmbjogKGFjYzogUiwgZW50cnk6IFN0ZXBNZXRyaWNzLCBrZXk6IHN0cmluZykgPT4gUiwgaW5pdGlhbDogUik6IFIge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLmFnZ3JlZ2F0ZShmbiwgaW5pdGlhbCk7XG4gIH1cblxuICAvKiogQWNjdW11bGF0ZTogcmVkdWNlIHN0ZXBzIHVwIHRvIGEgc2xpZGVyIHBvc2l0aW9uIChwcm9ncmVzc2l2ZSB2aWV3KS4gKi9cbiAgYWNjdW11bGF0ZTxSPihmbjogKGFjYzogUiwgZW50cnk6IFN0ZXBNZXRyaWNzLCBrZXk6IHN0cmluZykgPT4gUiwgaW5pdGlhbDogUiwga2V5cz86IFJlYWRvbmx5U2V0PHN0cmluZz4pOiBSIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5hY2N1bXVsYXRlKGZuLCBpbml0aWFsLCBrZXlzKTtcbiAgfVxuXG4gIG9uU3RhZ2VTdGFydChldmVudDogU3RhZ2VFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaG91bGRSZWNvcmQoZXZlbnQuc3RhZ2VOYW1lKSkgcmV0dXJuO1xuICAgIHRoaXMuY3VycmVudFJ1bnRpbWVTdGFnZUlkID0gZXZlbnQucnVudGltZVN0YWdlSWQ7XG4gICAgdGhpcy5zdGFnZVN0YXJ0VGltZXMuc2V0KGV2ZW50LnJ1bnRpbWVTdGFnZUlkLCBldmVudC50aW1lc3RhbXApO1xuICAgIGNvbnN0IG0gPSB0aGlzLmN1cnJlbnQoKTtcbiAgICBtLnN0YWdlTmFtZSA9IGV2ZW50LnN0YWdlTmFtZTtcbiAgfVxuXG4gIG9uUmVhZChldmVudDogUmVhZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3VsZFJlY29yZChldmVudC5zdGFnZU5hbWUpKSByZXR1cm47XG4gICAgdGhpcy5jdXJyZW50KCkucmVhZENvdW50Kys7XG4gIH1cblxuICBvbldyaXRlKGV2ZW50OiBXcml0ZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3VsZFJlY29yZChldmVudC5zdGFnZU5hbWUpKSByZXR1cm47XG4gICAgdGhpcy5jdXJyZW50KCkud3JpdGVDb3VudCsrO1xuICB9XG5cbiAgb25Db21taXQoZXZlbnQ6IENvbW1pdEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3VsZFJlY29yZChldmVudC5zdGFnZU5hbWUpKSByZXR1cm47XG4gICAgdGhpcy5jdXJyZW50KCkuY29tbWl0Q291bnQrKztcbiAgfVxuXG4gIG9uUGF1c2UoZXZlbnQ6IFBhdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkUmVjb3JkKGV2ZW50LnN0YWdlTmFtZSkpIHJldHVybjtcbiAgICB0aGlzLmN1cnJlbnQoKS5wYXVzZUNvdW50Kys7XG4gIH1cblxuICBvblN0YWdlRW5kKGV2ZW50OiBTdGFnZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3VsZFJlY29yZChldmVudC5zdGFnZU5hbWUpKSByZXR1cm47XG4gICAgY29uc3QgbSA9IHRoaXMuY3VycmVudCgpO1xuICAgIGlmIChldmVudC5kdXJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBtLmR1cmF0aW9uID0gZXZlbnQuZHVyYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IHRoaXMuc3RhZ2VTdGFydFRpbWVzLmdldChldmVudC5ydW50aW1lU3RhZ2VJZCk7XG4gICAgICBtLmR1cmF0aW9uID0gc3RhcnRUaW1lICE9PSB1bmRlZmluZWQgPyBldmVudC50aW1lc3RhbXAgLSBzdGFydFRpbWUgOiAwO1xuICAgIH1cbiAgICB0aGlzLnN0YWdlU3RhcnRUaW1lcy5kZWxldGUoZXZlbnQucnVudGltZVN0YWdlSWQpO1xuICB9XG5cbiAgLyoqIEFnZ3JlZ2F0ZWQgbWV0cmljcyDigJQgY29tcHV0ZXMgdG90YWxzIG9uIHRoZSBmbHkgZnJvbSBwZXItc3RlcCBkYXRhIChiYWNrd2FyZCBjb21wYXRpYmxlKS4gKi9cbiAgZ2V0TWV0cmljcygpOiBBZ2dyZWdhdGVkTWV0cmljcyB7XG4gICAgY29uc3QgYnlOYW1lID0gbmV3IE1hcDxzdHJpbmcsIFN0YWdlTWV0cmljcz4oKTtcblxuICAgIGNvbnN0IHRvdGFsRHVyYXRpb24gPSB0aGlzLmFnZ3JlZ2F0ZSgoc3VtLCBtKSA9PiBzdW0gKyBtLmR1cmF0aW9uLCAwKTtcbiAgICBjb25zdCB0b3RhbFJlYWRzID0gdGhpcy5hZ2dyZWdhdGUoKHN1bSwgbSkgPT4gc3VtICsgbS5yZWFkQ291bnQsIDApO1xuICAgIGNvbnN0IHRvdGFsV3JpdGVzID0gdGhpcy5hZ2dyZWdhdGUoKHN1bSwgbSkgPT4gc3VtICsgbS53cml0ZUNvdW50LCAwKTtcbiAgICBjb25zdCB0b3RhbENvbW1pdHMgPSB0aGlzLmFnZ3JlZ2F0ZSgoc3VtLCBtKSA9PiBzdW0gKyBtLmNvbW1pdENvdW50LCAwKTtcbiAgICBjb25zdCB0b3RhbFBhdXNlcyA9IHRoaXMuYWdncmVnYXRlKChzdW0sIG0pID0+IHN1bSArIG0ucGF1c2VDb3VudCwgMCk7XG5cbiAgICAvLyBHcm91cCBieSBzdGFnZU5hbWUgZm9yIGJhY2t3YXJkIGNvbXBhdFxuICAgIGZvciAoY29uc3QgbSBvZiB0aGlzLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IGJ5TmFtZS5nZXQobS5zdGFnZU5hbWUpO1xuICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgIGV4aXN0aW5nLnJlYWRDb3VudCArPSBtLnJlYWRDb3VudDtcbiAgICAgICAgZXhpc3Rpbmcud3JpdGVDb3VudCArPSBtLndyaXRlQ291bnQ7XG4gICAgICAgIGV4aXN0aW5nLmNvbW1pdENvdW50ICs9IG0uY29tbWl0Q291bnQ7XG4gICAgICAgIGV4aXN0aW5nLnBhdXNlQ291bnQgKz0gbS5wYXVzZUNvdW50O1xuICAgICAgICBleGlzdGluZy50b3RhbER1cmF0aW9uICs9IG0uZHVyYXRpb247XG4gICAgICAgIGV4aXN0aW5nLmludm9jYXRpb25Db3VudCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnlOYW1lLnNldChtLnN0YWdlTmFtZSwge1xuICAgICAgICAgIHN0YWdlTmFtZTogbS5zdGFnZU5hbWUsXG4gICAgICAgICAgcmVhZENvdW50OiBtLnJlYWRDb3VudCxcbiAgICAgICAgICB3cml0ZUNvdW50OiBtLndyaXRlQ291bnQsXG4gICAgICAgICAgY29tbWl0Q291bnQ6IG0uY29tbWl0Q291bnQsXG4gICAgICAgICAgcGF1c2VDb3VudDogbS5wYXVzZUNvdW50LFxuICAgICAgICAgIHRvdGFsRHVyYXRpb246IG0uZHVyYXRpb24sXG4gICAgICAgICAgaW52b2NhdGlvbkNvdW50OiAxLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyB0b3RhbER1cmF0aW9uLCB0b3RhbFJlYWRzLCB0b3RhbFdyaXRlcywgdG90YWxDb21taXRzLCB0b3RhbFBhdXNlcywgc3RhZ2VNZXRyaWNzOiBieU5hbWUgfTtcbiAgfVxuXG4gIC8qKiBHZXQgYWdncmVnYXRlZCBtZXRyaWNzIGZvciBhIHNwZWNpZmljIHN0YWdlIG5hbWUgKGJhY2t3YXJkIGNvbXBhdGlibGUpLiAqL1xuICBnZXRTdGFnZU1ldHJpY3Moc3RhZ2VOYW1lOiBzdHJpbmcpOiBTdGFnZU1ldHJpY3MgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1ldHJpY3MgPSB0aGlzLmdldE1ldHJpY3MoKTtcbiAgICByZXR1cm4gbWV0cmljcy5zdGFnZU1ldHJpY3MuZ2V0KHN0YWdlTmFtZSk7XG4gIH1cblxuICB0b1NuYXBzaG90KCkge1xuICAgIGNvbnN0IG1ldHJpY3MgPSB0aGlzLmdldE1ldHJpY3MoKTtcbiAgICAvLyBFeHBvc2UgcGVyLXN0ZXAgZGF0YSBrZXllZCBieSBydW50aW1lU3RhZ2VJZCAoZm9yIHRpbWUtdHJhdmVsIFVJKVxuICAgIC8vIGFsb25nc2lkZSB0aGUgYWdncmVnYXRlZCB0b3RhbHNcbiAgICBjb25zdCBzdGVwczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmdldE1hcCgpKSB7XG4gICAgICBzdGVwc1trZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnTWV0cmljcycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0FnZ3JlZ2F0b3IgKEtleWVkU3RvcmUpIOKAlCBwZXItc3RlcCB0aW1pbmcgYW5kIEkvTyBjb3VudHMnLFxuICAgICAgcHJlZmVycmVkT3BlcmF0aW9uOiB0aGlzLnByZWZlcnJlZE9wZXJhdGlvbixcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbnVtZXJpY0ZpZWxkOiAncmVhZENvdW50JyxcbiAgICAgICAgZ3JhbmRUb3RhbDogbWV0cmljcy50b3RhbFJlYWRzLFxuICAgICAgICB0b3RhbER1cmF0aW9uOiBtZXRyaWNzLnRvdGFsRHVyYXRpb24sXG4gICAgICAgIHRvdGFsUmVhZHM6IG1ldHJpY3MudG90YWxSZWFkcyxcbiAgICAgICAgdG90YWxXcml0ZXM6IG1ldHJpY3MudG90YWxXcml0ZXMsXG4gICAgICAgIHRvdGFsQ29tbWl0czogbWV0cmljcy50b3RhbENvbW1pdHMsXG4gICAgICAgIHRvdGFsUGF1c2VzOiBtZXRyaWNzLnRvdGFsUGF1c2VzLFxuICAgICAgICBzdGVwcyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBDbGVhciBhbGwgc3RhdGUg4oCUIGNhbGxlZCBieSBleGVjdXRvciBiZWZvcmUgZWFjaCBydW4oKS4gKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yZS5jbGVhcigpO1xuICAgIHRoaXMuc3RhZ2VTdGFydFRpbWVzLmNsZWFyKCk7XG4gICAgdGhpcy5jdXJyZW50UnVudGltZVN0YWdlSWQgPSAnJztcbiAgfVxuXG4gIC8qKiBBbGlhcyBmb3IgY2xlYXIoKSAoYmFja3dhcmQgY29tcGF0KS4gKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhcigpO1xuICB9XG59XG4iXX0=
|
package/dist/trace.js
CHANGED
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
* ```
|
|
32
32
|
*/
|
|
33
33
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
-
exports.qualityTrace = exports.formatQualityTrace = exports.QualityRecorder = exports.ROOT_SUBFLOW_ID = exports.ROOT_RUNTIME_STAGE_ID = exports.inOutRecorder = exports.InOutRecorder = exports.topologyRecorder = exports.TopologyRecorder = exports.
|
|
34
|
+
exports.qualityTrace = exports.formatQualityTrace = exports.QualityRecorder = exports.ROOT_SUBFLOW_ID = exports.ROOT_RUNTIME_STAGE_ID = exports.inOutRecorder = exports.InOutRecorder = exports.topologyRecorder = exports.TopologyRecorder = exports.CommitRangeIndex = exports.SequenceStore = exports.KeyedStore = exports.BoundaryStateStore = exports.formatCausalChain = exports.flattenCausalDAG = exports.causalChain = exports.findLastWriter = exports.findCommits = exports.findCommit = exports.walkSubflowSpec = exports.splitStageId = exports.parseRuntimeStageId = exports.createExecutionCounter = exports.buildRuntimeStageId = void 0;
|
|
35
35
|
var runtimeStageId_js_1 = require("./lib/engine/runtimeStageId.js");
|
|
36
36
|
Object.defineProperty(exports, "buildRuntimeStageId", { enumerable: true, get: function () { return runtimeStageId_js_1.buildRuntimeStageId; } });
|
|
37
37
|
Object.defineProperty(exports, "createExecutionCounter", { enumerable: true, get: function () { return runtimeStageId_js_1.createExecutionCounter; } });
|
|
@@ -60,20 +60,6 @@ var SequenceStore_js_1 = require("./lib/recorder/SequenceStore.js");
|
|
|
60
60
|
Object.defineProperty(exports, "SequenceStore", { enumerable: true, get: function () { return SequenceStore_js_1.SequenceStore; } });
|
|
61
61
|
var CommitRangeIndex_js_1 = require("./lib/recorder/CommitRangeIndex.js");
|
|
62
62
|
Object.defineProperty(exports, "CommitRangeIndex", { enumerable: true, get: function () { return CommitRangeIndex_js_1.CommitRangeIndex; } });
|
|
63
|
-
// ── Abstract bases (DEPRECATED in v5 — slated for removal) ───────
|
|
64
|
-
// Kept during the v5 migration window for downstream consumers
|
|
65
|
-
// (agentfootprint, agentfootprint-lens, etc.) that still extend
|
|
66
|
-
// them. Migrate to the corresponding Store class above.
|
|
67
|
-
// KeyedRecorder — base class for 1:1 Map-based recorders
|
|
68
|
-
var KeyedRecorder_js_1 = require("./lib/recorder/KeyedRecorder.js");
|
|
69
|
-
Object.defineProperty(exports, "KeyedRecorder", { enumerable: true, get: function () { return KeyedRecorder_js_1.KeyedRecorder; } });
|
|
70
|
-
// SequenceRecorder — base class for 1:N ordered sequence recorders with keyed index
|
|
71
|
-
var SequenceRecorder_js_1 = require("./lib/recorder/SequenceRecorder.js");
|
|
72
|
-
Object.defineProperty(exports, "SequenceRecorder", { enumerable: true, get: function () { return SequenceRecorder_js_1.SequenceRecorder; } });
|
|
73
|
-
// BoundaryStateTracker — base class for transient bracket-scoped state
|
|
74
|
-
// (live state DURING a matched [start, stop] event interval; clears on stop)
|
|
75
|
-
var BoundaryStateTracker_js_1 = require("./lib/recorder/BoundaryStateTracker.js");
|
|
76
|
-
Object.defineProperty(exports, "BoundaryStateTracker", { enumerable: true, get: function () { return BoundaryStateTracker_js_1.BoundaryStateTracker; } });
|
|
77
63
|
var TopologyRecorder_js_1 = require("./lib/recorder/TopologyRecorder.js");
|
|
78
64
|
Object.defineProperty(exports, "TopologyRecorder", { enumerable: true, get: function () { return TopologyRecorder_js_1.TopologyRecorder; } });
|
|
79
65
|
Object.defineProperty(exports, "topologyRecorder", { enumerable: true, get: function () { return TopologyRecorder_js_1.topologyRecorder; } });
|
|
@@ -87,4 +73,4 @@ Object.defineProperty(exports, "QualityRecorder", { enumerable: true, get: funct
|
|
|
87
73
|
var qualityTrace_js_1 = require("./lib/recorder/qualityTrace.js");
|
|
88
74
|
Object.defineProperty(exports, "formatQualityTrace", { enumerable: true, get: function () { return qualityTrace_js_1.formatQualityTrace; } });
|
|
89
75
|
Object.defineProperty(exports, "qualityTrace", { enumerable: true, get: function () { return qualityTrace_js_1.qualityTrace; } });
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHJhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7OztBQUlILG9FQUt3QztBQUp0Qyx3SEFBQSxtQkFBbUIsT0FBQTtBQUNuQiwySEFBQSxzQkFBc0IsT0FBQTtBQUN0Qix3SEFBQSxtQkFBbUIsT0FBQTtBQUNuQixpSEFBQSxZQUFZLE9BQUE7QUFNZCxzRUFBa0U7QUFBekQscUhBQUEsZUFBZSxPQUFBO0FBRXhCLHdEQUF3RDtBQUN4RCxvRUFBeUY7QUFBaEYsK0dBQUEsVUFBVSxPQUFBO0FBQUUsZ0hBQUEsV0FBVyxPQUFBO0FBQUUsbUhBQUEsY0FBYyxPQUFBO0FBSWhELDBEQUE2RjtBQUFwRiwyR0FBQSxXQUFXLE9BQUE7QUFBRSxnSEFBQSxnQkFBZ0IsT0FBQTtBQUFFLGlIQUFBLGlCQUFpQixPQUFBO0FBRXpELG1FQUFtRTtBQUNuRSxpRUFBaUU7QUFDakUsaUVBQWlFO0FBQ2pFLDRDQUE0QztBQUM1Qyw4RUFBMEU7QUFBakUsMkhBQUEsa0JBQWtCLE9BQUE7QUFDM0IsOERBQTBEO0FBQWpELDJHQUFBLFVBQVUsT0FBQTtBQUNuQixvRUFBZ0U7QUFBdkQsaUhBQUEsYUFBYSxPQUFBO0FBU3RCLDBFQUFzRTtBQUE3RCx1SEFBQSxnQkFBZ0IsT0FBQTtBQVV6QiwwRUFBd0Y7QUFBL0UsdUhBQUEsZ0JBQWdCLE9BQUE7QUFBRSx1SEFBQSxnQkFBZ0IsT0FBQTtBQUszQyxvRUFBdUg7QUFBOUcsaUhBQUEsYUFBYSxPQUFBO0FBQUUsaUhBQUEsYUFBYSxPQUFBO0FBQUUseUhBQUEscUJBQXFCLE9BQUE7QUFBRSxtSEFBQSxlQUFlLE9BQUE7QUFJN0Usd0VBQW9FO0FBQTNELHFIQUFBLGVBQWUsT0FBQTtBQUl4QixrRUFBa0Y7QUFBekUscUhBQUEsa0JBQWtCLE9BQUE7QUFBRSwrR0FBQSxZQUFZLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGZvb3RwcmludGpzL3RyYWNlIOKAlCBFeGVjdXRpb24gdHJhY2luZywgZGVidWdnaW5nLCBhbmQgYmFja3RyYWNraW5nIHV0aWxpdGllcy5cbiAqXG4gKiBSdW50aW1lIHN0YWdlIElEcywgY29tbWl0IGxvZyBxdWVyaWVzLCBhbmQgcmVjb3JkZXIgYmFzZSBjbGFzc2VzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBwYXJzZVJ1bnRpbWVTdGFnZUlkLCBmaW5kTGFzdFdyaXRlciwgS2V5ZWRTdG9yZSwgU2VxdWVuY2VTdG9yZSB9IGZyb20gJ2Zvb3RwcmludGpzL3RyYWNlJztcbiAqXG4gKiAvLyBQYXJzZSBhIHJ1bnRpbWVTdGFnZUlkXG4gKiBjb25zdCB7IHN0YWdlSWQsIGV4ZWN1dGlvbkluZGV4IH0gPSBwYXJzZVJ1bnRpbWVTdGFnZUlkKCdjYWxsLWxsbSM1Jyk7XG4gKlxuICogLy8gQmFja3RyYWNrOiB3aG8gd3JvdGUgJ3N5c3RlbVByb21wdCcgYmVmb3JlIGNvbW1pdCBhdCBpZHggOD9cbiAqIGNvbnN0IHdyaXRlciA9IGZpbmRMYXN0V3JpdGVyKGNvbW1pdExvZywgJ3N5c3RlbVByb21wdCcsIDgpO1xuICpcbiAqIC8vIHY1IHByaW1hcnkgQVBJOiBjb21wb3NlIGEgU3RvcmUgYXMgYSBmaWVsZCAob25lIHB1cnBvc2UgcGVyIHJlY29yZGVyKS5cbiAqIC8vIEtleWVkU3RvcmU8VD4g4oCUIDE6MSAob25lIGVudHJ5IHBlciBzdGVwKVxuICogY2xhc3MgTXlSZWNvcmRlciB7XG4gKiAgIHJlYWRvbmx5IGlkID0gJ215LXJlY29yZGVyJztcbiAqICAgcHJpdmF0ZSBzdG9yZSA9IG5ldyBLZXllZFN0b3JlPE15RW50cnk+KCk7XG4gKiAgIG9uV3JpdGUoZSkgeyB0aGlzLnN0b3JlLnNldChlLnJ1bnRpbWVTdGFnZUlkLCB7IC4uLiB9KTsgfVxuICogfVxuICpcbiAqIC8vIFNlcXVlbmNlU3RvcmU8VD4g4oCUIDE6TiAobXVsdGlwbGUgZW50cmllcyBwZXIgc3RlcCwgb3JkZXJpbmcgbWF0dGVycylcbiAqIGNsYXNzIEF1ZGl0UmVjb3JkZXIge1xuICogICByZWFkb25seSBpZCA9ICdhdWRpdCc7XG4gKiAgIHByaXZhdGUgc3RvcmUgPSBuZXcgU2VxdWVuY2VTdG9yZTxBdWRpdEVudHJ5PigpO1xuICogICBvblJlYWQoZSkgeyB0aGlzLnN0b3JlLnB1c2goeyBydW50aW1lU3RhZ2VJZDogZS5ydW50aW1lU3RhZ2VJZCwgLi4uIH0pOyB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuXG4vLyBSdW50aW1lIHN0YWdlIElEIOKAlCB1bmlxdWUgZXhlY3V0aW9uIHN0ZXAgaWRlbnRpZmllcnNcbmV4cG9ydCB0eXBlIHsgRXhlY3V0aW9uQ291bnRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9ydW50aW1lU3RhZ2VJZC5qcyc7XG5leHBvcnQge1xuICBidWlsZFJ1bnRpbWVTdGFnZUlkLFxuICBjcmVhdGVFeGVjdXRpb25Db3VudGVyLFxuICBwYXJzZVJ1bnRpbWVTdGFnZUlkLFxuICBzcGxpdFN0YWdlSWQsXG59IGZyb20gJy4vbGliL2VuZ2luZS9ydW50aW1lU3RhZ2VJZC5qcyc7XG5cbi8vIHdhbGtTdWJmbG93U3BlYyDigJQgZmxhdCBvcmRlcmVkIHRyYXZlcnNhbCBvZiBhIHN1YmZsb3cncyBzdHJ1Y3R1cmVcbi8vIChjb25zdW1lIHZpYSBTdHJ1Y3R1cmVSZWNvcmRlci5vblN1YmZsb3dNb3VudGVkJ3Mgc3ViZmxvd1NwZWMgcGF5bG9hZClcbmV4cG9ydCB0eXBlIHsgV2Fsa2VySXRlbSwgV2Fsa2VyT3B0aW9ucyB9IGZyb20gJy4vbGliL2VuZ2luZS93YWxrU3ViZmxvd1NwZWMuanMnO1xuZXhwb3J0IHsgd2Fsa1N1YmZsb3dTcGVjIH0gZnJvbSAnLi9saWIvZW5naW5lL3dhbGtTdWJmbG93U3BlYy5qcyc7XG5cbi8vIENvbW1pdCBsb2cgcXVlcmllcyDigJQgdHlwZWQgdXRpbGl0aWVzIGZvciBiYWNrdHJhY2tpbmdcbmV4cG9ydCB7IGZpbmRDb21taXQsIGZpbmRDb21taXRzLCBmaW5kTGFzdFdyaXRlciB9IGZyb20gJy4vbGliL21lbW9yeS9jb21taXRMb2dVdGlscy5qcyc7XG5cbi8vIENhdXNhbCBjaGFpbiDigJQgYmFja3dhcmQgcHJvZ3JhbSBzbGljaW5nIG9uIGNvbW1pdCBsb2cgKERBRylcbmV4cG9ydCB0eXBlIHsgQ2F1c2FsQ2hhaW5PcHRpb25zLCBDYXVzYWxOb2RlLCBLZXlzUmVhZExvb2t1cCB9IGZyb20gJy4vbGliL21lbW9yeS9iYWNrdHJhY2suanMnO1xuZXhwb3J0IHsgY2F1c2FsQ2hhaW4sIGZsYXR0ZW5DYXVzYWxEQUcsIGZvcm1hdENhdXNhbENoYWluIH0gZnJvbSAnLi9saWIvbWVtb3J5L2JhY2t0cmFjay5qcyc7XG5cbi8vIOKUgOKUgCB2NSBTdG9yZXMgKGNvbmNyZXRlLCBjb21wb3NhYmxlIOKAlCBwcmltYXJ5IHJlY29yZGVyIEFQSSkg4pSA4pSA4pSA4pSA4pSAXG4vLyBDb21wb3NlIHRoZXNlIHZpYSBgbmV3IFN0b3JlPFQ+KClgIGFzIGEgZmllbGQgb24geW91ciByZWNvcmRlclxuLy8gY2xhc3MuIE9uZSBwdXJwb3NlIHBlciByZWNvcmRlcjogc3RvcmVzIGFyZSBzdG9yYWdlOyByZWNvcmRlcnNcbi8vIGFyZSBldmVudC1ob29rIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbnMuXG5leHBvcnQgeyBCb3VuZGFyeVN0YXRlU3RvcmUgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9Cb3VuZGFyeVN0YXRlU3RvcmUuanMnO1xuZXhwb3J0IHsgS2V5ZWRTdG9yZSB9IGZyb20gJy4vbGliL3JlY29yZGVyL0tleWVkU3RvcmUuanMnO1xuZXhwb3J0IHsgU2VxdWVuY2VTdG9yZSB9IGZyb20gJy4vbGliL3JlY29yZGVyL1NlcXVlbmNlU3RvcmUuanMnO1xuXG4vLyDilIDilIAgdjUuMSBDb21taXQgZ3JvdXBpbmcgcHJpbWl0aXZlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gSW50ZXJ2YWwgaW5kZXggb3ZlciBjb21taXQgaW5kaWNlcy4gQnVpbHQgaW5jcmVtZW50YWxseSBkdXJpbmdcbi8vIHRyYXZlcnNhbDogb3BlbigpIG9uIGJvdW5kYXJ5IGVudHJ5LCBjbG9zZSgpIG9uIGV4aXQuIFF1ZXJ5IGF0IGFueVxuLy8gY29tbWl0IHBvc2l0aW9uIHdpdGggZW5jbG9zaW5nKCkvb3ZlcmxhcHBpbmcoKS4gR2VuZXJpYyBvdmVyIFRMYWJlbFxuLy8g4oCUIGZvb3RwcmludGpzIG93bnMgWkVSTyBrbm93bGVkZ2Ugb2Ygd2hhdCBjb25zdW1lcnMgdXNlIGFzIGxhYmVscy5cbi8vIFNlZSBkb2NzL2Rlc2lnbi9jb21taXQtcmFuZ2UtaW5kZXgubWQgZm9yIHRoZSBmdWxsIGNvbnRyYWN0LlxuZXhwb3J0IHR5cGUgeyBSYW5nZUVudHJ5LCBSYW5nZVRva2VuIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvQ29tbWl0UmFuZ2VJbmRleC5qcyc7XG5leHBvcnQgeyBDb21taXRSYW5nZUluZGV4IH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvQ29tbWl0UmFuZ2VJbmRleC5qcyc7XG5cbi8vIFRvcG9sb2d5UmVjb3JkZXIg4oCUIGNvbXBvc2l0aW9uIGdyYXBoIGFjY3VtdWxhdG9yIChzdWJmbG93cyArIGNvbnRyb2wtZmxvdyBlZGdlcylcbmV4cG9ydCB0eXBlIHtcbiAgVG9wb2xvZ3ksXG4gIFRvcG9sb2d5RWRnZSxcbiAgVG9wb2xvZ3lJbmNvbWluZ0tpbmQsXG4gIFRvcG9sb2d5Tm9kZSxcbiAgVG9wb2xvZ3lSZWNvcmRlck9wdGlvbnMsXG59IGZyb20gJy4vbGliL3JlY29yZGVyL1RvcG9sb2d5UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgVG9wb2xvZ3lSZWNvcmRlciwgdG9wb2xvZ3lSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL1RvcG9sb2d5UmVjb3JkZXIuanMnO1xuXG4vLyBJbk91dFJlY29yZGVyIOKAlCBjaGFydCBpbi9vdXQgc3RyZWFtIChlbnRyeS9leGl0IHBhaXJzIGF0IGV2ZXJ5IGNoYXJ0IGJvdW5kYXJ5LFxuLy8gaW5jbHVkaW5nIHRoZSB0b3AtbGV2ZWwgcnVuIGFuZCBldmVyeSBzdWJmbG93KVxuZXhwb3J0IHR5cGUgeyBJbk91dEVudHJ5LCBJbk91dFBoYXNlLCBJbk91dFJlY29yZGVyT3B0aW9ucyB9IGZyb20gJy4vbGliL3JlY29yZGVyL0luT3V0UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgSW5PdXRSZWNvcmRlciwgaW5PdXRSZWNvcmRlciwgUk9PVF9SVU5USU1FX1NUQUdFX0lELCBST09UX1NVQkZMT1dfSUQgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9Jbk91dFJlY29yZGVyLmpzJztcblxuLy8gUXVhbGl0eVJlY29yZGVyIOKAlCBwZXItc3RlcCBxdWFsaXR5IHNjb3Jpbmcgd2l0aCBiYWNrdHJhY2tpbmdcbmV4cG9ydCB0eXBlIHsgUXVhbGl0eUVudHJ5LCBRdWFsaXR5UmVjb3JkZXJPcHRpb25zLCBRdWFsaXR5U2NvcmluZ0ZuIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvUXVhbGl0eVJlY29yZGVyLmpzJztcbmV4cG9ydCB7IFF1YWxpdHlSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL1F1YWxpdHlSZWNvcmRlci5qcyc7XG5cbi8vIHF1YWxpdHlUcmFjZSDigJQgUXVhbGl0eSBTdGFjayBUcmFjZSAoYmFja3RyYWNrIGZyb20gbG93LXNjb3Jpbmcgc3RlcHMpXG5leHBvcnQgdHlwZSB7IFF1YWxpdHlGcmFtZSwgUXVhbGl0eVN0YWNrVHJhY2UgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9xdWFsaXR5VHJhY2UuanMnO1xuZXhwb3J0IHsgZm9ybWF0UXVhbGl0eVRyYWNlLCBxdWFsaXR5VHJhY2UgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9xdWFsaXR5VHJhY2UuanMnO1xuIl19
|
package/dist/types/advanced.d.ts
CHANGED
|
@@ -51,5 +51,3 @@ export { applyOutputMapping, ChildrenExecutor, computeNodeType, ContinuationReso
|
|
|
51
51
|
export type { ExecutionCounter } from './lib/engine/runtimeStageId.js';
|
|
52
52
|
export { buildRuntimeStageId, createExecutionCounter, parseRuntimeStageId } from './lib/engine/runtimeStageId.js';
|
|
53
53
|
export { findCommit, findCommits, findLastWriter } from './lib/memory/commitLogUtils.js';
|
|
54
|
-
export { BoundaryStateTracker } from './lib/recorder/BoundaryStateTracker.js';
|
|
55
|
-
export { KeyedRecorder } from './lib/recorder/KeyedRecorder.js';
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*
|
|
15
15
|
* - Runtime events carry `runtimeStageId` (`[subflowPath/]stageId#N`),
|
|
16
16
|
* `iteration`, `traversalContext` — load-bearing for time-travel
|
|
17
|
-
* UIs, commit-log indices, and `
|
|
17
|
+
* UIs, commit-log indices, and `SequenceStore<T>` consumers.
|
|
18
18
|
* NONE of these exist at build time.
|
|
19
19
|
*
|
|
20
20
|
* - Build events carry only `stageId` + structural fields. No
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CombinedNarrativeRecorder — Inline narrative builder that merges flow + data during traversal.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* + O(1) per-step lookup by runtimeStageId)
|
|
6
|
-
* first-class abstraction for observers that span
|
|
4
|
+
* Composes a SequenceStore<CombinedNarrativeEntry> for dual-indexed storage (ordered sequence
|
|
5
|
+
* + O(1) per-step lookup by runtimeStageId) — Convention 1, one purpose per recorder.
|
|
6
|
+
* Implements `CombinedRecorder` — the library's first-class abstraction for observers that span
|
|
7
|
+
* both data-flow and control-flow streams.
|
|
7
8
|
*
|
|
8
9
|
* Event ordering guarantees this works:
|
|
9
10
|
* 1. Scope events (onRead, onWrite) fire DURING stage execution
|
|
@@ -15,7 +16,6 @@
|
|
|
15
16
|
*/
|
|
16
17
|
import type { CombinedRecorder } from '../../recorder/CombinedRecorder.js';
|
|
17
18
|
import type { EmitEvent } from '../../recorder/EmitRecorder.js';
|
|
18
|
-
import { SequenceRecorder } from '../../recorder/SequenceRecorder.js';
|
|
19
19
|
import type { ErrorEvent, PauseEvent, ReadEvent, ResumeEvent, WriteEvent } from '../../scope/types.js';
|
|
20
20
|
import type { CombinedNarrativeEntry, NarrativeRenderer } from './narrativeTypes.js';
|
|
21
21
|
import type { FlowBreakEvent, FlowDecisionEvent, FlowErrorEvent, FlowForkEvent, FlowLoopEvent, FlowPauseEvent, FlowResumeEvent, FlowSelectedEvent, FlowStageEvent, FlowSubflowEvent } from './types.js';
|
|
@@ -42,8 +42,10 @@ export interface CombinedNarrativeRecorderOptions {
|
|
|
42
42
|
* Scope variants of these events are deliberately ignored here — the
|
|
43
43
|
* narrative only surfaces control-flow lifecycle events.
|
|
44
44
|
*/
|
|
45
|
-
export declare class CombinedNarrativeRecorder
|
|
45
|
+
export declare class CombinedNarrativeRecorder implements CombinedRecorder {
|
|
46
46
|
readonly id: string;
|
|
47
|
+
/** Dual-indexed ordered storage (Convention 1 — composed, not inherited). */
|
|
48
|
+
private readonly store;
|
|
47
49
|
/**
|
|
48
50
|
* Pending scope ops keyed by runtimeStageId. Flushed in onStageExecuted/onDecision.
|
|
49
51
|
*
|
|
@@ -100,6 +102,25 @@ export declare class CombinedNarrativeRecorder extends SequenceRecorder<Combined
|
|
|
100
102
|
* Root-level entries have subflowId = undefined.
|
|
101
103
|
*/
|
|
102
104
|
getEntriesBySubflow(): Record<string, CombinedNarrativeEntry[]>;
|
|
105
|
+
/** All narrative entries in execution order. */
|
|
106
|
+
getEntries(): CombinedNarrativeEntry[];
|
|
107
|
+
/** Total number of narrative entries. */
|
|
108
|
+
get entryCount(): number;
|
|
109
|
+
/** O(1) lookup: all narrative entries for one execution step. */
|
|
110
|
+
getEntriesForStep(runtimeStageId: string): CombinedNarrativeEntry[];
|
|
111
|
+
/** Number of distinct execution steps that produced entries. */
|
|
112
|
+
get stepCount(): number;
|
|
113
|
+
/** Pre-built per-step range index — O(1) lookups for time-travel scrubbing. */
|
|
114
|
+
getEntryRanges(): ReadonlyMap<string, {
|
|
115
|
+
readonly firstIdx: number;
|
|
116
|
+
readonly endIdx: number;
|
|
117
|
+
}>;
|
|
118
|
+
/** Reduce ALL entries to a single value. */
|
|
119
|
+
aggregate<R>(fn: (acc: R, entry: CombinedNarrativeEntry) => R, initial: R): R;
|
|
120
|
+
/** Reduce entries, optionally filtered to a set of visible runtimeStageIds. */
|
|
121
|
+
accumulate<R>(fn: (acc: R, entry: CombinedNarrativeEntry) => R, initial: R, keys?: ReadonlySet<string>): R;
|
|
122
|
+
/** Progressive reveal: entries whose runtimeStageId is in the visible set. */
|
|
123
|
+
getEntriesUpTo(visibleIds: ReadonlySet<string>): CombinedNarrativeEntry[];
|
|
103
124
|
/** Clears all state. Called automatically before each run. */
|
|
104
125
|
clear(): void;
|
|
105
126
|
private incrementStageCounter;
|
|
@@ -61,7 +61,6 @@
|
|
|
61
61
|
* ```
|
|
62
62
|
*/
|
|
63
63
|
import type { FlowRecorder, FlowRunEvent, FlowSubflowEvent } from '../engine/narrative/types.js';
|
|
64
|
-
import { SequenceRecorder } from './SequenceRecorder.js';
|
|
65
64
|
export type InOutPhase = 'entry' | 'exit';
|
|
66
65
|
/** Synthetic id for the top-level run's boundary pair. */
|
|
67
66
|
export declare const ROOT_SUBFLOW_ID = "__root__";
|
|
@@ -120,21 +119,22 @@ export interface InOutRecorderOptions {
|
|
|
120
119
|
export declare function inOutRecorder(options?: InOutRecorderOptions): InOutRecorder;
|
|
121
120
|
/**
|
|
122
121
|
* Stateful accumulator that watches `FlowRecorder` chart-boundary events
|
|
123
|
-
* (run start/end + subflow entry/exit) and
|
|
124
|
-
* its
|
|
122
|
+
* (run start/end + subflow entry/exit) and pushes `InOutEntry` records to
|
|
123
|
+
* its composed `SequenceStore` (Convention 1 — one purpose per recorder).
|
|
125
124
|
*
|
|
126
125
|
* Attach via `executor.attachCombinedRecorder(recorder)` — footprintjs
|
|
127
126
|
* detects the `FlowRecorder` method shape and routes events.
|
|
128
127
|
*/
|
|
129
|
-
export declare class InOutRecorder
|
|
128
|
+
export declare class InOutRecorder implements FlowRecorder {
|
|
130
129
|
readonly id: string;
|
|
130
|
+
/** 1:N ordered storage with per-step index (Convention 1 — composed). */
|
|
131
|
+
private readonly store;
|
|
131
132
|
constructor(options?: InOutRecorderOptions);
|
|
132
133
|
onRunStart(event: FlowRunEvent): void;
|
|
133
134
|
onRunEnd(event: FlowRunEvent): void;
|
|
134
135
|
onSubflowEntry(event: FlowSubflowEvent): void;
|
|
135
136
|
onSubflowExit(event: FlowSubflowEvent): void;
|
|
136
|
-
/** All entries in execution order (entry+exit interleaved).
|
|
137
|
-
* Alias for `getEntries()` with domain-clearer naming. */
|
|
137
|
+
/** All entries in execution order (entry+exit interleaved). */
|
|
138
138
|
getBoundaries(): InOutEntry[];
|
|
139
139
|
/** Entry/exit pair for one chart execution.
|
|
140
140
|
* Returns `{ entry, exit }` — `exit` is `undefined` for in-progress / paused
|
|
@@ -148,6 +148,17 @@ export declare class InOutRecorder extends SequenceRecorder<InOutEntry> implemen
|
|
|
148
148
|
* for slider / scrubbing UIs. The top-level run's entry is the first
|
|
149
149
|
* step (depth 0). */
|
|
150
150
|
getSteps(): InOutEntry[];
|
|
151
|
+
/** O(1) lookup: all boundary entries (both phases) for one runtimeStageId. */
|
|
152
|
+
getEntriesForStep(runtimeStageId: string): InOutEntry[];
|
|
153
|
+
/** Pre-built per-step range index — O(1) lookups for time-travel scrubbing. */
|
|
154
|
+
getEntryRanges(): ReadonlyMap<string, {
|
|
155
|
+
readonly firstIdx: number;
|
|
156
|
+
readonly endIdx: number;
|
|
157
|
+
}>;
|
|
158
|
+
/** Progressive reveal: boundaries whose runtimeStageId is in the visible set. */
|
|
159
|
+
getEntriesUpTo(visibleIds: ReadonlySet<string>): InOutEntry[];
|
|
160
|
+
/** Clear all stored boundaries — called by the executor before each run(). */
|
|
161
|
+
clear(): void;
|
|
151
162
|
/** The root run's entry/exit pair, if the run has started.
|
|
152
163
|
* Convenience for consumers that want to bracket the timeline by the
|
|
153
164
|
* outermost in/out. */
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* Collects quality scores during traversal (accumulate pattern).
|
|
5
5
|
* After execution, use qualityTrace() to backtrack from any low-scoring step.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
7
|
+
* Composes a `KeyedStore<QualityEntry>` for O(1) lookup and standard operations
|
|
8
|
+
* (Convention 1 — one purpose per recorder):
|
|
8
9
|
* - **Translate**: `getByKey('call-llm#5')` — quality at this step
|
|
9
10
|
* - **Accumulate**: progressive quality up to slider position
|
|
10
11
|
* - **Aggregate**: overall pipeline quality score
|
|
@@ -30,7 +31,6 @@
|
|
|
30
31
|
* ```
|
|
31
32
|
*/
|
|
32
33
|
import type { ReadEvent, ScopeRecorder, StageEvent, WriteEvent } from '../scope/types.js';
|
|
33
|
-
import { KeyedRecorder } from './KeyedRecorder.js';
|
|
34
34
|
import type { RecorderOperation } from './RecorderOperation.js';
|
|
35
35
|
/** Per-step quality data stored by QualityRecorder. */
|
|
36
36
|
export interface QualityEntry {
|
|
@@ -69,10 +69,12 @@ export interface QualityRecorderOptions {
|
|
|
69
69
|
/** Preferred UI operation. Defaults to 'accumulate' (progressive quality). */
|
|
70
70
|
preferredOperation?: RecorderOperation;
|
|
71
71
|
}
|
|
72
|
-
export declare class QualityRecorder
|
|
72
|
+
export declare class QualityRecorder implements ScopeRecorder {
|
|
73
73
|
private static _counter;
|
|
74
74
|
readonly id: string;
|
|
75
75
|
readonly preferredOperation: RecorderOperation;
|
|
76
|
+
/** 1:1 per-step storage (Convention 1 — composed, not inherited). */
|
|
77
|
+
private readonly store;
|
|
76
78
|
private readonly scoringFn;
|
|
77
79
|
private currentRuntimeStageId;
|
|
78
80
|
private currentStageId;
|
|
@@ -84,6 +86,18 @@ export declare class QualityRecorder extends KeyedRecorder<QualityEntry> impleme
|
|
|
84
86
|
onRead(event: ReadEvent): void;
|
|
85
87
|
onWrite(event: WriteEvent): void;
|
|
86
88
|
onStageEnd(event: StageEvent): void;
|
|
89
|
+
/** Translate: quality entry for a specific runtimeStageId. */
|
|
90
|
+
getByKey(runtimeStageId: string): QualityEntry | undefined;
|
|
91
|
+
/** All per-step quality entries as a read-only Map (insertion-ordered). */
|
|
92
|
+
getMap(): ReadonlyMap<string, QualityEntry>;
|
|
93
|
+
/** All per-step quality entries (insertion-ordered). */
|
|
94
|
+
values(): QualityEntry[];
|
|
95
|
+
/** Number of scored steps. */
|
|
96
|
+
get size(): number;
|
|
97
|
+
/** Aggregate: reduce ALL scored steps to a single value. */
|
|
98
|
+
aggregate<R>(fn: (acc: R, entry: QualityEntry, key: string) => R, initial: R): R;
|
|
99
|
+
/** Accumulate: reduce scored steps up to a slider position. */
|
|
100
|
+
accumulate<R>(fn: (acc: R, entry: QualityEntry, key: string) => R, initial: R, keys?: ReadonlySet<string>): R;
|
|
87
101
|
/** Overall quality score — average of all step scores. */
|
|
88
102
|
getOverallScore(): number;
|
|
89
103
|
/** Find the lowest-scoring step. */
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* Data is collected during the single DFS traversal. The consumer chooses the
|
|
5
5
|
* operation at READ time:
|
|
6
6
|
*
|
|
7
|
-
* | Operation |
|
|
7
|
+
* | Operation | KeyedStore method | SequenceStore method | Use case |
|
|
8
8
|
* |-------------|--------------------------|--------------------------------|-----------------------------|
|
|
9
|
-
* | Translate | `
|
|
9
|
+
* | Translate | `get(id)` | `getByKey(id)` | Per-step detail |
|
|
10
10
|
* | Accumulate | `accumulate(fn, init, k)` | `accumulate(fn, init, k)` | Running total up to slider |
|
|
11
11
|
* | Aggregate | `aggregate(fn, init)` | `aggregate(fn, init)` | Grand total for dashboards |
|
|
12
12
|
*
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
export { BoundaryStateStore } from './BoundaryStateStore.js';
|
|
2
2
|
export { KeyedStore } from './KeyedStore.js';
|
|
3
3
|
export { SequenceStore } from './SequenceStore.js';
|
|
4
|
-
export { BoundaryStateTracker } from './BoundaryStateTracker.js';
|
|
5
|
-
export { KeyedRecorder } from './KeyedRecorder.js';
|
|
6
|
-
export { SequenceRecorder } from './SequenceRecorder.js';
|
|
7
4
|
export type { CombinedRecorder } from './CombinedRecorder.js';
|
|
8
5
|
export { hasEmitRecorderMethods, hasFlowRecorderMethods, hasRecorderMethods, isFlowEvent } from './CombinedRecorder.js';
|
|
9
6
|
export type { CompositeSnapshot } from './CompositeRecorder.js';
|
|
@@ -14,8 +14,11 @@
|
|
|
14
14
|
* ```
|
|
15
15
|
*/
|
|
16
16
|
import type { CommitBundle } from '../memory/types.js';
|
|
17
|
-
import type { KeyedRecorder } from './KeyedRecorder.js';
|
|
18
17
|
import type { QualityEntry } from './QualityRecorder.js';
|
|
18
|
+
/** Minimal per-step quality lookup — satisfied by `QualityRecorder` (structural, decoupled). */
|
|
19
|
+
export interface QualityLookup {
|
|
20
|
+
getByKey(runtimeStageId: string): QualityEntry | undefined;
|
|
21
|
+
}
|
|
19
22
|
/** A single frame in the quality stack trace. */
|
|
20
23
|
export interface QualityFrame {
|
|
21
24
|
runtimeStageId: string;
|
|
@@ -44,7 +47,7 @@ export interface QualityStackTrace {
|
|
|
44
47
|
* @param startId runtimeStageId to start from
|
|
45
48
|
* @param maxDepth Maximum backtracking depth (default: 20)
|
|
46
49
|
*/
|
|
47
|
-
export declare function qualityTrace(commitLog: CommitBundle[], qualityRecorder:
|
|
50
|
+
export declare function qualityTrace(commitLog: CommitBundle[], qualityRecorder: QualityLookup, startId: string, maxDepth?: number): QualityStackTrace;
|
|
48
51
|
/**
|
|
49
52
|
* Format a QualityStackTrace as human-readable text.
|
|
50
53
|
*/
|
|
@@ -17,7 +17,7 @@ import type { CommitBundle, StageSnapshot } from '../memory/types.js';
|
|
|
17
17
|
export interface RecorderSnapshot {
|
|
18
18
|
id: string;
|
|
19
19
|
name: string;
|
|
20
|
-
/** ScopeRecorder type and pattern description (e.g., "Translator (
|
|
20
|
+
/** ScopeRecorder type and pattern description (e.g., "Translator (KeyedStore) — per-step token usage"). */
|
|
21
21
|
description?: string;
|
|
22
22
|
/** Preferred read-time operation — hints the UI about which view to show prominently. */
|
|
23
23
|
preferredOperation?: 'translate' | 'accumulate' | 'aggregate';
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
* MetricRecorder — per-step timing and execution counts, keyed by runtimeStageId.
|
|
3
3
|
*
|
|
4
4
|
* Stores per-invocation data during traversal. Aggregated views computed on read.
|
|
5
|
-
*
|
|
5
|
+
* Composes a `KeyedStore<StepMetrics>` for O(1) lookup and standard operations
|
|
6
|
+
* (Convention 1 — one purpose per recorder: this is the ScopeRecorder; the store
|
|
7
|
+
* is the storage).
|
|
6
8
|
*
|
|
7
9
|
* @example
|
|
8
10
|
* ```typescript
|
|
@@ -20,7 +22,6 @@
|
|
|
20
22
|
* metric.accumulate((sum, m) => sum + m.duration, 0, visibleKeys);
|
|
21
23
|
* ```
|
|
22
24
|
*/
|
|
23
|
-
import { KeyedRecorder } from '../../recorder/KeyedRecorder.js';
|
|
24
25
|
import type { RecorderOperation } from '../../recorder/RecorderOperation.js';
|
|
25
26
|
import type { CommitEvent, PauseEvent, ReadEvent, ScopeRecorder, StageEvent, WriteEvent } from '../types.js';
|
|
26
27
|
/** Per-invocation metrics for a single execution step. */
|
|
@@ -67,10 +68,12 @@ export interface MetricRecorderOptions {
|
|
|
67
68
|
/** Preferred UI operation. Defaults to 'aggregate' (dashboard totals). */
|
|
68
69
|
preferredOperation?: RecorderOperation;
|
|
69
70
|
}
|
|
70
|
-
export declare class MetricRecorder
|
|
71
|
+
export declare class MetricRecorder implements ScopeRecorder {
|
|
71
72
|
private static _counter;
|
|
72
73
|
readonly id: string;
|
|
73
74
|
readonly preferredOperation: RecorderOperation;
|
|
75
|
+
/** 1:1 per-step storage (Convention 1 — composed, not inherited). */
|
|
76
|
+
private readonly store;
|
|
74
77
|
private stageStartTimes;
|
|
75
78
|
private currentRuntimeStageId;
|
|
76
79
|
private stageFilter?;
|
|
@@ -78,6 +81,18 @@ export declare class MetricRecorder extends KeyedRecorder<StepMetrics> implement
|
|
|
78
81
|
private shouldRecord;
|
|
79
82
|
/** Get or create the StepMetrics for the current stage. */
|
|
80
83
|
private current;
|
|
84
|
+
/** Translate: per-step metrics by runtimeStageId. */
|
|
85
|
+
getByKey(runtimeStageId: string): StepMetrics | undefined;
|
|
86
|
+
/** All per-step metrics as a read-only Map (insertion-ordered). */
|
|
87
|
+
getMap(): ReadonlyMap<string, StepMetrics>;
|
|
88
|
+
/** All per-step metrics (insertion-ordered). */
|
|
89
|
+
values(): StepMetrics[];
|
|
90
|
+
/** Number of recorded steps. */
|
|
91
|
+
get size(): number;
|
|
92
|
+
/** Aggregate: reduce ALL steps to a single value (dashboards, totals). */
|
|
93
|
+
aggregate<R>(fn: (acc: R, entry: StepMetrics, key: string) => R, initial: R): R;
|
|
94
|
+
/** Accumulate: reduce steps up to a slider position (progressive view). */
|
|
95
|
+
accumulate<R>(fn: (acc: R, entry: StepMetrics, key: string) => R, initial: R, keys?: ReadonlySet<string>): R;
|
|
81
96
|
onStageStart(event: StageEvent): void;
|
|
82
97
|
onRead(event: ReadEvent): void;
|
|
83
98
|
onWrite(event: WriteEvent): void;
|
package/dist/types/trace.d.ts
CHANGED
|
@@ -41,9 +41,6 @@ export { KeyedStore } from './lib/recorder/KeyedStore.js';
|
|
|
41
41
|
export { SequenceStore } from './lib/recorder/SequenceStore.js';
|
|
42
42
|
export type { RangeEntry, RangeToken } from './lib/recorder/CommitRangeIndex.js';
|
|
43
43
|
export { CommitRangeIndex } from './lib/recorder/CommitRangeIndex.js';
|
|
44
|
-
export { KeyedRecorder } from './lib/recorder/KeyedRecorder.js';
|
|
45
|
-
export { SequenceRecorder } from './lib/recorder/SequenceRecorder.js';
|
|
46
|
-
export { BoundaryStateTracker } from './lib/recorder/BoundaryStateTracker.js';
|
|
47
44
|
export type { Topology, TopologyEdge, TopologyIncomingKind, TopologyNode, TopologyRecorderOptions, } from './lib/recorder/TopologyRecorder.js';
|
|
48
45
|
export { TopologyRecorder, topologyRecorder } from './lib/recorder/TopologyRecorder.js';
|
|
49
46
|
export type { InOutEntry, InOutPhase, InOutRecorderOptions } from './lib/recorder/InOutRecorder.js';
|
package/package.json
CHANGED