@sunshaobei/dsh-workflow 0.0.0-stage → 2.1.2
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/README.md +43 -2
- package/cordis.patch.yml +17 -0
- package/lib/client.js +14708 -0
- package/lib/core.js +137 -0
- package/lib/engine-adapter.js +1387 -0
- package/lib/host-driver.js +298 -0
- package/lib/index.js +536 -0
- package/lib/projection.js +159 -0
- package/lib/registry.js +218 -0
- package/lib/session-records.js +54 -0
- package/lib/submission-commit.js +34 -0
- package/lib/world-driver.js +275 -0
- package/package.json +67 -4
- package/vendor/PROVENANCE.md +9 -0
- package/vendor/dynamic-workflow/analysis/actor-graph.d.ts +47 -0
- package/vendor/dynamic-workflow/analysis/actor-graph.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/actor-graph.js +95 -0
- package/vendor/dynamic-workflow/analysis/actor-models.d.ts +60 -0
- package/vendor/dynamic-workflow/analysis/actor-models.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/actor-models.js +208 -0
- package/vendor/dynamic-workflow/analysis/actor-names.d.ts +56 -0
- package/vendor/dynamic-workflow/analysis/actor-names.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/actor-names.js +155 -0
- package/vendor/dynamic-workflow/analysis/analyze.d.ts +63 -0
- package/vendor/dynamic-workflow/analysis/analyze.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/analyze.js +92 -0
- package/vendor/dynamic-workflow/analysis/array-methods.d.ts +21 -0
- package/vendor/dynamic-workflow/analysis/array-methods.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/array-methods.js +132 -0
- package/vendor/dynamic-workflow/analysis/artifact-types.d.ts +39 -0
- package/vendor/dynamic-workflow/analysis/artifact-types.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/artifact-types.js +114 -0
- package/vendor/dynamic-workflow/analysis/artifacts.d.ts +67 -0
- package/vendor/dynamic-workflow/analysis/artifacts.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/artifacts.js +263 -0
- package/vendor/dynamic-workflow/analysis/assign.d.ts +42 -0
- package/vendor/dynamic-workflow/analysis/assign.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/assign.js +287 -0
- package/vendor/dynamic-workflow/analysis/callbacks.d.ts +71 -0
- package/vendor/dynamic-workflow/analysis/callbacks.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/callbacks.js +133 -0
- package/vendor/dynamic-workflow/analysis/calls.d.ts +40 -0
- package/vendor/dynamic-workflow/analysis/calls.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/calls.js +495 -0
- package/vendor/dynamic-workflow/analysis/causality-graph-lanes.d.ts +25 -0
- package/vendor/dynamic-workflow/analysis/causality-graph-lanes.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/causality-graph-lanes.js +161 -0
- package/vendor/dynamic-workflow/analysis/causality-graph-types.d.ts +163 -0
- package/vendor/dynamic-workflow/analysis/causality-graph-types.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/causality-graph-types.js +8 -0
- package/vendor/dynamic-workflow/analysis/causality-graph.d.ts +39 -0
- package/vendor/dynamic-workflow/analysis/causality-graph.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/causality-graph.js +530 -0
- package/vendor/dynamic-workflow/analysis/causality-order-calls.d.ts +29 -0
- package/vendor/dynamic-workflow/analysis/causality-order-calls.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/causality-order-calls.js +266 -0
- package/vendor/dynamic-workflow/analysis/causality-order-functions.d.ts +26 -0
- package/vendor/dynamic-workflow/analysis/causality-order-functions.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/causality-order-functions.js +116 -0
- package/vendor/dynamic-workflow/analysis/causality-order-loops.d.ts +5 -0
- package/vendor/dynamic-workflow/analysis/causality-order-loops.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/causality-order-loops.js +148 -0
- package/vendor/dynamic-workflow/analysis/causality-order-settle.d.ts +39 -0
- package/vendor/dynamic-workflow/analysis/causality-order-settle.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/causality-order-settle.js +263 -0
- package/vendor/dynamic-workflow/analysis/causality-order-state.d.ts +110 -0
- package/vendor/dynamic-workflow/analysis/causality-order-state.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/causality-order-state.js +162 -0
- package/vendor/dynamic-workflow/analysis/causality-order-strands.d.ts +79 -0
- package/vendor/dynamic-workflow/analysis/causality-order-strands.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/causality-order-strands.js +154 -0
- package/vendor/dynamic-workflow/analysis/causality-order-types.d.ts +174 -0
- package/vendor/dynamic-workflow/analysis/causality-order-types.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/causality-order-types.js +1 -0
- package/vendor/dynamic-workflow/analysis/causality-order-walk.d.ts +17 -0
- package/vendor/dynamic-workflow/analysis/causality-order-walk.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/causality-order-walk.js +282 -0
- package/vendor/dynamic-workflow/analysis/causality-order.d.ts +60 -0
- package/vendor/dynamic-workflow/analysis/causality-order.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/causality-order.js +110 -0
- package/vendor/dynamic-workflow/analysis/causality-reduce.d.ts +60 -0
- package/vendor/dynamic-workflow/analysis/causality-reduce.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/causality-reduce.js +198 -0
- package/vendor/dynamic-workflow/analysis/classes.d.ts +47 -0
- package/vendor/dynamic-workflow/analysis/classes.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/classes.js +264 -0
- package/vendor/dynamic-workflow/analysis/constants.d.ts +35 -0
- package/vendor/dynamic-workflow/analysis/constants.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/constants.js +23 -0
- package/vendor/dynamic-workflow/analysis/control-flow.d.ts +26 -0
- package/vendor/dynamic-workflow/analysis/control-flow.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/control-flow.js +132 -0
- package/vendor/dynamic-workflow/analysis/core-json.d.ts +45 -0
- package/vendor/dynamic-workflow/analysis/core-json.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/core-json.js +49 -0
- package/vendor/dynamic-workflow/analysis/core.d.ts +194 -0
- package/vendor/dynamic-workflow/analysis/core.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/core.js +204 -0
- package/vendor/dynamic-workflow/analysis/domain.d.ts +269 -0
- package/vendor/dynamic-workflow/analysis/domain.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/domain.js +523 -0
- package/vendor/dynamic-workflow/analysis/facade-misuse.d.ts +56 -0
- package/vendor/dynamic-workflow/analysis/facade-misuse.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/facade-misuse.js +350 -0
- package/vendor/dynamic-workflow/analysis/fanout-cardinality.d.ts +11 -0
- package/vendor/dynamic-workflow/analysis/fanout-cardinality.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/fanout-cardinality.js +121 -0
- package/vendor/dynamic-workflow/analysis/flow-graph.d.ts +113 -0
- package/vendor/dynamic-workflow/analysis/flow-graph.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/flow-graph.js +411 -0
- package/vendor/dynamic-workflow/analysis/flow-phase.d.ts +28 -0
- package/vendor/dynamic-workflow/analysis/flow-phase.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/flow-phase.js +104 -0
- package/vendor/dynamic-workflow/analysis/flow-strands.d.ts +39 -0
- package/vendor/dynamic-workflow/analysis/flow-strands.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/flow-strands.js +47 -0
- package/vendor/dynamic-workflow/analysis/flow-tree.d.ts +35 -0
- package/vendor/dynamic-workflow/analysis/flow-tree.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/flow-tree.js +33 -0
- package/vendor/dynamic-workflow/analysis/graph.d.ts +5 -0
- package/vendor/dynamic-workflow/analysis/graph.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/graph.js +199 -0
- package/vendor/dynamic-workflow/analysis/handoff-graph.d.ts +48 -0
- package/vendor/dynamic-workflow/analysis/handoff-graph.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/handoff-graph.js +0 -0
- package/vendor/dynamic-workflow/analysis/heap-ops.d.ts +14 -0
- package/vendor/dynamic-workflow/analysis/heap-ops.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/heap-ops.js +70 -0
- package/vendor/dynamic-workflow/analysis/hole-id.d.ts +28 -0
- package/vendor/dynamic-workflow/analysis/hole-id.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/hole-id.js +41 -0
- package/vendor/dynamic-workflow/analysis/hole-sites.d.ts +32 -0
- package/vendor/dynamic-workflow/analysis/hole-sites.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/hole-sites.js +215 -0
- package/vendor/dynamic-workflow/analysis/hole-splice.d.ts +45 -0
- package/vendor/dynamic-workflow/analysis/hole-splice.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/hole-splice.js +100 -0
- package/vendor/dynamic-workflow/analysis/interpret.d.ts +26 -0
- package/vendor/dynamic-workflow/analysis/interpret.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/interpret.js +200 -0
- package/vendor/dynamic-workflow/analysis/literals.d.ts +18 -0
- package/vendor/dynamic-workflow/analysis/literals.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/literals.js +125 -0
- package/vendor/dynamic-workflow/analysis/mermaid.d.ts +60 -0
- package/vendor/dynamic-workflow/analysis/mermaid.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/mermaid.js +477 -0
- package/vendor/dynamic-workflow/analysis/patterns.d.ts +31 -0
- package/vendor/dynamic-workflow/analysis/patterns.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/patterns.js +94 -0
- package/vendor/dynamic-workflow/analysis/phase-graph.d.ts +47 -0
- package/vendor/dynamic-workflow/analysis/phase-graph.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/phase-graph.js +334 -0
- package/vendor/dynamic-workflow/analysis/phases.d.ts +24 -0
- package/vendor/dynamic-workflow/analysis/phases.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/phases.js +54 -0
- package/vendor/dynamic-workflow/analysis/promise-ops.d.ts +52 -0
- package/vendor/dynamic-workflow/analysis/promise-ops.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/promise-ops.js +123 -0
- package/vendor/dynamic-workflow/analysis/relays.d.ts +12 -0
- package/vendor/dynamic-workflow/analysis/relays.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/relays.js +78 -0
- package/vendor/dynamic-workflow/analysis/serialize.d.ts +125 -0
- package/vendor/dynamic-workflow/analysis/serialize.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/serialize.js +321 -0
- package/vendor/dynamic-workflow/analysis/site-phases.d.ts +32 -0
- package/vendor/dynamic-workflow/analysis/site-phases.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/site-phases.js +69 -0
- package/vendor/dynamic-workflow/analysis/sites-labels.d.ts +71 -0
- package/vendor/dynamic-workflow/analysis/sites-labels.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/sites-labels.js +189 -0
- package/vendor/dynamic-workflow/analysis/sites.d.ts +267 -0
- package/vendor/dynamic-workflow/analysis/sites.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/sites.js +225 -0
- package/vendor/dynamic-workflow/analysis/state.d.ts +254 -0
- package/vendor/dynamic-workflow/analysis/state.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/state.js +569 -0
- package/vendor/dynamic-workflow/analysis/taint.d.ts +97 -0
- package/vendor/dynamic-workflow/analysis/taint.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/taint.js +649 -0
- package/vendor/dynamic-workflow/analysis/types.d.ts +100 -0
- package/vendor/dynamic-workflow/analysis/types.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/types.js +1 -0
- package/vendor/dynamic-workflow/analysis/world-run.d.ts +27 -0
- package/vendor/dynamic-workflow/analysis/world-run.d.ts.map +1 -0
- package/vendor/dynamic-workflow/analysis/world-run.js +44 -0
- package/vendor/dynamic-workflow/compiler/compile.d.ts +59 -0
- package/vendor/dynamic-workflow/compiler/compile.d.ts.map +1 -0
- package/vendor/dynamic-workflow/compiler/compile.js +159 -0
- package/vendor/dynamic-workflow/compiler/libs.generated.d.ts +3 -0
- package/vendor/dynamic-workflow/compiler/libs.generated.d.ts.map +1 -0
- package/vendor/dynamic-workflow/compiler/libs.generated.js +64 -0
- package/vendor/dynamic-workflow/engine/artifact-spec.d.ts +26 -0
- package/vendor/dynamic-workflow/engine/artifact-spec.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/artifact-spec.js +173 -0
- package/vendor/dynamic-workflow/engine/ask-observation-types.d.ts +54 -0
- package/vendor/dynamic-workflow/engine/ask-observation-types.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/ask-observation-types.js +19 -0
- package/vendor/dynamic-workflow/engine/cached-ask-facts.d.ts +28 -0
- package/vendor/dynamic-workflow/engine/cached-ask-facts.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/cached-ask-facts.js +35 -0
- package/vendor/dynamic-workflow/engine/concurrency.d.ts +151 -0
- package/vendor/dynamic-workflow/engine/concurrency.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/concurrency.js +282 -0
- package/vendor/dynamic-workflow/engine/engine-artifacts-primary.d.ts +17 -0
- package/vendor/dynamic-workflow/engine/engine-artifacts-primary.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/engine-artifacts-primary.js +29 -0
- package/vendor/dynamic-workflow/engine/engine-artifacts.d.ts +55 -0
- package/vendor/dynamic-workflow/engine/engine-artifacts.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/engine-artifacts.js +367 -0
- package/vendor/dynamic-workflow/engine/engine-config.d.ts +90 -0
- package/vendor/dynamic-workflow/engine/engine-config.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/engine-config.js +6 -0
- package/vendor/dynamic-workflow/engine/engine-holes.d.ts +116 -0
- package/vendor/dynamic-workflow/engine/engine-holes.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/engine-holes.js +142 -0
- package/vendor/dynamic-workflow/engine/engine-launch.d.ts +34 -0
- package/vendor/dynamic-workflow/engine/engine-launch.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/engine-launch.js +26 -0
- package/vendor/dynamic-workflow/engine/engine-phase-stamp.d.ts +35 -0
- package/vendor/dynamic-workflow/engine/engine-phase-stamp.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/engine-phase-stamp.js +74 -0
- package/vendor/dynamic-workflow/engine/engine-report.d.ts +27 -0
- package/vendor/dynamic-workflow/engine/engine-report.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/engine-report.js +151 -0
- package/vendor/dynamic-workflow/engine/engine-resume.d.ts +18 -0
- package/vendor/dynamic-workflow/engine/engine-resume.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/engine-resume.js +38 -0
- package/vendor/dynamic-workflow/engine/engine-settlement.d.ts +30 -0
- package/vendor/dynamic-workflow/engine/engine-settlement.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/engine-settlement.js +79 -0
- package/vendor/dynamic-workflow/engine/engine-state.d.ts +99 -0
- package/vendor/dynamic-workflow/engine/engine-state.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/engine-state.js +13 -0
- package/vendor/dynamic-workflow/engine/engine-world.d.ts +36 -0
- package/vendor/dynamic-workflow/engine/engine-world.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/engine-world.js +189 -0
- package/vendor/dynamic-workflow/engine/engine.d.ts +263 -0
- package/vendor/dynamic-workflow/engine/engine.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/engine.js +602 -0
- package/vendor/dynamic-workflow/engine/errors.d.ts +87 -0
- package/vendor/dynamic-workflow/engine/errors.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/errors.js +56 -0
- package/vendor/dynamic-workflow/engine/hash-mismatch.d.ts +10 -0
- package/vendor/dynamic-workflow/engine/hash-mismatch.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/hash-mismatch.js +15 -0
- package/vendor/dynamic-workflow/engine/hash.d.ts +16 -0
- package/vendor/dynamic-workflow/engine/hash.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/hash.js +48 -0
- package/vendor/dynamic-workflow/engine/imported-cache-types.d.ts +96 -0
- package/vendor/dynamic-workflow/engine/imported-cache-types.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/imported-cache-types.js +6 -0
- package/vendor/dynamic-workflow/engine/imported-cache.d.ts +127 -0
- package/vendor/dynamic-workflow/engine/imported-cache.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/imported-cache.js +244 -0
- package/vendor/dynamic-workflow/engine/index.d.ts +11 -0
- package/vendor/dynamic-workflow/engine/index.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/index.js +10 -0
- package/vendor/dynamic-workflow/engine/journal-memory.d.ts +32 -0
- package/vendor/dynamic-workflow/engine/journal-memory.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/journal-memory.js +243 -0
- package/vendor/dynamic-workflow/engine/journal-read-types.d.ts +72 -0
- package/vendor/dynamic-workflow/engine/journal-read-types.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/journal-read-types.js +28 -0
- package/vendor/dynamic-workflow/engine/persona.d.ts +20 -0
- package/vendor/dynamic-workflow/engine/persona.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/persona.js +43 -0
- package/vendor/dynamic-workflow/engine/replay-order.d.ts +96 -0
- package/vendor/dynamic-workflow/engine/replay-order.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/replay-order.js +229 -0
- package/vendor/dynamic-workflow/engine/run-terminal.d.ts +35 -0
- package/vendor/dynamic-workflow/engine/run-terminal.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/run-terminal.js +7 -0
- package/vendor/dynamic-workflow/engine/scheduler-submit.d.ts +22 -0
- package/vendor/dynamic-workflow/engine/scheduler-submit.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/scheduler-submit.js +84 -0
- package/vendor/dynamic-workflow/engine/scheduler-types.d.ts +105 -0
- package/vendor/dynamic-workflow/engine/scheduler-types.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/scheduler-types.js +17 -0
- package/vendor/dynamic-workflow/engine/scheduler.d.ts +113 -0
- package/vendor/dynamic-workflow/engine/scheduler.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/scheduler.js +484 -0
- package/vendor/dynamic-workflow/engine/types.d.ts +979 -0
- package/vendor/dynamic-workflow/engine/types.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/types.js +26 -0
- package/vendor/dynamic-workflow/engine/world-read-input.d.ts +10 -0
- package/vendor/dynamic-workflow/engine/world-read-input.d.ts.map +1 -0
- package/vendor/dynamic-workflow/engine/world-read-input.js +55 -0
- package/vendor/dynamic-workflow/facade/artifact-caps.d.ts +48 -0
- package/vendor/dynamic-workflow/facade/artifact-caps.d.ts.map +1 -0
- package/vendor/dynamic-workflow/facade/artifact-caps.js +47 -0
- package/vendor/dynamic-workflow/facade/dts-hole.d.ts +16 -0
- package/vendor/dynamic-workflow/facade/dts-hole.d.ts.map +1 -0
- package/vendor/dynamic-workflow/facade/dts-hole.js +26 -0
- package/vendor/dynamic-workflow/facade/dts-model.d.ts +11 -0
- package/vendor/dynamic-workflow/facade/dts-model.d.ts.map +1 -0
- package/vendor/dynamic-workflow/facade/dts-model.js +18 -0
- package/vendor/dynamic-workflow/facade/dts-stream.d.ts +15 -0
- package/vendor/dynamic-workflow/facade/dts-stream.d.ts.map +1 -0
- package/vendor/dynamic-workflow/facade/dts-stream.js +41 -0
- package/vendor/dynamic-workflow/facade/dts.d.ts +29 -0
- package/vendor/dynamic-workflow/facade/dts.d.ts.map +1 -0
- package/vendor/dynamic-workflow/facade/dts.js +324 -0
- package/vendor/dynamic-workflow/facade/registry.d.ts +218 -0
- package/vendor/dynamic-workflow/facade/registry.d.ts.map +1 -0
- package/vendor/dynamic-workflow/facade/registry.js +203 -0
- package/vendor/dynamic-workflow/facade/report-caps.d.ts +40 -0
- package/vendor/dynamic-workflow/facade/report-caps.d.ts.map +1 -0
- package/vendor/dynamic-workflow/facade/report-caps.js +39 -0
- package/vendor/dynamic-workflow/facade/world-read-caps.d.ts +37 -0
- package/vendor/dynamic-workflow/facade/world-read-caps.d.ts.map +1 -0
- package/vendor/dynamic-workflow/facade/world-read-caps.js +36 -0
- package/vendor/dynamic-workflow/index.d.ts +41 -0
- package/vendor/dynamic-workflow/index.d.ts.map +1 -0
- package/vendor/dynamic-workflow/index.js +51 -0
- package/vendor/dynamic-workflow/lowering/index.d.ts +2 -0
- package/vendor/dynamic-workflow/lowering/index.d.ts.map +1 -0
- package/vendor/dynamic-workflow/lowering/index.js +1 -0
- package/vendor/dynamic-workflow/lowering/lower-hole.d.ts +16 -0
- package/vendor/dynamic-workflow/lowering/lower-hole.d.ts.map +1 -0
- package/vendor/dynamic-workflow/lowering/lower-hole.js +63 -0
- package/vendor/dynamic-workflow/lowering/lower.d.ts +82 -0
- package/vendor/dynamic-workflow/lowering/lower.d.ts.map +1 -0
- package/vendor/dynamic-workflow/lowering/lower.js +333 -0
- package/vendor/dynamic-workflow/projections.d.ts +26 -0
- package/vendor/dynamic-workflow/projections.d.ts.map +1 -0
- package/vendor/dynamic-workflow/projections.js +23 -0
- package/vendor/dynamic-workflow/schema/actor-submit-profiles.d.ts +49 -0
- package/vendor/dynamic-workflow/schema/actor-submit-profiles.d.ts.map +1 -0
- package/vendor/dynamic-workflow/schema/actor-submit-profiles.js +69 -0
- package/vendor/dynamic-workflow/schema/emit.d.ts +55 -0
- package/vendor/dynamic-workflow/schema/emit.d.ts.map +1 -0
- package/vendor/dynamic-workflow/schema/emit.js +325 -0
- package/vendor/dynamic-workflow/schema/jsdoc.d.ts +10 -0
- package/vendor/dynamic-workflow/schema/jsdoc.d.ts.map +1 -0
- package/vendor/dynamic-workflow/schema/jsdoc.js +83 -0
- package/vendor/dynamic-workflow/schema/serialize.d.ts +8 -0
- package/vendor/dynamic-workflow/schema/serialize.d.ts.map +1 -0
- package/vendor/dynamic-workflow/schema/serialize.js +20 -0
- package/vendor/dynamic-workflow/schema/synthesize.d.ts +48 -0
- package/vendor/dynamic-workflow/schema/synthesize.d.ts.map +1 -0
- package/vendor/dynamic-workflow/schema/synthesize.js +138 -0
- package/vendor/dynamic-workflow/schema/types.d.ts +67 -0
- package/vendor/dynamic-workflow/schema/types.d.ts.map +1 -0
- package/vendor/dynamic-workflow/schema/types.js +18 -0
- package/vendor/dynamic-workflow/schema/validate.d.ts +15 -0
- package/vendor/dynamic-workflow/schema/validate.d.ts.map +1 -0
- package/vendor/dynamic-workflow/schema/validate.js +213 -0
- package/vendor/dynamic-workflow/testing/index.d.ts +6 -0
- package/vendor/dynamic-workflow/testing/index.d.ts.map +1 -0
- package/vendor/dynamic-workflow/testing/index.js +5 -0
- package/vendor/dynamic-workflow/testing/journal-contract-artifacts.d.ts +9 -0
- package/vendor/dynamic-workflow/testing/journal-contract-artifacts.d.ts.map +1 -0
- package/vendor/dynamic-workflow/testing/journal-contract-artifacts.js +195 -0
- package/vendor/dynamic-workflow/testing/journal-contract-events.d.ts +9 -0
- package/vendor/dynamic-workflow/testing/journal-contract-events.d.ts.map +1 -0
- package/vendor/dynamic-workflow/testing/journal-contract-events.js +163 -0
- package/vendor/dynamic-workflow/testing/journal-contract-helpers.d.ts +9 -0
- package/vendor/dynamic-workflow/testing/journal-contract-helpers.d.ts.map +1 -0
- package/vendor/dynamic-workflow/testing/journal-contract-helpers.js +12 -0
- package/vendor/dynamic-workflow/testing/journal-contract-isolation.d.ts +9 -0
- package/vendor/dynamic-workflow/testing/journal-contract-isolation.d.ts.map +1 -0
- package/vendor/dynamic-workflow/testing/journal-contract-isolation.js +46 -0
- package/vendor/dynamic-workflow/testing/journal-contract-nodes.d.ts +9 -0
- package/vendor/dynamic-workflow/testing/journal-contract-nodes.d.ts.map +1 -0
- package/vendor/dynamic-workflow/testing/journal-contract-nodes.js +234 -0
- package/vendor/dynamic-workflow/testing/journal-contract-reads.d.ts +11 -0
- package/vendor/dynamic-workflow/testing/journal-contract-reads.d.ts.map +1 -0
- package/vendor/dynamic-workflow/testing/journal-contract-reads.js +281 -0
- package/vendor/dynamic-workflow/testing/journal-contract-runs.d.ts +9 -0
- package/vendor/dynamic-workflow/testing/journal-contract-runs.d.ts.map +1 -0
- package/vendor/dynamic-workflow/testing/journal-contract-runs.js +396 -0
- package/vendor/dynamic-workflow/testing/journal-contract-script.d.ts +12 -0
- package/vendor/dynamic-workflow/testing/journal-contract-script.d.ts.map +1 -0
- package/vendor/dynamic-workflow/testing/journal-contract-script.js +82 -0
- package/vendor/dynamic-workflow/testing/journal-contract.d.ts +15 -0
- package/vendor/dynamic-workflow/testing/journal-contract.d.ts.map +1 -0
- package/vendor/dynamic-workflow/testing/journal-contract.js +31 -0
- package/vendor/dynamic-workflow-runtime/child-cell-streams.js +128 -0
- package/vendor/dynamic-workflow-runtime/child-entry-file.js +43 -0
- package/vendor/dynamic-workflow-runtime/child-source.js +299 -0
- package/vendor/dynamic-workflow-runtime/harness.js +302 -0
- package/vendor/dynamic-workflow-runtime/index.js +4 -0
- package/vendor/dynamic-workflow-runtime/protocol.js +2 -0
- package/vendor/mcode-host/dynamic-workflow-import.js +269 -0
- package/vendor/mcode-host/workflow-git-world-read.js +183 -0
- package/vendor/mcode-host/workflow-world-read.js +282 -0
|
@@ -0,0 +1,530 @@
|
|
|
1
|
+
import { isStructuralRegionKind } from "./constants.js";
|
|
2
|
+
import { reduceOrdering } from "./causality-reduce.js";
|
|
3
|
+
import { collectPhaseClaims, projectPhaseGraph, } from "./phase-graph.js";
|
|
4
|
+
import { MAIN_LANE, SINK_ID, UNKNOWN_LANE, WORKSPACE_LANE } from "./causality-graph-types.js";
|
|
5
|
+
import { dedupeFacts, expandMaySetLanes, fillOf, weakest } from "./causality-graph-lanes.js";
|
|
6
|
+
// 拆分:本文件顶到 oxlint max-lines 上限(400 行)。公开类型与三个 lane 常量定义
|
|
7
|
+
// 在 causality-graph-types.ts,may-set 车道展开与事实去重在 causality-graph-lanes.ts;这里原样
|
|
8
|
+
// 再导出,既有的 `from "./causality-graph.js"` 引用一个不改。
|
|
9
|
+
export { MAIN_LANE, SINK_ID, UNKNOWN_LANE, WORKSPACE_LANE } from "./causality-graph-types.js";
|
|
10
|
+
/** Project the causality graph off the core plus the (projected) site graph. */
|
|
11
|
+
export function projectCausalityGraph(core, site) {
|
|
12
|
+
const trace = core.trace;
|
|
13
|
+
const regionById = new Map(trace.regions.map((region) => [region.id, region]));
|
|
14
|
+
const stepNodes = site.nodes.filter((node) => (node.kind === "ask" || node.kind === "world-read" || node.kind === "hole") &&
|
|
15
|
+
node.loc !== undefined);
|
|
16
|
+
const stepIds = new Set(stepNodes.map((node) => node.id));
|
|
17
|
+
// --- 1. Read the trace: issue positions, region membership, settle points ---------
|
|
18
|
+
const minIssue = new Map();
|
|
19
|
+
const maxIssue = new Map();
|
|
20
|
+
const innermostRegion = new Map();
|
|
21
|
+
const regionsOf = new Map();
|
|
22
|
+
/** Steps with at least one unconditional issue path — the `always` witness. */
|
|
23
|
+
const unconditional = new Set();
|
|
24
|
+
const actorRegions = new Map();
|
|
25
|
+
/**
|
|
26
|
+
* Step -> frame -> whether the barrier that settled it there was only a may-claim. A
|
|
27
|
+
* frame is one asynchronous activation: the innermost `strand` region a settle sits in,
|
|
28
|
+
* else the root. A settle inside a strand orders that strand's own later issues and the
|
|
29
|
+
* issues of strands spawned inside it; it says nothing to the spawner, whose chain does
|
|
30
|
+
* not contain the strand. That per-frame reading IS the concurrency this view draws:
|
|
31
|
+
* two `async` callbacks awaiting their own asks stay incomparable.
|
|
32
|
+
*/
|
|
33
|
+
const settled = new Map();
|
|
34
|
+
/** Region -> steps settled by a barrier lexically inside it. */
|
|
35
|
+
const settledInside = new Map();
|
|
36
|
+
const facts = [];
|
|
37
|
+
let clock = 0;
|
|
38
|
+
// THE TRANSPARENCY RULE: the trace's
|
|
39
|
+
// STRUCTURAL regions (choice / call / try / attempt / catch / finally) exist for the
|
|
40
|
+
// control-flow projection. This view looks through them — they count as certain in a
|
|
41
|
+
// chain, a step's home is its innermost NON-structural region, and they never reach the
|
|
42
|
+
// output region table — so that stripping them from the trace yields exactly the trace
|
|
43
|
+
// this projection consumed before they existed. That includes preserving one old
|
|
44
|
+
// deviation on purpose: a step inside a `catch` block still reads `always` here; the
|
|
45
|
+
// trace now carries `catch` with `entered=false`, and adopting it is a separate,
|
|
46
|
+
// golden-reviewed change.
|
|
47
|
+
const chainIsCertain = (chain) => chain.every((id) => {
|
|
48
|
+
const region = regionById.get(id);
|
|
49
|
+
if (region === undefined)
|
|
50
|
+
return false;
|
|
51
|
+
if (isStructuralRegionKind(region.kind))
|
|
52
|
+
return true;
|
|
53
|
+
if (region.kind === "seq" || region.kind === "parallel")
|
|
54
|
+
return true;
|
|
55
|
+
// A loop that provably iterates at least once keeps its body `always`: a `do…while` body, or a `for` with a positive literal bound.
|
|
56
|
+
return region.kind === "loop" && region.entered;
|
|
57
|
+
});
|
|
58
|
+
/** The innermost non-structural region of a chain — a step's `region` home. */
|
|
59
|
+
const homeOf = (chain) => {
|
|
60
|
+
for (let i = chain.length - 1; i >= 0; i -= 1) {
|
|
61
|
+
const id = chain[i];
|
|
62
|
+
const kind = regionById.get(id)?.kind;
|
|
63
|
+
if (kind !== undefined && !isStructuralRegionKind(kind))
|
|
64
|
+
return id;
|
|
65
|
+
}
|
|
66
|
+
return trace.root;
|
|
67
|
+
};
|
|
68
|
+
/** The activation a settle belongs to: the innermost `strand` on its chain, else the root. */
|
|
69
|
+
const frameOf = (regions) => {
|
|
70
|
+
for (let i = regions.length - 1; i >= 0; i -= 1) {
|
|
71
|
+
const id = regions[i];
|
|
72
|
+
if (regionById.get(id)?.strand === true)
|
|
73
|
+
return id;
|
|
74
|
+
}
|
|
75
|
+
return trace.root;
|
|
76
|
+
};
|
|
77
|
+
/** The frames an issue can see: every strand it sits inside, plus the root. */
|
|
78
|
+
const visibleFrames = (regions) => {
|
|
79
|
+
const out = new Set([trace.root]);
|
|
80
|
+
for (const id of regions)
|
|
81
|
+
if (regionById.get(id)?.strand === true)
|
|
82
|
+
out.add(id);
|
|
83
|
+
return out;
|
|
84
|
+
};
|
|
85
|
+
/** The nearest non-structural ancestor: what a kept region's `parent` re-attaches to. */
|
|
86
|
+
const visibleParent = (region) => {
|
|
87
|
+
let parent = region.parent === undefined ? undefined : regionById.get(region.parent);
|
|
88
|
+
while (parent !== undefined && isStructuralRegionKind(parent.kind)) {
|
|
89
|
+
parent = parent.parent === undefined ? undefined : regionById.get(parent.parent);
|
|
90
|
+
}
|
|
91
|
+
return parent?.id;
|
|
92
|
+
};
|
|
93
|
+
// 以 `continue` / `break` 结束的分支臂里发出的 step,相对它跳出的那个循环被「延后」:
|
|
94
|
+
// step → (循环 id → 跳转种类)。同一轮里更靠后的 issue 对它们的 seq 事实要改判(见
|
|
95
|
+
// `Fact.viaJump`)。臂 = 跳转事件区域链上、目标循环之内最靠里的 `branch` 区域;直接写在
|
|
96
|
+
// 循环体里的无条件 `continue` 没有臂,也就没有可延后的东西(本轮剩余语句本来就不会跑)。
|
|
97
|
+
const deferredByStep = new Map();
|
|
98
|
+
for (const event of trace.events) {
|
|
99
|
+
// `mark` leaves belong to the control-flow projection only. Skipped up front:
|
|
100
|
+
// the loop below treats "not settle, not actor" as an issue, and the compiler would not
|
|
101
|
+
// catch a leaf kind that has a `phase` but no `step` slipping through by duck typing.
|
|
102
|
+
if (event.at === "mark")
|
|
103
|
+
continue;
|
|
104
|
+
if (event.at === "jump") {
|
|
105
|
+
if (event.kind !== "continue" && event.kind !== "break")
|
|
106
|
+
continue;
|
|
107
|
+
let arm;
|
|
108
|
+
for (let i = event.regions.length - 1; i >= 0; i -= 1) {
|
|
109
|
+
const id = event.regions[i];
|
|
110
|
+
if (id === event.target)
|
|
111
|
+
break;
|
|
112
|
+
if (regionById.get(id)?.kind === "branch")
|
|
113
|
+
arm = id;
|
|
114
|
+
}
|
|
115
|
+
if (arm === undefined || !event.regions.includes(event.target))
|
|
116
|
+
continue;
|
|
117
|
+
for (const [step, regions] of regionsOf) {
|
|
118
|
+
if (!regions.has(arm))
|
|
119
|
+
continue;
|
|
120
|
+
const loops = deferredByStep.get(step) ?? new Map();
|
|
121
|
+
loops.set(event.target, event.kind);
|
|
122
|
+
deferredByStep.set(step, loops);
|
|
123
|
+
}
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
if (event.at === "settle") {
|
|
127
|
+
// Within ONE frame the first settle wins, EXCEPT that a certain settle upgrades an
|
|
128
|
+
// earlier may-settle: a widened barrier may-settles a step and the main line's own
|
|
129
|
+
// `await` settles it for real later — issues between the two get may-edges, issues
|
|
130
|
+
// after the award certain ones.
|
|
131
|
+
const frame = frameOf(event.regions);
|
|
132
|
+
for (const step of event.steps) {
|
|
133
|
+
const byFrame = settled.get(step) ?? new Map();
|
|
134
|
+
const prior = byFrame.get(frame);
|
|
135
|
+
if (prior === undefined || (prior && !event.maybe))
|
|
136
|
+
byFrame.set(frame, event.maybe);
|
|
137
|
+
settled.set(step, byFrame);
|
|
138
|
+
}
|
|
139
|
+
for (const id of event.regions) {
|
|
140
|
+
const set = settledInside.get(id) ?? new Set();
|
|
141
|
+
for (const step of event.steps)
|
|
142
|
+
set.add(step);
|
|
143
|
+
settledInside.set(id, set);
|
|
144
|
+
}
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
if (event.at === "actor") {
|
|
148
|
+
if (!actorRegions.has(event.actor))
|
|
149
|
+
actorRegions.set(event.actor, event.regions);
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
const at = clock;
|
|
153
|
+
clock += 1;
|
|
154
|
+
if (!minIssue.has(event.step)) {
|
|
155
|
+
minIssue.set(event.step, at);
|
|
156
|
+
innermostRegion.set(event.step, homeOf(event.regions));
|
|
157
|
+
}
|
|
158
|
+
maxIssue.set(event.step, at);
|
|
159
|
+
const seen = regionsOf.get(event.step) ?? new Set();
|
|
160
|
+
for (const id of event.regions)
|
|
161
|
+
seen.add(id);
|
|
162
|
+
regionsOf.set(event.step, seen);
|
|
163
|
+
if (chainIsCertain(event.regions))
|
|
164
|
+
unconditional.add(event.step);
|
|
165
|
+
// Await barriers: every step already settled precedes this issue. `data` upgrades
|
|
166
|
+
// happen at dedup; `seq` is the residue — ordered only by where `await` sits.
|
|
167
|
+
//
|
|
168
|
+
// `toPhases` records WHERE this barrier was witnessed: the phase current at THIS issue
|
|
169
|
+
// event. It is the only fact kind that has a single witnessing issue, and phase copies
|
|
170
|
+
// read it to keep an edge off the copies whose issue never saw the barrier. It is the
|
|
171
|
+
// head-side filter; the tail side (and the head side again, on kinds that carry no
|
|
172
|
+
// provenance) is covered by the copies' temporal admission in phase-graph.ts.
|
|
173
|
+
const visible = visibleFrames(event.regions);
|
|
174
|
+
for (const [from, byFrame] of settled) {
|
|
175
|
+
if (from === event.step)
|
|
176
|
+
continue;
|
|
177
|
+
// Settled for THIS issue iff some frame it can see settled it; of those, the
|
|
178
|
+
// strongest claim wins (one certain visible settle beats any number of may-claims).
|
|
179
|
+
let mayHaveSettled;
|
|
180
|
+
for (const [frame, maybe] of byFrame) {
|
|
181
|
+
if (!visible.has(frame))
|
|
182
|
+
continue;
|
|
183
|
+
mayHaveSettled = mayHaveSettled === undefined ? maybe : mayHaveSettled && maybe;
|
|
184
|
+
}
|
|
185
|
+
if (mayHaveSettled === undefined)
|
|
186
|
+
continue;
|
|
187
|
+
// 延后判定:`from` 若在一个跳出了 L 的臂里发出,而这次 issue 仍在 L 之内,那么
|
|
188
|
+
// `break` 臂 → 事实不成立(本轮和下一轮都到不了),`continue` 臂 → 只能靠下一轮。
|
|
189
|
+
let viaJump = false;
|
|
190
|
+
let unrealizable = false;
|
|
191
|
+
for (const [loop, kind] of deferredByStep.get(from) ?? []) {
|
|
192
|
+
if (!event.regions.includes(loop))
|
|
193
|
+
continue;
|
|
194
|
+
if (kind === "break")
|
|
195
|
+
unrealizable = true;
|
|
196
|
+
else
|
|
197
|
+
viaJump = true;
|
|
198
|
+
}
|
|
199
|
+
if (unrealizable)
|
|
200
|
+
continue;
|
|
201
|
+
facts.push({
|
|
202
|
+
certainty: mayHaveSettled ? "maybe" : "always",
|
|
203
|
+
from,
|
|
204
|
+
kind: "seq",
|
|
205
|
+
to: event.step,
|
|
206
|
+
toPhases: new Set([event.phase]),
|
|
207
|
+
...(viaJump ? { viaJump: true } : {}),
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// --- 2. Lanes ---------------------------------------------------------------------
|
|
212
|
+
const laneSet = new Map();
|
|
213
|
+
for (const node of stepNodes) {
|
|
214
|
+
if (node.kind === "world-read") {
|
|
215
|
+
laneSet.set(node.id, [WORKSPACE_LANE]);
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
if (node.kind === "hole") {
|
|
219
|
+
laneSet.set(node.id, [MAIN_LANE]); // 留白等的是主代理:它的车道(docs/analysis.md「Sites」)
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
const actors = node.actors ?? [];
|
|
223
|
+
laneSet.set(node.id, actors.length > 0 ? [...actors] : [UNKNOWN_LANE]);
|
|
224
|
+
}
|
|
225
|
+
const familiesOf = (actorId) => (actorRegions.get(actorId) ?? []).filter((id) => {
|
|
226
|
+
const kind = regionById.get(id)?.kind;
|
|
227
|
+
return kind === "fanout" || kind === "loop";
|
|
228
|
+
});
|
|
229
|
+
// --- 3. Control dependence --------------------------------------------------------
|
|
230
|
+
// Two lists per fact: controllers the walk is sure of, and controllers only the
|
|
231
|
+
// ambiguous half of the taint oracle claims. They are disjoint (a step both sides
|
|
232
|
+
// claim is recorded as certain), so a `maybe` fact can never weaken an `always` one
|
|
233
|
+
// for the same pair at dedup.
|
|
234
|
+
const controlled = new Set();
|
|
235
|
+
for (const control of trace.controls) {
|
|
236
|
+
for (const step of stepNodes) {
|
|
237
|
+
if (!(regionsOf.get(step.id)?.has(control.region) ?? false))
|
|
238
|
+
continue;
|
|
239
|
+
controlled.add(step.id);
|
|
240
|
+
for (const controller of control.controllers) {
|
|
241
|
+
if (controller === step.id || !stepIds.has(controller))
|
|
242
|
+
continue;
|
|
243
|
+
facts.push({ certainty: "always", from: controller, kind: "control", to: step.id });
|
|
244
|
+
}
|
|
245
|
+
for (const controller of control.maybeControllers) {
|
|
246
|
+
if (controller === step.id || !stepIds.has(controller))
|
|
247
|
+
continue;
|
|
248
|
+
facts.push({ certainty: "maybe", from: controller, kind: "control", to: step.id });
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
const certaintyOf = (step) => unconditional.has(step) && !controlled.has(step) ? "always" : "maybe";
|
|
253
|
+
// --- 4. Data dependence, straight off the site graph ------------------------------
|
|
254
|
+
// Relay nodes (join / fan-out) are skipped: relay labels are additive, so a direct
|
|
255
|
+
// producer -> consumer edge always exists alongside the routed one.
|
|
256
|
+
for (const edge of site.edges) {
|
|
257
|
+
if (edge.kind !== "data" || !stepIds.has(edge.from))
|
|
258
|
+
continue;
|
|
259
|
+
if (edge.to !== SINK_ID && !stepIds.has(edge.to))
|
|
260
|
+
continue;
|
|
261
|
+
facts.push({ certainty: "always", exact: edge.exact, from: edge.from, kind: "data", to: edge.to });
|
|
262
|
+
}
|
|
263
|
+
// --- 5. Actor FIFO ---------------------------------------------------------------
|
|
264
|
+
// Two steps on one actor cannot overlap; the runtime serializes them in issue order.
|
|
265
|
+
// `workspace` and `unknown` are excluded — neither is an actor with a mailbox.
|
|
266
|
+
const issueOrder = [...stepNodes].sort((a, b) => (minIssue.get(a.id) ?? 0) - (minIssue.get(b.id) ?? 0));
|
|
267
|
+
const realLanes = (step) => (laneSet.get(step) ?? []).filter((lane) => lane !== WORKSPACE_LANE && lane !== UNKNOWN_LANE && lane !== MAIN_LANE);
|
|
268
|
+
for (let i = 0; i < issueOrder.length; i += 1) {
|
|
269
|
+
for (let j = i + 1; j < issueOrder.length; j += 1) {
|
|
270
|
+
const a = issueOrder[i];
|
|
271
|
+
const b = issueOrder[j];
|
|
272
|
+
const lanesA = realLanes(a.id);
|
|
273
|
+
const lanesB = realLanes(b.id);
|
|
274
|
+
if (!lanesA.some((lane) => lanesB.includes(lane)))
|
|
275
|
+
continue;
|
|
276
|
+
// A may-set receiver only MAY be the same actor, so the ordering only may hold.
|
|
277
|
+
const certainty = lanesA.length === 1 && lanesB.length === 1 ? "always" : "maybe";
|
|
278
|
+
facts.push({ certainty, from: a.id, kind: "fifo", to: b.id });
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// --- 6. Repetition: what closes the cycle in an iteration region ------------------
|
|
282
|
+
// Two independent rules, and between them the two multiplicity cues fall out: a step that is serialized across iterations gets a self- or
|
|
283
|
+
// cycle-closing arrow; one whose instances coexist gets none, and the renderer draws
|
|
284
|
+
// it as a stack.
|
|
285
|
+
const repeat = new Map();
|
|
286
|
+
const markRepeat = (step, value) => {
|
|
287
|
+
if (value === "serial" || !repeat.has(step))
|
|
288
|
+
repeat.set(step, value);
|
|
289
|
+
};
|
|
290
|
+
for (const region of trace.regions) {
|
|
291
|
+
if (region.kind !== "loop" && region.kind !== "fanout")
|
|
292
|
+
continue;
|
|
293
|
+
const inside = issueOrder.filter((node) => regionsOf.get(node.id)?.has(region.id) ?? false);
|
|
294
|
+
if (inside.length === 0)
|
|
295
|
+
continue;
|
|
296
|
+
const first = inside[0];
|
|
297
|
+
const settledHere = inside.filter((node) => settledInside.get(region.id)?.has(node.id) ?? false);
|
|
298
|
+
// (a) The last step this region awaits must settle before the next round starts.
|
|
299
|
+
// Every step the region awaits is therefore serialized against its own next
|
|
300
|
+
// instance too, because iteration k+1 cannot begin until that barrier has fired.
|
|
301
|
+
const last = settledHere[settledHere.length - 1];
|
|
302
|
+
if (last !== undefined) {
|
|
303
|
+
facts.push({ certainty: certaintyOf(last.id), from: last.id, kind: "seq", to: first.id });
|
|
304
|
+
}
|
|
305
|
+
for (const node of settledHere)
|
|
306
|
+
markRepeat(node.id, "serial");
|
|
307
|
+
// (b) A step the region never awaits still cannot overlap its own next instance
|
|
308
|
+
// when it runs on a FIXED actor — the mailbox serializes them. A lane family gets
|
|
309
|
+
// a fresh actor per element, so its instances genuinely coexist and it stacks.
|
|
310
|
+
//
|
|
311
|
+
// This branch is only correct when the region really does NOT await the step, which is
|
|
312
|
+
// why the settle oracle matters here and not just for edge certainties. Without it, an
|
|
313
|
+
// indirectly-awaited body (`await acc` over a reduce accumulator, `await p` over a
|
|
314
|
+
// parameter) resolved to nothing, recorded no settle inside the region, and landed here — so a
|
|
315
|
+
// lane-family step got `stack`, the cue that asserts "these instances coexist", for a
|
|
316
|
+
// chain the script strictly serializes. A wrong certainty bit stays in the model; a
|
|
317
|
+
// wrong cue is drawn on screen (reduce-accumulator).
|
|
318
|
+
const awaited = new Set(settledHere.map((node) => node.id));
|
|
319
|
+
for (const node of inside) {
|
|
320
|
+
if (awaited.has(node.id))
|
|
321
|
+
continue;
|
|
322
|
+
const lanes = realLanes(node.id);
|
|
323
|
+
const fixedActor = lanes.length === 1 && familiesOf(lanes[0]).length === 0;
|
|
324
|
+
if (!fixedActor) {
|
|
325
|
+
markRepeat(node.id, "stack");
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
facts.push({ certainty: certaintyOf(node.id), from: node.id, kind: "fifo", to: node.id });
|
|
329
|
+
markRepeat(node.id, "serial");
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
// --- 7. Dedup, back-edge typing, reduction ---------------------------------------
|
|
333
|
+
const deduped = dedupeFacts(facts);
|
|
334
|
+
const positionOf = (id) => id === SINK_ID ? Number.MAX_SAFE_INTEGER : (minIssue.get(id) ?? 0);
|
|
335
|
+
const lastIssueOf = (id) => id === SINK_ID ? Number.MAX_SAFE_INTEGER : (maxIssue.get(id) ?? 0);
|
|
336
|
+
const iterationRegionsOf = (id) => [...(regionsOf.get(id) ?? [])].filter((region) => {
|
|
337
|
+
const kind = regionById.get(region)?.kind;
|
|
338
|
+
return kind === "loop" || kind === "fanout";
|
|
339
|
+
});
|
|
340
|
+
/**
|
|
341
|
+
* Do two sites share an enclosing iteration region? That is the one thing repetition can
|
|
342
|
+
* realize, and it is why "b's position precedes a's" does not mean "b cannot follow a":
|
|
343
|
+
* iteration k's producer feeds iteration k+1's consumer.
|
|
344
|
+
*
|
|
345
|
+
* ONE implementation, two readers — {@link realizableCarry} below and the phase copies'
|
|
346
|
+
* temporal admission (phase-graph.ts). They must not drift: both answer the same
|
|
347
|
+
* question about the same relation, and a copy admitted by one rule and a carry judged
|
|
348
|
+
* by another would put a contradiction in one picture.
|
|
349
|
+
*/
|
|
350
|
+
const sharesIteration = (a, b) => {
|
|
351
|
+
const enclosing = new Set(iterationRegionsOf(b));
|
|
352
|
+
return iterationRegionsOf(a).some((region) => enclosing.has(region));
|
|
353
|
+
};
|
|
354
|
+
/**
|
|
355
|
+
* Can `to` really run again after `from`? A back edge in issue order is only
|
|
356
|
+
* realizable by repetition, so this is what separates a loop's carry edge from an
|
|
357
|
+
* artifact of the may-analysis.
|
|
358
|
+
*
|
|
359
|
+
* Bug this fixes: the site graph's data edges are variable-level, so a reassigned
|
|
360
|
+
* `let` yields the full writers × readers cross product. In a refine-until-approved
|
|
361
|
+
* loop, `plan = await planner.ask(...)` inside the loop therefore produces a data
|
|
362
|
+
* fact into the PRE-LOOP review that reads `plan` — and since that fact points
|
|
363
|
+
* backwards it was retyped `carry`, which reduction at the time never dropped. So an
|
|
364
|
+
* unrealizable edge was laundered into what was then the one edge class exempt from
|
|
365
|
+
* every later check. (Carry minimization now prunes REDUNDANT carries,
|
|
366
|
+
* but an unrealizable back edge with no witness path would survive it, so this gate
|
|
367
|
+
* stays load-bearing.)
|
|
368
|
+
*
|
|
369
|
+
* Repetition has exactly two sources: an enclosing iteration region shared by both
|
|
370
|
+
* ends, or (for a self edge) a step issued from more than one call site.
|
|
371
|
+
*/
|
|
372
|
+
const realizableCarry = (from, to) => {
|
|
373
|
+
if (from === to) {
|
|
374
|
+
return iterationRegionsOf(to).length > 0 || lastIssueOf(to) > positionOf(to);
|
|
375
|
+
}
|
|
376
|
+
return sharesIteration(from, to);
|
|
377
|
+
};
|
|
378
|
+
// A back edge in issue order can only be realized by repetition, so it IS the loop's
|
|
379
|
+
// carry edge — and typing it here (rather than by DFS at render time) is what keeps
|
|
380
|
+
// the remaining relation acyclic for reduction and ranking.
|
|
381
|
+
const typed = [];
|
|
382
|
+
for (const fact of deduped) {
|
|
383
|
+
const back = fact.viaJump === true || fact.from === fact.to || lastIssueOf(fact.to) <= positionOf(fact.from);
|
|
384
|
+
if (!back) {
|
|
385
|
+
typed.push(fact);
|
|
386
|
+
continue;
|
|
387
|
+
}
|
|
388
|
+
if (!realizableCarry(fact.from, fact.to))
|
|
389
|
+
continue;
|
|
390
|
+
const { exact: _exact, kind, ...rest } = fact;
|
|
391
|
+
typed.push({
|
|
392
|
+
// `toPhases` rides along in `rest`: retyping changes WHEN the fact holds (next
|
|
393
|
+
// round), not WHERE it was witnessed.
|
|
394
|
+
...rest,
|
|
395
|
+
kind: "carry",
|
|
396
|
+
// 保留底层 kind:carry 最小化需要知道回边改型前是硬依赖还是纯顺序。
|
|
397
|
+
...(kind === "carry" ? {} : { carryOf: kind }),
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
const reduced = reduceOrdering(typed);
|
|
401
|
+
const edges = [];
|
|
402
|
+
const fedBy = [];
|
|
403
|
+
// 商图的输入:同一批归约后的事实,certainty 已按端点继承过,sink 边剔除(阶段→sink 不
|
|
404
|
+
// 出图,UI 由 fedBy step 的 phase 推导)。carryOf 必须带上——阶段边跑的是同一个
|
|
405
|
+
// reduceOrdering,carry 最小化按底层 kind 判见证。
|
|
406
|
+
const phaseFacts = [];
|
|
407
|
+
for (const fact of reduced) {
|
|
408
|
+
const certainty = weakest([fact.certainty, certaintyOf(fact.from), certaintyOf(fact.to)]);
|
|
409
|
+
if (fact.to === SINK_ID) {
|
|
410
|
+
fedBy.push(fact.from);
|
|
411
|
+
continue;
|
|
412
|
+
}
|
|
413
|
+
phaseFacts.push({
|
|
414
|
+
certainty,
|
|
415
|
+
from: fact.from,
|
|
416
|
+
kind: fact.kind,
|
|
417
|
+
to: fact.to,
|
|
418
|
+
...(fact.carryOf === undefined ? {} : { carryOf: fact.carryOf }),
|
|
419
|
+
...(fact.toPhases === undefined ? {} : { toPhases: fact.toPhases }),
|
|
420
|
+
});
|
|
421
|
+
edges.push({
|
|
422
|
+
certainty,
|
|
423
|
+
from: fact.from,
|
|
424
|
+
kind: fact.kind,
|
|
425
|
+
to: fact.to,
|
|
426
|
+
...(fact.kind === "data" && fact.exact !== undefined ? { exact: fact.exact } : {}),
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
edges.sort((a, b) => positionOf(a.from) - positionOf(b.from) ||
|
|
430
|
+
positionOf(a.to) - positionOf(b.to) ||
|
|
431
|
+
a.kind.localeCompare(b.kind));
|
|
432
|
+
fedBy.sort((a, b) => positionOf(a) - positionOf(b));
|
|
433
|
+
// --- 8. Lane list, region tree, renumbering --------------------------------------
|
|
434
|
+
const usedLanes = new Set();
|
|
435
|
+
for (const node of stepNodes)
|
|
436
|
+
for (const lane of laneSet.get(node.id) ?? [])
|
|
437
|
+
usedLanes.add(lane);
|
|
438
|
+
const laneOrder = [];
|
|
439
|
+
if (usedLanes.has(MAIN_LANE))
|
|
440
|
+
laneOrder.push({ id: MAIN_LANE });
|
|
441
|
+
if (usedLanes.has(WORKSPACE_LANE))
|
|
442
|
+
laneOrder.push({ id: WORKSPACE_LANE });
|
|
443
|
+
for (const actor of site.actors) {
|
|
444
|
+
if (!usedLanes.has(actor.id))
|
|
445
|
+
continue;
|
|
446
|
+
const families = familiesOf(actor.id);
|
|
447
|
+
laneOrder.push({
|
|
448
|
+
id: actor.id,
|
|
449
|
+
loc: actor.loc,
|
|
450
|
+
...(actor.name === undefined ? {} : { name: actor.name }),
|
|
451
|
+
...(actor.namePattern === undefined ? {} : { namePattern: actor.namePattern }),
|
|
452
|
+
...(families.length > 0 ? { families } : {}),
|
|
453
|
+
});
|
|
454
|
+
}
|
|
455
|
+
if (usedLanes.has(UNKNOWN_LANE))
|
|
456
|
+
laneOrder.push({ id: UNKNOWN_LANE });
|
|
457
|
+
// Keep only regions a step or lane actually points at, plus their ancestors — an
|
|
458
|
+
// empty `branch` the walk opened for a guard with no steps in it says nothing.
|
|
459
|
+
const keep = new Set();
|
|
460
|
+
const keepWithAncestors = (id) => {
|
|
461
|
+
let current = id;
|
|
462
|
+
while (current !== undefined && !keep.has(current)) {
|
|
463
|
+
keep.add(current);
|
|
464
|
+
current = regionById.get(current)?.parent;
|
|
465
|
+
}
|
|
466
|
+
};
|
|
467
|
+
for (const node of stepNodes)
|
|
468
|
+
keepWithAncestors(innermostRegion.get(node.id) ?? trace.root);
|
|
469
|
+
for (const lane of laneOrder)
|
|
470
|
+
for (const family of lane.families ?? [])
|
|
471
|
+
keepWithAncestors(family);
|
|
472
|
+
const rename = new Map();
|
|
473
|
+
const counters = new Map();
|
|
474
|
+
const regions = [];
|
|
475
|
+
for (const region of trace.regions) {
|
|
476
|
+
if (!keep.has(region.id))
|
|
477
|
+
continue;
|
|
478
|
+
if (isStructuralRegionKind(region.kind))
|
|
479
|
+
continue; // transparency rule: never exported
|
|
480
|
+
const next = (counters.get(region.kind) ?? 0) + 1;
|
|
481
|
+
counters.set(region.kind, next);
|
|
482
|
+
const id = `${region.kind}#${next}`;
|
|
483
|
+
rename.set(region.id, id);
|
|
484
|
+
const visible = visibleParent(region);
|
|
485
|
+
const parent = visible === undefined ? undefined : rename.get(visible);
|
|
486
|
+
regions.push({
|
|
487
|
+
id,
|
|
488
|
+
kind: region.kind,
|
|
489
|
+
...(parent === undefined ? {} : { parent }),
|
|
490
|
+
...(region.loc === undefined ? {} : { loc: region.loc }),
|
|
491
|
+
...(region.bound === undefined ? {} : { bound: region.bound }),
|
|
492
|
+
...(region.label === undefined ? {} : { label: region.label }),
|
|
493
|
+
});
|
|
494
|
+
}
|
|
495
|
+
const renamed = (id) => rename.get(id) ?? id;
|
|
496
|
+
for (const lane of laneOrder) {
|
|
497
|
+
if (lane.families !== undefined)
|
|
498
|
+
lane.families = lane.families.map(renamed);
|
|
499
|
+
}
|
|
500
|
+
// 开放的留白自己的 id 不带前缀(名字键,hole-id.ts):它属于哪次补全要问站点表。
|
|
501
|
+
const holeFill = new Map(core.sites.holes.map((hole) => [hole.id, hole.fill]));
|
|
502
|
+
const steps = stepNodes.map((node) => {
|
|
503
|
+
const lanes = laneSet.get(node.id) ?? [UNKNOWN_LANE];
|
|
504
|
+
const repeats = repeat.get(node.id);
|
|
505
|
+
const fill = fillOf(node.id) ?? holeFill.get(node.id);
|
|
506
|
+
return {
|
|
507
|
+
certainty: certaintyOf(node.id),
|
|
508
|
+
...(fill === undefined ? {} : { fill }),
|
|
509
|
+
id: node.id,
|
|
510
|
+
kind: node.kind,
|
|
511
|
+
label: node.label,
|
|
512
|
+
...(node.labelPattern === undefined ? {} : { labelPattern: node.labelPattern }),
|
|
513
|
+
lane: lanes[0],
|
|
514
|
+
loc: node.loc,
|
|
515
|
+
region: renamed(innermostRegion.get(node.id) ?? trace.root),
|
|
516
|
+
...(lanes.length > 1 ? { lanes } : {}),
|
|
517
|
+
...(repeats === undefined ? {} : { repeat: repeats }),
|
|
518
|
+
};
|
|
519
|
+
});
|
|
520
|
+
const expanded = expandMaySetLanes({
|
|
521
|
+
edges,
|
|
522
|
+
lanes: laneOrder,
|
|
523
|
+
regions,
|
|
524
|
+
steps,
|
|
525
|
+
...(fedBy.length > 0 ? { sink: { fedBy } } : {}),
|
|
526
|
+
});
|
|
527
|
+
// 阶段投影最后跑:它对成品图做机械改写(跨阶段拷贝 + 商图),并且在零标记脚本上是恒等
|
|
528
|
+
// 函数——既有快照的回归钉就是这一条。
|
|
529
|
+
return projectPhaseGraph(expanded, trace.phases, collectPhaseClaims(trace.events, stepIds, chainIsCertain, controlled), phaseFacts, sharesIteration);
|
|
530
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import { type TraceState } from "./causality-order-state.js";
|
|
3
|
+
export declare function walkCall(state: TraceState, node: ts.CallExpression, chain: readonly string[]): void;
|
|
4
|
+
/**
|
|
5
|
+
* THE GENERIC CALL RULE: apply what the oracle recorded at this node.
|
|
6
|
+
*
|
|
7
|
+
* - Callee applications inline the body as a `call` region (the helper's boundary, a
|
|
8
|
+
* `return` target). Several candidates (an indirect dispatch that may reach any of
|
|
9
|
+
* them) become the arms of one exhaustive `choice`: exactly one runs, we cannot say
|
|
10
|
+
* which. With no oracle record the checker's resolved declaration is the fallback — a
|
|
11
|
+
* value the interpreter could not track still has a syntactic answer.
|
|
12
|
+
* - Argument applications are callbacks a library may invoke, per the registry: `once`
|
|
13
|
+
* (the default) inlines the body as a `call`; when the library does not provably invoke
|
|
14
|
+
* it (`.then`, an unknown callee) the call sits in a one-arm skippable `choice` — the
|
|
15
|
+
* exact shape of an `if` without `else`, so certainty and the control-flow picture read
|
|
16
|
+
* "may not run" through the vocabulary they already have. `each` callbacks are handled
|
|
17
|
+
* by {@link walkCall} (their fanout) and arrive here in `handled`.
|
|
18
|
+
* - A DEFERRED callback (`.then` / `.catch` / `.finally`, a timer) runs after its receiver
|
|
19
|
+
* settles, so it is a STRAND whose PROLOGUE is an ordinary barrier over the receiver:
|
|
20
|
+
* the steps issued while evaluating the receiver (`receiverIssues`, the syntactic half)
|
|
21
|
+
* plus the oracle's claim keyed by the member-name token (see calls.ts), split by the
|
|
22
|
+
* settle-certainty rule like any other await. It needs no special certainty any more:
|
|
23
|
+
* the barrier runs inside the strand's own frame, so it orders the continuation's body
|
|
24
|
+
* without asserting anything about steps the MAIN LINE issues afterwards, and without
|
|
25
|
+
* robbing the main line's later `await` of its own certain settle. That scoping is what
|
|
26
|
+
* `settleLocally`'s may-claim used to approximate.
|
|
27
|
+
*/
|
|
28
|
+
export declare function applyAt(state: TraceState, node: ts.CallExpression | ts.NewExpression | ts.TaggedTemplateExpression, chain: readonly string[], handled?: ReadonlySet<ts.Node>, receiverIssues?: readonly string[]): void;
|
|
29
|
+
//# sourceMappingURL=causality-order-calls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"causality-order-calls.d.ts","sourceRoot":"","sources":["../../src/analysis/causality-order-calls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAQ5B,OAAO,EAQL,KAAK,UAAU,EAChB,MAAM,4BAA4B,CAAC;AAapC,wBAAgB,QAAQ,CACtB,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,EAAE,CAAC,cAAc,EACvB,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,IAAI,CA8DN;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,OAAO,CACrB,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC,aAAa,GAAG,EAAE,CAAC,wBAAwB,EACxE,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,OAAO,GAAE,WAAW,CAAC,EAAE,CAAC,IAAI,CAAa,EACzC,cAAc,GAAE,SAAS,MAAM,EAAO,GACrC,IAAI,CAyDN"}
|