footprintjs 10.1.0 → 10.2.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 +18 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/lib/attempt/category.d.ts +6 -0
- package/dist/esm/lib/attempt/category.js +26 -2
- package/dist/esm/lib/attempt/runner.d.ts +3 -1
- package/dist/esm/lib/attempt/runner.js +26 -6
- package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +36 -6
- package/dist/esm/lib/engine/handlers/DeciderHandler.js +9 -5
- package/dist/esm/lib/engine/handlers/SelectorHandler.js +6 -5
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +5 -2
- package/dist/esm/lib/engine/handlers/commitStage.d.ts +7 -0
- package/dist/esm/lib/engine/handlers/commitStage.js +22 -4
- package/dist/esm/lib/engine/handlers/stageError.d.ts +2 -0
- package/dist/esm/lib/engine/handlers/stageError.js +13 -1
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.d.ts +2 -1
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +6 -2
- package/dist/esm/lib/engine/narrative/types.d.ts +4 -1
- package/dist/esm/lib/engine/narrative/types.js +1 -1
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +14 -6
- package/dist/esm/lib/errors/terminalFailure.d.ts +29 -0
- package/dist/esm/lib/errors/terminalFailure.js +60 -0
- package/dist/esm/lib/memory/StageContext.d.ts +14 -0
- package/dist/esm/lib/memory/StageContext.js +32 -1
- package/dist/esm/lib/memory/attention.d.ts +26 -0
- package/dist/esm/lib/memory/attention.js +171 -0
- package/dist/esm/lib/memory/frameTypes.d.ts +8 -0
- package/dist/esm/lib/memory/frameTypes.js +1 -1
- package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +14 -0
- package/dist/esm/lib/recorder/ControlDepRecorder.js +18 -1
- package/dist/esm/lib/runner/FlowChartExecutor.d.ts +4 -0
- package/dist/esm/lib/runner/FlowChartExecutor.js +163 -127
- package/dist/index.js +1 -1
- package/dist/lib/attempt/category.js +27 -2
- package/dist/lib/attempt/runner.js +25 -5
- package/dist/lib/engine/handlers/ChildrenExecutor.js +36 -6
- package/dist/lib/engine/handlers/DeciderHandler.js +7 -3
- package/dist/lib/engine/handlers/SelectorHandler.js +4 -3
- package/dist/lib/engine/handlers/SubflowExecutor.js +5 -2
- package/dist/lib/engine/handlers/commitStage.js +24 -5
- package/dist/lib/engine/handlers/stageError.js +15 -2
- package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +6 -2
- package/dist/lib/engine/narrative/types.js +1 -1
- package/dist/lib/engine/traversal/FlowchartTraverser.js +12 -4
- package/dist/lib/errors/terminalFailure.js +64 -0
- package/dist/lib/memory/StageContext.js +32 -1
- package/dist/lib/memory/attention.js +175 -0
- package/dist/lib/memory/frameTypes.js +1 -1
- package/dist/lib/recorder/ControlDepRecorder.js +18 -1
- package/dist/lib/runner/FlowChartExecutor.js +163 -127
- package/dist/types/index.d.ts +2 -0
- package/dist/types/lib/attempt/category.d.ts +6 -0
- package/dist/types/lib/attempt/runner.d.ts +3 -1
- package/dist/types/lib/engine/handlers/commitStage.d.ts +7 -0
- package/dist/types/lib/engine/handlers/stageError.d.ts +2 -0
- package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +2 -1
- package/dist/types/lib/engine/narrative/types.d.ts +4 -1
- package/dist/types/lib/errors/terminalFailure.d.ts +29 -0
- package/dist/types/lib/memory/StageContext.d.ts +14 -0
- package/dist/types/lib/memory/attention.d.ts +26 -0
- package/dist/types/lib/memory/frameTypes.d.ts +8 -0
- package/dist/types/lib/recorder/ControlDepRecorder.d.ts +14 -0
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +4 -0
- package/package.json +6 -6
package/dist/types/index.d.ts
CHANGED
|
@@ -48,6 +48,8 @@ export { narrative } from './recorders.js';
|
|
|
48
48
|
export type { DecideRule, DecisionEvidence, DecisionResult, DefaultBranch, FilterOps, RuleEvidence, SelectionEvidence, SelectionResult, WhenClause, WhereFilter, } from './lib/decide/index.js';
|
|
49
49
|
/** @category Decision Branching */
|
|
50
50
|
export { decide, select } from './lib/decide/index.js';
|
|
51
|
+
/** @category Errors */
|
|
52
|
+
export type { TerminalFailureContext } from './lib/errors/terminalFailure.js';
|
|
51
53
|
/**
|
|
52
54
|
* @category Attempts
|
|
53
55
|
*
|
|
@@ -29,3 +29,9 @@ import type { AttemptCategory, AttemptOutcome } from './types.js';
|
|
|
29
29
|
* `'timeout'` (the attempt's own timer) and `'unknown'` (the run's signal) before the error is read.
|
|
30
30
|
*/
|
|
31
31
|
export declare function errorCategory(error: unknown, outcome?: AttemptOutcome): AttemptCategory;
|
|
32
|
+
/**
|
|
33
|
+
* @internal Terminal ownership preserves a producer's known category. An
|
|
34
|
+
* unresolved effect is unknown, never the category of its physical cause.
|
|
35
|
+
* This does not rewrite historical attempt categories or re-read a known one.
|
|
36
|
+
*/
|
|
37
|
+
export declare function terminalCategory(error: unknown, known?: AttemptCategory): AttemptCategory;
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
*/
|
|
64
64
|
import type { StructuredErrorInfo } from '../errors/errorInfo.js';
|
|
65
65
|
import type { EffectTarget } from './effect.js';
|
|
66
|
-
import type { AttemptContext, AttemptKind, AttemptRecord, AttemptSummary, ObservedAttempt, RetryPolicy } from './types.js';
|
|
66
|
+
import type { AttemptCategory, AttemptContext, AttemptKind, AttemptRecord, AttemptSummary, ObservedAttempt, RetryPolicy } from './types.js';
|
|
67
67
|
/** What a series reports, and the engine's between-attempt step. Every member is optional. */
|
|
68
68
|
export interface AttemptRunOptions {
|
|
69
69
|
/** The series every record names — for a stage attempt, its execution's `runtimeStageId`. */
|
|
@@ -95,6 +95,8 @@ export interface AttemptRunOptions {
|
|
|
95
95
|
readonly onRetry?: (attempt: number, of: number, delayMs: number, structuredError: StructuredErrorInfo) => void;
|
|
96
96
|
/** The series ended: called once, before the last `onAttempt` (or after a wait the run's signal cut). */
|
|
97
97
|
readonly onEnd?: (summary: AttemptSummary) => void;
|
|
98
|
+
/** @internal Native owner only: the exact escaping value and category, before its stage serves the error. */
|
|
99
|
+
readonly onFailure?: (error: unknown, category: AttemptCategory) => void;
|
|
98
100
|
/** `retryOn` threw — the attempt is treated as declined; the engine logs the throw here. */
|
|
99
101
|
readonly onRetryOnThrew?: (thrown: unknown) => void;
|
|
100
102
|
/**
|
|
@@ -8,6 +8,13 @@
|
|
|
8
8
|
* outright); it is a stage failure like any other, so `onError` fires for the
|
|
9
9
|
* stage before the error propagates.
|
|
10
10
|
*/
|
|
11
|
+
import type { CommitPhase } from 'foottrace';
|
|
11
12
|
import type { StageContext } from '../../memory/StageContext.js';
|
|
12
13
|
import type { IControlFlowNarrative, TraversalContext } from '../narrative/types.js';
|
|
14
|
+
/**
|
|
15
|
+
* All native stage commits own their exact escaping commit error, including
|
|
16
|
+
* commits while another error or pause was bubbling. Capture safe ownership
|
|
17
|
+
* only; existing diagnostic/event behavior stays with the caller.
|
|
18
|
+
*/
|
|
19
|
+
export declare function commitStageWrites(context: StageContext, phase?: CommitPhase): void;
|
|
13
20
|
export declare function commitStage(context: StageContext, narrative: IControlFlowNarrative, stageName: string, traversalContext?: TraversalContext): void;
|
|
@@ -14,6 +14,8 @@ export declare function recordStageError(context: StageContext, error: unknown):
|
|
|
14
14
|
message: string;
|
|
15
15
|
structuredError: StructuredErrorInfo;
|
|
16
16
|
};
|
|
17
|
+
/** Capture before commit observers or diagnostic serving can change the raw value. */
|
|
18
|
+
export declare function captureStageFailure(context: StageContext, error: unknown): void;
|
|
17
19
|
/** The served form of a thrown value at any other report of a stage failure (retry, throttle). */
|
|
18
20
|
export declare function servedStageError(context: StageContext, error: unknown): StructuredErrorInfo;
|
|
19
21
|
/** What the logger is handed: the thrown value, or its masked form when the policy masked its text. */
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
import type { AttemptRecord } from '../../attempt/types.js';
|
|
14
14
|
import type { DecisionEvidence, SelectionEvidence } from '../../decide/types.js';
|
|
15
15
|
import type { StructuredErrorInfo } from '../../errors/errorInfo.js';
|
|
16
|
+
import type { TerminalFailureContext } from '../../errors/terminalFailure.js';
|
|
16
17
|
import type { FlowRecorder, IControlFlowNarrative, StageType, TraversalContext } from './types.js';
|
|
17
18
|
export declare class FlowRecorderDispatcher implements IControlFlowNarrative {
|
|
18
19
|
private recorders;
|
|
@@ -42,7 +43,7 @@ export declare class FlowRecorderDispatcher implements IControlFlowNarrative {
|
|
|
42
43
|
onResume(stageName: string, stageId: string, hasInput: boolean, traversalContext?: TraversalContext): void;
|
|
43
44
|
onRunStart(input: unknown, traversalContext?: TraversalContext): void;
|
|
44
45
|
onRunEnd(output: unknown, traversalContext?: TraversalContext): void;
|
|
45
|
-
onRunFailed(error: StructuredErrorInfo, traversalContext?: TraversalContext): void;
|
|
46
|
+
onRunFailed(error: StructuredErrorInfo, traversalContext?: TraversalContext, failure?: TerminalFailureContext): void;
|
|
46
47
|
/**
|
|
47
48
|
* Returns sentences from an attached NarrativeFlowRecorder (looked up by ID).
|
|
48
49
|
* Callers that need sentences should attach a NarrativeFlowRecorder with id 'narrative'
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
import type { AttemptRecord, RunCorrelation } from '../../attempt/types.js';
|
|
10
10
|
import type { DecisionEvidence, SelectionEvidence } from '../../decide/types.js';
|
|
11
11
|
import type { StructuredErrorInfo } from '../../errors/errorInfo.js';
|
|
12
|
+
import type { TerminalFailureContext } from '../../errors/terminalFailure.js';
|
|
12
13
|
/**
|
|
13
14
|
*
|
|
14
15
|
* Uses Null Object pattern: NullControlFlowNarrativeGenerator satisfies this
|
|
@@ -131,7 +132,7 @@ export interface IControlFlowNarrative {
|
|
|
131
132
|
* error, so it does not fire this. Subflow-traversers do NOT fire it;
|
|
132
133
|
* their errors propagate to the parent and surface at the top level.
|
|
133
134
|
*/
|
|
134
|
-
onRunFailed(error: StructuredErrorInfo, traversalContext?: TraversalContext): void;
|
|
135
|
+
onRunFailed(error: StructuredErrorInfo, traversalContext?: TraversalContext, failure?: TerminalFailureContext): void;
|
|
135
136
|
/** Returns accumulated narrative sentences in execution order. */
|
|
136
137
|
getSentences(): string[];
|
|
137
138
|
}
|
|
@@ -487,6 +488,8 @@ export interface FlowRunFailedEvent {
|
|
|
487
488
|
/** Structured details of the error that terminated the run. */
|
|
488
489
|
structuredError: StructuredErrorInfo;
|
|
489
490
|
traversalContext?: TraversalContext;
|
|
491
|
+
/** Native terminal ownership, independent of served error details. Absent on legacy manually emitted events. */
|
|
492
|
+
readonly failure?: TerminalFailureContext;
|
|
490
493
|
}
|
|
491
494
|
/**
|
|
492
495
|
* FlowRecorder — Pluggable observer for control flow events.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { AttemptCategory } from '../attempt/types.js';
|
|
2
|
+
/** Safe context for the failure that escaped a native run; never the exception itself. */
|
|
3
|
+
export interface TerminalFailureContext {
|
|
4
|
+
readonly category: AttemptCategory;
|
|
5
|
+
/** Absent when no native stage owns this failure (for example input admission or run retention). */
|
|
6
|
+
readonly stage?: {
|
|
7
|
+
readonly runId: string;
|
|
8
|
+
readonly runtimeStageId: string;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* @internal One execution chain's failure ownership, not an error history.
|
|
13
|
+
* Sequential frames share it; forks and subflows do not. Only an explicitly
|
|
14
|
+
* selected escaping rejection may transfer ownership to its parent chain.
|
|
15
|
+
* Raw identity lives in a private slot and is released when the leg settles.
|
|
16
|
+
*/
|
|
17
|
+
export declare class NativeFailureState {
|
|
18
|
+
#private;
|
|
19
|
+
get result(): TerminalFailureContext | undefined;
|
|
20
|
+
capture(error: unknown, category: AttemptCategory, stage: NonNullable<TerminalFailureContext['stage']>): void;
|
|
21
|
+
/** A runner already classified this exact native failure before it was served. */
|
|
22
|
+
owns(error: unknown): boolean;
|
|
23
|
+
adopt(child: NativeFailureState, error: unknown): void;
|
|
24
|
+
/** Publish at the run event boundary; keep ownership until executor settlement. */
|
|
25
|
+
announce(error: unknown): TerminalFailureContext;
|
|
26
|
+
finish(error: unknown): void;
|
|
27
|
+
/** Success or pause has no terminal failure. Also closes contained branch ownership. */
|
|
28
|
+
complete(): void;
|
|
29
|
+
}
|
|
@@ -15,6 +15,7 @@ import type { CommitPhase, EmitSourcePosition, UntrackedSource } from 'foottrace
|
|
|
15
15
|
import type { EventLog, SharedMemory } from 'foottrace/write';
|
|
16
16
|
import type { AttemptContext, AttemptRecord, AttemptSummary, LateWrite } from '../attempt/types.js';
|
|
17
17
|
import type { StructuredErrorInfo } from '../errors/errorInfo.js';
|
|
18
|
+
import { type TerminalFailureContext, NativeFailureState } from '../errors/terminalFailure.js';
|
|
18
19
|
import { type DiagnosticChannel, DiagnosticCollector } from './DiagnosticCollector.js';
|
|
19
20
|
import type { FlowControlType, StageSnapshot } from './frameTypes.js';
|
|
20
21
|
import type { RedactionVerdict } from './redaction.js';
|
|
@@ -27,6 +28,13 @@ import type { RunPolicy } from './runPolicy.js';
|
|
|
27
28
|
*/
|
|
28
29
|
export declare const MAX_CALL_RECORDS = 1000;
|
|
29
30
|
export declare class StageContext {
|
|
31
|
+
#private;
|
|
32
|
+
/** @internal Ownership of an escaping failure. Shared only by sequential frames, never serialized. */
|
|
33
|
+
failureState: NativeFailureState;
|
|
34
|
+
/** @internal The native frame stamp, independent of mutable recorder event context. */
|
|
35
|
+
get failureIdentity(): NonNullable<TerminalFailureContext['stage']> | undefined;
|
|
36
|
+
/** @internal Stamped before observers; never inherited by another frame or persisted. */
|
|
37
|
+
bindFailureIdentity(runId: string, runtimeStageId: string): void;
|
|
30
38
|
/**
|
|
31
39
|
* The record half of this frame (`RecordFrame.ts`, L3, C3): the heap and,
|
|
32
40
|
* when the run keeps them, the redacted mirror and the log; the address;
|
|
@@ -156,6 +164,8 @@ export declare class StageContext {
|
|
|
156
164
|
private _attempts?;
|
|
157
165
|
/** The attempt series at a glance, stamped once when it ends. */
|
|
158
166
|
private _attemptSummary?;
|
|
167
|
+
/** Facts collected for this execution only; retry discards deliberately keep them. */
|
|
168
|
+
private _attention?;
|
|
159
169
|
/**
|
|
160
170
|
* The attempt now running (P1b) — set by `StageRunner` before the scope is built, so the facade can hand it out
|
|
161
171
|
* (`scope.$attempt()`) and fence its own attempt. Absent for a stage the attempt runner does not run.
|
|
@@ -485,6 +495,10 @@ export declare class StageContext {
|
|
|
485
495
|
recordAttempt(record: AttemptRecord): void;
|
|
486
496
|
/** Stamp the series' summary — once, when the runner ends the series. */
|
|
487
497
|
endAttempts(summary: AttemptSummary): void;
|
|
498
|
+
/** Reset only at the node's execution stamp, never between attempts. */
|
|
499
|
+
beginAttention(): void;
|
|
500
|
+
/** Delegate the explicit retained-error fact; attention owns validation of its proof. */
|
|
501
|
+
markStageFailure(): void;
|
|
488
502
|
/**
|
|
489
503
|
* The crash-safe record (10.1, P6): an attempt that ended is noted in the run's sink AT ONCE, beside this frame's
|
|
490
504
|
* log — so a process killed before the stage commits (mid-retry) still leaves every attempt that ended. The
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** Engine-owned attention is collected with retained facts; snapshots only copy this bounded projection. */
|
|
2
|
+
import type { Attention } from 'foottrace';
|
|
3
|
+
import type { AttemptRecord, AttemptSummary } from '../attempt/types.js';
|
|
4
|
+
/** One execution's ownership, pending summary, marks and omission accounting stay in this helper. */
|
|
5
|
+
export declare class StageAttention {
|
|
6
|
+
private marks?;
|
|
7
|
+
private omitted;
|
|
8
|
+
private retryPossible;
|
|
9
|
+
private summary?;
|
|
10
|
+
private terminal?;
|
|
11
|
+
/** A new execution starts fresh; an attempt discard never calls this. No collection is reconstructed. */
|
|
12
|
+
begin(): void;
|
|
13
|
+
/** Called only after the frame retained this attempt. Raw error, target and decision payloads are never read. */
|
|
14
|
+
recordAttempt(record: AttemptRecord, owner: string): void;
|
|
15
|
+
recordSummary(summary: AttemptSummary): void;
|
|
16
|
+
/** A summary-only cut wait has no phantom final attempt; use its actual retained summary. */
|
|
17
|
+
private projectSummary;
|
|
18
|
+
/** Only the explicit retained stage-error path calls this; a diagnostic value never classifies itself. */
|
|
19
|
+
stageFailed(errors: unknown): void;
|
|
20
|
+
attemptDropped(): void;
|
|
21
|
+
/** Keep only bounded exact references; one slot is reserved to disclose omissions. */
|
|
22
|
+
append(attention: Attention): void;
|
|
23
|
+
missing(): void;
|
|
24
|
+
/** Copy already collected bounded marks, never an attempt array, diagnostic bag or execution tree. */
|
|
25
|
+
snapshot(): readonly Attention[];
|
|
26
|
+
}
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* A `StageSnapshot` is an `ExecutionTree` (`types.ts`), the shape the record's readers walk:
|
|
13
13
|
* `commitStops`, `tagStops` and `keysReadFromExecutionTree` take one.
|
|
14
14
|
*/
|
|
15
|
+
import type { Attention } from 'foottrace';
|
|
15
16
|
import type { AttemptRecord, AttemptSummary, LateWrite } from '../attempt/types.js';
|
|
16
17
|
import type { RetentionPolicy } from '../capture/policies.js';
|
|
17
18
|
/** Types of control flow decisions captured by the execution engine. */
|
|
@@ -123,6 +124,13 @@ export type StageSnapshot = {
|
|
|
123
124
|
* there were none.
|
|
124
125
|
*/
|
|
125
126
|
lateWrites?: readonly LateWrite[];
|
|
127
|
+
/**
|
|
128
|
+
* Fixed-reason marks collected as this execution runs. Absent when no fact needs attention.
|
|
129
|
+
* Attempt evidence uses canonical Foottrace attempt IDs. Summary-only and stage-error proof resolves within THIS node
|
|
130
|
+
* through attemptSummary, errors:stageExecutionError or attemptsDropped. Quality marks are read-time recorder work.
|
|
131
|
+
* Marks retain no error text, values, targets or idempotency keys; omitted proof is disclosed as not-collected.
|
|
132
|
+
*/
|
|
133
|
+
attention?: readonly Attention[];
|
|
126
134
|
next?: StageSnapshot;
|
|
127
135
|
children?: StageSnapshot[];
|
|
128
136
|
};
|
|
@@ -140,6 +140,20 @@ export declare class ControlDepRecorder implements FlowRecorder {
|
|
|
140
140
|
getAttemptStop(runtimeStageId: string): ControlDecisionRecord | undefined;
|
|
141
141
|
/** All decisions recorded for the current run, in event order — deciders, selectors and attempt stops. */
|
|
142
142
|
getDecisions(): ControlDecisionRecord[];
|
|
143
|
+
/**
|
|
144
|
+
* Current-run control evidence for the native snapshot. Project only the
|
|
145
|
+
* stage identities collected during traversal; never walk the execution tree.
|
|
146
|
+
* Parentless roots cannot have a governing control edge.
|
|
147
|
+
*/
|
|
148
|
+
toSnapshot(): {
|
|
149
|
+
name: string;
|
|
150
|
+
data: {
|
|
151
|
+
decisions: ControlDecisionRecord[];
|
|
152
|
+
controlDeps: {
|
|
153
|
+
[k: string]: ControlDependency;
|
|
154
|
+
};
|
|
155
|
+
};
|
|
156
|
+
};
|
|
143
157
|
/** Reset all state (also happens automatically on runId change). */
|
|
144
158
|
clear(): void;
|
|
145
159
|
/** Convention 4: a new runId means a new run — reset transient state. */
|
|
@@ -28,6 +28,7 @@ import type { CombinedNarrativeEntry } from '../engine/narrative/narrativeTypes.
|
|
|
28
28
|
import type { ManifestEntry } from '../engine/narrative/recorders/ManifestFlowRecorder.js';
|
|
29
29
|
import type { FlowRecorder } from '../engine/narrative/types.js';
|
|
30
30
|
import { type ExecutorResult, type RunOptions, type ScopeFactory, type SerializedPipelineStructure, type StageNode, type SubflowResult } from '../engine/types.js';
|
|
31
|
+
import { type TerminalFailureContext } from '../errors/terminalFailure.js';
|
|
31
32
|
import type { ReadTrackingMode, WriteTrackingMode } from '../memory/frameTypes.js';
|
|
32
33
|
import type { FlowchartCheckpoint } from '../pause/types.js';
|
|
33
34
|
import type { CombinedRecorder } from '../recorder/CombinedRecorder.js';
|
|
@@ -64,6 +65,9 @@ export declare class FlowChartExecutor<TOut = any, TScope = any> {
|
|
|
64
65
|
* See docs/guides/execution-model.md.
|
|
65
66
|
*/
|
|
66
67
|
private _isExecuting;
|
|
68
|
+
private failureState;
|
|
69
|
+
/** Safe native context for the latest rejected leg; undefined before, during, after success or pause. */
|
|
70
|
+
getFailureContext(): TerminalFailureContext | undefined;
|
|
67
71
|
private readonly flowChartArgs;
|
|
68
72
|
/**
|
|
69
73
|
* The crash-safe record of the current run (10.1, P6) — the sink every log of the run writes to, its
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "footprintjs",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.2.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",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"node": ">=22"
|
|
39
39
|
},
|
|
40
40
|
"scripts": {
|
|
41
|
-
"clean": "rm -rf build/* coverage dist node_modules
|
|
41
|
+
"clean": "rm -rf build/* coverage dist node_modules",
|
|
42
42
|
"build": "rm -rf dist && tsc && tsc -p tsconfig.esm.json && node scripts/postbuild-esm.mjs",
|
|
43
43
|
"prepare": "husky",
|
|
44
44
|
"watch": "tsc -w",
|
|
@@ -189,7 +189,7 @@
|
|
|
189
189
|
},
|
|
190
190
|
"sideEffects": false,
|
|
191
191
|
"dependencies": {
|
|
192
|
-
"foottrace": "^1.
|
|
192
|
+
"foottrace": "^1.3.0"
|
|
193
193
|
},
|
|
194
194
|
"peerDependencies": {
|
|
195
195
|
"zod": "^3.0.0 || ^4.0.0"
|
|
@@ -201,12 +201,12 @@
|
|
|
201
201
|
},
|
|
202
202
|
"devDependencies": {
|
|
203
203
|
"@arethetypeswrong/cli": "^0.18.1",
|
|
204
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
205
|
-
"@typescript-eslint/parser": "^
|
|
204
|
+
"@typescript-eslint/eslint-plugin": "^8.71.2",
|
|
205
|
+
"@typescript-eslint/parser": "^8.71.2",
|
|
206
206
|
"@vitest/coverage-v8": "^4.1.8",
|
|
207
207
|
"concurrently": "^8.0.1",
|
|
208
208
|
"esbuild": "^0.28.0",
|
|
209
|
-
"eslint": "^8.
|
|
209
|
+
"eslint": "^8.57.1",
|
|
210
210
|
"eslint-config-prettier": "^6.15.0",
|
|
211
211
|
"eslint-config-standard": "^17.0.0",
|
|
212
212
|
"eslint-import-resolver-typescript": "^3.5.2",
|