footprintjs 10.0.1 → 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/AGENTS.md +2 -1
- package/CLAUDE.md +61 -7
- package/README.md +136 -312
- package/dist/esm/index.d.ts +62 -2
- package/dist/esm/index.js +13 -6
- package/dist/esm/lib/attempt/anySignal.d.ts +19 -0
- package/dist/esm/lib/attempt/anySignal.js +39 -0
- package/dist/esm/lib/attempt/call.d.ts +88 -0
- package/dist/esm/lib/attempt/call.js +129 -0
- package/dist/esm/lib/attempt/category.d.ts +37 -0
- package/dist/esm/lib/attempt/category.js +131 -0
- package/dist/esm/lib/attempt/correlation.d.ts +95 -0
- package/dist/esm/lib/attempt/correlation.js +178 -0
- package/dist/esm/lib/attempt/deadline.d.ts +44 -0
- package/dist/esm/lib/attempt/deadline.js +101 -0
- package/dist/esm/lib/attempt/decision.d.ts +52 -0
- package/dist/esm/lib/attempt/decision.js +134 -0
- package/dist/esm/lib/attempt/effect.d.ts +76 -0
- package/dist/esm/lib/attempt/effect.js +160 -0
- package/dist/esm/lib/attempt/errors.d.ts +41 -0
- package/dist/esm/lib/attempt/errors.js +44 -0
- package/dist/esm/lib/attempt/index.d.ts +18 -0
- package/dist/esm/lib/attempt/index.js +15 -0
- package/dist/esm/lib/attempt/name.d.ts +21 -0
- package/dist/esm/lib/attempt/name.js +43 -0
- package/dist/esm/lib/attempt/observed.d.ts +66 -0
- package/dist/esm/lib/attempt/observed.js +171 -0
- package/dist/esm/lib/attempt/policy.d.ts +45 -0
- package/dist/esm/lib/attempt/policy.js +83 -0
- package/dist/esm/lib/attempt/record.d.ts +11 -0
- package/dist/esm/lib/attempt/record.js +24 -0
- package/dist/esm/lib/attempt/retryLoopContext.d.ts +18 -0
- package/dist/esm/lib/attempt/retryLoopContext.js +24 -0
- package/dist/esm/lib/attempt/retryLoopTypes.d.ts +18 -0
- package/dist/esm/lib/attempt/retryLoopTypes.js +2 -0
- package/dist/esm/lib/attempt/runner.d.ts +157 -0
- package/dist/esm/lib/attempt/runner.js +523 -0
- package/dist/esm/lib/attempt/standalone.d.ts +47 -0
- package/dist/esm/lib/attempt/standalone.js +126 -0
- package/dist/esm/lib/attempt/types.d.ts +453 -0
- package/dist/esm/lib/attempt/types.js +16 -0
- package/dist/esm/lib/budget/index.d.ts +9 -0
- package/dist/esm/lib/budget/index.js +9 -0
- package/dist/esm/lib/budget/timeBudget.d.ts +136 -0
- package/dist/esm/lib/budget/timeBudget.js +666 -0
- package/dist/esm/lib/builder/FlowChartBuilder.d.ts +88 -3
- package/dist/esm/lib/builder/FlowChartBuilder.js +199 -9
- package/dist/esm/lib/builder/retryLoop.d.ts +56 -0
- package/dist/esm/lib/builder/retryLoop.js +283 -0
- package/dist/esm/lib/builder/types.d.ts +35 -1
- package/dist/esm/lib/builder/types.js +1 -1
- package/dist/esm/lib/decide/decide.js +2 -2
- package/dist/esm/lib/decide/index.d.ts +1 -1
- package/dist/esm/lib/decide/index.js +2 -2
- package/dist/esm/lib/decide/types.d.ts +3 -0
- package/dist/esm/lib/decide/types.js +1 -8
- package/dist/esm/lib/engine/graph/StageNode.d.ts +11 -1
- package/dist/esm/lib/engine/graph/StageNode.js +1 -1
- package/dist/esm/lib/engine/graph/prefixNodeTree.js +5 -1
- 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/ResumeEntry.js +3 -1
- package/dist/esm/lib/engine/handlers/SelectorHandler.js +6 -5
- package/dist/esm/lib/engine/handlers/StageRunner.d.ts +8 -1
- package/dist/esm/lib/engine/handlers/StageRunner.js +36 -9
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +24 -5
- 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 +9 -0
- package/dist/esm/lib/engine/handlers/stageError.js +23 -1
- package/dist/esm/lib/engine/index.d.ts +2 -2
- package/dist/esm/lib/engine/index.js +1 -1
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +27 -13
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +68 -40
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.d.ts +4 -1
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +19 -2
- package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.d.ts +22 -3
- package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.js +61 -9
- package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +1 -0
- package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
- package/dist/esm/lib/engine/narrative/formatting/sentences.d.ts +23 -0
- package/dist/esm/lib/engine/narrative/formatting/sentences.js +127 -1
- package/dist/esm/lib/engine/narrative/index.d.ts +2 -2
- package/dist/esm/lib/engine/narrative/index.js +1 -1
- package/dist/esm/lib/engine/narrative/narrativeTypes.d.ts +27 -21
- package/dist/esm/lib/engine/narrative/narrativeTypes.js +1 -1
- package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.d.ts +45 -2
- package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.js +55 -2
- package/dist/esm/lib/engine/narrative/recorders/index.d.ts +1 -1
- package/dist/esm/lib/engine/narrative/recorders/index.js +1 -1
- package/dist/esm/lib/engine/narrative/types.d.ts +74 -5
- package/dist/esm/lib/engine/narrative/types.js +1 -1
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +59 -19
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +194 -118
- package/dist/esm/lib/engine/traversalContext.d.ts +7 -2
- package/dist/esm/lib/engine/traversalContext.js +6 -3
- package/dist/esm/lib/engine/types.d.ts +52 -57
- package/dist/esm/lib/engine/types.js +1 -1
- package/dist/esm/lib/errors/terminalFailure.d.ts +29 -0
- package/dist/esm/lib/errors/terminalFailure.js +60 -0
- package/dist/esm/lib/{decide → filter}/evaluator.d.ts +7 -2
- package/dist/esm/lib/filter/evaluator.js +135 -0
- package/dist/esm/lib/ids/idempotencyKey.d.ts +14 -0
- package/dist/esm/lib/ids/idempotencyKey.js +24 -0
- package/dist/esm/lib/memory/StageContext.d.ts +123 -3
- package/dist/esm/lib/memory/StageContext.js +245 -4
- package/dist/esm/lib/memory/attention.d.ts +26 -0
- package/dist/esm/lib/memory/attention.js +171 -0
- package/dist/esm/lib/memory/borrowedMutation.d.ts +8 -0
- package/dist/esm/lib/memory/borrowedMutation.js +14 -1
- package/dist/esm/lib/memory/frameTypes.d.ts +38 -0
- package/dist/esm/lib/memory/frameTypes.js +3 -1
- package/dist/esm/lib/memory/redaction.d.ts +12 -0
- package/dist/esm/lib/memory/redaction.js +54 -5
- package/dist/esm/lib/pause/record.js +10 -1
- package/dist/esm/lib/pause/types.d.ts +19 -0
- package/dist/esm/lib/pause/types.js +17 -1
- package/dist/esm/lib/reactive/createTypedScope.js +3 -1
- package/dist/esm/lib/reactive/types.d.ts +36 -4
- package/dist/esm/lib/reactive/types.js +3 -1
- package/dist/esm/lib/recorder/AttemptRecorder.d.ts +141 -0
- package/dist/esm/lib/recorder/AttemptRecorder.js +412 -0
- package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +36 -2
- package/dist/esm/lib/recorder/ControlDepRecorder.js +50 -2
- package/dist/esm/lib/recorder/EmitRecorder.d.ts +3 -0
- package/dist/esm/lib/recorder/EmitRecorder.js +1 -1
- package/dist/esm/lib/recorder/InOutRecorder.d.ts +37 -1
- package/dist/esm/lib/recorder/InOutRecorder.js +75 -6
- package/dist/esm/lib/recorder/QualityRecorder.d.ts +32 -5
- package/dist/esm/lib/recorder/QualityRecorder.js +87 -29
- package/dist/esm/lib/recorder/TopologyRecorder.d.ts +35 -5
- package/dist/esm/lib/recorder/TopologyRecorder.js +76 -2
- package/dist/esm/lib/recorder/attemptMetricRows.d.ts +11 -0
- package/dist/esm/lib/recorder/attemptMetricRows.js +202 -0
- package/dist/esm/lib/recorder/attemptMetrics.d.ts +7 -0
- package/dist/esm/lib/recorder/attemptMetrics.js +165 -0
- package/dist/esm/lib/recorder/attemptMetricsTypes.d.ts +114 -0
- package/dist/esm/lib/recorder/attemptMetricsTypes.js +2 -0
- package/dist/esm/lib/recorder/attemptOTel.d.ts +78 -0
- package/dist/esm/lib/recorder/attemptOTel.js +107 -0
- package/dist/esm/lib/recorder/attemptSeries.d.ts +81 -0
- package/dist/esm/lib/recorder/attemptSeries.js +103 -0
- package/dist/esm/lib/recorder/hooks.d.ts +9 -0
- package/dist/esm/lib/recorder/hooks.js +4 -1
- package/dist/esm/lib/runner/DeferredObserverTier.js +13 -1
- package/dist/esm/lib/runner/ExecutionRuntime.d.ts +54 -6
- package/dist/esm/lib/runner/ExecutionRuntime.js +57 -5
- package/dist/esm/lib/runner/FlowChartExecutor.d.ts +46 -2
- package/dist/esm/lib/runner/FlowChartExecutor.js +330 -101
- package/dist/esm/lib/runner/RunnableChart.d.ts +6 -0
- package/dist/esm/lib/runner/RunnableChart.js +5 -1
- package/dist/esm/lib/runner/attach.d.ts +2 -1
- package/dist/esm/lib/runner/attach.js +8 -2
- package/dist/esm/lib/runner/checkpoint.js +3 -1
- package/dist/esm/lib/runner/deadline.d.ts +42 -0
- package/dist/esm/lib/runner/deadline.js +90 -0
- package/dist/esm/lib/runner/index.d.ts +3 -1
- package/dist/esm/lib/runner/index.js +2 -1
- package/dist/esm/lib/runner/options.d.ts +17 -0
- package/dist/esm/lib/runner/options.js +3 -1
- package/dist/esm/lib/runner/recordSink.d.ts +128 -0
- package/dist/esm/lib/runner/recordSink.js +296 -0
- package/dist/esm/lib/runner/resume.d.ts +3 -0
- package/dist/esm/lib/runner/resume.js +22 -2
- package/dist/esm/lib/runner/snapshot.d.ts +2 -2
- package/dist/esm/lib/runner/snapshot.js +6 -2
- package/dist/esm/lib/scope/ScopeFacade.d.ts +118 -4
- package/dist/esm/lib/scope/ScopeFacade.js +304 -7
- package/dist/esm/lib/scope/recorders/DebugRecorder.d.ts +17 -3
- package/dist/esm/lib/scope/recorders/DebugRecorder.js +79 -13
- package/dist/esm/lib/scope/recorders/MetricRecorder.d.ts +10 -0
- package/dist/esm/lib/scope/recorders/MetricRecorder.js +15 -2
- package/dist/esm/lib/scope/runtime.d.ts +3 -0
- package/dist/esm/lib/scope/runtime.js +1 -1
- package/dist/esm/lib/scope/types.d.ts +6 -0
- package/dist/esm/lib/scope/types.js +1 -1
- package/dist/esm/lib/sinks/fileSink.d.ts +135 -0
- package/dist/esm/lib/sinks/fileSink.js +387 -0
- package/dist/esm/recorders.d.ts +8 -2
- package/dist/esm/recorders.js +7 -1
- package/dist/esm/sinks.d.ts +23 -0
- package/dist/esm/sinks.js +23 -0
- package/dist/esm/trace.d.ts +2 -2
- package/dist/esm/trace.js +1 -1
- package/dist/index.js +77 -60
- package/dist/lib/attempt/anySignal.js +43 -0
- package/dist/lib/attempt/call.js +134 -0
- package/dist/lib/attempt/category.js +136 -0
- package/dist/lib/attempt/correlation.js +186 -0
- package/dist/lib/attempt/deadline.js +112 -0
- package/dist/lib/attempt/decision.js +139 -0
- package/dist/lib/attempt/effect.js +174 -0
- package/dist/lib/attempt/errors.js +49 -0
- package/dist/lib/attempt/index.js +26 -0
- package/dist/lib/attempt/name.js +48 -0
- package/dist/lib/attempt/observed.js +177 -0
- package/dist/lib/attempt/policy.js +92 -0
- package/dist/lib/attempt/record.js +29 -0
- package/dist/lib/attempt/retryLoopContext.js +31 -0
- package/dist/lib/attempt/retryLoopTypes.js +3 -0
- package/dist/lib/attempt/runner.js +530 -0
- package/dist/lib/attempt/standalone.js +130 -0
- package/dist/lib/attempt/types.js +17 -0
- package/dist/lib/budget/index.js +17 -0
- package/dist/lib/budget/timeBudget.js +674 -0
- package/dist/lib/builder/FlowChartBuilder.js +199 -9
- package/dist/lib/builder/retryLoop.js +287 -0
- package/dist/lib/builder/types.js +1 -1
- package/dist/lib/decide/decide.js +2 -2
- package/dist/lib/decide/index.js +2 -2
- package/dist/lib/decide/types.js +1 -8
- package/dist/lib/engine/graph/StageNode.js +1 -1
- package/dist/lib/engine/graph/prefixNodeTree.js +5 -1
- package/dist/lib/engine/handlers/ChildrenExecutor.js +36 -6
- package/dist/lib/engine/handlers/DeciderHandler.js +7 -3
- package/dist/lib/engine/handlers/ResumeEntry.js +3 -1
- package/dist/lib/engine/handlers/SelectorHandler.js +4 -3
- package/dist/lib/engine/handlers/StageRunner.js +36 -9
- package/dist/lib/engine/handlers/SubflowExecutor.js +24 -5
- package/dist/lib/engine/handlers/commitStage.js +24 -5
- package/dist/lib/engine/handlers/stageError.js +26 -2
- package/dist/lib/engine/index.js +1 -1
- package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +67 -39
- package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +19 -2
- package/dist/lib/engine/narrative/NarrativeFlowRecorder.js +60 -8
- package/dist/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
- package/dist/lib/engine/narrative/formatting/sentences.js +131 -2
- package/dist/lib/engine/narrative/index.js +1 -1
- package/dist/lib/engine/narrative/narrativeTypes.js +1 -1
- package/dist/lib/engine/narrative/recorders/ManifestFlowRecorder.js +55 -2
- package/dist/lib/engine/narrative/recorders/index.js +1 -1
- package/dist/lib/engine/narrative/types.js +1 -1
- package/dist/lib/engine/traversal/FlowchartTraverser.js +192 -116
- package/dist/lib/engine/traversalContext.js +6 -3
- package/dist/lib/engine/types.js +1 -1
- package/dist/lib/errors/terminalFailure.js +64 -0
- package/dist/lib/filter/evaluator.js +139 -0
- package/dist/lib/ids/idempotencyKey.js +28 -0
- package/dist/lib/memory/StageContext.js +246 -5
- package/dist/lib/memory/attention.js +175 -0
- package/dist/lib/memory/borrowedMutation.js +16 -2
- package/dist/lib/memory/frameTypes.js +3 -1
- package/dist/lib/memory/redaction.js +54 -5
- package/dist/lib/pause/record.js +10 -1
- package/dist/lib/pause/types.js +17 -1
- package/dist/lib/reactive/createTypedScope.js +3 -1
- package/dist/lib/reactive/types.js +3 -1
- package/dist/lib/recorder/AttemptRecorder.js +417 -0
- package/dist/lib/recorder/ControlDepRecorder.js +50 -2
- package/dist/lib/recorder/EmitRecorder.js +1 -1
- package/dist/lib/recorder/InOutRecorder.js +75 -6
- package/dist/lib/recorder/QualityRecorder.js +87 -29
- package/dist/lib/recorder/TopologyRecorder.js +76 -2
- package/dist/lib/recorder/attemptMetricRows.js +209 -0
- package/dist/lib/recorder/attemptMetrics.js +174 -0
- package/dist/lib/recorder/attemptMetricsTypes.js +3 -0
- package/dist/lib/recorder/attemptOTel.js +111 -0
- package/dist/lib/recorder/attemptSeries.js +113 -0
- package/dist/lib/recorder/hooks.js +4 -1
- package/dist/lib/runner/DeferredObserverTier.js +13 -1
- package/dist/lib/runner/ExecutionRuntime.js +57 -5
- package/dist/lib/runner/FlowChartExecutor.js +330 -101
- package/dist/lib/runner/RunnableChart.js +5 -1
- package/dist/lib/runner/attach.js +8 -2
- package/dist/lib/runner/checkpoint.js +3 -1
- package/dist/lib/runner/deadline.js +94 -0
- package/dist/lib/runner/index.js +4 -2
- package/dist/lib/runner/options.js +3 -1
- package/dist/lib/runner/recordSink.js +302 -0
- package/dist/lib/runner/resume.js +22 -2
- package/dist/lib/runner/snapshot.js +6 -2
- package/dist/lib/scope/ScopeFacade.js +303 -6
- package/dist/lib/scope/recorders/DebugRecorder.js +79 -13
- package/dist/lib/scope/recorders/MetricRecorder.js +15 -2
- package/dist/lib/scope/runtime.js +1 -1
- package/dist/lib/scope/types.js +1 -1
- package/dist/lib/sinks/fileSink.js +392 -0
- package/dist/recorders.js +10 -2
- package/dist/sinks.js +32 -0
- package/dist/trace.js +1 -1
- package/dist/types/index.d.ts +62 -2
- package/dist/types/lib/attempt/anySignal.d.ts +19 -0
- package/dist/types/lib/attempt/call.d.ts +88 -0
- package/dist/types/lib/attempt/category.d.ts +37 -0
- package/dist/types/lib/attempt/correlation.d.ts +95 -0
- package/dist/types/lib/attempt/deadline.d.ts +44 -0
- package/dist/types/lib/attempt/decision.d.ts +52 -0
- package/dist/types/lib/attempt/effect.d.ts +76 -0
- package/dist/types/lib/attempt/errors.d.ts +41 -0
- package/dist/types/lib/attempt/index.d.ts +18 -0
- package/dist/types/lib/attempt/name.d.ts +21 -0
- package/dist/types/lib/attempt/observed.d.ts +66 -0
- package/dist/types/lib/attempt/policy.d.ts +45 -0
- package/dist/types/lib/attempt/record.d.ts +11 -0
- package/dist/types/lib/attempt/retryLoopContext.d.ts +18 -0
- package/dist/types/lib/attempt/retryLoopTypes.d.ts +18 -0
- package/dist/types/lib/attempt/runner.d.ts +157 -0
- package/dist/types/lib/attempt/standalone.d.ts +47 -0
- package/dist/types/lib/attempt/types.d.ts +453 -0
- package/dist/types/lib/budget/index.d.ts +9 -0
- package/dist/types/lib/budget/timeBudget.d.ts +136 -0
- package/dist/types/lib/builder/FlowChartBuilder.d.ts +88 -3
- package/dist/types/lib/builder/retryLoop.d.ts +56 -0
- package/dist/types/lib/builder/types.d.ts +35 -1
- package/dist/types/lib/decide/index.d.ts +1 -1
- package/dist/types/lib/decide/types.d.ts +3 -0
- package/dist/types/lib/engine/graph/StageNode.d.ts +11 -1
- package/dist/types/lib/engine/handlers/StageRunner.d.ts +8 -1
- package/dist/types/lib/engine/handlers/commitStage.d.ts +7 -0
- package/dist/types/lib/engine/handlers/stageError.d.ts +9 -0
- package/dist/types/lib/engine/index.d.ts +2 -2
- package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +27 -13
- package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +4 -1
- package/dist/types/lib/engine/narrative/NarrativeFlowRecorder.d.ts +22 -3
- package/dist/types/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +1 -0
- package/dist/types/lib/engine/narrative/formatting/sentences.d.ts +23 -0
- package/dist/types/lib/engine/narrative/index.d.ts +2 -2
- package/dist/types/lib/engine/narrative/narrativeTypes.d.ts +27 -21
- package/dist/types/lib/engine/narrative/recorders/ManifestFlowRecorder.d.ts +45 -2
- package/dist/types/lib/engine/narrative/recorders/index.d.ts +1 -1
- package/dist/types/lib/engine/narrative/types.d.ts +74 -5
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +59 -19
- package/dist/types/lib/engine/traversalContext.d.ts +7 -2
- package/dist/types/lib/engine/types.d.ts +52 -57
- package/dist/types/lib/errors/terminalFailure.d.ts +29 -0
- package/dist/types/lib/{decide → filter}/evaluator.d.ts +7 -2
- package/dist/types/lib/ids/idempotencyKey.d.ts +14 -0
- package/dist/types/lib/memory/StageContext.d.ts +123 -3
- package/dist/types/lib/memory/attention.d.ts +26 -0
- package/dist/types/lib/memory/borrowedMutation.d.ts +8 -0
- package/dist/types/lib/memory/frameTypes.d.ts +38 -0
- package/dist/types/lib/memory/redaction.d.ts +12 -0
- package/dist/types/lib/pause/types.d.ts +19 -0
- package/dist/types/lib/reactive/types.d.ts +36 -4
- package/dist/types/lib/recorder/AttemptRecorder.d.ts +141 -0
- package/dist/types/lib/recorder/ControlDepRecorder.d.ts +36 -2
- package/dist/types/lib/recorder/EmitRecorder.d.ts +3 -0
- package/dist/types/lib/recorder/InOutRecorder.d.ts +37 -1
- package/dist/types/lib/recorder/QualityRecorder.d.ts +32 -5
- package/dist/types/lib/recorder/TopologyRecorder.d.ts +35 -5
- package/dist/types/lib/recorder/attemptMetricRows.d.ts +11 -0
- package/dist/types/lib/recorder/attemptMetrics.d.ts +7 -0
- package/dist/types/lib/recorder/attemptMetricsTypes.d.ts +114 -0
- package/dist/types/lib/recorder/attemptOTel.d.ts +78 -0
- package/dist/types/lib/recorder/attemptSeries.d.ts +81 -0
- package/dist/types/lib/recorder/hooks.d.ts +9 -0
- package/dist/types/lib/runner/ExecutionRuntime.d.ts +54 -6
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +46 -2
- package/dist/types/lib/runner/RunnableChart.d.ts +6 -0
- package/dist/types/lib/runner/attach.d.ts +2 -1
- package/dist/types/lib/runner/deadline.d.ts +42 -0
- package/dist/types/lib/runner/index.d.ts +3 -1
- package/dist/types/lib/runner/options.d.ts +17 -0
- package/dist/types/lib/runner/recordSink.d.ts +128 -0
- package/dist/types/lib/runner/resume.d.ts +3 -0
- package/dist/types/lib/runner/snapshot.d.ts +2 -2
- package/dist/types/lib/scope/ScopeFacade.d.ts +118 -4
- package/dist/types/lib/scope/recorders/DebugRecorder.d.ts +17 -3
- package/dist/types/lib/scope/recorders/MetricRecorder.d.ts +10 -0
- package/dist/types/lib/scope/runtime.d.ts +3 -0
- package/dist/types/lib/scope/types.d.ts +6 -0
- package/dist/types/lib/sinks/fileSink.d.ts +135 -0
- package/dist/types/recorders.d.ts +8 -2
- package/dist/types/sinks.d.ts +23 -0
- package/dist/types/trace.d.ts +2 -2
- package/package.json +20 -6
- package/dist/esm/lib/decide/evaluator.js +0 -130
- package/dist/lib/decide/evaluator.js +0 -134
|
@@ -11,10 +11,11 @@
|
|
|
11
11
|
* The execute() convenience method is intentionally omitted —
|
|
12
12
|
* it belongs in the runner layer (Phase 5).
|
|
13
13
|
*/
|
|
14
|
-
import type { ParallelForEachConfig, RetryPolicy, ScopeFactory } from '../engine/types.js';
|
|
14
|
+
import type { ParallelForEachConfig, RetryPolicy, ScopeFactory, StageTouches } from '../engine/types.js';
|
|
15
15
|
import type { PausableHandler } from '../pause/types.js';
|
|
16
16
|
import type { TypedScope } from '../reactive/types.js';
|
|
17
17
|
import { type RunnableFlowChart } from '../runner/RunnableChart.js';
|
|
18
|
+
import type { RetryLoopOptions } from './retryLoop.js';
|
|
18
19
|
import type { StructureEdgeKind, StructureRecorder } from './structure/StructureRecorder.js';
|
|
19
20
|
import { StructureRecorderDispatcher } from './structure/StructureRecorderDispatcher.js';
|
|
20
21
|
import { type TypedStageFunction } from './typedFlowChart.js';
|
|
@@ -35,6 +36,7 @@ export declare class DeciderList<TOut = any, TScope = any> {
|
|
|
35
36
|
options?: {
|
|
36
37
|
readonly loopTo?: string;
|
|
37
38
|
readonly retry?: RetryPolicy;
|
|
39
|
+
readonly touches?: StageTouches;
|
|
38
40
|
readonly tags?: readonly string[];
|
|
39
41
|
}): DeciderList<TOut, TScope>;
|
|
40
42
|
/**
|
|
@@ -54,6 +56,7 @@ export declare class DeciderList<TOut = any, TScope = any> {
|
|
|
54
56
|
options?: {
|
|
55
57
|
readonly loopTo?: string;
|
|
56
58
|
readonly retry?: RetryPolicy;
|
|
59
|
+
readonly touches?: StageTouches;
|
|
57
60
|
readonly tags?: readonly string[];
|
|
58
61
|
}): DeciderList<TOut, TScope>;
|
|
59
62
|
addSubFlowChartBranch(id: string, subflow: FlowChart<any, any>, mountName?: string, options?: SubflowMountOptions): DeciderList<TOut, TScope>;
|
|
@@ -107,6 +110,7 @@ export declare class SelectorFnList<TOut = any, TScope = any> {
|
|
|
107
110
|
* `{ tags }` puts declared tags on it (see `FlowChartBuilder.tag`). */
|
|
108
111
|
options?: {
|
|
109
112
|
readonly retry?: RetryPolicy;
|
|
113
|
+
readonly touches?: StageTouches;
|
|
110
114
|
readonly tags?: readonly string[];
|
|
111
115
|
}): SelectorFnList<TOut, TScope>;
|
|
112
116
|
/**
|
|
@@ -122,6 +126,7 @@ export declare class SelectorFnList<TOut = any, TScope = any> {
|
|
|
122
126
|
* contract); `{ tags }` puts declared tags on it. */
|
|
123
127
|
options?: {
|
|
124
128
|
readonly retry?: RetryPolicy;
|
|
129
|
+
readonly touches?: StageTouches;
|
|
125
130
|
readonly tags?: readonly string[];
|
|
126
131
|
}): SelectorFnList<TOut, TScope>;
|
|
127
132
|
addSubFlowChartBranch(id: string, subflow: FlowChart<any, any>, mountName?: string, options?: SubflowMountOptions): SelectorFnList<TOut, TScope>;
|
|
@@ -286,6 +291,7 @@ export declare class FlowChartBuilder<TOut = any, TScope = any> {
|
|
|
286
291
|
}): this;
|
|
287
292
|
start(name: string, fn: StageFunction<TOut, TScope> | PausableHandler<TScope>, id: string, description?: string, options?: {
|
|
288
293
|
retry?: RetryPolicy;
|
|
294
|
+
touches?: StageTouches;
|
|
289
295
|
tags?: readonly string[];
|
|
290
296
|
}): this;
|
|
291
297
|
/**
|
|
@@ -303,9 +309,12 @@ export declare class FlowChartBuilder<TOut = any, TScope = any> {
|
|
|
303
309
|
startSelector(name: string, fn: StageFunction<any, TScope>, id: string, description?: string, options?: {
|
|
304
310
|
failFast?: boolean;
|
|
305
311
|
retry?: RetryPolicy;
|
|
312
|
+
touches?: StageTouches;
|
|
306
313
|
tags?: readonly string[];
|
|
307
314
|
}): SelectorFnList<TOut, TScope>;
|
|
308
315
|
addFunction(name: string, fn: StageFunction<TOut, TScope>, id: string, description?: string): this;
|
|
316
|
+
/** Compose a keyed outside operation, reconciliation, shared retry decision and wait as ordinary chart nodes. */
|
|
317
|
+
addRetryLoop<TValue = unknown>(id: string, options: RetryLoopOptions<TScope, TValue>): this;
|
|
309
318
|
addStreamingFunction(name: string, fn: StageFunction<TOut, TScope>, id: string, streamId?: string, description?: string): this;
|
|
310
319
|
/**
|
|
311
320
|
* Add a pausable stage — can pause execution and resume later with input.
|
|
@@ -417,6 +426,7 @@ export declare class FlowChartBuilder<TOut = any, TScope = any> {
|
|
|
417
426
|
* `{ tags }` likewise. */
|
|
418
427
|
options?: {
|
|
419
428
|
retry?: RetryPolicy;
|
|
429
|
+
touches?: StageTouches;
|
|
420
430
|
tags?: readonly string[];
|
|
421
431
|
}): DeciderList<TOut, TScope>;
|
|
422
432
|
addSelectorFunction(name: string, fn: StageFunction<any, TScope>, id: string, description?: string,
|
|
@@ -426,6 +436,7 @@ export declare class FlowChartBuilder<TOut = any, TScope = any> {
|
|
|
426
436
|
options?: {
|
|
427
437
|
failFast?: boolean;
|
|
428
438
|
retry?: RetryPolicy;
|
|
439
|
+
touches?: StageTouches;
|
|
429
440
|
tags?: readonly string[];
|
|
430
441
|
}): SelectorFnList<TOut, TScope>;
|
|
431
442
|
addListOfFunction(children: SimplifiedParallelSpec<TOut, TScope>[], options?: {
|
|
@@ -489,8 +500,13 @@ export declare class FlowChartBuilder<TOut = any, TScope = any> {
|
|
|
489
500
|
* failed calls that came before the successful one left no mark anywhere —
|
|
490
501
|
* an unexplained behaviour in a library whose whole point is that nothing
|
|
491
502
|
* invisible happens. Declared here, every attempt is part of the record: each
|
|
492
|
-
*
|
|
493
|
-
*
|
|
503
|
+
* attempt fires `FlowRecorder.onAttempt` with its `AttemptRecord` (outcome,
|
|
504
|
+
* duration, failure category, the retry-or-stop decision), which is what
|
|
505
|
+
* feeds the narrative — one line per attempt, in order, between the
|
|
506
|
+
* attempts' own reads and writes. The stage's execution-tree node keeps the
|
|
507
|
+
* records (`attempts`, `attemptSummary`). A failed attempt that is retried
|
|
508
|
+
* also fires `FlowRecorder.onStageRetry`, which the narrative does not tell
|
|
509
|
+
* twice.
|
|
494
510
|
*
|
|
495
511
|
* ## What an attempt is
|
|
496
512
|
*
|
|
@@ -518,6 +534,46 @@ export declare class FlowChartBuilder<TOut = any, TScope = any> {
|
|
|
518
534
|
* `retry` option instead.
|
|
519
535
|
*/
|
|
520
536
|
retry(policy: RetryPolicy): this;
|
|
537
|
+
/**
|
|
538
|
+
* Declare that the stage you JUST added changes an outside system — a charge, an email, a write to another
|
|
539
|
+
* service (10.1, design §3.3) — and give the rule for its idempotency key.
|
|
540
|
+
*
|
|
541
|
+
* ## Why declare it
|
|
542
|
+
*
|
|
543
|
+
* A retry is safe for a read. For a charge it is safe only when the outside system can tell a retry from a new
|
|
544
|
+
* request — by an idempotency key. So the builder refuses a touching stage that may retry (`.retry({ attempts >
|
|
545
|
+
* 1 })`, in either order) without a key rule: a double charge must be impossible to write by accident. A default
|
|
546
|
+
* key made by the library was rejected — the run id changes across a resume and a caller's whole-run retry, the
|
|
547
|
+
* two places a double charge actually happens. The key must name the OPERATION: derive it from the input the rule
|
|
548
|
+
* is handed, never from model output (`({ getState }) => …` reads it from state). A
|
|
549
|
+
* keyless touching stage may not `interrupt()`: a resume re-runs it from its top. In a chart that pauses, derive
|
|
550
|
+
* keys from state (`({ getState }) => …`): the run's input does not cross a resume.
|
|
551
|
+
*
|
|
552
|
+
* ## What it changes at run time
|
|
553
|
+
*
|
|
554
|
+
* The stage always runs on the attempt runner. The key rule runs ONCE per execution, before attempt 1, and every
|
|
555
|
+
* attempt gets the key as `scope.$attempt().idempotencyKey` — pass it to the system. Every attempt record says
|
|
556
|
+
* what it did there (`effect`: `'applied'`, `'none'` when the error itself declares `effect: 'none'`, else
|
|
557
|
+
* `'unknown'`). When ANY attempt left the effect unknown — it timed out, was cut, or failed without the adapter
|
|
558
|
+
* saying nothing was sent — the stage fails with `UnknownEffectError`: reconcile with the system by the key, do
|
|
559
|
+
* not retry blindly. The spec carries the system's name (`touches`).
|
|
560
|
+
*
|
|
561
|
+
* @example
|
|
562
|
+
* ```ts
|
|
563
|
+
* flowChart<Order>('Load order', loadFn, 'load')
|
|
564
|
+
* .addFunction('Charge card', chargeFn, 'charge')
|
|
565
|
+
* .touches('stripe', { idempotencyKey: ({ args }) => `order-${(args as { orderId: string }).orderId}` })
|
|
566
|
+
* .retry({ attempts: 3, timeoutMs: 20_000 })
|
|
567
|
+
* ```
|
|
568
|
+
*
|
|
569
|
+
* Applies to the CURRENT cursor, like `.retry()`; where the cursor would be ambiguous (a decider, selector,
|
|
570
|
+
* branch, or fork child), declare it in that method's own `touches` option. Refused: on a subflow mount, a
|
|
571
|
+
* parallel-for-each stage or a loop reference (no function of their own), after a mount or a fork (the cursor did
|
|
572
|
+
* not move), twice, with a system that is not a name, and with a key that is not a function.
|
|
573
|
+
*/
|
|
574
|
+
touches(system: string, options?: {
|
|
575
|
+
readonly idempotencyKey?: StageTouches['idempotencyKey'];
|
|
576
|
+
}): this;
|
|
521
577
|
/**
|
|
522
578
|
* Put NAMES on the stage you JUST added. The first commit bundle of each
|
|
523
579
|
* execution of that stage carries them (`CommitBundle.tags` — the bundle
|
|
@@ -574,11 +630,40 @@ export declare class FlowChartBuilder<TOut = any, TScope = any> {
|
|
|
574
630
|
* second declaration on the same stage.
|
|
575
631
|
*/
|
|
576
632
|
tag(...names: readonly string[]): this;
|
|
633
|
+
/**
|
|
634
|
+
* Declare the chart's time budget: the most milliseconds a caller gives one run (design §3.2).
|
|
635
|
+
*
|
|
636
|
+
* WHY: the incident behind it — a stage retried an SDK call four times, 40 s each, past a caller's 120 s, and the
|
|
637
|
+
* record said "one stage, one error". Both numbers were declared: the policy on the stage, the budget of the
|
|
638
|
+
* caller. So `build()` checks one against the other: it REFUSES the chart when its declared policies already allow
|
|
639
|
+
* longer (`attempts × timeoutMs` plus the waits, summed along the slowest path — see `timeBudget`), and in dev mode
|
|
640
|
+
* names every stage it cannot bound (no `timeoutMs`, a function backoff with no `maxBackoffMs`, a loop, a lazy
|
|
641
|
+
* subflow, a `parallelForEach`). The spec root carries it (`budgetMs`); at run start, a deadline shorter than it is
|
|
642
|
+
* a dev-mode warning.
|
|
643
|
+
*
|
|
644
|
+
* Chart-level, so it may be declared anywhere before `build()`, once.
|
|
645
|
+
*
|
|
646
|
+
* @example
|
|
647
|
+
* ```ts
|
|
648
|
+
* flowChart<State>('Read', readFn, 'read', { retry: { attempts: 1, timeoutMs: 5_000 } })
|
|
649
|
+
* .addFunction('Charge', chargeFn, 'charge')
|
|
650
|
+
* .retry({ attempts: 4, timeoutMs: 40_000, backoffMs: 1_000 })
|
|
651
|
+
* .budget(120_000)
|
|
652
|
+
* .build(); // throws: its declared policies allow 168000 ms, over its budget by 48000 ms
|
|
653
|
+
* ```
|
|
654
|
+
*/
|
|
655
|
+
budget(ms: number): this;
|
|
577
656
|
loopTo(stageId: string): this;
|
|
578
657
|
onStream(handler: StreamTokenHandler): this;
|
|
579
658
|
onStreamStart(handler: StreamLifecycleHandler): this;
|
|
580
659
|
onStreamEnd(handler: StreamLifecycleHandler): this;
|
|
581
660
|
build(): RunnableFlowChart<TOut, TScope>;
|
|
661
|
+
/**
|
|
662
|
+
* The declared budget, checked (owner ruling Q2): refused when the chart's bounded part alone allows longer — a
|
|
663
|
+
* time its declared policies allow a run to take, so the budget cannot be promised; every stage it cannot bound is
|
|
664
|
+
* a dev-mode warning.
|
|
665
|
+
*/
|
|
666
|
+
private _checkBudget;
|
|
582
667
|
/** Override the scope factory. Rarely needed — auto-embeds TypedScope by default. */
|
|
583
668
|
setScopeFactory(factory: ScopeFactory<TScope>): this;
|
|
584
669
|
toSpec<TResult = SerializedPipelineStructure>(): TResult;
|