footprintjs 5.0.0 → 6.1.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 +51 -8
- package/README.md +1 -0
- package/dist/advanced.js +2 -3
- package/dist/esm/advanced.js +2 -2
- package/dist/esm/index.js +2 -2
- package/dist/esm/lib/builder/FlowChartBuilder.js +552 -103
- package/dist/esm/lib/builder/index.js +2 -2
- package/dist/esm/lib/builder/structure/StructureRecorder.js +158 -0
- package/dist/esm/lib/builder/structure/StructureRecorderDispatcher.js +171 -0
- package/dist/esm/lib/builder/types.js +1 -1
- package/dist/esm/lib/engine/errors/errorInfo.js +4 -3
- package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +14 -3
- package/dist/esm/lib/engine/handlers/DeciderHandler.js +5 -7
- package/dist/esm/lib/engine/handlers/RuntimeStructureManager.js +2 -2
- package/dist/esm/lib/engine/handlers/SelectorHandler.js +13 -7
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +7 -1
- package/dist/esm/lib/engine/handlers/index.js +1 -3
- package/dist/esm/lib/engine/handlers/types.js +2 -2
- package/dist/esm/lib/engine/index.js +1 -1
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +12 -2
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +17 -3
- package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.js +8 -1
- package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
- package/dist/esm/lib/engine/narrative/index.js +1 -1
- package/dist/esm/lib/engine/narrative/types.js +1 -1
- package/dist/esm/lib/engine/runtimeStageId.js +64 -2
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +35 -57
- package/dist/esm/lib/engine/types.js +1 -1
- package/dist/esm/lib/engine/walkSubflowSpec.js +168 -0
- package/dist/esm/lib/recorder/CombinedRecorder.js +8 -1
- package/dist/esm/lib/runner/FlowChartExecutor.js +23 -17
- package/dist/esm/lib/runner/getSubtreeSnapshot.js +3 -2
- package/dist/esm/trace.js +3 -2
- package/dist/index.js +3 -2
- package/dist/lib/builder/FlowChartBuilder.js +554 -104
- package/dist/lib/builder/index.js +3 -2
- package/dist/lib/builder/structure/StructureRecorder.js +159 -0
- package/dist/lib/builder/structure/StructureRecorderDispatcher.js +175 -0
- package/dist/lib/builder/types.js +1 -1
- package/dist/lib/engine/errors/errorInfo.js +4 -3
- package/dist/lib/engine/handlers/ChildrenExecutor.js +14 -3
- package/dist/lib/engine/handlers/DeciderHandler.js +5 -7
- package/dist/lib/engine/handlers/RuntimeStructureManager.js +2 -2
- package/dist/lib/engine/handlers/SelectorHandler.js +13 -7
- package/dist/lib/engine/handlers/SubflowExecutor.js +7 -1
- package/dist/lib/engine/handlers/index.js +2 -5
- package/dist/lib/engine/handlers/types.js +2 -2
- package/dist/lib/engine/index.js +1 -1
- package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +12 -2
- package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +17 -3
- package/dist/lib/engine/narrative/NarrativeFlowRecorder.js +8 -1
- package/dist/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
- package/dist/lib/engine/narrative/index.js +1 -1
- package/dist/lib/engine/narrative/types.js +1 -1
- package/dist/lib/engine/runtimeStageId.js +66 -3
- package/dist/lib/engine/traversal/FlowchartTraverser.js +35 -57
- package/dist/lib/engine/types.js +1 -1
- package/dist/lib/engine/walkSubflowSpec.js +172 -0
- package/dist/lib/recorder/CombinedRecorder.js +8 -1
- package/dist/lib/runner/FlowChartExecutor.js +23 -17
- package/dist/lib/runner/getSubtreeSnapshot.js +3 -2
- package/dist/trace.js +5 -2
- package/dist/types/advanced.d.ts +4 -4
- package/dist/types/index.d.ts +4 -2
- package/dist/types/lib/builder/FlowChartBuilder.d.ts +202 -17
- package/dist/types/lib/builder/index.d.ts +3 -2
- package/dist/types/lib/builder/structure/StructureRecorder.d.ts +349 -0
- package/dist/types/lib/builder/structure/StructureRecorderDispatcher.d.ts +77 -0
- package/dist/types/lib/builder/types.d.ts +39 -6
- package/dist/types/lib/engine/errors/errorInfo.d.ts +3 -2
- package/dist/types/lib/engine/handlers/ChildrenExecutor.d.ts +1 -1
- package/dist/types/lib/engine/handlers/DeciderHandler.d.ts +3 -3
- package/dist/types/lib/engine/handlers/RuntimeStructureManager.d.ts +1 -1
- package/dist/types/lib/engine/handlers/SelectorHandler.d.ts +2 -2
- package/dist/types/lib/engine/handlers/index.d.ts +1 -2
- package/dist/types/lib/engine/handlers/types.d.ts +2 -9
- package/dist/types/lib/engine/index.d.ts +1 -1
- package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +4 -2
- package/dist/types/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +1 -0
- package/dist/types/lib/engine/narrative/index.d.ts +1 -1
- package/dist/types/lib/engine/narrative/types.d.ts +59 -2
- package/dist/types/lib/engine/runtimeStageId.d.ts +57 -1
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +1 -6
- package/dist/types/lib/engine/types.d.ts +19 -26
- package/dist/types/lib/engine/walkSubflowSpec.d.ts +95 -0
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +4 -16
- package/dist/types/trace.d.ts +3 -1
- package/package.json +6 -4
- package/dist/esm/lib/engine/handlers/ExtractorRunner.js +0 -122
- package/dist/lib/engine/handlers/ExtractorRunner.js +0 -126
- package/dist/types/lib/engine/handlers/ExtractorRunner.d.ts +0 -41
|
@@ -64,7 +64,8 @@ function getSubtreeSnapshot(snapshot, path, allNarrativeEntries) {
|
|
|
64
64
|
return undefined;
|
|
65
65
|
if ((0, detectCircular_js_1.isDevMode)()) {
|
|
66
66
|
console.warn(`[footprint] getSubtreeSnapshot('${normalizedPath}'): subflowResults not populated — ` +
|
|
67
|
-
'sharedState will be undefined.
|
|
67
|
+
'sharedState will be undefined. The subflow may not have completed, ' +
|
|
68
|
+
'or its outputMapper did not write back to the parent scope.');
|
|
68
69
|
}
|
|
69
70
|
return {
|
|
70
71
|
subflowId: lastSegment,
|
|
@@ -130,4 +131,4 @@ function findSubflowInTree(node, subflowId) {
|
|
|
130
131
|
}
|
|
131
132
|
return undefined;
|
|
132
133
|
}
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0U3VidHJlZVNuYXBzaG90LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9ydW5uZXIvZ2V0U3VidHJlZVNuYXBzaG90LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHOzs7QUFJSCxrRUFBdUQ7QUFldkQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFnQixrQkFBa0IsQ0FDaEMsUUFBeUIsRUFDekIsSUFBWSxFQUNaLG1CQUE4QztJQUU5QyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRXpDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqRSxJQUFJLENBQUMsY0FBYztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRXRDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUM7SUFDL0MsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUcsQ0FBQztJQUVyRCw0REFBNEQ7SUFDNUQsNkVBQTZFO0lBQzdFLElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQ3JELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxjQUFjLENBQTRCLENBQUM7UUFDM0UsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFdBQWtELENBQUM7UUFFNUUsT0FBTztZQUNMLFNBQVMsRUFBRSxXQUFXO1lBQ3RCLGFBQWEsRUFDVixPQUFPLEVBQUUsYUFBMEMsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQztZQUNoSCxXQUFXLEVBQUUsT0FBTyxFQUFFLGFBQW9EO1lBQzFFLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUM3RyxDQUFDO0lBQ0osQ0FBQztJQUVELGdFQUFnRTtJQUNoRSxrRUFBa0U7SUFDbEUsMkVBQTJFO0lBQzNFLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDekUsSUFBSSxDQUFDLFNBQVM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUVqQyxJQUFJLElBQUEsNkJBQVMsR0FBRSxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLElBQUksQ0FDVixtQ0FBbUMsY0FBYyxxQ0FBcUM7WUFDcEYsNkZBQTZGLENBQ2hHLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTztRQUNMLFNBQVMsRUFBRSxXQUFXO1FBQ3RCLGFBQWEsRUFBRSxTQUFTO1FBQ3hCLFdBQVcsRUFBRSxTQUFTO1FBQ3RCLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztLQUM3RyxDQUFDO0FBQ0osQ0FBQztBQS9DRCxnREErQ0M7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxRQUF5QjtJQUN4RCxJQUFJLENBQUMsUUFBUSxFQUFFLGNBQWM7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN6QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFIRCw0Q0FHQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLHNCQUFzQixDQUFDLE9BQWlDLEVBQUUsSUFBWTtJQUM3RSxrRUFBa0U7SUFDbEUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUcsQ0FBQztJQUN6QyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUM5QixxRkFBcUY7UUFDckYsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMvQyw2RkFBNkY7UUFDN0YsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN6RSxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLElBQStCLEVBQUUsU0FBaUI7SUFDM0UsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUU1QixJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRTlDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNsRCxJQUFJLEtBQUs7Z0JBQUUsT0FBTyxLQUFLLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLE9BQU8saUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZ2V0U3VidHJlZVNuYXBzaG90IOKAlCBuYXZpZ2F0ZSBhbiBleGVjdXRpb24gc25hcHNob3QgdHJlZSBieSBzdWJmbG93IHBhdGguXG4gKlxuICogR2l2ZW4gYSBSdW50aW1lU25hcHNob3QgYW5kIGEgc2xhc2gtc2VwYXJhdGVkIHBhdGggb2Ygc3ViZmxvdyBJRHMsXG4gKiByZXR1cm5zIHRoZSBzdWJ0cmVlIHJvb3RlZCBhdCB0aGF0IHN1YmZsb3cuIFVzZWZ1bCBmb3IgTExNIGRyaWxsLWRvd246XG4gKiBpbnN0ZWFkIG9mIGR1bXBpbmcgdGhlIGZ1bGwgdHJhY2UsIGZldGNoIG9ubHkgdGhlIHJlbGV2YW50IHN1YnRyZWUuXG4gKlxuICogVXNhZ2U6XG4gKiAgIGNvbnN0IHNuYXBzaG90ID0gZXhlY3V0b3IuZ2V0U25hcHNob3QoKTtcbiAqXG4gKiAgIC8vIFRvcC1sZXZlbCBzdWJmbG93XG4gKiAgIGdldFN1YnRyZWVTbmFwc2hvdChzbmFwc2hvdCwgJ3NmLXBheW1lbnQnKTtcbiAqXG4gKiAgIC8vIE5lc3RlZCBzdWJmbG93IChwYXltZW50IOKGkiB2YWxpZGF0aW9uKVxuICogICBnZXRTdWJ0cmVlU25hcHNob3Qoc25hcHNob3QsICdzZi1wYXltZW50L3NmLXZhbGlkYXRpb24nKTtcbiAqXG4gKiAgIC8vIFJldHVybnMgdW5kZWZpbmVkIGlmIHBhdGggbm90IGZvdW5kXG4gKiAgIGdldFN1YnRyZWVTbmFwc2hvdChzbmFwc2hvdCwgJ25vbmV4aXN0ZW50Jyk7IC8vIHVuZGVmaW5lZFxuICpcbiAqICAgLy8gRGlzY292ZXIgYXZhaWxhYmxlIHBhdGhzXG4gKiAgIGxpc3RTdWJmbG93UGF0aHMoc25hcHNob3QpOyAvLyBbJ3NmLXBheW1lbnQnLCAnc2YtcGF5bWVudC9zZi12YWxpZGF0aW9uJ11cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkTmFycmF0aXZlRW50cnkgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL25hcnJhdGl2ZVR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VTbmFwc2hvdCB9IGZyb20gJy4uL21lbW9yeS90eXBlcy5qcyc7XG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICcuLi9zY29wZS9kZXRlY3RDaXJjdWxhci5qcyc7XG5pbXBvcnQgdHlwZSB7IFJ1bnRpbWVTbmFwc2hvdCB9IGZyb20gJy4vRXhlY3V0aW9uUnVudGltZS5qcyc7XG5cbi8qKiBUaGUgcmVzdWx0IG9mIG5hdmlnYXRpbmcgdG8gYSBzdWJ0cmVlIHdpdGhpbiBhIHNuYXBzaG90LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWJ0cmVlU25hcHNob3Qge1xuICAvKiogVGhlIHN1YmZsb3cgSUQgdGhhdCB3YXMgbWF0Y2hlZCAobGFzdCBzZWdtZW50IG9mIHRoZSBwYXRoKS4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd0lkOiBzdHJpbmc7XG4gIC8qKiBUaGUgZXhlY3V0aW9uIHRyZWUgcm9vdGVkIGF0IHRoaXMgc3ViZmxvdy4gKi9cbiAgcmVhZG9ubHkgZXhlY3V0aW9uVHJlZTogU3RhZ2VTbmFwc2hvdDtcbiAgLyoqIFNoYXJlZCBzdGF0ZSBzY29wZWQgdG8gdGhpcyBzdWJmbG93IChmcm9tIHN1YmZsb3dSZXN1bHRzIGlmIGF2YWlsYWJsZSkuICovXG4gIHJlYWRvbmx5IHNoYXJlZFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBOYXJyYXRpdmUgZW50cmllcyBzY29wZWQgdG8gdGhpcyBzdWJmbG93IChiZXR3ZWVuIGVudHJ5L2V4aXQgZXZlbnRzKS4gKi9cbiAgcmVhZG9ubHkgbmFycmF0aXZlRW50cmllcz86IENvbWJpbmVkTmFycmF0aXZlRW50cnlbXTtcbn1cblxuLyoqXG4gKiBOYXZpZ2F0ZSB0aGUgZXhlY3V0aW9uIHNuYXBzaG90IHRyZWUgYnkgYSBzbGFzaC1zZXBhcmF0ZWQgc3ViZmxvdyBwYXRoLlxuICpcbiAqICoqSW1wbGVtZW50YXRpb24gbm90ZToqKiBmb290cHJpbnRqcydzIFN1YmZsb3dFeGVjdXRvciBzdG9yZXMgbmVzdGVkIHN1YmZsb3dcbiAqIHJlc3VsdHMgd2l0aCBjb21wb3NpdGUgc2xhc2gtc2VwYXJhdGVkIGtleXMgKGUuZy4gXCJzZi1vdXRlci9zZi1pbm5lclwiKSBpblxuICogdGhlIGZsYXQgYHN1YmZsb3dSZXN1bHRzYCBtYXAuIFRoaXMgZnVuY3Rpb24gdXNlcyB0aG9zZSBrZXlzIGZvciBsb29rdXAuXG4gKlxuICogQHBhcmFtIHNuYXBzaG90IOKAlCB0aGUgZnVsbCBSdW50aW1lU25hcHNob3QgZnJvbSBgZXhlY3V0b3IuZ2V0U25hcHNob3QoKWBcbiAqIEBwYXJhbSBwYXRoIOKAlCBzbGFzaC1zZXBhcmF0ZWQgc3ViZmxvdyBJRHMsIGUuZy4gYFwic2YtcGF5bWVudFwiYCBvciBgXCJzZi1wYXltZW50L3NmLXZhbGlkYXRpb25cImBcbiAqIEBwYXJhbSBhbGxOYXJyYXRpdmVFbnRyaWVzIOKAlCBvcHRpb25hbCBmdWxsIG5hcnJhdGl2ZSBlbnRyaWVzIGZyb20gYGV4ZWN1dG9yLmdldE5hcnJhdGl2ZUVudHJpZXMoKWAsIHVzZWQgdG8gZXh0cmFjdCBzY29wZWQgbmFycmF0aXZlIGZvciB0aGUgc3VidHJlZVxuICogQHJldHVybnMgdGhlIG1hdGNoaW5nIFN1YnRyZWVTbmFwc2hvdCwgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIHBhdGggaXMgbm90IGZvdW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdWJ0cmVlU25hcHNob3QoXG4gIHNuYXBzaG90OiBSdW50aW1lU25hcHNob3QsXG4gIHBhdGg6IHN0cmluZyxcbiAgYWxsTmFycmF0aXZlRW50cmllcz86IENvbWJpbmVkTmFycmF0aXZlRW50cnlbXSxcbik6IFN1YnRyZWVTbmFwc2hvdCB8IHVuZGVmaW5lZCB7XG4gIGlmICghc25hcHNob3QgfHwgIXBhdGgpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBwYXRoLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy8nKTtcbiAgaWYgKCFub3JtYWxpemVkUGF0aCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBzdWJmbG93UmVzdWx0cyA9IHNuYXBzaG90LnN1YmZsb3dSZXN1bHRzO1xuICBjb25zdCBsYXN0U2VnbWVudCA9IG5vcm1hbGl6ZWRQYXRoLnNwbGl0KCcvJykucG9wKCkhO1xuXG4gIC8vIFN0cmF0ZWd5IDE6IERpcmVjdCBsb29rdXAgaW4gc3ViZmxvd1Jlc3VsdHMgYnkgZnVsbCBwYXRoLlxuICAvLyBTdWJmbG93RXhlY3V0b3Igc3RvcmVzIG5lc3RlZCByZXN1bHRzIHdpdGggY29tcG9zaXRlIHNsYXNoLXNlcGFyYXRlZCBrZXlzLlxuICBpZiAoc3ViZmxvd1Jlc3VsdHMgJiYgc3ViZmxvd1Jlc3VsdHNbbm9ybWFsaXplZFBhdGhdKSB7XG4gICAgY29uc3Qgc2ZSZXN1bHQgPSBzdWJmbG93UmVzdWx0c1tub3JtYWxpemVkUGF0aF0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3QgdHJlZUN0eCA9IHNmUmVzdWx0LnRyZWVDb250ZXh0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1YmZsb3dJZDogbGFzdFNlZ21lbnQsXG4gICAgICBleGVjdXRpb25UcmVlOlxuICAgICAgICAodHJlZUN0eD8uc3RhZ2VDb250ZXh0cyBhcyB1bmtub3duIGFzIFN0YWdlU25hcHNob3QpID8/IGZpbmRTdWJmbG93SW5UcmVlKHNuYXBzaG90LmV4ZWN1dGlvblRyZWUsIGxhc3RTZWdtZW50KSxcbiAgICAgIHNoYXJlZFN0YXRlOiB0cmVlQ3R4Py5nbG9iYWxDb250ZXh0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkLFxuICAgICAgbmFycmF0aXZlRW50cmllczogYWxsTmFycmF0aXZlRW50cmllcyA/IGV4dHJhY3RTY29wZWROYXJyYXRpdmUoYWxsTmFycmF0aXZlRW50cmllcywgbGFzdFNlZ21lbnQpIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICAvLyBTdHJhdGVneSAyOiBGaW5kIHRoZSBub2RlIGluIHRoZSBleGVjdXRpb24gdHJlZSBieSBzdWJmbG93SWQuXG4gIC8vIFRoaXMgcGF0aCBsYWNrcyBzaGFyZWRTdGF0ZSAoc3ViZmxvd1Jlc3VsdHMgd2FzIG5vdCBwb3B1bGF0ZWQpLlxuICAvLyBUaGlzIHR5cGljYWxseSBtZWFucyB0aGUgZXhlY3V0b3IgcmFuIHdpdGhvdXQgc3ViZmxvdyByZXN1bHQgZW5yaWNobWVudC5cbiAgY29uc3QgZm91bmROb2RlID0gZmluZFN1YmZsb3dJblRyZWUoc25hcHNob3QuZXhlY3V0aW9uVHJlZSwgbGFzdFNlZ21lbnQpO1xuICBpZiAoIWZvdW5kTm9kZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgW2Zvb3RwcmludF0gZ2V0U3VidHJlZVNuYXBzaG90KCcke25vcm1hbGl6ZWRQYXRofScpOiBzdWJmbG93UmVzdWx0cyBub3QgcG9wdWxhdGVkIOKAlCBgICtcbiAgICAgICAgJ3NoYXJlZFN0YXRlIHdpbGwgYmUgdW5kZWZpbmVkLiBEaWQgeW91IGVuYWJsZSBlbnJpY2hTbmFwc2hvdHMgb3IgYXR0YWNoIGFuIEV4dHJhY3RvclJ1bm5lcj8nLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN1YmZsb3dJZDogbGFzdFNlZ21lbnQsXG4gICAgZXhlY3V0aW9uVHJlZTogZm91bmROb2RlLFxuICAgIHNoYXJlZFN0YXRlOiB1bmRlZmluZWQsXG4gICAgbmFycmF0aXZlRW50cmllczogYWxsTmFycmF0aXZlRW50cmllcyA/IGV4dHJhY3RTY29wZWROYXJyYXRpdmUoYWxsTmFycmF0aXZlRW50cmllcywgbGFzdFNlZ21lbnQpIDogdW5kZWZpbmVkLFxuICB9O1xufVxuXG4vKipcbiAqIExpc3QgYWxsIGF2YWlsYWJsZSBzdWJmbG93IHBhdGhzIGluIGEgc25hcHNob3QuXG4gKlxuICogUmV0dXJucyB0aGUga2V5cyBmcm9tIGBzdWJmbG93UmVzdWx0c2AsIHdoaWNoIGFyZSBzbGFzaC1zZXBhcmF0ZWRcbiAqIHN1YmZsb3cgSUQgcGF0aHMgKGUuZy4gYFtcInNmLXBheW1lbnRcIiwgXCJzZi1vdXRlci9zZi1pbm5lclwiXWApLlxuICogVXNlZnVsIGZvciBkaXNjb3Zlcnkg4oCUIGFuIExMTSBvciBVSSBjYW4gZW51bWVyYXRlIGF2YWlsYWJsZSBkcmlsbC1kb3duIHRhcmdldHMuXG4gKlxuICogQHBhcmFtIHNuYXBzaG90IOKAlCB0aGUgZnVsbCBSdW50aW1lU25hcHNob3QgZnJvbSBgZXhlY3V0b3IuZ2V0U25hcHNob3QoKWBcbiAqIEByZXR1cm5zIGFycmF5IG9mIGF2YWlsYWJsZSBzdWJmbG93IHBhdGhzLCBlbXB0eSBpZiBub25lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXN0U3ViZmxvd1BhdGhzKHNuYXBzaG90OiBSdW50aW1lU25hcHNob3QpOiBzdHJpbmdbXSB7XG4gIGlmICghc25hcHNob3Q/LnN1YmZsb3dSZXN1bHRzKSByZXR1cm4gW107XG4gIHJldHVybiBPYmplY3Qua2V5cyhzbmFwc2hvdC5zdWJmbG93UmVzdWx0cyk7XG59XG5cbi8qKlxuICogRXh0cmFjdCBuYXJyYXRpdmUgZW50cmllcyBzY29wZWQgdG8gYSBzcGVjaWZpYyBzdWJmbG93LlxuICogRmlsdGVycyBieSBlbnRyeS5zdWJmbG93SWQgZmllbGQgKHNldCBieSBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyIGR1cmluZyB0cmF2ZXJzYWwpLlxuICogQWxzbyBpbmNsdWRlcyB0aGUgc3ViZmxvdyBlbnRyeS9leGl0IG1hcmtlciBlbnRyaWVzIHRoZW1zZWx2ZXMuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RTY29wZWROYXJyYXRpdmUoZW50cmllczogQ29tYmluZWROYXJyYXRpdmVFbnRyeVtdLCBwYXRoOiBzdHJpbmcpOiBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W10ge1xuICAvLyBUaGUgbGFzdCBzZWdtZW50IG9mIHRoZSBwYXRoIGlzIHRoZSBzdWJmbG93SWQgc3RvcmVkIG9uIGVudHJpZXNcbiAgY29uc3Qgc3ViZmxvd0lkID0gcGF0aC5zcGxpdCgnLycpLnBvcCgpITtcbiAgcmV0dXJuIGVudHJpZXMuZmlsdGVyKChlbnRyeSkgPT4ge1xuICAgIC8vIEluY2x1ZGUgZW50cmllcyB3aG9zZSBzdWJmbG93SWQgbWF0Y2hlcyAoZXZlbnRzIGVtaXR0ZWQgd2hpbGUgaW5zaWRlIHRoaXMgc3ViZmxvdylcbiAgICBpZiAoZW50cnkuc3ViZmxvd0lkID09PSBzdWJmbG93SWQpIHJldHVybiB0cnVlO1xuICAgIC8vIEFsc28gaW5jbHVkZSB0aGUgc3ViZmxvdyBlbnRyeS9leGl0IG1hcmtlcnMgKHRoZXkgY2FycnkgdGhlIHBhcmVudCBzdWJmbG93SWQgb3IgdW5kZWZpbmVkKVxuICAgIGlmIChlbnRyeS50eXBlID09PSAnc3ViZmxvdycgJiYgZW50cnkuc3RhZ2VJZCA9PT0gc3ViZmxvd0lkKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xufVxuXG4vKipcbiAqIEZpbmQgYSBzdWJmbG93IG5vZGUgaW4gdGhlIGV4ZWN1dGlvbiB0cmVlIGJ5IHNlYXJjaGluZyBmb3IgYSBub2RlXG4gKiB3aG9zZSBzdWJmbG93SWQgbWF0Y2hlcy5cbiAqIFNlYXJjaGVzIGRlcHRoLWZpcnN0IHRocm91Z2ggYG5leHRgIGFuZCBgY2hpbGRyZW5gIGxpbmtzLlxuICovXG5mdW5jdGlvbiBmaW5kU3ViZmxvd0luVHJlZShub2RlOiBTdGFnZVNuYXBzaG90IHwgdW5kZWZpbmVkLCBzdWJmbG93SWQ6IHN0cmluZyk6IFN0YWdlU25hcHNob3QgfCB1bmRlZmluZWQge1xuICBpZiAoIW5vZGUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgaWYgKG5vZGUuc3ViZmxvd0lkID09PSBzdWJmbG93SWQpIHJldHVybiBub2RlO1xuXG4gIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IGZpbmRTdWJmbG93SW5UcmVlKGNoaWxkLCBzdWJmbG93SWQpO1xuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKG5vZGUubmV4dCkge1xuICAgIHJldHVybiBmaW5kU3ViZmxvd0luVHJlZShub2RlLm5leHQsIHN1YmZsb3dJZCk7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0U3VidHJlZVNuYXBzaG90LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9ydW5uZXIvZ2V0U3VidHJlZVNuYXBzaG90LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHOzs7QUFJSCxrRUFBdUQ7QUFldkQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFnQixrQkFBa0IsQ0FDaEMsUUFBeUIsRUFDekIsSUFBWSxFQUNaLG1CQUE4QztJQUU5QyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRXpDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqRSxJQUFJLENBQUMsY0FBYztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRXRDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUM7SUFDL0MsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUcsQ0FBQztJQUVyRCw0REFBNEQ7SUFDNUQsNkVBQTZFO0lBQzdFLElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQ3JELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxjQUFjLENBQTRCLENBQUM7UUFDM0UsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFdBQWtELENBQUM7UUFFNUUsT0FBTztZQUNMLFNBQVMsRUFBRSxXQUFXO1lBQ3RCLGFBQWEsRUFDVixPQUFPLEVBQUUsYUFBMEMsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQztZQUNoSCxXQUFXLEVBQUUsT0FBTyxFQUFFLGFBQW9EO1lBQzFFLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUM3RyxDQUFDO0lBQ0osQ0FBQztJQUVELGdFQUFnRTtJQUNoRSxrRUFBa0U7SUFDbEUsMkVBQTJFO0lBQzNFLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDekUsSUFBSSxDQUFDLFNBQVM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUVqQyxJQUFJLElBQUEsNkJBQVMsR0FBRSxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLElBQUksQ0FDVixtQ0FBbUMsY0FBYyxxQ0FBcUM7WUFDcEYscUVBQXFFO1lBQ3JFLDZEQUE2RCxDQUNoRSxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU87UUFDTCxTQUFTLEVBQUUsV0FBVztRQUN0QixhQUFhLEVBQUUsU0FBUztRQUN4QixXQUFXLEVBQUUsU0FBUztRQUN0QixnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7S0FDN0csQ0FBQztBQUNKLENBQUM7QUFoREQsZ0RBZ0RDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsUUFBeUI7SUFDeEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxjQUFjO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDekMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBSEQsNENBR0M7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxPQUFpQyxFQUFFLElBQVk7SUFDN0Usa0VBQWtFO0lBQ2xFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFHLENBQUM7SUFDekMsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDOUIscUZBQXFGO1FBQ3JGLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxTQUFTO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDL0MsNkZBQTZGO1FBQzdGLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDekUsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxJQUErQixFQUFFLFNBQWlCO0lBQzNFLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFNUIsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUU5QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQyxNQUFNLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDbEQsSUFBSSxLQUFLO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGdldFN1YnRyZWVTbmFwc2hvdCDigJQgbmF2aWdhdGUgYW4gZXhlY3V0aW9uIHNuYXBzaG90IHRyZWUgYnkgc3ViZmxvdyBwYXRoLlxuICpcbiAqIEdpdmVuIGEgUnVudGltZVNuYXBzaG90IGFuZCBhIHNsYXNoLXNlcGFyYXRlZCBwYXRoIG9mIHN1YmZsb3cgSURzLFxuICogcmV0dXJucyB0aGUgc3VidHJlZSByb290ZWQgYXQgdGhhdCBzdWJmbG93LiBVc2VmdWwgZm9yIExMTSBkcmlsbC1kb3duOlxuICogaW5zdGVhZCBvZiBkdW1waW5nIHRoZSBmdWxsIHRyYWNlLCBmZXRjaCBvbmx5IHRoZSByZWxldmFudCBzdWJ0cmVlLlxuICpcbiAqIFVzYWdlOlxuICogICBjb25zdCBzbmFwc2hvdCA9IGV4ZWN1dG9yLmdldFNuYXBzaG90KCk7XG4gKlxuICogICAvLyBUb3AtbGV2ZWwgc3ViZmxvd1xuICogICBnZXRTdWJ0cmVlU25hcHNob3Qoc25hcHNob3QsICdzZi1wYXltZW50Jyk7XG4gKlxuICogICAvLyBOZXN0ZWQgc3ViZmxvdyAocGF5bWVudCDihpIgdmFsaWRhdGlvbilcbiAqICAgZ2V0U3VidHJlZVNuYXBzaG90KHNuYXBzaG90LCAnc2YtcGF5bWVudC9zZi12YWxpZGF0aW9uJyk7XG4gKlxuICogICAvLyBSZXR1cm5zIHVuZGVmaW5lZCBpZiBwYXRoIG5vdCBmb3VuZFxuICogICBnZXRTdWJ0cmVlU25hcHNob3Qoc25hcHNob3QsICdub25leGlzdGVudCcpOyAvLyB1bmRlZmluZWRcbiAqXG4gKiAgIC8vIERpc2NvdmVyIGF2YWlsYWJsZSBwYXRoc1xuICogICBsaXN0U3ViZmxvd1BhdGhzKHNuYXBzaG90KTsgLy8gWydzZi1wYXltZW50JywgJ3NmLXBheW1lbnQvc2YtdmFsaWRhdGlvbiddXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5IH0gZnJvbSAnLi4vZW5naW5lL25hcnJhdGl2ZS9uYXJyYXRpdmVUeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlU25hcHNob3QgfSBmcm9tICcuLi9tZW1vcnkvdHlwZXMuanMnO1xuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnLi4vc2NvcGUvZGV0ZWN0Q2lyY3VsYXIuanMnO1xuaW1wb3J0IHR5cGUgeyBSdW50aW1lU25hcHNob3QgfSBmcm9tICcuL0V4ZWN1dGlvblJ1bnRpbWUuanMnO1xuXG4vKiogVGhlIHJlc3VsdCBvZiBuYXZpZ2F0aW5nIHRvIGEgc3VidHJlZSB3aXRoaW4gYSBzbmFwc2hvdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3VidHJlZVNuYXBzaG90IHtcbiAgLyoqIFRoZSBzdWJmbG93IElEIHRoYXQgd2FzIG1hdGNoZWQgKGxhc3Qgc2VnbWVudCBvZiB0aGUgcGF0aCkuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dJZDogc3RyaW5nO1xuICAvKiogVGhlIGV4ZWN1dGlvbiB0cmVlIHJvb3RlZCBhdCB0aGlzIHN1YmZsb3cuICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblRyZWU6IFN0YWdlU25hcHNob3Q7XG4gIC8qKiBTaGFyZWQgc3RhdGUgc2NvcGVkIHRvIHRoaXMgc3ViZmxvdyAoZnJvbSBzdWJmbG93UmVzdWx0cyBpZiBhdmFpbGFibGUpLiAqL1xuICByZWFkb25seSBzaGFyZWRTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogTmFycmF0aXZlIGVudHJpZXMgc2NvcGVkIHRvIHRoaXMgc3ViZmxvdyAoYmV0d2VlbiBlbnRyeS9leGl0IGV2ZW50cykuICovXG4gIHJlYWRvbmx5IG5hcnJhdGl2ZUVudHJpZXM/OiBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W107XG59XG5cbi8qKlxuICogTmF2aWdhdGUgdGhlIGV4ZWN1dGlvbiBzbmFwc2hvdCB0cmVlIGJ5IGEgc2xhc2gtc2VwYXJhdGVkIHN1YmZsb3cgcGF0aC5cbiAqXG4gKiAqKkltcGxlbWVudGF0aW9uIG5vdGU6KiogZm9vdHByaW50anMncyBTdWJmbG93RXhlY3V0b3Igc3RvcmVzIG5lc3RlZCBzdWJmbG93XG4gKiByZXN1bHRzIHdpdGggY29tcG9zaXRlIHNsYXNoLXNlcGFyYXRlZCBrZXlzIChlLmcuIFwic2Ytb3V0ZXIvc2YtaW5uZXJcIikgaW5cbiAqIHRoZSBmbGF0IGBzdWJmbG93UmVzdWx0c2AgbWFwLiBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhvc2Uga2V5cyBmb3IgbG9va3VwLlxuICpcbiAqIEBwYXJhbSBzbmFwc2hvdCDigJQgdGhlIGZ1bGwgUnVudGltZVNuYXBzaG90IGZyb20gYGV4ZWN1dG9yLmdldFNuYXBzaG90KClgXG4gKiBAcGFyYW0gcGF0aCDigJQgc2xhc2gtc2VwYXJhdGVkIHN1YmZsb3cgSURzLCBlLmcuIGBcInNmLXBheW1lbnRcImAgb3IgYFwic2YtcGF5bWVudC9zZi12YWxpZGF0aW9uXCJgXG4gKiBAcGFyYW0gYWxsTmFycmF0aXZlRW50cmllcyDigJQgb3B0aW9uYWwgZnVsbCBuYXJyYXRpdmUgZW50cmllcyBmcm9tIGBleGVjdXRvci5nZXROYXJyYXRpdmVFbnRyaWVzKClgLCB1c2VkIHRvIGV4dHJhY3Qgc2NvcGVkIG5hcnJhdGl2ZSBmb3IgdGhlIHN1YnRyZWVcbiAqIEByZXR1cm5zIHRoZSBtYXRjaGluZyBTdWJ0cmVlU25hcHNob3QsIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBwYXRoIGlzIG5vdCBmb3VuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3VidHJlZVNuYXBzaG90KFxuICBzbmFwc2hvdDogUnVudGltZVNuYXBzaG90LFxuICBwYXRoOiBzdHJpbmcsXG4gIGFsbE5hcnJhdGl2ZUVudHJpZXM/OiBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W10sXG4pOiBTdWJ0cmVlU25hcHNob3QgfCB1bmRlZmluZWQge1xuICBpZiAoIXNuYXBzaG90IHx8ICFwYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gcGF0aC5zcGxpdCgnLycpLmZpbHRlcihCb29sZWFuKS5qb2luKCcvJyk7XG4gIGlmICghbm9ybWFsaXplZFBhdGgpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3Qgc3ViZmxvd1Jlc3VsdHMgPSBzbmFwc2hvdC5zdWJmbG93UmVzdWx0cztcbiAgY29uc3QgbGFzdFNlZ21lbnQgPSBub3JtYWxpemVkUGF0aC5zcGxpdCgnLycpLnBvcCgpITtcblxuICAvLyBTdHJhdGVneSAxOiBEaXJlY3QgbG9va3VwIGluIHN1YmZsb3dSZXN1bHRzIGJ5IGZ1bGwgcGF0aC5cbiAgLy8gU3ViZmxvd0V4ZWN1dG9yIHN0b3JlcyBuZXN0ZWQgcmVzdWx0cyB3aXRoIGNvbXBvc2l0ZSBzbGFzaC1zZXBhcmF0ZWQga2V5cy5cbiAgaWYgKHN1YmZsb3dSZXN1bHRzICYmIHN1YmZsb3dSZXN1bHRzW25vcm1hbGl6ZWRQYXRoXSkge1xuICAgIGNvbnN0IHNmUmVzdWx0ID0gc3ViZmxvd1Jlc3VsdHNbbm9ybWFsaXplZFBhdGhdIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IHRyZWVDdHggPSBzZlJlc3VsdC50cmVlQ29udGV4dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7XG4gICAgICBzdWJmbG93SWQ6IGxhc3RTZWdtZW50LFxuICAgICAgZXhlY3V0aW9uVHJlZTpcbiAgICAgICAgKHRyZWVDdHg/LnN0YWdlQ29udGV4dHMgYXMgdW5rbm93biBhcyBTdGFnZVNuYXBzaG90KSA/PyBmaW5kU3ViZmxvd0luVHJlZShzbmFwc2hvdC5leGVjdXRpb25UcmVlLCBsYXN0U2VnbWVudCksXG4gICAgICBzaGFyZWRTdGF0ZTogdHJlZUN0eD8uZ2xvYmFsQ29udGV4dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCxcbiAgICAgIG5hcnJhdGl2ZUVudHJpZXM6IGFsbE5hcnJhdGl2ZUVudHJpZXMgPyBleHRyYWN0U2NvcGVkTmFycmF0aXZlKGFsbE5hcnJhdGl2ZUVudHJpZXMsIGxhc3RTZWdtZW50KSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgLy8gU3RyYXRlZ3kgMjogRmluZCB0aGUgbm9kZSBpbiB0aGUgZXhlY3V0aW9uIHRyZWUgYnkgc3ViZmxvd0lkLlxuICAvLyBUaGlzIHBhdGggbGFja3Mgc2hhcmVkU3RhdGUgKHN1YmZsb3dSZXN1bHRzIHdhcyBub3QgcG9wdWxhdGVkKS5cbiAgLy8gVGhpcyB0eXBpY2FsbHkgbWVhbnMgdGhlIGV4ZWN1dG9yIHJhbiB3aXRob3V0IHN1YmZsb3cgcmVzdWx0IGVucmljaG1lbnQuXG4gIGNvbnN0IGZvdW5kTm9kZSA9IGZpbmRTdWJmbG93SW5UcmVlKHNuYXBzaG90LmV4ZWN1dGlvblRyZWUsIGxhc3RTZWdtZW50KTtcbiAgaWYgKCFmb3VuZE5vZGUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYFtmb290cHJpbnRdIGdldFN1YnRyZWVTbmFwc2hvdCgnJHtub3JtYWxpemVkUGF0aH0nKTogc3ViZmxvd1Jlc3VsdHMgbm90IHBvcHVsYXRlZCDigJQgYCArXG4gICAgICAgICdzaGFyZWRTdGF0ZSB3aWxsIGJlIHVuZGVmaW5lZC4gVGhlIHN1YmZsb3cgbWF5IG5vdCBoYXZlIGNvbXBsZXRlZCwgJyArXG4gICAgICAgICdvciBpdHMgb3V0cHV0TWFwcGVyIGRpZCBub3Qgd3JpdGUgYmFjayB0byB0aGUgcGFyZW50IHNjb3BlLicsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3ViZmxvd0lkOiBsYXN0U2VnbWVudCxcbiAgICBleGVjdXRpb25UcmVlOiBmb3VuZE5vZGUsXG4gICAgc2hhcmVkU3RhdGU6IHVuZGVmaW5lZCxcbiAgICBuYXJyYXRpdmVFbnRyaWVzOiBhbGxOYXJyYXRpdmVFbnRyaWVzID8gZXh0cmFjdFNjb3BlZE5hcnJhdGl2ZShhbGxOYXJyYXRpdmVFbnRyaWVzLCBsYXN0U2VnbWVudCkgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbi8qKlxuICogTGlzdCBhbGwgYXZhaWxhYmxlIHN1YmZsb3cgcGF0aHMgaW4gYSBzbmFwc2hvdC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBrZXlzIGZyb20gYHN1YmZsb3dSZXN1bHRzYCwgd2hpY2ggYXJlIHNsYXNoLXNlcGFyYXRlZFxuICogc3ViZmxvdyBJRCBwYXRocyAoZS5nLiBgW1wic2YtcGF5bWVudFwiLCBcInNmLW91dGVyL3NmLWlubmVyXCJdYCkuXG4gKiBVc2VmdWwgZm9yIGRpc2NvdmVyeSDigJQgYW4gTExNIG9yIFVJIGNhbiBlbnVtZXJhdGUgYXZhaWxhYmxlIGRyaWxsLWRvd24gdGFyZ2V0cy5cbiAqXG4gKiBAcGFyYW0gc25hcHNob3Qg4oCUIHRoZSBmdWxsIFJ1bnRpbWVTbmFwc2hvdCBmcm9tIGBleGVjdXRvci5nZXRTbmFwc2hvdCgpYFxuICogQHJldHVybnMgYXJyYXkgb2YgYXZhaWxhYmxlIHN1YmZsb3cgcGF0aHMsIGVtcHR5IGlmIG5vbmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RTdWJmbG93UGF0aHMoc25hcHNob3Q6IFJ1bnRpbWVTbmFwc2hvdCk6IHN0cmluZ1tdIHtcbiAgaWYgKCFzbmFwc2hvdD8uc3ViZmxvd1Jlc3VsdHMpIHJldHVybiBbXTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHNuYXBzaG90LnN1YmZsb3dSZXN1bHRzKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IG5hcnJhdGl2ZSBlbnRyaWVzIHNjb3BlZCB0byBhIHNwZWNpZmljIHN1YmZsb3cuXG4gKiBGaWx0ZXJzIGJ5IGVudHJ5LnN1YmZsb3dJZCBmaWVsZCAoc2V0IGJ5IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIgZHVyaW5nIHRyYXZlcnNhbCkuXG4gKiBBbHNvIGluY2x1ZGVzIHRoZSBzdWJmbG93IGVudHJ5L2V4aXQgbWFya2VyIGVudHJpZXMgdGhlbXNlbHZlcy5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFNjb3BlZE5hcnJhdGl2ZShlbnRyaWVzOiBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W10sIHBhdGg6IHN0cmluZyk6IENvbWJpbmVkTmFycmF0aXZlRW50cnlbXSB7XG4gIC8vIFRoZSBsYXN0IHNlZ21lbnQgb2YgdGhlIHBhdGggaXMgdGhlIHN1YmZsb3dJZCBzdG9yZWQgb24gZW50cmllc1xuICBjb25zdCBzdWJmbG93SWQgPSBwYXRoLnNwbGl0KCcvJykucG9wKCkhO1xuICByZXR1cm4gZW50cmllcy5maWx0ZXIoKGVudHJ5KSA9PiB7XG4gICAgLy8gSW5jbHVkZSBlbnRyaWVzIHdob3NlIHN1YmZsb3dJZCBtYXRjaGVzIChldmVudHMgZW1pdHRlZCB3aGlsZSBpbnNpZGUgdGhpcyBzdWJmbG93KVxuICAgIGlmIChlbnRyeS5zdWJmbG93SWQgPT09IHN1YmZsb3dJZCkgcmV0dXJuIHRydWU7XG4gICAgLy8gQWxzbyBpbmNsdWRlIHRoZSBzdWJmbG93IGVudHJ5L2V4aXQgbWFya2VycyAodGhleSBjYXJyeSB0aGUgcGFyZW50IHN1YmZsb3dJZCBvciB1bmRlZmluZWQpXG4gICAgaWYgKGVudHJ5LnR5cGUgPT09ICdzdWJmbG93JyAmJiBlbnRyeS5zdGFnZUlkID09PSBzdWJmbG93SWQpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59XG5cbi8qKlxuICogRmluZCBhIHN1YmZsb3cgbm9kZSBpbiB0aGUgZXhlY3V0aW9uIHRyZWUgYnkgc2VhcmNoaW5nIGZvciBhIG5vZGVcbiAqIHdob3NlIHN1YmZsb3dJZCBtYXRjaGVzLlxuICogU2VhcmNoZXMgZGVwdGgtZmlyc3QgdGhyb3VnaCBgbmV4dGAgYW5kIGBjaGlsZHJlbmAgbGlua3MuXG4gKi9cbmZ1bmN0aW9uIGZpbmRTdWJmbG93SW5UcmVlKG5vZGU6IFN0YWdlU25hcHNob3QgfCB1bmRlZmluZWQsIHN1YmZsb3dJZDogc3RyaW5nKTogU3RhZ2VTbmFwc2hvdCB8IHVuZGVmaW5lZCB7XG4gIGlmICghbm9kZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBpZiAobm9kZS5zdWJmbG93SWQgPT09IHN1YmZsb3dJZCkgcmV0dXJuIG5vZGU7XG5cbiAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGNvbnN0IGZvdW5kID0gZmluZFN1YmZsb3dJblRyZWUoY2hpbGQsIHN1YmZsb3dJZCk7XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZDtcbiAgICB9XG4gIH1cblxuICBpZiAobm9kZS5uZXh0KSB7XG4gICAgcmV0dXJuIGZpbmRTdWJmbG93SW5UcmVlKG5vZGUubmV4dCwgc3ViZmxvd0lkKTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=
|
package/dist/trace.js
CHANGED
|
@@ -22,11 +22,14 @@
|
|
|
22
22
|
* ```
|
|
23
23
|
*/
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.qualityTrace = exports.formatQualityTrace = exports.QualityRecorder = exports.ROOT_SUBFLOW_ID = exports.ROOT_RUNTIME_STAGE_ID = exports.inOutRecorder = exports.InOutRecorder = exports.topologyRecorder = exports.TopologyRecorder = exports.BoundaryStateTracker = exports.SequenceRecorder = exports.KeyedRecorder = exports.CommitRangeIndex = exports.SequenceStore = exports.KeyedStore = exports.BoundaryStateStore = exports.formatCausalChain = exports.flattenCausalDAG = exports.causalChain = exports.findLastWriter = exports.findCommits = exports.findCommit = exports.parseRuntimeStageId = exports.createExecutionCounter = exports.buildRuntimeStageId = void 0;
|
|
25
|
+
exports.qualityTrace = exports.formatQualityTrace = exports.QualityRecorder = exports.ROOT_SUBFLOW_ID = exports.ROOT_RUNTIME_STAGE_ID = exports.inOutRecorder = exports.InOutRecorder = exports.topologyRecorder = exports.TopologyRecorder = exports.BoundaryStateTracker = exports.SequenceRecorder = exports.KeyedRecorder = 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;
|
|
26
26
|
var runtimeStageId_js_1 = require("./lib/engine/runtimeStageId.js");
|
|
27
27
|
Object.defineProperty(exports, "buildRuntimeStageId", { enumerable: true, get: function () { return runtimeStageId_js_1.buildRuntimeStageId; } });
|
|
28
28
|
Object.defineProperty(exports, "createExecutionCounter", { enumerable: true, get: function () { return runtimeStageId_js_1.createExecutionCounter; } });
|
|
29
29
|
Object.defineProperty(exports, "parseRuntimeStageId", { enumerable: true, get: function () { return runtimeStageId_js_1.parseRuntimeStageId; } });
|
|
30
|
+
Object.defineProperty(exports, "splitStageId", { enumerable: true, get: function () { return runtimeStageId_js_1.splitStageId; } });
|
|
31
|
+
var walkSubflowSpec_js_1 = require("./lib/engine/walkSubflowSpec.js");
|
|
32
|
+
Object.defineProperty(exports, "walkSubflowSpec", { enumerable: true, get: function () { return walkSubflowSpec_js_1.walkSubflowSpec; } });
|
|
30
33
|
// Commit log queries — typed utilities for backtracking
|
|
31
34
|
var commitLogUtils_js_1 = require("./lib/memory/commitLogUtils.js");
|
|
32
35
|
Object.defineProperty(exports, "findCommit", { enumerable: true, get: function () { return commitLogUtils_js_1.findCommit; } });
|
|
@@ -75,4 +78,4 @@ Object.defineProperty(exports, "QualityRecorder", { enumerable: true, get: funct
|
|
|
75
78
|
var qualityTrace_js_1 = require("./lib/recorder/qualityTrace.js");
|
|
76
79
|
Object.defineProperty(exports, "formatQualityTrace", { enumerable: true, get: function () { return qualityTrace_js_1.formatQualityTrace; } });
|
|
77
80
|
Object.defineProperty(exports, "qualityTrace", { enumerable: true, get: function () { return qualityTrace_js_1.qualityTrace; } });
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHJhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7OztBQUlILG9FQUt3QztBQUp0Qyx3SEFBQSxtQkFBbUIsT0FBQTtBQUNuQiwySEFBQSxzQkFBc0IsT0FBQTtBQUN0Qix3SEFBQSxtQkFBbUIsT0FBQTtBQUNuQixpSEFBQSxZQUFZLE9BQUE7QUFNZCxzRUFBa0U7QUFBekQscUhBQUEsZUFBZSxPQUFBO0FBRXhCLHdEQUF3RDtBQUN4RCxvRUFBeUY7QUFBaEYsK0dBQUEsVUFBVSxPQUFBO0FBQUUsZ0hBQUEsV0FBVyxPQUFBO0FBQUUsbUhBQUEsY0FBYyxPQUFBO0FBSWhELDBEQUE2RjtBQUFwRiwyR0FBQSxXQUFXLE9BQUE7QUFBRSxnSEFBQSxnQkFBZ0IsT0FBQTtBQUFFLGlIQUFBLGlCQUFpQixPQUFBO0FBRXpELG1FQUFtRTtBQUNuRSxpRUFBaUU7QUFDakUsaUVBQWlFO0FBQ2pFLDRDQUE0QztBQUM1Qyw4RUFBMEU7QUFBakUsMkhBQUEsa0JBQWtCLE9BQUE7QUFDM0IsOERBQTBEO0FBQWpELDJHQUFBLFVBQVUsT0FBQTtBQUNuQixvRUFBZ0U7QUFBdkQsaUhBQUEsYUFBYSxPQUFBO0FBU3RCLDBFQUFzRTtBQUE3RCx1SEFBQSxnQkFBZ0IsT0FBQTtBQUV6QixvRUFBb0U7QUFDcEUsK0RBQStEO0FBQy9ELGdFQUFnRTtBQUNoRSx3REFBd0Q7QUFDeEQseURBQXlEO0FBQ3pELG9FQUFnRTtBQUF2RCxpSEFBQSxhQUFhLE9BQUE7QUFFdEIsb0ZBQW9GO0FBQ3BGLDBFQUFzRTtBQUE3RCx1SEFBQSxnQkFBZ0IsT0FBQTtBQUV6Qix1RUFBdUU7QUFDdkUsNkVBQTZFO0FBQzdFLGtGQUE4RTtBQUFyRSwrSEFBQSxvQkFBb0IsT0FBQTtBQVU3QiwwRUFBd0Y7QUFBL0UsdUhBQUEsZ0JBQWdCLE9BQUE7QUFBRSx1SEFBQSxnQkFBZ0IsT0FBQTtBQUszQyxvRUFBdUg7QUFBOUcsaUhBQUEsYUFBYSxPQUFBO0FBQUUsaUhBQUEsYUFBYSxPQUFBO0FBQUUseUhBQUEscUJBQXFCLE9BQUE7QUFBRSxtSEFBQSxlQUFlLE9BQUE7QUFJN0Usd0VBQW9FO0FBQTNELHFIQUFBLGVBQWUsT0FBQTtBQUl4QixrRUFBa0Y7QUFBekUscUhBQUEsa0JBQWtCLE9BQUE7QUFBRSwrR0FBQSxZQUFZLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGZvb3RwcmludGpzL3RyYWNlIOKAlCBFeGVjdXRpb24gdHJhY2luZywgZGVidWdnaW5nLCBhbmQgYmFja3RyYWNraW5nIHV0aWxpdGllcy5cbiAqXG4gKiBSdW50aW1lIHN0YWdlIElEcywgY29tbWl0IGxvZyBxdWVyaWVzLCBhbmQgcmVjb3JkZXIgYmFzZSBjbGFzc2VzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBwYXJzZVJ1bnRpbWVTdGFnZUlkLCBmaW5kTGFzdFdyaXRlciwgS2V5ZWRSZWNvcmRlciwgU2VxdWVuY2VSZWNvcmRlciB9IGZyb20gJ2Zvb3RwcmludGpzL3RyYWNlJztcbiAqXG4gKiAvLyBQYXJzZSBhIHJ1bnRpbWVTdGFnZUlkXG4gKiBjb25zdCB7IHN0YWdlSWQsIGV4ZWN1dGlvbkluZGV4IH0gPSBwYXJzZVJ1bnRpbWVTdGFnZUlkKCdjYWxsLWxsbSM1Jyk7XG4gKlxuICogLy8gQmFja3RyYWNrOiB3aG8gd3JvdGUgJ3N5c3RlbVByb21wdCcgYmVmb3JlIHN0YWdlIGF0IGlkeCA4P1xuICogY29uc3Qgd3JpdGVyID0gZmluZExhc3RXcml0ZXIoY29tbWl0TG9nLCAnc3lzdGVtUHJvbXB0JywgOCk7XG4gKlxuICogLy8gQnVpbGQgYSBrZXllZCByZWNvcmRlciAoMToxIOKAlCBvbmUgZW50cnkgcGVyIHN0ZXApXG4gKiBjbGFzcyBNeVJlY29yZGVyIGV4dGVuZHMgS2V5ZWRSZWNvcmRlcjxNeUVudHJ5PiB7IC4uLiB9XG4gKlxuICogLy8gQnVpbGQgYSBzZXF1ZW5jZSByZWNvcmRlciAoMTpOIOKAlCBtdWx0aXBsZSBlbnRyaWVzIHBlciBzdGVwLCBvcmRlcmluZyBtYXR0ZXJzKVxuICogY2xhc3MgQXVkaXRSZWNvcmRlciBleHRlbmRzIFNlcXVlbmNlUmVjb3JkZXI8QXVkaXRFbnRyeT4geyAuLi4gfVxuICogYGBgXG4gKi9cblxuLy8gUnVudGltZSBzdGFnZSBJRCDigJQgdW5pcXVlIGV4ZWN1dGlvbiBzdGVwIGlkZW50aWZpZXJzXG5leHBvcnQgdHlwZSB7IEV4ZWN1dGlvbkNvdW50ZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvcnVudGltZVN0YWdlSWQuanMnO1xuZXhwb3J0IHtcbiAgYnVpbGRSdW50aW1lU3RhZ2VJZCxcbiAgY3JlYXRlRXhlY3V0aW9uQ291bnRlcixcbiAgcGFyc2VSdW50aW1lU3RhZ2VJZCxcbiAgc3BsaXRTdGFnZUlkLFxufSBmcm9tICcuL2xpYi9lbmdpbmUvcnVudGltZVN0YWdlSWQuanMnO1xuXG4vLyB3YWxrU3ViZmxvd1NwZWMg4oCUIGZsYXQgb3JkZXJlZCB0cmF2ZXJzYWwgb2YgYSBzdWJmbG93J3Mgc3RydWN0dXJlXG4vLyAoY29uc3VtZSB2aWEgU3RydWN0dXJlUmVjb3JkZXIub25TdWJmbG93TW91bnRlZCdzIHN1YmZsb3dTcGVjIHBheWxvYWQpXG5leHBvcnQgdHlwZSB7IFdhbGtlckl0ZW0sIFdhbGtlck9wdGlvbnMgfSBmcm9tICcuL2xpYi9lbmdpbmUvd2Fsa1N1YmZsb3dTcGVjLmpzJztcbmV4cG9ydCB7IHdhbGtTdWJmbG93U3BlYyB9IGZyb20gJy4vbGliL2VuZ2luZS93YWxrU3ViZmxvd1NwZWMuanMnO1xuXG4vLyBDb21taXQgbG9nIHF1ZXJpZXMg4oCUIHR5cGVkIHV0aWxpdGllcyBmb3IgYmFja3RyYWNraW5nXG5leHBvcnQgeyBmaW5kQ29tbWl0LCBmaW5kQ29tbWl0cywgZmluZExhc3RXcml0ZXIgfSBmcm9tICcuL2xpYi9tZW1vcnkvY29tbWl0TG9nVXRpbHMuanMnO1xuXG4vLyBDYXVzYWwgY2hhaW4g4oCUIGJhY2t3YXJkIHByb2dyYW0gc2xpY2luZyBvbiBjb21taXQgbG9nIChEQUcpXG5leHBvcnQgdHlwZSB7IENhdXNhbENoYWluT3B0aW9ucywgQ2F1c2FsTm9kZSwgS2V5c1JlYWRMb29rdXAgfSBmcm9tICcuL2xpYi9tZW1vcnkvYmFja3RyYWNrLmpzJztcbmV4cG9ydCB7IGNhdXNhbENoYWluLCBmbGF0dGVuQ2F1c2FsREFHLCBmb3JtYXRDYXVzYWxDaGFpbiB9IGZyb20gJy4vbGliL21lbW9yeS9iYWNrdHJhY2suanMnO1xuXG4vLyDilIDilIAgdjUgU3RvcmVzIChjb25jcmV0ZSwgY29tcG9zYWJsZSDigJQgcHJpbWFyeSByZWNvcmRlciBBUEkpIOKUgOKUgOKUgOKUgOKUgFxuLy8gQ29tcG9zZSB0aGVzZSB2aWEgYG5ldyBTdG9yZTxUPigpYCBhcyBhIGZpZWxkIG9uIHlvdXIgcmVjb3JkZXJcbi8vIGNsYXNzLiBPbmUgcHVycG9zZSBwZXIgcmVjb3JkZXI6IHN0b3JlcyBhcmUgc3RvcmFnZTsgcmVjb3JkZXJzXG4vLyBhcmUgZXZlbnQtaG9vayBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb25zLlxuZXhwb3J0IHsgQm91bmRhcnlTdGF0ZVN0b3JlIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvQm91bmRhcnlTdGF0ZVN0b3JlLmpzJztcbmV4cG9ydCB7IEtleWVkU3RvcmUgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9LZXllZFN0b3JlLmpzJztcbmV4cG9ydCB7IFNlcXVlbmNlU3RvcmUgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9TZXF1ZW5jZVN0b3JlLmpzJztcblxuLy8g4pSA4pSAIHY1LjEgQ29tbWl0IGdyb3VwaW5nIHByaW1pdGl2ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEludGVydmFsIGluZGV4IG92ZXIgY29tbWl0IGluZGljZXMuIEJ1aWx0IGluY3JlbWVudGFsbHkgZHVyaW5nXG4vLyB0cmF2ZXJzYWw6IG9wZW4oKSBvbiBib3VuZGFyeSBlbnRyeSwgY2xvc2UoKSBvbiBleGl0LiBRdWVyeSBhdCBhbnlcbi8vIGNvbW1pdCBwb3NpdGlvbiB3aXRoIGVuY2xvc2luZygpL292ZXJsYXBwaW5nKCkuIEdlbmVyaWMgb3ZlciBUTGFiZWxcbi8vIOKAlCBmb290cHJpbnRqcyBvd25zIFpFUk8ga25vd2xlZGdlIG9mIHdoYXQgY29uc3VtZXJzIHVzZSBhcyBsYWJlbHMuXG4vLyBTZWUgZG9jcy9kZXNpZ24vY29tbWl0LXJhbmdlLWluZGV4Lm1kIGZvciB0aGUgZnVsbCBjb250cmFjdC5cbmV4cG9ydCB0eXBlIHsgUmFuZ2VFbnRyeSwgUmFuZ2VUb2tlbiB9IGZyb20gJy4vbGliL3JlY29yZGVyL0NvbW1pdFJhbmdlSW5kZXguanMnO1xuZXhwb3J0IHsgQ29tbWl0UmFuZ2VJbmRleCB9IGZyb20gJy4vbGliL3JlY29yZGVyL0NvbW1pdFJhbmdlSW5kZXguanMnO1xuXG4vLyDilIDilIAgQWJzdHJhY3QgYmFzZXMgKERFUFJFQ0FURUQgaW4gdjUg4oCUIHNsYXRlZCBmb3IgcmVtb3ZhbCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBLZXB0IGR1cmluZyB0aGUgdjUgbWlncmF0aW9uIHdpbmRvdyBmb3IgZG93bnN0cmVhbSBjb25zdW1lcnNcbi8vIChhZ2VudGZvb3RwcmludCwgYWdlbnRmb290cHJpbnQtbGVucywgZXRjLikgdGhhdCBzdGlsbCBleHRlbmRcbi8vIHRoZW0uIE1pZ3JhdGUgdG8gdGhlIGNvcnJlc3BvbmRpbmcgU3RvcmUgY2xhc3MgYWJvdmUuXG4vLyBLZXllZFJlY29yZGVyIOKAlCBiYXNlIGNsYXNzIGZvciAxOjEgTWFwLWJhc2VkIHJlY29yZGVyc1xuZXhwb3J0IHsgS2V5ZWRSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL0tleWVkUmVjb3JkZXIuanMnO1xuXG4vLyBTZXF1ZW5jZVJlY29yZGVyIOKAlCBiYXNlIGNsYXNzIGZvciAxOk4gb3JkZXJlZCBzZXF1ZW5jZSByZWNvcmRlcnMgd2l0aCBrZXllZCBpbmRleFxuZXhwb3J0IHsgU2VxdWVuY2VSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL1NlcXVlbmNlUmVjb3JkZXIuanMnO1xuXG4vLyBCb3VuZGFyeVN0YXRlVHJhY2tlciDigJQgYmFzZSBjbGFzcyBmb3IgdHJhbnNpZW50IGJyYWNrZXQtc2NvcGVkIHN0YXRlXG4vLyAobGl2ZSBzdGF0ZSBEVVJJTkcgYSBtYXRjaGVkIFtzdGFydCwgc3RvcF0gZXZlbnQgaW50ZXJ2YWw7IGNsZWFycyBvbiBzdG9wKVxuZXhwb3J0IHsgQm91bmRhcnlTdGF0ZVRyYWNrZXIgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9Cb3VuZGFyeVN0YXRlVHJhY2tlci5qcyc7XG5cbi8vIFRvcG9sb2d5UmVjb3JkZXIg4oCUIGNvbXBvc2l0aW9uIGdyYXBoIGFjY3VtdWxhdG9yIChzdWJmbG93cyArIGNvbnRyb2wtZmxvdyBlZGdlcylcbmV4cG9ydCB0eXBlIHtcbiAgVG9wb2xvZ3ksXG4gIFRvcG9sb2d5RWRnZSxcbiAgVG9wb2xvZ3lJbmNvbWluZ0tpbmQsXG4gIFRvcG9sb2d5Tm9kZSxcbiAgVG9wb2xvZ3lSZWNvcmRlck9wdGlvbnMsXG59IGZyb20gJy4vbGliL3JlY29yZGVyL1RvcG9sb2d5UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgVG9wb2xvZ3lSZWNvcmRlciwgdG9wb2xvZ3lSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL1RvcG9sb2d5UmVjb3JkZXIuanMnO1xuXG4vLyBJbk91dFJlY29yZGVyIOKAlCBjaGFydCBpbi9vdXQgc3RyZWFtIChlbnRyeS9leGl0IHBhaXJzIGF0IGV2ZXJ5IGNoYXJ0IGJvdW5kYXJ5LFxuLy8gaW5jbHVkaW5nIHRoZSB0b3AtbGV2ZWwgcnVuIGFuZCBldmVyeSBzdWJmbG93KVxuZXhwb3J0IHR5cGUgeyBJbk91dEVudHJ5LCBJbk91dFBoYXNlLCBJbk91dFJlY29yZGVyT3B0aW9ucyB9IGZyb20gJy4vbGliL3JlY29yZGVyL0luT3V0UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgSW5PdXRSZWNvcmRlciwgaW5PdXRSZWNvcmRlciwgUk9PVF9SVU5USU1FX1NUQUdFX0lELCBST09UX1NVQkZMT1dfSUQgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9Jbk91dFJlY29yZGVyLmpzJztcblxuLy8gUXVhbGl0eVJlY29yZGVyIOKAlCBwZXItc3RlcCBxdWFsaXR5IHNjb3Jpbmcgd2l0aCBiYWNrdHJhY2tpbmdcbmV4cG9ydCB0eXBlIHsgUXVhbGl0eUVudHJ5LCBRdWFsaXR5UmVjb3JkZXJPcHRpb25zLCBRdWFsaXR5U2NvcmluZ0ZuIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvUXVhbGl0eVJlY29yZGVyLmpzJztcbmV4cG9ydCB7IFF1YWxpdHlSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL1F1YWxpdHlSZWNvcmRlci5qcyc7XG5cbi8vIHF1YWxpdHlUcmFjZSDigJQgUXVhbGl0eSBTdGFjayBUcmFjZSAoYmFja3RyYWNrIGZyb20gbG93LXNjb3Jpbmcgc3RlcHMpXG5leHBvcnQgdHlwZSB7IFF1YWxpdHlGcmFtZSwgUXVhbGl0eVN0YWNrVHJhY2UgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9xdWFsaXR5VHJhY2UuanMnO1xuZXhwb3J0IHsgZm9ybWF0UXVhbGl0eVRyYWNlLCBxdWFsaXR5VHJhY2UgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9xdWFsaXR5VHJhY2UuanMnO1xuIl19
|
package/dist/types/advanced.d.ts
CHANGED
|
@@ -26,7 +26,7 @@ export { EventLog } from './lib/memory/index.js';
|
|
|
26
26
|
export { TransactionBuffer } from './lib/memory/index.js';
|
|
27
27
|
export { DiagnosticCollector } from './lib/memory/index.js';
|
|
28
28
|
export { applySmartMerge, deepSmartMerge, getNestedValue, getRunAndGlobalPaths, normalisePath, redactPatch, setNestedValue, updateNestedValue, updateValue, } from './lib/memory/index.js';
|
|
29
|
-
export type {
|
|
29
|
+
export type { ExecOptions, FlowChartOptions, FlowChartSpec, ILogger, ScopeProtectionMode, SerializedPipelineStructure, SimplifiedParallelSpec, StageFn, StageNode, StreamCallback, StreamLifecycleHandler, StreamTokenHandler, SubflowMountOptions, SubflowRef, } from './lib/builder/index.js';
|
|
30
30
|
export { ArrayMergeMode, DeciderList, SelectorFnList, specToStageNode } from './lib/builder/index.js';
|
|
31
31
|
export { createTypedScopeFactory } from './lib/builder/typedFlowChart.js';
|
|
32
32
|
export type { ProviderResolver, ResolveOptions, ScopeProvider, StageContextLike, StrictMode, } from './lib/scope/index.js';
|
|
@@ -44,10 +44,10 @@ export { FlowchartTraverser } from './lib/engine/index.js';
|
|
|
44
44
|
export { isStageNodeReturn } from './lib/engine/index.js';
|
|
45
45
|
export type { IControlFlowNarrative } from './lib/engine/index.js';
|
|
46
46
|
export type { CombinedNarrativeEntry, CombinedNarrativeOptions } from './lib/engine/index.js';
|
|
47
|
-
export type { BranchResult, BranchResults, SerializedPipelineStructure as EngineSerializedPipelineStructure,
|
|
47
|
+
export type { BranchResult, BranchResults, SerializedPipelineStructure as EngineSerializedPipelineStructure, HandlerDeps, IExecutionRuntime, NodeResultType, RuntimeStructureMetadata, ScopeFactory, SerializedPipelineNode, StageFunction, SubflowResult, TraversalResult, } from './lib/engine/index.js';
|
|
48
48
|
export { NullControlFlowNarrativeGenerator } from './lib/engine/index.js';
|
|
49
|
-
export type {
|
|
50
|
-
export { applyOutputMapping, ChildrenExecutor, computeNodeType, ContinuationResolver, createSubflowHandlerDeps, DeciderHandler, DEFAULT_MAX_ITERATIONS,
|
|
49
|
+
export type { ExecuteNodeFn, RunStageFn } from './lib/engine/index.js';
|
|
50
|
+
export { applyOutputMapping, ChildrenExecutor, computeNodeType, ContinuationResolver, createSubflowHandlerDeps, DeciderHandler, DEFAULT_MAX_ITERATIONS, extractParentScopeValues, getInitialScopeValues, NodeResolver, RuntimeStructureManager, seedSubflowGlobalStore, SelectorHandler, StageRunner, SubflowExecutor, } from './lib/engine/index.js';
|
|
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';
|
package/dist/types/index.d.ts
CHANGED
|
@@ -16,7 +16,9 @@
|
|
|
16
16
|
/** @category Quick Start */
|
|
17
17
|
export type { FlowChart, StageFunction as StageHandler, StreamHandlers } from './lib/builder/index.js';
|
|
18
18
|
/** @category Quick Start */
|
|
19
|
-
export { flowChart, FlowChartBuilder } from './lib/builder/index.js';
|
|
19
|
+
export { flowChart, FlowChartBuilder, flowChartSelector } from './lib/builder/index.js';
|
|
20
|
+
/** @category Quick Start — build-time observer (twin of FlowRecorder) */
|
|
21
|
+
export type { StructureDeciderCompleteEvent, StructureEdgeAddedEvent, StructureEdgeKind, StructureLoopEdgeAddedEvent, StructureRecorder, StructureStageAddedEvent, StructureSubflowMountedEvent, } from './lib/builder/index.js';
|
|
20
22
|
/** @category Quick Start */
|
|
21
23
|
export type { TypedStageFunction } from './lib/builder/typedFlowChart.js';
|
|
22
24
|
/** @category Quick Start */
|
|
@@ -60,7 +62,7 @@ export { hasEmitRecorderMethods, hasFlowRecorderMethods, hasRecorderMethods, isF
|
|
|
60
62
|
*/
|
|
61
63
|
export type { EmitEvent, EmitRecorder } from './lib/recorder/index.js';
|
|
62
64
|
/** @category Observe — Flow */
|
|
63
|
-
export type { FlowBreakEvent, FlowDecisionEvent, FlowErrorEvent, FlowForkEvent, FlowLoopEvent, FlowNextEvent, FlowRecorder, FlowSelectedEvent, FlowStageEvent, FlowSubflowEvent, FlowSubflowRegisteredEvent, TraversalContext, } from './lib/engine/index.js';
|
|
65
|
+
export type { FlowBreakEvent, FlowDecisionEvent, FlowErrorEvent, FlowForkEvent, FlowLoopEvent, FlowNextEvent, FlowRecorder, FlowRunEvent, FlowRunFailedEvent, FlowSelectedEvent, FlowStageEvent, FlowSubflowEvent, FlowSubflowRegisteredEvent, TraversalContext, } from './lib/engine/index.js';
|
|
64
66
|
/** @category Observe — Flow */
|
|
65
67
|
export type { CombinedNarrativeEntry } from './lib/engine/index.js';
|
|
66
68
|
/**
|
|
@@ -15,8 +15,10 @@ import type { ScopeFactory } 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 { StructureEdgeKind, StructureRecorder } from './structure/StructureRecorder.js';
|
|
19
|
+
import { StructureRecorderDispatcher } from './structure/StructureRecorderDispatcher.js';
|
|
18
20
|
import { type TypedStageFunction } from './typedFlowChart.js';
|
|
19
|
-
import type {
|
|
21
|
+
import type { FlowChart, FlowChartOptions, FlowChartSpec, ILogger, SerializedPipelineStructure, SimplifiedParallelSpec, StageFunction, StageNode, StreamLifecycleHandler, StreamTokenHandler, SubflowMountOptions } from './types.js';
|
|
20
22
|
/**
|
|
21
23
|
* Fluent helper returned by addDeciderFunction to add branches.
|
|
22
24
|
* `end()` sets `deciderFn = true` — the fn IS the decider.
|
|
@@ -33,7 +35,12 @@ export declare class DeciderList<TOut = any, TScope = any> {
|
|
|
33
35
|
private readonly deciderDescription?;
|
|
34
36
|
private readonly branchDescInfo;
|
|
35
37
|
constructor(builder: FlowChartBuilder<TOut, TScope>, curNode: StageNode<TOut, TScope>, curSpec: SerializedPipelineStructure, parentDescriptionParts?: string[], parentStageDescriptions?: Map<string, string>, reservedStepNumber?: number, deciderDescription?: string);
|
|
36
|
-
addFunctionBranch(id: string, name: string, fn?: StageFunction<TOut, TScope>, description?: string
|
|
38
|
+
addFunctionBranch(id: string, name: string, fn?: StageFunction<TOut, TScope>, description?: string,
|
|
39
|
+
/** `{ loopTo }` declares this branch loops back to an already-declared
|
|
40
|
+
* stage — the loop is SOURCED FROM THIS BRANCH (not the decider). */
|
|
41
|
+
options?: {
|
|
42
|
+
readonly loopTo?: string;
|
|
43
|
+
}): DeciderList<TOut, TScope>;
|
|
37
44
|
/**
|
|
38
45
|
* Add a pausable stage as a decider branch.
|
|
39
46
|
*
|
|
@@ -42,7 +49,12 @@ export declare class DeciderList<TOut = any, TScope = any> {
|
|
|
42
49
|
* human's input. If `execute` returns void, the stage continues normally
|
|
43
50
|
* (conditional pause).
|
|
44
51
|
*/
|
|
45
|
-
addPausableFunctionBranch(id: string, name: string, handler: PausableHandler<TScope>, description?: string
|
|
52
|
+
addPausableFunctionBranch(id: string, name: string, handler: PausableHandler<TScope>, description?: string,
|
|
53
|
+
/** `{ loopTo }` declares this branch loops back to an already-declared
|
|
54
|
+
* stage — the loop is SOURCED FROM THIS BRANCH (not the decider). */
|
|
55
|
+
options?: {
|
|
56
|
+
readonly loopTo?: string;
|
|
57
|
+
}): DeciderList<TOut, TScope>;
|
|
46
58
|
addSubFlowChartBranch(id: string, subflow: FlowChart<any, any>, mountName?: string, options?: SubflowMountOptions): DeciderList<TOut, TScope>;
|
|
47
59
|
addLazySubFlowChartBranch(id: string, resolver: () => FlowChart<any, any>, mountName?: string, options?: SubflowMountOptions): DeciderList<TOut, TScope>;
|
|
48
60
|
addBranchList(branches: Array<{
|
|
@@ -51,6 +63,39 @@ export declare class DeciderList<TOut = any, TScope = any> {
|
|
|
51
63
|
fn?: StageFunction<TOut, TScope>;
|
|
52
64
|
}>): DeciderList<TOut, TScope>;
|
|
53
65
|
setDefault(id: string): DeciderList<TOut, TScope>;
|
|
66
|
+
/**
|
|
67
|
+
* Attach a loop-back edge to the LAST-added branch, so the loop is sourced
|
|
68
|
+
* from THAT branch node (e.g. `'tool-calls' → loopTo('context')`) rather than
|
|
69
|
+
* from the decider. The chart then reads honestly: the decider splits into a
|
|
70
|
+
* looping branch `[ToolCalls → back to Context]` and a terminating branch
|
|
71
|
+
* `[Final → end]`, instead of a single loop hanging off the decider.
|
|
72
|
+
*
|
|
73
|
+
* No engine change is needed: the runtime runs the chosen branch and then
|
|
74
|
+
* follows that branch node's OWN `next` — and a `next` flagged `isLoopRef`
|
|
75
|
+
* routes back to the target exactly like the decider's own loop does. This
|
|
76
|
+
* method just lets the builder express what the engine already supports.
|
|
77
|
+
*
|
|
78
|
+
* Targets the branch added immediately before this call (chain it right after
|
|
79
|
+
* the branch's `addFunctionBranch`/`addPausableFunctionBranch`/
|
|
80
|
+
* `addSubFlowChartBranch`). Mirrors `FlowChartBuilder.loopTo` validation.
|
|
81
|
+
*
|
|
82
|
+
* Works on a SUBFLOW branch too: the branch node carries both its subflow
|
|
83
|
+
* resolver AND the loop-back `next` — they coexist safely (the runtime runs
|
|
84
|
+
* the subflow, then follows the loop ref). The target must be a stage already
|
|
85
|
+
* declared BEFORE the decider (e.g. an upstream `context`); branch ids and the
|
|
86
|
+
* synthetic `'default'` clone are NOT valid loop targets.
|
|
87
|
+
*/
|
|
88
|
+
loopTo(stageId: string): DeciderList<TOut, TScope>;
|
|
89
|
+
/**
|
|
90
|
+
* Decorate ONE branch node/spec with a loop-back edge to `stageId`. Shared by
|
|
91
|
+
* the positional `loopTo()` (which targets the last-added branch) AND the
|
|
92
|
+
* per-branch `{ loopTo }` option on `addFunctionBranch` /
|
|
93
|
+
* `addPausableFunctionBranch` / `addSubFlowChartBranch`. Either way the loop
|
|
94
|
+
* SOURCE is the branch — so visualizers read `tool-calls → context`, never
|
|
95
|
+
* `Route → context`. Validates the target is a stage declared BEFORE the
|
|
96
|
+
* decider (branch ids / the synthetic 'default' clone are not valid targets).
|
|
97
|
+
*/
|
|
98
|
+
private _applyBranchLoop;
|
|
54
99
|
end(): FlowChartBuilder<TOut, TScope>;
|
|
55
100
|
}
|
|
56
101
|
export declare class SelectorFnList<TOut = any, TScope = any> {
|
|
@@ -92,9 +137,22 @@ export declare class FlowChartBuilder<TOut = any, TScope = any> {
|
|
|
92
137
|
root: StageNode<TOut, TScope>;
|
|
93
138
|
}>;
|
|
94
139
|
private _streamHandlers;
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
140
|
+
/**
|
|
141
|
+
* L7.3 — Build-time observer fan-out. Owned by the builder so every
|
|
142
|
+
* `addX()` method can fire `StructureRecorder` events at the natural
|
|
143
|
+
* moment of the corresponding mutation. Dispatcher is allocated
|
|
144
|
+
* lazily on first attach to keep the zero-recorder path allocation-
|
|
145
|
+
* free.
|
|
146
|
+
*/
|
|
147
|
+
private _structureDispatcher?;
|
|
148
|
+
/**
|
|
149
|
+
* L7.3 — Sealed-after-build flag (Panel 2 phase invariant). Flips
|
|
150
|
+
* to `true` when `.build()` returns; subsequent `attachStructureRecorder`
|
|
151
|
+
* throws. Prevents the footgun where a consumer attaches a recorder
|
|
152
|
+
* mid-execution and gets partial structure data (missed every event
|
|
153
|
+
* already fired during construction).
|
|
154
|
+
*/
|
|
155
|
+
private _sealed;
|
|
98
156
|
private _enableNarrative;
|
|
99
157
|
private _logger?;
|
|
100
158
|
private _descriptionParts;
|
|
@@ -106,7 +164,104 @@ export declare class FlowChartBuilder<TOut = any, TScope = any> {
|
|
|
106
164
|
private _outputSchema?;
|
|
107
165
|
private _outputMapper?;
|
|
108
166
|
private _scopeFactory?;
|
|
109
|
-
|
|
167
|
+
/**
|
|
168
|
+
* Attach a `StructureRecorder` for build-phase observation. Multiple
|
|
169
|
+
* recorders coexist (same id allowed; iteration order = attach
|
|
170
|
+
* order). Throws if called after `.build()` — the chart is sealed at
|
|
171
|
+
* that point and any recorder attached late would miss every event
|
|
172
|
+
* fired during construction.
|
|
173
|
+
*
|
|
174
|
+
* **Seed replay**: when this is called AFTER `start()` has already
|
|
175
|
+
* fired (i.e., after the `flowChart()` factory returns), the
|
|
176
|
+
* just-attached recorder receives a one-time `onStageAdded` for the
|
|
177
|
+
* root stage so it observes the seed. Only the new recorder sees
|
|
178
|
+
* the replay; already-attached recorders are not re-fired.
|
|
179
|
+
*
|
|
180
|
+
* **Mid-chain attach caveat**: a recorder attached AFTER one or more
|
|
181
|
+
* `addX()` calls receives the seed replay but MISSES every
|
|
182
|
+
* intermediate event. Attach BEFORE the first `addX()` for complete
|
|
183
|
+
* capture.
|
|
184
|
+
*
|
|
185
|
+
* Public for now to enable direct attach in tests + early consumers.
|
|
186
|
+
* L7.4 will wire `flowChart(..., { structureRecorders: [...] })` as
|
|
187
|
+
* an additional registration site; this method will remain.
|
|
188
|
+
*/
|
|
189
|
+
attachStructureRecorder(recorder: StructureRecorder): this;
|
|
190
|
+
/**
|
|
191
|
+
* Inspect accumulated `StructureBuildError`s. Returns empty array
|
|
192
|
+
* when no recorders attached OR no errors occurred. Returns a
|
|
193
|
+
* defensive copy — caller mutations do not affect subsequent calls.
|
|
194
|
+
*
|
|
195
|
+
* **Call on the BUILDER, not the chart returned by `.build()`.**
|
|
196
|
+
* Capture the builder reference before `.build()` if you need
|
|
197
|
+
* post-build access:
|
|
198
|
+
* ```ts
|
|
199
|
+
* const builder = flowChart(...).attachStructureRecorder(rec);
|
|
200
|
+
* const chart = builder.build();
|
|
201
|
+
* const errors = builder.getStructureBuildErrors();
|
|
202
|
+
* ```
|
|
203
|
+
*/
|
|
204
|
+
getStructureBuildErrors(): ReturnType<StructureRecorderDispatcher['getErrors']>;
|
|
205
|
+
private _fireStageAdded;
|
|
206
|
+
private _fireEdgeAdded;
|
|
207
|
+
private _fireLoopEdgeAdded;
|
|
208
|
+
/**
|
|
209
|
+
* Fire the `next` edge(s) from a parent spec to a freshly-added
|
|
210
|
+
* node — with convergence expansion when the parent is a
|
|
211
|
+
* fork / decider / selector with branches.
|
|
212
|
+
*
|
|
213
|
+
* A fork at `parent` is semantically `parent ──fork-branch──► child[i]`
|
|
214
|
+
* for each child, and the chained `.addFunction(X)` continues
|
|
215
|
+
* AFTER the fork converges. The runtime semantics are that each
|
|
216
|
+
* child INDEPENDENTLY feeds `X` (parallel completion → join). The
|
|
217
|
+
* literal "edge from parent to X" would misrepresent this —
|
|
218
|
+
* visualizers and topological algorithms would see one edge where
|
|
219
|
+
* there should be N convergence edges.
|
|
220
|
+
*
|
|
221
|
+
* Fix: when `parentSpec` has branch children (fork or branched
|
|
222
|
+
* decider/selector), fire one `next` edge from EACH child to the
|
|
223
|
+
* target. Otherwise fire the single edge from `parentSpec` itself.
|
|
224
|
+
*
|
|
225
|
+
* Loop-reference children (synthetic spec nodes created by
|
|
226
|
+
* `.loopTo()`) are excluded — they're back-edge markers, not
|
|
227
|
+
* convergence sources. A branch that carries an OWN loop-back `next`
|
|
228
|
+
* (a branch-sourced `loopTo`) is likewise skipped — it loops, it does
|
|
229
|
+
* not converge at the linear next stage.
|
|
230
|
+
*
|
|
231
|
+
* A branch carrying `convergeAt` is REDIRECTED: its single convergence
|
|
232
|
+
* edge fires to its named target instead of `targetId` — expressing an
|
|
233
|
+
* unequal-depth merge (e.g. `tools → call-llm`, bypassing `message-api`).
|
|
234
|
+
* The named target is a forward stage, so it is NOT validated here.
|
|
235
|
+
*
|
|
236
|
+
* Call ORDER constraint: must be called BEFORE the cursor advances
|
|
237
|
+
* to the new target. The caller passes the PRE-ADVANCE parent spec.
|
|
238
|
+
*/
|
|
239
|
+
private _fireNextEdgeFromParent;
|
|
240
|
+
private _fireDeciderComplete;
|
|
241
|
+
private _fireSubflowMounted;
|
|
242
|
+
/** Sub-builder access (`.b._fireXxx`) is needed by DeciderList /
|
|
243
|
+
* SelectorFnList; expose the dispatcher through internal helpers
|
|
244
|
+
* that go through the same no-op-when-absent guard.
|
|
245
|
+
*
|
|
246
|
+
* @internal — these methods are exposed because TypeScript `private`
|
|
247
|
+
* doesn't traverse class boundaries. Consumer code MUST NOT call
|
|
248
|
+
* them; calling them post-construction lets a hostile caller
|
|
249
|
+
* fabricate structure events and corrupt downstream visualizations
|
|
250
|
+
* or audit trails. The `_` prefix is intentional convention. */
|
|
251
|
+
_fireEdgeAddedFromSubBuilder(from: string, to: string, kind: StructureEdgeKind, label?: string): void;
|
|
252
|
+
/** @internal — see `_fireEdgeAddedFromSubBuilder`. */
|
|
253
|
+
_fireStageAddedFromSubBuilder(spec: SerializedPipelineStructure): void;
|
|
254
|
+
/** @internal — see `_fireEdgeAddedFromSubBuilder`. */
|
|
255
|
+
_fireDeciderCompleteFromSubBuilder(decider: string, type: 'decider' | 'selector', branchIds: string[], defaultBranch?: string): void;
|
|
256
|
+
/** @internal — see `_fireEdgeAddedFromSubBuilder`. */
|
|
257
|
+
_fireSubflowMountedFromSubBuilder(subflowId: string, subflowName: string, rootStageId: string, isLazy?: boolean, subflowSpec?: SerializedPipelineStructure, subflowPath?: string): void;
|
|
258
|
+
/** @internal — see `_fireEdgeAddedFromSubBuilder`. Used by `DeciderList.loopTo`
|
|
259
|
+
* to validate a branch-sourced loop target against the known stage ids
|
|
260
|
+
* (mirrors `FlowChartBuilder.loopTo`'s `_knownStageIds.has` guard). */
|
|
261
|
+
_knownStageIdsHas(id: string): boolean;
|
|
262
|
+
/** @internal — see `_fireEdgeAddedFromSubBuilder`. Used by `DeciderList.loopTo`
|
|
263
|
+
* to fire a loop back-edge SOURCED FROM A BRANCH node (not the decider). */
|
|
264
|
+
_fireLoopEdgeAddedFromSubBuilder(from: string, to: string): void;
|
|
110
265
|
private _appendDescriptionLine;
|
|
111
266
|
private _appendSubflowDescription;
|
|
112
267
|
setLogger(logger: ILogger): this;
|
|
@@ -123,6 +278,21 @@ export declare class FlowChartBuilder<TOut = any, TScope = any> {
|
|
|
123
278
|
mapper?: (finalScope: Record<string, unknown>) => unknown;
|
|
124
279
|
}): this;
|
|
125
280
|
start(name: string, fn: StageFunction<TOut, TScope> | PausableHandler<TScope>, id: string, description?: string): this;
|
|
281
|
+
/**
|
|
282
|
+
* Start a chart whose ROOT stage IS a selector — it runs first (reading
|
|
283
|
+
* args, seeding state, returning the chosen branch ids via `select()`),
|
|
284
|
+
* and its branches attach directly to the root. Mirrors `start()` for the
|
|
285
|
+
* root-node setup, then returns a `SelectorFnList` bound to the root so
|
|
286
|
+
* `.addFunctionBranch()` / `.addSubFlowChartBranch()` / `.end()` work
|
|
287
|
+
* exactly as they do after `addSelectorFunction()`.
|
|
288
|
+
*
|
|
289
|
+
* Use when the first thing a chart does is choose among branches — e.g. a
|
|
290
|
+
* `Context` selector that inits + picks which context slots to engineer,
|
|
291
|
+
* with no separate seed stage before it.
|
|
292
|
+
*/
|
|
293
|
+
startSelector(name: string, fn: StageFunction<any, TScope>, id: string, description?: string, options?: {
|
|
294
|
+
failFast?: boolean;
|
|
295
|
+
}): SelectorFnList<TOut, TScope>;
|
|
126
296
|
addFunction(name: string, fn: StageFunction<TOut, TScope>, id: string, description?: string): this;
|
|
127
297
|
addStreamingFunction(name: string, fn: StageFunction<TOut, TScope>, id: string, streamId?: string, description?: string): this;
|
|
128
298
|
/**
|
|
@@ -228,7 +398,9 @@ export declare class FlowChartBuilder<TOut = any, TScope = any> {
|
|
|
228
398
|
description?: string;
|
|
229
399
|
}): this;
|
|
230
400
|
addDeciderFunction(name: string, fn: StageFunction<any, TScope>, id: string, description?: string): DeciderList<TOut, TScope>;
|
|
231
|
-
addSelectorFunction(name: string, fn: StageFunction<any, TScope>, id: string, description?: string
|
|
401
|
+
addSelectorFunction(name: string, fn: StageFunction<any, TScope>, id: string, description?: string, options?: {
|
|
402
|
+
failFast?: boolean;
|
|
403
|
+
}): SelectorFnList<TOut, TScope>;
|
|
232
404
|
addListOfFunction(children: SimplifiedParallelSpec<TOut, TScope>[], options?: {
|
|
233
405
|
failFast?: boolean;
|
|
234
406
|
}): this;
|
|
@@ -240,12 +412,6 @@ export declare class FlowChartBuilder<TOut = any, TScope = any> {
|
|
|
240
412
|
onStream(handler: StreamTokenHandler): this;
|
|
241
413
|
onStreamStart(handler: StreamLifecycleHandler): this;
|
|
242
414
|
onStreamEnd(handler: StreamLifecycleHandler): this;
|
|
243
|
-
addTraversalExtractor<TResult = unknown>(extractor: TraversalExtractor<TResult>): this;
|
|
244
|
-
addBuildTimeExtractor<TResult = FlowChartSpec>(extractor: BuildTimeExtractor<TResult>): this;
|
|
245
|
-
getBuildTimeExtractorErrors(): Array<{
|
|
246
|
-
message: string;
|
|
247
|
-
error: unknown;
|
|
248
|
-
}>;
|
|
249
415
|
build(): RunnableFlowChart<TOut, TScope>;
|
|
250
416
|
/** Override the scope factory. Rarely needed — auto-embeds TypedScope by default. */
|
|
251
417
|
setScopeFactory(factory: ScopeFactory<TScope>): this;
|
|
@@ -253,7 +419,11 @@ export declare class FlowChartBuilder<TOut = any, TScope = any> {
|
|
|
253
419
|
toMermaid(): string;
|
|
254
420
|
private _needCursor;
|
|
255
421
|
private _needCursorSpec;
|
|
256
|
-
|
|
422
|
+
/**
|
|
423
|
+
* Advance the spec cursor. Retained as a method so call sites stay
|
|
424
|
+
* one-liners and future cursor-related side effects have a hook.
|
|
425
|
+
*/
|
|
426
|
+
private _advanceCursorSpec;
|
|
257
427
|
_stageMapHas(key: string): boolean;
|
|
258
428
|
_addToMap(id: string, fn: StageFunction<TOut, TScope>): void;
|
|
259
429
|
_mergeStageMap(other: Map<string, StageFunction<TOut, TScope>>, prefix?: string): void;
|
|
@@ -262,6 +432,21 @@ export declare class FlowChartBuilder<TOut = any, TScope = any> {
|
|
|
262
432
|
root: StageNode<TOut, TScope>;
|
|
263
433
|
}> | undefined, prefix: string): void;
|
|
264
434
|
}
|
|
265
|
-
export declare function flowChart<TState extends object>(name: string, fn: TypedStageFunction<TState> | PausableHandler<TypedScope<TState>>, id: string,
|
|
266
|
-
export declare function flowChart<TOut = any, TScope = any>(name: string, fn: StageFunction<TOut, TScope> | PausableHandler<TScope>, id: string,
|
|
435
|
+
export declare function flowChart<TState extends object>(name: string, fn: TypedStageFunction<TState> | PausableHandler<TypedScope<TState>>, id: string, options?: FlowChartOptions): FlowChartBuilder<any, TypedScope<TState>>;
|
|
436
|
+
export declare function flowChart<TOut = any, TScope = any>(name: string, fn: StageFunction<TOut, TScope> | PausableHandler<TScope>, id: string, options?: FlowChartOptions): FlowChartBuilder<TOut, TScope>;
|
|
437
|
+
/**
|
|
438
|
+
* Like `flowChart()`, but the ROOT stage is a SELECTOR — it runs first and
|
|
439
|
+
* its branches attach directly to it (no separate seed stage). Returns a
|
|
440
|
+
* `SelectorFnList`; declare branches then call `.end()` to get the builder
|
|
441
|
+
* back for any subsequent stages.
|
|
442
|
+
*
|
|
443
|
+
* @example
|
|
444
|
+
* flowChartSelector<MyState>('Context', contextSelectorFn, 'context')
|
|
445
|
+
* .addSubFlowChartBranch('sf-system-prompt', sysSlot, 'System Prompt', {...})
|
|
446
|
+
* .addSubFlowChartBranch('sf-messages', msgSlot, 'Messages', {...})
|
|
447
|
+
* .end()
|
|
448
|
+
* .addFunction('messageAPI', assembleFn, 'message-api')
|
|
449
|
+
* .build();
|
|
450
|
+
*/
|
|
451
|
+
export declare function flowChartSelector<TOut = any, TScope = any>(name: string, fn: StageFunction<any, TScope>, id: string, options?: FlowChartOptions): SelectorFnList<TOut, TScope>;
|
|
267
452
|
export declare function specToStageNode(spec: FlowChartSpec): StageNode<any, any>;
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* Can be used standalone for building flowchart specs without execution.
|
|
6
6
|
*/
|
|
7
7
|
export { DeciderList, FlowChartBuilder, SelectorFnList } from './FlowChartBuilder.js';
|
|
8
|
-
export { flowChart, specToStageNode } from './FlowChartBuilder.js';
|
|
9
|
-
export type {
|
|
8
|
+
export { flowChart, flowChartSelector, specToStageNode } from './FlowChartBuilder.js';
|
|
9
|
+
export type { ExecOptions, FlowChart, FlowChartOptions, FlowChartSpec, ILogger, ScopeProtectionMode, SerializedPipelineStructure, SimplifiedParallelSpec, StageFn, StageFunction, StageNode, StreamCallback, StreamHandlers, StreamLifecycleHandler, StreamTokenHandler, SubflowMountOptions, SubflowRef, } from './types.js';
|
|
10
10
|
export { ArrayMergeMode } from './types.js';
|
|
11
|
+
export type { StructureDeciderCompleteEvent, StructureEdgeAddedEvent, StructureEdgeKind, StructureLoopEdgeAddedEvent, StructureRecorder, StructureStageAddedEvent, StructureSubflowMountedEvent, } from './structure/StructureRecorder.js';
|