footprintjs 10.3.0 → 10.4.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/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/lib/capture/absentEntries.d.ts +7 -0
- package/dist/esm/lib/capture/absentEntries.js +81 -0
- package/dist/esm/lib/capture/checkpointCapture.d.ts +11 -0
- package/dist/esm/lib/capture/checkpointCapture.js +104 -0
- package/dist/esm/lib/capture/historyData.d.ts +9 -0
- package/dist/esm/lib/capture/historyData.js +79 -0
- package/dist/esm/lib/capture/historyNote.d.ts +4 -0
- package/dist/esm/lib/capture/historyNote.js +52 -0
- package/dist/esm/lib/capture/historyTarget.d.ts +5 -0
- package/dist/esm/lib/capture/historyTarget.js +35 -0
- package/dist/esm/lib/capture/historyTypes.d.ts +39 -0
- package/dist/esm/lib/capture/historyTypes.js +4 -0
- package/dist/esm/lib/capture/nativeCoverage.d.ts +20 -7
- package/dist/esm/lib/capture/nativeCoverage.js +50 -12
- package/dist/esm/lib/capture/noteShape.d.ts +10 -0
- package/dist/esm/lib/capture/noteShape.js +93 -0
- package/dist/esm/lib/capture/readSources.d.ts +43 -0
- package/dist/esm/lib/capture/readSources.js +78 -0
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +5 -2
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +1 -0
- package/dist/esm/lib/engine/types.d.ts +3 -0
- package/dist/esm/lib/engine/types.js +1 -1
- package/dist/esm/lib/memory/StageContext.d.ts +8 -0
- package/dist/esm/lib/memory/StageContext.js +84 -9
- package/dist/esm/lib/memory/runPolicy.d.ts +5 -1
- package/dist/esm/lib/memory/runPolicy.js +2 -1
- package/dist/esm/lib/pause/record.js +8 -2
- package/dist/esm/lib/pause/types.d.ts +2 -0
- package/dist/esm/lib/pause/types.js +1 -1
- package/dist/esm/lib/runner/ExecutionRuntime.d.ts +17 -3
- package/dist/esm/lib/runner/ExecutionRuntime.js +33 -4
- package/dist/esm/lib/runner/FlowChartExecutor.d.ts +3 -0
- package/dist/esm/lib/runner/FlowChartExecutor.js +48 -10
- package/dist/esm/lib/runner/attach.js +3 -1
- package/dist/esm/lib/runner/captureHistory.d.ts +8 -0
- package/dist/esm/lib/runner/captureHistory.js +106 -0
- package/dist/esm/lib/runner/checkpoint.d.ts +2 -0
- package/dist/esm/lib/runner/checkpoint.js +3 -1
- package/dist/esm/lib/runner/index.d.ts +1 -0
- package/dist/esm/lib/runner/index.js +1 -1
- package/dist/esm/lib/runner/options.js +42 -3
- package/dist/esm/lib/runner/readStoredCapture.d.ts +39 -0
- package/dist/esm/lib/runner/readStoredCapture.js +36 -0
- package/dist/esm/lib/runner/recordSink.d.ts +11 -0
- package/dist/esm/lib/runner/recordSink.js +47 -4
- package/dist/esm/lib/runner/snapshot.js +2 -2
- package/dist/esm/lib/runner/storedCaptureAdmission.d.ts +4 -0
- package/dist/esm/lib/runner/storedCaptureAdmission.js +97 -0
- package/dist/esm/lib/sinks/fileSink.d.ts +2 -1
- package/dist/esm/lib/sinks/fileSink.js +8 -2
- package/dist/esm/trace.d.ts +2 -0
- package/dist/esm/trace.js +2 -1
- package/dist/index.js +1 -1
- package/dist/lib/capture/absentEntries.js +86 -0
- package/dist/lib/capture/checkpointCapture.js +110 -0
- package/dist/lib/capture/historyData.js +85 -0
- package/dist/lib/capture/historyNote.js +56 -0
- package/dist/lib/capture/historyTarget.js +40 -0
- package/dist/lib/capture/historyTypes.js +7 -0
- package/dist/lib/capture/nativeCoverage.js +52 -13
- package/dist/lib/capture/noteShape.js +103 -0
- package/dist/lib/capture/readSources.js +83 -0
- package/dist/lib/engine/handlers/SubflowExecutor.js +5 -2
- package/dist/lib/engine/types.js +1 -1
- package/dist/lib/memory/StageContext.js +84 -9
- package/dist/lib/memory/runPolicy.js +2 -1
- package/dist/lib/pause/record.js +8 -2
- package/dist/lib/pause/types.js +1 -1
- package/dist/lib/runner/ExecutionRuntime.js +32 -3
- package/dist/lib/runner/FlowChartExecutor.js +48 -10
- package/dist/lib/runner/attach.js +3 -1
- package/dist/lib/runner/captureHistory.js +110 -0
- package/dist/lib/runner/checkpoint.js +3 -1
- package/dist/lib/runner/index.js +1 -1
- package/dist/lib/runner/options.js +42 -3
- package/dist/lib/runner/readStoredCapture.js +40 -0
- package/dist/lib/runner/recordSink.js +47 -4
- package/dist/lib/runner/snapshot.js +2 -2
- package/dist/lib/runner/storedCaptureAdmission.js +101 -0
- package/dist/lib/sinks/fileSink.js +8 -2
- package/dist/trace.js +4 -2
- package/dist/types/index.d.ts +2 -0
- package/dist/types/lib/capture/absentEntries.d.ts +7 -0
- package/dist/types/lib/capture/checkpointCapture.d.ts +11 -0
- package/dist/types/lib/capture/historyData.d.ts +9 -0
- package/dist/types/lib/capture/historyNote.d.ts +4 -0
- package/dist/types/lib/capture/historyTarget.d.ts +5 -0
- package/dist/types/lib/capture/historyTypes.d.ts +39 -0
- package/dist/types/lib/capture/nativeCoverage.d.ts +20 -7
- package/dist/types/lib/capture/noteShape.d.ts +10 -0
- package/dist/types/lib/capture/readSources.d.ts +43 -0
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +1 -0
- package/dist/types/lib/engine/types.d.ts +3 -0
- package/dist/types/lib/memory/StageContext.d.ts +8 -0
- package/dist/types/lib/memory/runPolicy.d.ts +5 -1
- package/dist/types/lib/pause/types.d.ts +2 -0
- package/dist/types/lib/runner/ExecutionRuntime.d.ts +17 -3
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +3 -0
- package/dist/types/lib/runner/captureHistory.d.ts +8 -0
- package/dist/types/lib/runner/checkpoint.d.ts +2 -0
- package/dist/types/lib/runner/index.d.ts +1 -0
- package/dist/types/lib/runner/readStoredCapture.d.ts +39 -0
- package/dist/types/lib/runner/recordSink.d.ts +11 -0
- package/dist/types/lib/runner/storedCaptureAdmission.d.ts +4 -0
- package/dist/types/lib/sinks/fileSink.d.ts +2 -1
- package/dist/types/trace.d.ts +2 -0
- package/package.json +2 -2
|
@@ -13,8 +13,11 @@ import type { CommitBundle, CommitValuesMode, LogAddress, LogOutcome, Meta } fro
|
|
|
13
13
|
import type { RecordSink, WriteProvenanceMode } from 'foottrace/write';
|
|
14
14
|
import { EventLog, SharedMemory } from 'foottrace/write';
|
|
15
15
|
import type { RunCorrelation } from '../attempt/types.js';
|
|
16
|
-
import type {
|
|
16
|
+
import type { CaptureHistoryStatus } from '../capture/historyTypes.js';
|
|
17
|
+
import type { CaptureChannelStatus, RecorderCaptureAcknowledgement } from '../capture/nativeCoverage.js';
|
|
17
18
|
import { NativeCapture } from '../capture/nativeCoverage.js';
|
|
19
|
+
import type { EngineReadSources, NativeCaptureObservation, SourceLimitation } from '../capture/readSources.js';
|
|
20
|
+
import { EngineReadSourceCapture } from '../capture/readSources.js';
|
|
18
21
|
import type { StageSnapshot } from '../memory/frameTypes.js';
|
|
19
22
|
import type { RunPolicy } from '../memory/runPolicy.js';
|
|
20
23
|
import { StageContext } from '../memory/StageContext.js';
|
|
@@ -62,7 +65,9 @@ export type RuntimeSnapshot = {
|
|
|
62
65
|
*/
|
|
63
66
|
readonly runId: string;
|
|
64
67
|
/** Opt-in native observation; root log and current leg only, never durable storage. */
|
|
65
|
-
readonly capture?:
|
|
68
|
+
readonly capture?: NativeCaptureObservation;
|
|
69
|
+
/** Opt-in ordered native occurrences. Unknown ownership has no record; never infer observed-empty. */
|
|
70
|
+
readonly readSources?: EngineReadSources;
|
|
66
71
|
/**
|
|
67
72
|
* The run's correlation (10.1) — `env.traceparent`, or `env.traceId` + `env.operationId`, resolved once per
|
|
68
73
|
* leg; the same frozen object every event of the leg carries (`TraversalContext.correlation`, a scope event's
|
|
@@ -146,6 +151,8 @@ export type RuntimeSnapshot = {
|
|
|
146
151
|
};
|
|
147
152
|
/** `getSnapshot().sink` — what the run handed its sink, and what the sink did not take (10.1, P6). */
|
|
148
153
|
export interface RecordSinkStats {
|
|
154
|
+
/** Present only when explicit capture persistence was requested. Never inferred from an ordinary flush. */
|
|
155
|
+
readonly capture?: CaptureHistoryStatus;
|
|
149
156
|
/** Entries handed to the adapter (each `opened`, `commit`, `note`, `closed` call). */
|
|
150
157
|
readonly entries: number;
|
|
151
158
|
/**
|
|
@@ -167,9 +174,13 @@ export interface RuntimeRecord {
|
|
|
167
174
|
readonly meta?: Meta;
|
|
168
175
|
}
|
|
169
176
|
export declare class ExecutionRuntime {
|
|
177
|
+
readSources?: EngineReadSourceCapture;
|
|
170
178
|
/** Present only for the current opted-in root leg. Never inherited by a subflow runtime. */
|
|
171
179
|
capture?: NativeCapture;
|
|
172
180
|
beginCapture(runId: string): NativeCapture;
|
|
181
|
+
/** A reused log cannot be retrofitted or relabelled as the new leg's base. */
|
|
182
|
+
resumeReadSources(runId: string): void;
|
|
183
|
+
captureSnapshot(to: number, control?: CaptureChannelStatus, redact?: boolean): NativeCaptureObservation | undefined;
|
|
173
184
|
globalStore: SharedMemory;
|
|
174
185
|
/**
|
|
175
186
|
* Parallel redacted mirror of `globalStore`. Populated by every commit that
|
|
@@ -201,7 +212,10 @@ export declare class ExecutionRuntime {
|
|
|
201
212
|
* every frame after inherits the same reference. Default: every dial at
|
|
202
213
|
* its default, no rule, no mirror.
|
|
203
214
|
*/
|
|
204
|
-
constructor(rootName: string, rootId: string, defaultValues?: unknown, initialState?: unknown, policy?: RunPolicy, record?: RuntimeRecord
|
|
215
|
+
constructor(rootName: string, rootId: string, defaultValues?: unknown, initialState?: unknown, policy?: RunPolicy, record?: RuntimeRecord, source?: {
|
|
216
|
+
readonly runId: string;
|
|
217
|
+
readonly unavailable?: SourceLimitation;
|
|
218
|
+
});
|
|
205
219
|
/**
|
|
206
220
|
* A fresh root frame for this runtime — `globalStore`, `executionHistory`,
|
|
207
221
|
* the run's policy and (when kept) the mirror. Also how `SubflowExecutor`
|
|
@@ -66,6 +66,7 @@ export declare class FlowChartExecutor<TOut = any, TScope = any> {
|
|
|
66
66
|
*/
|
|
67
67
|
private _isExecuting;
|
|
68
68
|
private captureSignal?;
|
|
69
|
+
private captureHistoryLease?;
|
|
69
70
|
private failureState;
|
|
70
71
|
/** Safe native context for the latest rejected leg; undefined before, during, after success or pause. */
|
|
71
72
|
getFailureContext(): TerminalFailureContext | undefined;
|
|
@@ -189,6 +190,8 @@ export declare class FlowChartExecutor<TOut = any, TScope = any> {
|
|
|
189
190
|
* the `RecordSinkError`.
|
|
190
191
|
*/
|
|
191
192
|
private settleRecorded;
|
|
193
|
+
private settleRecordedLeg;
|
|
194
|
+
private saveCaptureHistory;
|
|
192
195
|
private finishCapture;
|
|
193
196
|
/**
|
|
194
197
|
* What a new root log opens with: names and numbers the run already serves — the run, the chart, the correlation,
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ExecutionRuntime, RuntimeSnapshot } from './ExecutionRuntime.js';
|
|
2
|
+
import type { RunRecord } from './recordSink.js';
|
|
3
|
+
/** @internal Keeps a timed-out operation leased until its actual settlement. */
|
|
4
|
+
export interface CaptureHistoryLease {
|
|
5
|
+
pending: boolean;
|
|
6
|
+
}
|
|
7
|
+
/** Persist one terminal native root segment, without changing its memory-only engine observation. */
|
|
8
|
+
export declare function persistCaptureHistory(runtime: ExecutionRuntime, record: RunRecord, snapshot: () => RuntimeSnapshot, lease: CaptureHistoryLease): Promise<void>;
|
|
@@ -36,10 +36,12 @@
|
|
|
36
36
|
* DESCRIPTIVE contract error naming the field (`describeCheckpointCloneFailure`)
|
|
37
37
|
* instead of a naked `DataCloneError`.
|
|
38
38
|
*/
|
|
39
|
+
import type { NativeCaptureObservation } from '../capture/readSources.js';
|
|
39
40
|
import type { FlowchartTraverser } from '../engine/traversal/FlowchartTraverser.js';
|
|
40
41
|
import type { FlowchartCheckpoint, PauseSignal, RedactionMarks } from '../pause/types.js';
|
|
41
42
|
/** The paused run's counters, as the executor holds them at the pause. */
|
|
42
43
|
export interface PausedRun {
|
|
44
|
+
readonly capture?: NativeCaptureObservation;
|
|
43
45
|
readonly runId: string;
|
|
44
46
|
readonly executionCount: number;
|
|
45
47
|
readonly visitCounts: ReadonlyMap<string, number>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export type { CaptureHistoryOptions, CaptureHistoryReceipt, CaptureHistoryStatus, CaptureHistoryTarget, } from '../capture/historyTypes.js';
|
|
1
2
|
export type { ComposableRunner } from './ComposableRunner.js';
|
|
2
3
|
export type { AttachRecorderOptions, ObserverDelivery, ObserverDrainResult, ObserverStats, } from './DeferredObserverTier.js';
|
|
3
4
|
export type { RecorderSnapshot, RecordSinkStats, RuntimeSnapshot } from './ExecutionRuntime.js';
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { CommitBundle, StoredRecordLimits } from 'foottrace';
|
|
2
|
+
import type { CaptureHistoryReceipt } from '../capture/historyTypes.js';
|
|
3
|
+
import type { NativeCaptureNote } from '../capture/nativeCoverage.js';
|
|
4
|
+
import type { StageSnapshot } from '../memory/frameTypes.js';
|
|
5
|
+
import type { RecorderSnapshot } from './ExecutionRuntime.js';
|
|
6
|
+
/** Engine history whose storage evidence matched. Channels and native limitations retain their original meanings. */
|
|
7
|
+
export interface StoredCaptureHistory {
|
|
8
|
+
readonly runId: string;
|
|
9
|
+
readonly capture: NativeCaptureNote;
|
|
10
|
+
readonly executionTree: StageSnapshot;
|
|
11
|
+
/**
|
|
12
|
+
* Sorted literal paths of own undefined stageReads/stageWrites entries omitted by JSON.
|
|
13
|
+
* Read alongside executionTree; this is not proof that the underlying state key never existed.
|
|
14
|
+
* At most 4096 paths of 256 segments, within the evidence byte limit. No entries are truncated.
|
|
15
|
+
*/
|
|
16
|
+
readonly absent?: readonly (readonly string[])[];
|
|
17
|
+
readonly recorders?: readonly RecorderSnapshot[];
|
|
18
|
+
readonly commitLog: readonly CommitBundle[];
|
|
19
|
+
readonly initialState?: Record<string, unknown>;
|
|
20
|
+
readonly receipt: CaptureHistoryReceipt;
|
|
21
|
+
}
|
|
22
|
+
export type StoredCaptureResult = {
|
|
23
|
+
readonly status: 'acknowledged';
|
|
24
|
+
readonly history: StoredCaptureHistory;
|
|
25
|
+
} | {
|
|
26
|
+
readonly status: 'unknown';
|
|
27
|
+
readonly reason: string;
|
|
28
|
+
readonly history?: never;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Read authorized stored entries using Foottrace's sequence/gap checks, then validate FootPrint's opaque metadata.
|
|
32
|
+
* A receipt is a host-adapter assertion, not a signature. Callers still own storage authorization and trust.
|
|
33
|
+
* Never performs causal analysis or upgrades partial native capture to complete.
|
|
34
|
+
*/
|
|
35
|
+
export declare function readStoredCapture(entries: Iterable<unknown>, options: {
|
|
36
|
+
runId: string;
|
|
37
|
+
limits?: StoredRecordLimits;
|
|
38
|
+
maxBytes?: number;
|
|
39
|
+
}): Promise<StoredCaptureResult>;
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
*/
|
|
24
24
|
import type { Meta } from 'foottrace';
|
|
25
25
|
import type { RecordSink } from 'foottrace/write';
|
|
26
|
+
import type { CaptureHistoryOptions, CaptureHistoryStatus } from '../capture/historyTypes.js';
|
|
26
27
|
import type { RedactionRule } from '../memory/redaction.js';
|
|
27
28
|
import type { RecordSinkStats } from './ExecutionRuntime.js';
|
|
28
29
|
/** What a lost entry does to the run: `'report'` counts it and goes on; `'fail'` fails the run. */
|
|
@@ -44,6 +45,8 @@ export interface RecordSinkOptions {
|
|
|
44
45
|
readonly onFailure?: RecordSinkFailureMode;
|
|
45
46
|
/** `'auto'` (default): `run()` awaits the adapter's `flush()` after the closing entry. `'manual'`: `flushRecord()`. */
|
|
46
47
|
readonly flush?: RecordSinkFlushMode;
|
|
48
|
+
/** Opt-in capture evidence and explicit host acknowledgement; ordinary flush never implies durability. */
|
|
49
|
+
readonly capture?: CaptureHistoryOptions;
|
|
47
50
|
}
|
|
48
51
|
/** The executor's `sink` option: an adapter, or {@link RecordSinkOptions}. */
|
|
49
52
|
export type RecordSinkOption = RecordSink | RecordSinkOptions;
|
|
@@ -70,6 +73,7 @@ export interface ResolvedRecordSink {
|
|
|
70
73
|
readonly adapter: RecordSink;
|
|
71
74
|
readonly onFailure: RecordSinkFailureMode;
|
|
72
75
|
readonly flush: RecordSinkFlushMode;
|
|
76
|
+
readonly capture?: CaptureHistoryOptions;
|
|
73
77
|
}
|
|
74
78
|
/**
|
|
75
79
|
* Resolve the executor's `sink` option, or refuse it with a `TypeError` naming what is wrong — a wiring mistake
|
|
@@ -92,6 +96,8 @@ export declare class RunRecord {
|
|
|
92
96
|
/** Aborted at the first loss under `'fail'` — composed into the leg's signal; fresh per leg ({@link beginLeg}). */
|
|
93
97
|
private stopper?;
|
|
94
98
|
private failure?;
|
|
99
|
+
private capturePending;
|
|
100
|
+
private captureStatus?;
|
|
95
101
|
/** Opaque error identities only: no raw entry or adapter error is enumerable on the transport error. */
|
|
96
102
|
private readonly invocationFailures;
|
|
97
103
|
constructor(resolved: ResolvedRecordSink);
|
|
@@ -113,6 +119,11 @@ export declare class RunRecord {
|
|
|
113
119
|
/** The loss that fails the run under `'fail'`; absent while nothing was lost (and always under `'report'`). */
|
|
114
120
|
get fatal(): RecordSinkError | undefined;
|
|
115
121
|
stats(): RecordSinkStats;
|
|
122
|
+
get captureOptions(): CaptureHistoryOptions | undefined;
|
|
123
|
+
get pendingCaptureDeliveries(): number;
|
|
124
|
+
captureResult(result: CaptureHistoryStatus): void;
|
|
125
|
+
/** Same served seed as opened; a history digest never sees a seeded policy secret. */
|
|
126
|
+
captureInitialState(state: Record<string, unknown>): Record<string, unknown>;
|
|
116
127
|
/**
|
|
117
128
|
* Await the adapter's `flush()`, at most `timeoutMs` when given. A flush that throws or rejects is a loss
|
|
118
129
|
* (counted, and fatal under `'fail'`); one still running at the deadline is `pending` and keeps running — and,
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { StoredLog } from 'foottrace';
|
|
2
|
+
import type { StoredCaptureResult } from './readStoredCapture.js';
|
|
3
|
+
/** @internal Engine-metadata admission after Foottrace's generic record validation. */
|
|
4
|
+
export declare function admitStoredCapture(log: StoredLog, runId: string, maxBytes: number): Promise<StoredCaptureResult>;
|
|
@@ -42,6 +42,7 @@
|
|
|
42
42
|
* `readStoredRecord`); for richer values, bring an adapter with a richer encoding.
|
|
43
43
|
*/
|
|
44
44
|
import type { RecordSink } from 'foottrace/write';
|
|
45
|
+
import type { CaptureHistoryOptions } from '../capture/historyTypes.js';
|
|
45
46
|
/** The default cap on a record file: 64 MiB. */
|
|
46
47
|
export declare const DEFAULT_FILE_SINK_MAX_BYTES: number;
|
|
47
48
|
/** The default cap on ONE entry's line: 8 MiB. */
|
|
@@ -69,7 +70,7 @@ export interface FileSinkOptions {
|
|
|
69
70
|
readonly flushTimeoutMs?: number;
|
|
70
71
|
}
|
|
71
72
|
/** A record sink that appends to one file — `RecordSink` plus what the app needs to manage the file. */
|
|
72
|
-
export interface FileSink extends RecordSink {
|
|
73
|
+
export interface FileSink extends RecordSink, Pick<CaptureHistoryOptions, 'acknowledge'> {
|
|
73
74
|
/** The absolute path the sink writes to — resolved once, when it was made. */
|
|
74
75
|
readonly path: string;
|
|
75
76
|
/**
|
package/dist/types/trace.d.ts
CHANGED
|
@@ -21,3 +21,5 @@ export { formatQualityTrace, qualityTrace } from './lib/recorder/qualityTrace.js
|
|
|
21
21
|
export { SequenceStore } from './lib/recorder/SequenceStore.js';
|
|
22
22
|
export type { Topology, TopologyEdge, TopologyIncomingKind, TopologyNode, TopologyNodeKind, TopologyRecorderOptions, } from './lib/recorder/TopologyRecorder.js';
|
|
23
23
|
export { TopologyRecorder, topologyRecorder } from './lib/recorder/TopologyRecorder.js';
|
|
24
|
+
export type { StoredCaptureHistory, StoredCaptureResult } from './lib/runner/readStoredCapture.js';
|
|
25
|
+
export { readStoredCapture } from './lib/runner/readStoredCapture.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "footprintjs",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.4.0",
|
|
4
4
|
"description": "Explainable backend flows — automatic causal traces, decision evidence, and MCP tool generation for AI agents",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Sanjay Krishna Anbalagan",
|
|
@@ -189,7 +189,7 @@
|
|
|
189
189
|
},
|
|
190
190
|
"sideEffects": false,
|
|
191
191
|
"dependencies": {
|
|
192
|
-
"foottrace": "^1.
|
|
192
|
+
"foottrace": "^1.7.0"
|
|
193
193
|
},
|
|
194
194
|
"peerDependencies": {
|
|
195
195
|
"zod": "^3.0.0 || ^4.0.0"
|