@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,225 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import { artifactRowOfSymbol, markerFunctionOfSymbol, worldReadOpOfSymbol, siteProducingFunctionOfSymbol, } from "../facade/registry.js";
|
|
3
|
+
import { WORKFLOW_FUNCTION_NAME, } from "../compiler/compile.js";
|
|
4
|
+
import { callbackSemanticsOf, isGlobalLibValue } from "./callbacks.js";
|
|
5
|
+
import { actorName, actorNamePattern, askLabel, askLabelPattern, eachCandidate, forOfCandidate, isFacadeDeclared, literalText, resolveSymbol, SiteCounters, worldReadLabel, } from "./sites-labels.js";
|
|
6
|
+
import { holeSiteOf } from "./hole-sites.js";
|
|
7
|
+
import { holeSiteId } from "./hole-id.js";
|
|
8
|
+
// 拆分:本文件顶到 oxlint max-lines 上限(400 行)。名字 / 标签辅助与符号解析
|
|
9
|
+
// (resolveSymbol / isFacadeDeclared)搬到 sites-labels.ts;后两者原本就从这里导出,故原样
|
|
10
|
+
// 再导出,既有的 `from "./sites.js"` 引用一个不改。站点类型留在本文件(五个模块按此路径导入)。
|
|
11
|
+
export { isFacadeDeclared, resolveSymbol } from "./sites-labels.js";
|
|
12
|
+
/** Collect the site table by walking the wrapped script's `__workflowScript__` body. */
|
|
13
|
+
export function collectSites(workflow) {
|
|
14
|
+
const { program, scriptFile, toScriptLoc } = workflow;
|
|
15
|
+
const checker = program.getTypeChecker();
|
|
16
|
+
const body = findWorkflowBody(scriptFile);
|
|
17
|
+
const table = {
|
|
18
|
+
actors: [],
|
|
19
|
+
artifacts: [],
|
|
20
|
+
asks: [],
|
|
21
|
+
holes: [],
|
|
22
|
+
iterations: [],
|
|
23
|
+
joins: [],
|
|
24
|
+
phases: [],
|
|
25
|
+
reports: [],
|
|
26
|
+
topLevelReturns: [],
|
|
27
|
+
worldReads: [],
|
|
28
|
+
};
|
|
29
|
+
let order = 0;
|
|
30
|
+
const locOf = (node) => toScriptLoc(node.getStart(scriptFile));
|
|
31
|
+
// `ids` 是当前作用域的 per-kind 计数器组:顶层一套,每个留白函数体一套新的(带前缀)。
|
|
32
|
+
// 返回值只在收到一个**带函数体的留白**时非空:walk 据此给函数体换计数器。
|
|
33
|
+
const classify = (node, funcDepth, ids) => {
|
|
34
|
+
if (ts.isReturnStatement(node)) {
|
|
35
|
+
if (funcDepth === 0) {
|
|
36
|
+
table.topLevelReturns.push({ expression: node.expression, loc: locOf(node) });
|
|
37
|
+
}
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (ts.isForOfStatement(node)) {
|
|
41
|
+
table.iterations.push(forOfCandidate(node, order++, locOf(node)));
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (!ts.isCallExpression(node))
|
|
45
|
+
return;
|
|
46
|
+
if (ts.isPropertyAccessExpression(node.expression)) {
|
|
47
|
+
const access = node.expression;
|
|
48
|
+
const propSymbol = checker.getSymbolAtLocation(access.name);
|
|
49
|
+
if (isFacadeDeclared(propSymbol)) {
|
|
50
|
+
const name = access.name.text;
|
|
51
|
+
if (name === "ask") {
|
|
52
|
+
const labelPattern = askLabelPattern(access.expression, checker);
|
|
53
|
+
table.asks.push({
|
|
54
|
+
call: node,
|
|
55
|
+
id: ids.next("ask"),
|
|
56
|
+
instructions: node.arguments[0],
|
|
57
|
+
label: askLabel(access.expression, checker),
|
|
58
|
+
...(labelPattern === undefined ? {} : { labelPattern }),
|
|
59
|
+
loc: toScriptLoc(access.name.getStart(scriptFile)),
|
|
60
|
+
order: order++,
|
|
61
|
+
receiver: access.expression,
|
|
62
|
+
});
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
// 产物成员先于 world-read 判定,两张表互斥(同一个 (容器,成员) 不可能同时在两张
|
|
66
|
+
// 表里)。身份同样按**声明容器**取,不按名字:`artifact.table` 与脚本自己的某个
|
|
67
|
+
// `table` 方法只有声明能分辨。
|
|
68
|
+
const artifact = artifactRowOfSymbol(propSymbol);
|
|
69
|
+
if (artifact !== undefined) {
|
|
70
|
+
const idExpr = node.arguments[0];
|
|
71
|
+
const id = literalText(idExpr);
|
|
72
|
+
table.artifacts.push({
|
|
73
|
+
artifactIdExpr: idExpr,
|
|
74
|
+
...(id === undefined ? {} : { artifactId: id }),
|
|
75
|
+
call: node,
|
|
76
|
+
id: ids.next("artifact"),
|
|
77
|
+
loc: toScriptLoc(access.name.getStart(scriptFile)),
|
|
78
|
+
op: artifact.op,
|
|
79
|
+
order: order++,
|
|
80
|
+
});
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
// World-read identity comes from the registry, keyed on the member's DECLARING
|
|
84
|
+
// CONTAINER — never on its bare name. `git.log` collides with the top-level
|
|
85
|
+
// `log()` by name, so a bare-name test would either mint a world-read site for
|
|
86
|
+
// every progress message or drop `git.log`'s site entirely; a facade call with no
|
|
87
|
+
// site has no journal key, which is the exact unsoundness the facade-siting rule
|
|
88
|
+
// exists to prevent.
|
|
89
|
+
const op = worldReadOpOfSymbol(propSymbol);
|
|
90
|
+
if (op !== undefined) {
|
|
91
|
+
table.worldReads.push({
|
|
92
|
+
args: node.arguments,
|
|
93
|
+
call: node,
|
|
94
|
+
id: ids.next("world-read"),
|
|
95
|
+
label: worldReadLabel(op, node.arguments[0]),
|
|
96
|
+
loc: toScriptLoc(access.name.getStart(scriptFile)),
|
|
97
|
+
op,
|
|
98
|
+
order: order++,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const method = access.name.text;
|
|
104
|
+
if ((method === "all" || method === "allSettled") &&
|
|
105
|
+
isGlobalLibValue(access.expression, "Promise", checker, program)) {
|
|
106
|
+
table.joins.push({
|
|
107
|
+
arg: node.arguments[0],
|
|
108
|
+
call: node,
|
|
109
|
+
id: ids.next("join"),
|
|
110
|
+
label: "join",
|
|
111
|
+
loc: toScriptLoc(access.name.getStart(scriptFile)),
|
|
112
|
+
method,
|
|
113
|
+
order: order++,
|
|
114
|
+
});
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
// Per-element callback calls per the registry (`xs.map(fn)`, `Array.from(xs, fn)`, …)
|
|
118
|
+
// register as fan-out candidates whatever shape the callback argument has.
|
|
119
|
+
const semantics = callbackSemanticsOf(node, checker, program);
|
|
120
|
+
if (semantics?.multiplicity === "each") {
|
|
121
|
+
const candidate = eachCandidate(node, semantics, order, locOf(node));
|
|
122
|
+
if (candidate !== undefined) {
|
|
123
|
+
order++;
|
|
124
|
+
table.iterations.push(candidate);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
// Bare-callee call: the facade ones are `agent(...)` and `report(...)`. Which
|
|
130
|
+
// top-level functions produce sites lives in the registry, not here — `log()` is a
|
|
131
|
+
// bare facade call too, and the difference between it and `report()` is that a report
|
|
132
|
+
// has a journal row keyed by its site.
|
|
133
|
+
const calleeSymbol = resolveSymbol(node.expression, checker);
|
|
134
|
+
const fn = siteProducingFunctionOfSymbol(calleeSymbol);
|
|
135
|
+
if (fn === "agent") {
|
|
136
|
+
const name = actorName(node);
|
|
137
|
+
// pattern 只在真拿不到名字时才求:字面量名与绑定名都是**名字**,重建物不得顶掉它们。
|
|
138
|
+
const namePattern = name === undefined ? actorNamePattern(node) : undefined;
|
|
139
|
+
table.actors.push({
|
|
140
|
+
call: node,
|
|
141
|
+
id: ids.next("actor"),
|
|
142
|
+
loc: locOf(node),
|
|
143
|
+
name,
|
|
144
|
+
...(namePattern === undefined ? {} : { namePattern }),
|
|
145
|
+
order: order++,
|
|
146
|
+
});
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
if (fn === "report") {
|
|
150
|
+
// 第二实参是**产物标签**:只有无洞字面量才算标签,
|
|
151
|
+
// 其余(标识符、带洞模板)留给 artifacts 诊断趟按 artifactIdExpr 定位——绝不在这里
|
|
152
|
+
// 猜一个 id 出来,那会让一条指向不存在看板的 report 静默通过编译。
|
|
153
|
+
const tagExpr = node.arguments[1];
|
|
154
|
+
const tag = literalText(tagExpr);
|
|
155
|
+
table.reports.push({
|
|
156
|
+
artifactIdExpr: tagExpr,
|
|
157
|
+
...(tag === undefined ? {} : { artifactId: tag }),
|
|
158
|
+
call: node,
|
|
159
|
+
id: ids.next("report"),
|
|
160
|
+
item: node.arguments[0],
|
|
161
|
+
loc: locOf(node),
|
|
162
|
+
order: order++,
|
|
163
|
+
});
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
if (fn === "hole") {
|
|
167
|
+
// 留白(docs/analysis.md「Sites」的 Hole sites 段):id 是名字键(hole-id.ts),占全局 order;
|
|
168
|
+
// 带函数体时交回给 walk,让函数体在一套**全新的、带前缀的**计数器下走查。名字不是字面量
|
|
169
|
+
// 时(9012,脚本提交不了)退回位置计数器,只为让诊断有个可定位的站点。
|
|
170
|
+
const holeName = literalText(node.arguments[0]);
|
|
171
|
+
const holeId = holeName === undefined ? ids.next("hole") : holeSiteId(holeName);
|
|
172
|
+
const site = holeSiteOf(node, holeId, order++, locOf(node), funcDepth, ids.holeId);
|
|
173
|
+
table.holes.push(site);
|
|
174
|
+
return site.body === undefined ? undefined : site;
|
|
175
|
+
}
|
|
176
|
+
// `phase("…")` is a marker, not a site: no id and no counter of any kind is consumed
|
|
177
|
+
// here (see PhaseMarkerSite). Resolved by declaration like the calls above — a
|
|
178
|
+
// script-local function named `phase` is somebody else's function.
|
|
179
|
+
if (markerFunctionOfSymbol(calleeSymbol) === "phase") {
|
|
180
|
+
const nameExpr = node.arguments[0];
|
|
181
|
+
const name = literalText(nameExpr);
|
|
182
|
+
table.phases.push({
|
|
183
|
+
call: node,
|
|
184
|
+
loc: locOf(node),
|
|
185
|
+
...(name === undefined ? {} : { name }),
|
|
186
|
+
nameExpr,
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
const walk = (node, funcDepth, ids) => {
|
|
191
|
+
const hole = classify(node, funcDepth, ids);
|
|
192
|
+
const childDepth = funcDepth + (isFunctionLike(node) ? 1 : 0);
|
|
193
|
+
ts.forEachChild(node, (child) => walk(child, childDepth, hole !== undefined && child === hole.body ? ids.child(hole.id) : ids));
|
|
194
|
+
};
|
|
195
|
+
// 顶层一套计数器贯穿整个脚本体(每个语句都用同一套!);留白函数体各自换一套带前缀的。
|
|
196
|
+
const topLevel = new SiteCounters();
|
|
197
|
+
for (const statement of body.statements)
|
|
198
|
+
walk(statement, 0, topLevel);
|
|
199
|
+
return table;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* The authored script body: the wrapper function's block. Exported for the causality
|
|
203
|
+
* pass, which walks the same body in evaluation order. Read-only — it collects nothing
|
|
204
|
+
* into the site table, so site ids stay bit-for-bit identical.
|
|
205
|
+
*/
|
|
206
|
+
export function findWorkflowBody(scriptFile) {
|
|
207
|
+
for (const statement of scriptFile.statements) {
|
|
208
|
+
if (ts.isFunctionDeclaration(statement) &&
|
|
209
|
+
statement.name?.text === WORKFLOW_FUNCTION_NAME &&
|
|
210
|
+
statement.body !== undefined) {
|
|
211
|
+
return statement.body;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
throw new Error(`workflow wrapper function ${WORKFLOW_FUNCTION_NAME} not found`);
|
|
215
|
+
}
|
|
216
|
+
/** True iff the node introduces its own function scope (a body that runs only when called). */
|
|
217
|
+
export function isFunctionLike(node) {
|
|
218
|
+
return (ts.isFunctionDeclaration(node) ||
|
|
219
|
+
ts.isFunctionExpression(node) ||
|
|
220
|
+
ts.isArrowFunction(node) ||
|
|
221
|
+
ts.isMethodDeclaration(node) ||
|
|
222
|
+
ts.isGetAccessorDeclaration(node) ||
|
|
223
|
+
ts.isSetAccessorDeclaration(node) ||
|
|
224
|
+
ts.isConstructorDeclaration(node));
|
|
225
|
+
}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import type { WorkflowProgram } from "../compiler/compile.js";
|
|
3
|
+
import type { HoleSite, IterationCandidate, SiteTable } from "./sites.js";
|
|
4
|
+
import { type AbstractValue, type TaintFacts, type TaintOcc } from "./domain.js";
|
|
5
|
+
/**
|
|
6
|
+
* The mutable fixpoint state of the taint pass: the site lookups, the global
|
|
7
|
+
* environment, function summaries, the reachability/promotion sets, and the sink
|
|
8
|
+
* accumulators. The evaluator (taint.ts) drives it; this module owns the storage,
|
|
9
|
+
* the monotone update primitives (each reports growth via `changed`), and the final
|
|
10
|
+
* placeholder-resolving emission of {@link TaintFacts}.
|
|
11
|
+
*/
|
|
12
|
+
/** How a function reached a call site: as the thing called, or as an argument a library may invoke. */
|
|
13
|
+
export type ApplicationVia = "callee" | "argument";
|
|
14
|
+
export declare class TaintState {
|
|
15
|
+
readonly table: SiteTable;
|
|
16
|
+
readonly checker: ts.TypeChecker;
|
|
17
|
+
readonly program: ts.Program;
|
|
18
|
+
readonly scriptFile: ts.SourceFile;
|
|
19
|
+
readonly body: ts.Block;
|
|
20
|
+
readonly askByCall: Map<ts.CallExpression, string>;
|
|
21
|
+
readonly askSites: Map<string, {
|
|
22
|
+
receiver: ts.Expression;
|
|
23
|
+
instructions: ts.Expression | undefined;
|
|
24
|
+
}>;
|
|
25
|
+
readonly worldByCall: Map<ts.CallExpression, {
|
|
26
|
+
id: string;
|
|
27
|
+
args: readonly ts.Expression[];
|
|
28
|
+
}>;
|
|
29
|
+
readonly joinByCall: Map<ts.CallExpression, {
|
|
30
|
+
id: string;
|
|
31
|
+
arg: ts.Expression | undefined;
|
|
32
|
+
}>;
|
|
33
|
+
readonly actorByCall: Map<ts.CallExpression, string>;
|
|
34
|
+
/** 留白调用 → 站点(开放与已补全都在;transfer 规则按有无 body 分派)。 */
|
|
35
|
+
readonly holeByCall: Map<ts.CallExpression, HoleSite>;
|
|
36
|
+
/** Per-element callback calls (`xs.map(fn)`, `Array.from(xs, fn)`, …), keyed by the CALL. */
|
|
37
|
+
readonly candByCall: Map<ts.CallExpression, IterationCandidate>;
|
|
38
|
+
readonly candByForOf: Map<ts.Node, IterationCandidate>;
|
|
39
|
+
/**
|
|
40
|
+
* THE CALL ORACLE: for every call / `new` /
|
|
41
|
+
* tagged-template node, the script-local functions this pass applied there and HOW —
|
|
42
|
+
* `callee` (the node's callee value held the function: direct call, through a parameter,
|
|
43
|
+
* a field, a class member) or `argument` (the node handed the function to a library callee
|
|
44
|
+
* that may invoke it: a registry entry or the keystone rule). Monotone like every other
|
|
45
|
+
* accumulator; read after convergence by the ordering walk, which inlines exactly these
|
|
46
|
+
* bodies at exactly these sites instead of guessing from syntax.
|
|
47
|
+
*/
|
|
48
|
+
readonly applications: Map<ts.Node, Map<ts.Node, ApplicationVia>>;
|
|
49
|
+
/**
|
|
50
|
+
* The live abstract result of each `Promise.all` join call, keyed by the join CALL NODE
|
|
51
|
+
* and PERSISTENT across fixpoint passes (see {@link joinResultOf}). A join result IS a
|
|
52
|
+
* place whose element fields carry may-alias back-references to the (place) inputs, so
|
|
53
|
+
* resolvePlace returns it — letting `const [a, b] = await Promise.all([…])`
|
|
54
|
+
* destructure-alias the elements and a write through `res[k]` reach the original input.
|
|
55
|
+
*/
|
|
56
|
+
readonly joinResults: Map<ts.CallExpression, AbstractValue>;
|
|
57
|
+
/**
|
|
58
|
+
* The live abstract place of each conditional expression used as a place
|
|
59
|
+
* (`flag ? box1 : box2`), keyed by the ConditionalExpression NODE and persistent across
|
|
60
|
+
* passes (see {@link condPlaceOf}). Same canonical-heap requirement as {@link joinResults}.
|
|
61
|
+
*/
|
|
62
|
+
readonly condPlaces: Map<ts.ConditionalExpression, AbstractValue>;
|
|
63
|
+
/** Allocation-site places of container literals; see {@link literalPlaceOf}. */
|
|
64
|
+
readonly literalPlaces: Map<ts.ObjectLiteralExpression | ts.ArrayLiteralExpression, AbstractValue>;
|
|
65
|
+
readonly fnId: Map<ts.Node, number>;
|
|
66
|
+
readonly fnParamSymbols: Map<number, (ts.Symbol | undefined)[]>;
|
|
67
|
+
readonly functions: ts.Node[];
|
|
68
|
+
readonly callbackNodes: Set<ts.Node>;
|
|
69
|
+
/**
|
|
70
|
+
* Object-literal set accessors, keyed by property name -> setter fn ids. Crude but
|
|
71
|
+
* sound: an assignment to ANY property of that name (on any object) records the
|
|
72
|
+
* assigned value as the setter's param-0 actual, so the setter body's flow is seen.
|
|
73
|
+
*/
|
|
74
|
+
readonly settersByProp: Map<string, number[]>;
|
|
75
|
+
/**
|
|
76
|
+
* One shared abstract instance per class declaration/expression, keyed by the class
|
|
77
|
+
* node. Static AND instance members conflate into this ONE value (a deliberate sound
|
|
78
|
+
* over-approximation: per-instance and static/instance precision are out of scope, so
|
|
79
|
+
* a write through any instance, through `this`, or through the class name is visible
|
|
80
|
+
* through every other). Persistent across fixpoint passes — growth is signalled like
|
|
81
|
+
* any env slot.
|
|
82
|
+
*/
|
|
83
|
+
readonly classInstances: Map<ts.Node, AbstractValue>;
|
|
84
|
+
/** Class declarations/expressions in the workflow body, in discovery order. */
|
|
85
|
+
readonly classes: ts.Node[];
|
|
86
|
+
readonly env: Map<ts.Symbol, AbstractValue>;
|
|
87
|
+
readonly summaries: Map<number, AbstractValue>;
|
|
88
|
+
readonly paramActuals: Map<string, AbstractValue>;
|
|
89
|
+
/**
|
|
90
|
+
* Per-placeholder-parameter set of values that MAY be passed to an INVOCATION of that
|
|
91
|
+
* parameter (keyed by `${fnId}:${param}`). Two capture sites (calls.ts handleUnknownCall):
|
|
92
|
+
* a direct call of a placeholder callee (`resolve(draft)` — resolve is param 0), and a
|
|
93
|
+
* placeholder-valued argument to an unknown call (`draft.then(onOk)` — the unknown `.then`
|
|
94
|
+
* may invoke onOk with the receiver pot). Consumed by the promise machinery: `new
|
|
95
|
+
* Unknown(fn)` and `await thenable` resolve to whatever fn's / then's callback params
|
|
96
|
+
* receive (the resolve/reject/continuation pattern). Distinct from {@link paramActuals},
|
|
97
|
+
* which records what a function receives when IT is called.
|
|
98
|
+
*/
|
|
99
|
+
readonly phCallActuals: Map<string, AbstractValue>;
|
|
100
|
+
readonly reachSet: Set<string>;
|
|
101
|
+
readonly calledFns: Map<string, Set<number>>;
|
|
102
|
+
readonly promotedOrders: Set<number>;
|
|
103
|
+
/**
|
|
104
|
+
* Per-`reduce`-candidate accumulator taint (keyed by candidate `order`), carried
|
|
105
|
+
* ACROSS fixpoint passes. The callback-return value that reduce threads into the
|
|
106
|
+
* accumulator param is a fresh local each pass, so binding the param from it
|
|
107
|
+
* directly never observed the return taint; this persistent slot fixes that.
|
|
108
|
+
*/
|
|
109
|
+
readonly reduceAcc: Map<number, AbstractValue>;
|
|
110
|
+
readonly askInstr: Map<string, AbstractValue>;
|
|
111
|
+
readonly askRecv: Map<string, AbstractValue>;
|
|
112
|
+
readonly worldRead: Map<string, AbstractValue>;
|
|
113
|
+
/** 开放留白的提示 sink(docs/analysis.md「Sites」:提示流入留白,如 ask 的 instructions)。 */
|
|
114
|
+
readonly holePrompt: Map<string, AbstractValue>;
|
|
115
|
+
readonly joinInByPort: Map<string, Map<number, AbstractValue>>;
|
|
116
|
+
readonly fanoutInVal: Map<string, AbstractValue>;
|
|
117
|
+
/**
|
|
118
|
+
* The ORACLE accumulators, keyed by source START OFFSET rather than by site id: the
|
|
119
|
+
* value each `await` operand carries, and the value each guard expression reads. They
|
|
120
|
+
* feed {@link emitOracle}, which only the temporal walk (causality-order.ts) consumes —
|
|
121
|
+
* nothing here changes a transfer rule, and a position keys nothing in the site
|
|
122
|
+
* vocabulary, which is what keeps the site-id stability rule untouched: no `order`
|
|
123
|
+
* counter and no per-kind counter is consulted.
|
|
124
|
+
*/
|
|
125
|
+
readonly awaitVal: Map<number, AbstractValue>;
|
|
126
|
+
readonly guardVal: Map<number, AbstractValue>;
|
|
127
|
+
readonly returnVal: AbstractValue;
|
|
128
|
+
/**
|
|
129
|
+
* One script-global thrown-value set: every `throw` joins its operand into it and
|
|
130
|
+
* every `catch` binding reads all of it. A flow-insensitive over-approximation of
|
|
131
|
+
* exception routing — sound under gen-only, deliberately imprecise across disjoint
|
|
132
|
+
* `try` blocks. Persistent across passes so throws in one iteration reach catches
|
|
133
|
+
* in the next (fixpoint-safe).
|
|
134
|
+
*/
|
|
135
|
+
readonly thrownVal: AbstractValue;
|
|
136
|
+
changed: boolean;
|
|
137
|
+
constructor(workflow: WorkflowProgram, table: SiteTable);
|
|
138
|
+
private buildLookups;
|
|
139
|
+
private collectFunctions;
|
|
140
|
+
/**
|
|
141
|
+
* Bind a symbol to an abstract value. A FRESH symbol ADOPTS the value object by
|
|
142
|
+
* reference (`env[sym] === value`); an already-bound slot weak-merges (sound smear).
|
|
143
|
+
* Adoption is what makes bindings alias rather than snapshot: passing a live place (env slot / live field) shares it, so a later
|
|
144
|
+
* write through any alias is visible through every other. Callers that must NOT
|
|
145
|
+
* alias pass a fresh clone/collapse (reads already return snapshots).
|
|
146
|
+
*/
|
|
147
|
+
bindSymbol(sym: ts.Symbol, value: AbstractValue): void;
|
|
148
|
+
envSlot(sym: ts.Symbol): AbstractValue;
|
|
149
|
+
summaryOf(id: number): AbstractValue;
|
|
150
|
+
/** The shared abstract instance of a class node, created empty on demand (persistent). */
|
|
151
|
+
instanceOf(cls: ts.Node): AbstractValue;
|
|
152
|
+
/**
|
|
153
|
+
* The shared abstract result of a join call, created empty on demand (persistent).
|
|
154
|
+
*
|
|
155
|
+
* THE CANONICAL-HEAP INVARIANT: every value that models runtime storage — anything that
|
|
156
|
+
* can be aliased, written through, or referenced from a `mayAlias` set — is keyed by a
|
|
157
|
+
* static program point and lives across fixpoint passes; per-pass temporaries are
|
|
158
|
+
* snapshots only. handleJoin used to mint a FRESH result value each pass, so
|
|
159
|
+
* `Promise.all([Promise.all([…])])` added a never-before-seen object to the outer
|
|
160
|
+
* element's `mayAlias` set every pass. That set dedups by IDENTITY (domain.ts), so
|
|
161
|
+
* `changed` stayed true forever and the fixpoint hit ITERATION_CAP. Keying the result by
|
|
162
|
+
* the call node makes the identity stable, so the union saturates.
|
|
163
|
+
*/
|
|
164
|
+
joinResultOf(call: ts.CallExpression): AbstractValue;
|
|
165
|
+
/**
|
|
166
|
+
* The shared abstract place of a conditional expression, created empty on demand
|
|
167
|
+
* (persistent). Same canonical-heap invariant as {@link joinResultOf}: a per-pass
|
|
168
|
+
* wrapper for `flag ? box1 : box2` diverged the fixpoint as soon as it became a
|
|
169
|
+
* `mayAlias` target — which a SYNTACTICALLY NESTED ternary place
|
|
170
|
+
* (`f2 ? (f ? box1 : box2) : box3`) does on every pass.
|
|
171
|
+
*/
|
|
172
|
+
condPlaceOf(node: ts.ConditionalExpression): AbstractValue;
|
|
173
|
+
/**
|
|
174
|
+
* The allocation-site place of a container literal (`{…}` / `[…]`): the value its first
|
|
175
|
+
* evaluation produced, kept across passes and weak-merged with every re-evaluation
|
|
176
|
+
* (persistent). Same canonical-heap invariant as {@link joinResultOf}: a literal IS runtime
|
|
177
|
+
* storage — a callee writes through it (`fill([], v)`, `tag({ name }, t)` with
|
|
178
|
+
* `box.note = t`), a binding adopts it, a spread shares its fields — so a value recreated
|
|
179
|
+
* every pass can never settle once something persistent merges INTO it. The
|
|
180
|
+
* parameter write-back targeted the per-pass fresh literal, reported a change on every pass
|
|
181
|
+
* (the note it had just added was gone again), and the fixpoint hit ITERATION_CAP with no
|
|
182
|
+
* state growing at all. Any `f({ … })` whose callee mutates its parameter was affected.
|
|
183
|
+
*
|
|
184
|
+
* Adopting the first evaluation (rather than minting an empty slot) keeps the literal's
|
|
185
|
+
* aliasing: a field that stores a live place (`{ box }`, `[obj]`) keeps pointing at that
|
|
186
|
+
* slot, and later passes merge the same slot into itself — an identity no-op. Snapshot
|
|
187
|
+
* fields accumulate monotonically, exactly as an env slot bound to the literal always did.
|
|
188
|
+
*/
|
|
189
|
+
literalPlaceOf(node: ts.ObjectLiteralExpression | ts.ArrayLiteralExpression, fresh: AbstractValue): AbstractValue;
|
|
190
|
+
mergeReturn(value: AbstractValue): void;
|
|
191
|
+
/** Join a thrown operand into the script-global thrown-value set. */
|
|
192
|
+
mergeThrown(value: AbstractValue): void;
|
|
193
|
+
/**
|
|
194
|
+
* Weak-merge into a keyed sink accumulator. Generic in the key so the oracle
|
|
195
|
+
* accumulators ({@link awaitVal} / {@link guardVal}), which are keyed by source offset
|
|
196
|
+
* rather than site id, share the one monotone update path every other sink uses.
|
|
197
|
+
*/
|
|
198
|
+
mergeSink<K>(map: Map<K, AbstractValue>, id: K, value: AbstractValue): void;
|
|
199
|
+
mergeJoinIn(id: string, port: number, value: AbstractValue): void;
|
|
200
|
+
addParamActual(id: number, param: number, value: AbstractValue): void;
|
|
201
|
+
/** Record a value that may reach an invocation of the placeholder-parameter `key`. */
|
|
202
|
+
recordPhCall(key: string, value: AbstractValue): void;
|
|
203
|
+
/** The taint fed to invocations of a function's parameter `param`, if any. */
|
|
204
|
+
phCallActualsOf(id: number, param: number): AbstractValue | undefined;
|
|
205
|
+
/** The persistent accumulator taint for a `reduce` candidate (empty until seeded). */
|
|
206
|
+
reduceAccOf(order: number): AbstractValue;
|
|
207
|
+
/** Merge a pass's callback-return taint into a `reduce` candidate's accumulator. */
|
|
208
|
+
mergeReduceAcc(order: number, value: AbstractValue): void;
|
|
209
|
+
/**
|
|
210
|
+
* Record a call against EVERY enclosing region, mirroring {@link markFacade}.
|
|
211
|
+
* Recording only the innermost region left a caller function `fn@f`
|
|
212
|
+
* unmarked when its call to `g` happened inside an iteration candidate's callback
|
|
213
|
+
* (region `cand@N`). Reachability then never propagated `fn@f`, so a sibling
|
|
214
|
+
* candidate whose callback calls `f` failed to promote to a fan-out — an
|
|
215
|
+
* under-approximation (a dropped may-flow), which this analysis must never do.
|
|
216
|
+
*/
|
|
217
|
+
markCalled(regionStack: string[], id: number): void;
|
|
218
|
+
/** Record that `fn` was applied at `site` (see {@link applications}). Not a fixpoint
|
|
219
|
+
* signal: applications feed no transfer rule, and the final pass re-records them all. */
|
|
220
|
+
recordApplication(site: ts.Node, fn: ts.Node, via: ApplicationVia): void;
|
|
221
|
+
/** Mark every enclosing region as reaching a facade site. */
|
|
222
|
+
markFacade(regionStack: string[]): void;
|
|
223
|
+
/** Propagate reachability across the call graph until it stops growing. */
|
|
224
|
+
propagateReachability(): void;
|
|
225
|
+
/** Promote iteration candidates whose body region reaches a facade site. */
|
|
226
|
+
recomputePromotion(): void;
|
|
227
|
+
emitFacts(): TaintFacts;
|
|
228
|
+
/**
|
|
229
|
+
* The ordering walk's oracle view, resolved directly off the CONVERGED interpreter
|
|
230
|
+
* state — the fused pass's replacement for the `awaitSettles`/`guardReads` members
|
|
231
|
+
* TaintFacts used to carry.
|
|
232
|
+
* Same keying (`node.getStart(scriptFile)` of the awaited/guard expression) and the
|
|
233
|
+
* SAME resolution pipeline as every artifact sink (placeholders expanded, collapsed,
|
|
234
|
+
* actor labels filtered) — so an awaited parameter still resolves to the union of the
|
|
235
|
+
* promises its callers passed in, across all call sites. That union is normative: the
|
|
236
|
+
* temporal walk must see today's context-INsensitive values bit-for-bit; caller-context
|
|
237
|
+
* precision is explicitly out of scope.
|
|
238
|
+
*
|
|
239
|
+
* Only meaningful after the fixpoint has converged; interpret.ts is the one caller.
|
|
240
|
+
*/
|
|
241
|
+
emitOracle(): {
|
|
242
|
+
awaitSettles: Map<number, TaintOcc[]>;
|
|
243
|
+
guardReads: Map<number, TaintOcc[]>;
|
|
244
|
+
applications: ReadonlyMap<ts.Node, ReadonlyMap<ts.Node, ApplicationVia>>;
|
|
245
|
+
};
|
|
246
|
+
private resolveArtifact;
|
|
247
|
+
private resolveActor;
|
|
248
|
+
private resolveOccs;
|
|
249
|
+
/** Expand parameter placeholders to the union of actual arguments across all calls. */
|
|
250
|
+
private resolvePlaceholders;
|
|
251
|
+
private resolvePlaceholder;
|
|
252
|
+
bindPlaceholderParams(fn: ts.Node, id: number): void;
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/analysis/state.ts"],"names":[],"mappings":"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"}
|