@sunshaobei/dsh-workflow 0.0.0-stage → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +64 -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,302 @@
|
|
|
1
|
+
// MCode dynamic-workflow-runtime port; imports and workspace directory adapted for DSH.
|
|
2
|
+
import { spawn } from "node:child_process";
|
|
3
|
+
import { createInterface } from "node:readline";
|
|
4
|
+
import { lowerWorkflowScript, WorkflowEngine, WorkflowError, } from "../dynamic-workflow/index.js";
|
|
5
|
+
import { renderChildEntry } from "./child-source.js";
|
|
6
|
+
import { writeChildEntryFile } from "./child-entry-file.js";
|
|
7
|
+
const DEFAULT_MAX_OLD_SPACE_MB = 256;
|
|
8
|
+
const STDERR_LIMIT = 64 * 1024;
|
|
9
|
+
export async function runWorkflowScript(options) {
|
|
10
|
+
const lowered = resolveLowered(options);
|
|
11
|
+
const runId = options.runId ?? "run";
|
|
12
|
+
let engine;
|
|
13
|
+
const sink = {
|
|
14
|
+
askSubmitAttempted: (instance, payload) => engine.askSubmitAttempted(instance, payload),
|
|
15
|
+
askTurnEnded: (instance, finalText) => engine.askTurnEnded(instance, finalText),
|
|
16
|
+
askProgress: (instance, progress) => engine.askProgress(instance, progress),
|
|
17
|
+
askStats: (instance, stats) => engine.askStats(instance, stats),
|
|
18
|
+
askFailed: (instance, error) => engine.askFailed(instance, error),
|
|
19
|
+
stopRun: (error) => engine.stopRun(error),
|
|
20
|
+
askWaiting: (instance, info) => engine.askWaiting(instance, info),
|
|
21
|
+
askExecuting: (instance) => engine.askExecuting(instance),
|
|
22
|
+
askMutating: (instance) => engine.askMutating(instance),
|
|
23
|
+
concurrencyChanged: (change) => engine.concurrencyChanged(change),
|
|
24
|
+
runStalled: (info) => engine.runStalled(info),
|
|
25
|
+
};
|
|
26
|
+
const driver = options.makeDriver(sink);
|
|
27
|
+
engine = new WorkflowEngine({
|
|
28
|
+
runId,
|
|
29
|
+
driver,
|
|
30
|
+
caps: options.caps,
|
|
31
|
+
askSpecs: options.askSpecs,
|
|
32
|
+
validate: options.validate,
|
|
33
|
+
...(options.sitePhases === undefined ? {} : { sitePhases: options.sitePhases }),
|
|
34
|
+
...(options.scriptText === undefined ? {} : { scriptText: options.scriptText }),
|
|
35
|
+
...(options.name === undefined ? {} : { name: options.name }),
|
|
36
|
+
...(options.args === undefined ? {} : { args: options.args }),
|
|
37
|
+
...(options.scriptHash === undefined ? {} : { scriptHash: options.scriptHash }),
|
|
38
|
+
...(options.parentSessionId === undefined ? {} : { parentSessionId: options.parentSessionId }),
|
|
39
|
+
...(options.toolCallId === undefined ? {} : { toolCallId: options.toolCallId }),
|
|
40
|
+
...(options.resumedFrom === undefined ? {} : { resumedFrom: options.resumedFrom }),
|
|
41
|
+
...(options.launch === undefined ? {} : { launch: options.launch }),
|
|
42
|
+
...(options.importedCache === undefined ? {} : { importedCache: options.importedCache }),
|
|
43
|
+
...(options.inheritedTokens === undefined ? {} : { inheritedTokens: options.inheritedTokens }),
|
|
44
|
+
cwd: options.cwd ?? process.cwd(),
|
|
45
|
+
});
|
|
46
|
+
options.control?.bind(engine);
|
|
47
|
+
const maxOldSpaceSizeMb = options.maxOldSpaceSizeMb ?? DEFAULT_MAX_OLD_SPACE_MB;
|
|
48
|
+
const cwd = options.cwd ?? process.cwd();
|
|
49
|
+
const payload = {
|
|
50
|
+
lowered,
|
|
51
|
+
...(options.args === undefined ? {} : { args: options.args }),
|
|
52
|
+
maxOldSpaceSizeMb,
|
|
53
|
+
};
|
|
54
|
+
let child;
|
|
55
|
+
try {
|
|
56
|
+
const entry = writeChildEntryFile({
|
|
57
|
+
cwd,
|
|
58
|
+
runId,
|
|
59
|
+
source: renderChildEntry(payload, { runId }),
|
|
60
|
+
...(options.onWarning === undefined ? {} : { onWarning: options.onWarning }),
|
|
61
|
+
});
|
|
62
|
+
child = spawn(process.execPath, options.childSpawn === undefined
|
|
63
|
+
? [`--max-old-space-size=${maxOldSpaceSizeMb}`, entry.path]
|
|
64
|
+
: [...options.childSpawn.argsPrefix, entry.path], {
|
|
65
|
+
cwd,
|
|
66
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
67
|
+
env: { ...process.env, ELECTRON_RUN_AS_NODE: "1" },
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
catch (cause) {
|
|
71
|
+
const message = cause instanceof Error ? cause.message : String(cause);
|
|
72
|
+
engine.stop("interrupted", new WorkflowError("Interrupted", `Could not start the workflow sandbox process: ${message}`, {
|
|
73
|
+
cause,
|
|
74
|
+
}));
|
|
75
|
+
return engine.settled;
|
|
76
|
+
}
|
|
77
|
+
return bridge({ child, engine, runId, signal: options.signal, timeoutMs: options.timeoutMs });
|
|
78
|
+
}
|
|
79
|
+
function resolveLowered(options) {
|
|
80
|
+
if (options.lowered !== undefined)
|
|
81
|
+
return options.lowered;
|
|
82
|
+
if (options.scriptText === undefined) {
|
|
83
|
+
throw new Error("runWorkflowScript: pass either scriptText or lowered");
|
|
84
|
+
}
|
|
85
|
+
const result = lowerWorkflowScript(options.scriptText);
|
|
86
|
+
if (!result.ok || result.lowered === undefined) {
|
|
87
|
+
const detail = result.diagnostics.map((d) => `${d.line}:${d.column} ${d.message}`).join("; ");
|
|
88
|
+
throw new Error(`runWorkflowScript: the script failed compilation/analysis and is not run degraded: ${detail}`);
|
|
89
|
+
}
|
|
90
|
+
return result.lowered.code;
|
|
91
|
+
}
|
|
92
|
+
function bridge(deps) {
|
|
93
|
+
const { child, engine, runId, signal, timeoutMs } = deps;
|
|
94
|
+
const actorMap = new Map();
|
|
95
|
+
let stderr = "";
|
|
96
|
+
let finalized = false;
|
|
97
|
+
let timer;
|
|
98
|
+
let reader;
|
|
99
|
+
return new Promise((resolve) => {
|
|
100
|
+
const finalize = (settlement) => {
|
|
101
|
+
if (finalized)
|
|
102
|
+
return;
|
|
103
|
+
finalized = true;
|
|
104
|
+
if (timer !== undefined)
|
|
105
|
+
clearTimeout(timer);
|
|
106
|
+
if (signal !== undefined)
|
|
107
|
+
signal.removeEventListener("abort", onAbort);
|
|
108
|
+
reader?.close();
|
|
109
|
+
if (child.exitCode === null && child.signalCode === null)
|
|
110
|
+
child.kill();
|
|
111
|
+
resolve(settlement);
|
|
112
|
+
};
|
|
113
|
+
const failRun = (error) => {
|
|
114
|
+
if (finalized)
|
|
115
|
+
return;
|
|
116
|
+
engine.fail(error);
|
|
117
|
+
};
|
|
118
|
+
const interruptRun = (message, cause) => {
|
|
119
|
+
if (finalized)
|
|
120
|
+
return;
|
|
121
|
+
engine.stop("interrupted", new WorkflowError("Interrupted", message, cause === undefined ? undefined : { cause }));
|
|
122
|
+
};
|
|
123
|
+
function onAbort() {
|
|
124
|
+
if (finalized)
|
|
125
|
+
return;
|
|
126
|
+
const reason = signal?.reason;
|
|
127
|
+
const supersededBy = readSupersededBy(reason);
|
|
128
|
+
if (supersededBy !== undefined) {
|
|
129
|
+
engine.stop("superseded", undefined, supersededBy);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (reason === "interrupted") {
|
|
133
|
+
engine.stop("interrupted", new WorkflowError("Interrupted", `dynamic workflow run ${runId} was interrupted: the owning session closed before the run settled`));
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
engine.stop(reason === "model" ? "model" : "user");
|
|
137
|
+
}
|
|
138
|
+
void engine.settled.then(finalize);
|
|
139
|
+
if (signal !== undefined) {
|
|
140
|
+
if (signal.aborted) {
|
|
141
|
+
onAbort();
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
145
|
+
}
|
|
146
|
+
if (timeoutMs !== undefined) {
|
|
147
|
+
timer = setTimeout(() => {
|
|
148
|
+
interruptRun(`The workflow sandbox process exceeded its wall-clock timeout of ${timeoutMs}ms`);
|
|
149
|
+
}, timeoutMs);
|
|
150
|
+
timer.unref?.();
|
|
151
|
+
}
|
|
152
|
+
child.stderr?.on("data", (chunk) => {
|
|
153
|
+
stderr = trimTail(stderr + chunk.toString("utf8"), STDERR_LIMIT);
|
|
154
|
+
});
|
|
155
|
+
child.stdin?.on("error", () => undefined);
|
|
156
|
+
reader = createInterface({ input: child.stdout });
|
|
157
|
+
reader.on("line", (line) => {
|
|
158
|
+
if (line.trim().length === 0)
|
|
159
|
+
return;
|
|
160
|
+
let message;
|
|
161
|
+
try {
|
|
162
|
+
message = JSON.parse(line);
|
|
163
|
+
}
|
|
164
|
+
catch (cause) {
|
|
165
|
+
interruptRun(`The workflow sandbox process emitted a line that is not valid NDJSON: ${line}`, cause);
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
handleChildMessage(message, { engine, actorMap, child, failRun });
|
|
169
|
+
});
|
|
170
|
+
child.on("error", (error) => {
|
|
171
|
+
interruptRun(`Could not start the workflow sandbox process: ${error.message}`, error);
|
|
172
|
+
});
|
|
173
|
+
child.on("close", (code, sig) => {
|
|
174
|
+
if (finalized)
|
|
175
|
+
return;
|
|
176
|
+
const reason = stderr.trim().length > 0
|
|
177
|
+
? stderr.trim()
|
|
178
|
+
: `The workflow sandbox process exited (code=${code}, signal=${sig}) before completing`;
|
|
179
|
+
interruptRun(reason);
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
function handleChildMessage(message, deps) {
|
|
184
|
+
const { engine, actorMap, child, failRun } = deps;
|
|
185
|
+
switch (message.kind) {
|
|
186
|
+
case "create-actor": {
|
|
187
|
+
try {
|
|
188
|
+
const actorId = engine.createActor(message.siteId, message.name, message.persona);
|
|
189
|
+
actorMap.set(message.localId, actorId);
|
|
190
|
+
}
|
|
191
|
+
catch (cause) {
|
|
192
|
+
failRun(cause instanceof WorkflowError
|
|
193
|
+
? cause
|
|
194
|
+
: new WorkflowError("DriverError", `createActor failed at site ${message.siteId}`, {
|
|
195
|
+
cause,
|
|
196
|
+
}));
|
|
197
|
+
}
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
case "event":
|
|
201
|
+
if (message.type === "report") {
|
|
202
|
+
engine.report(message.siteId, message.item, message.artifactId);
|
|
203
|
+
}
|
|
204
|
+
else if (message.type === "declare-artifact") {
|
|
205
|
+
engine.declareArtifact(message.siteId, message.op, message.args);
|
|
206
|
+
}
|
|
207
|
+
else if (message.type === "phase-entered") {
|
|
208
|
+
engine.enterPhase(message.name);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
engine.log(message.message);
|
|
212
|
+
}
|
|
213
|
+
return;
|
|
214
|
+
case "complete":
|
|
215
|
+
if (message.ok) {
|
|
216
|
+
engine.complete(message.value);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
const err = message.error;
|
|
220
|
+
failRun(new WorkflowError("DriverError", err?.message ?? "The workflow script threw an error", {
|
|
221
|
+
cause: err?.stack ?? err?.name,
|
|
222
|
+
}));
|
|
223
|
+
}
|
|
224
|
+
return;
|
|
225
|
+
case "request":
|
|
226
|
+
handleRequest(message, { engine, actorMap, child, failRun });
|
|
227
|
+
return;
|
|
228
|
+
default: {
|
|
229
|
+
const _exhaustive = message;
|
|
230
|
+
void _exhaustive;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
function handleRequest(message, deps) {
|
|
235
|
+
const { engine, actorMap, child } = deps;
|
|
236
|
+
const respond = (ok, value, error) => {
|
|
237
|
+
const response = {
|
|
238
|
+
kind: "response",
|
|
239
|
+
id: message.id,
|
|
240
|
+
ok,
|
|
241
|
+
...(ok ? { value } : { error: toWireError(error) }),
|
|
242
|
+
};
|
|
243
|
+
const stdin = child.stdin;
|
|
244
|
+
if (stdin === null || !stdin.writable)
|
|
245
|
+
return;
|
|
246
|
+
stdin.write(`${JSON.stringify(response)}\n`, () => undefined);
|
|
247
|
+
};
|
|
248
|
+
let promise;
|
|
249
|
+
if (message.type === "ask") {
|
|
250
|
+
const actorId = actorMap.get(message.actor ?? "");
|
|
251
|
+
if (actorId === undefined) {
|
|
252
|
+
respond(false, undefined, new WorkflowError("UnknownActor", `Unknown subagent handle: ${message.actor}`));
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
promise = engine.ask(message.siteId, actorId, message.instructions ?? "");
|
|
256
|
+
}
|
|
257
|
+
else if (message.type === "publish-artifact") {
|
|
258
|
+
const op = message.artifactOp;
|
|
259
|
+
if (op === undefined) {
|
|
260
|
+
respond(false, undefined, new WorkflowError("DriverError", `publish-artifact request is missing artifactOp (site ${message.siteId})`));
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
promise = engine.publishArtifact(message.siteId, op, message.args ?? []);
|
|
264
|
+
}
|
|
265
|
+
else if (message.type === "hole") {
|
|
266
|
+
promise = engine.hole(message.siteId, message.name ?? "", message.prompt);
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
promise = engine.worldRead(message.siteId, message.op ?? "read", message.args ?? []);
|
|
270
|
+
}
|
|
271
|
+
promise.then((value) => respond(true, value), (cause) => {
|
|
272
|
+
const error = cause instanceof WorkflowError
|
|
273
|
+
? cause
|
|
274
|
+
: new WorkflowError("DriverError", cause instanceof Error ? cause.message : String(cause), { cause });
|
|
275
|
+
respond(false, undefined, error);
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
function toWireError(error) {
|
|
279
|
+
if (error === undefined)
|
|
280
|
+
return { name: "Error", message: "unknown error" };
|
|
281
|
+
const wire = {
|
|
282
|
+
name: error.name,
|
|
283
|
+
message: error.message,
|
|
284
|
+
code: error.code,
|
|
285
|
+
};
|
|
286
|
+
if (error.violations !== undefined)
|
|
287
|
+
wire.violations = error.violations;
|
|
288
|
+
if (error.finalText !== undefined)
|
|
289
|
+
wire.finalText = error.finalText;
|
|
290
|
+
return wire;
|
|
291
|
+
}
|
|
292
|
+
function trimTail(value, limit) {
|
|
293
|
+
if (Buffer.byteLength(value, "utf8") <= limit)
|
|
294
|
+
return value;
|
|
295
|
+
return value.slice(-limit);
|
|
296
|
+
}
|
|
297
|
+
function readSupersededBy(reason) {
|
|
298
|
+
if (typeof reason !== "object" || reason === null)
|
|
299
|
+
return undefined;
|
|
300
|
+
const value = reason.superseded;
|
|
301
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
302
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// MCode dynamic-workflow-runtime port; imports and workspace directory adapted for DSH.
|
|
2
|
+
export { runWorkflowScript, } from "./harness.js";
|
|
3
|
+
export { childMain, renderChildEntry, } from "./child-source.js";
|
|
4
|
+
export { childEntryFileName, fallbackWorkflowRunsDir, workflowRunsDir, writeChildEntryFile, } from "./child-entry-file.js";
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
// Ported unchanged logic from MCode bootstrap/src/app/dynamic-workflow-import.ts. Only runtime import paths adapted.
|
|
2
|
+
const TERMINAL_RUN_STATUSES = new Set(["completed", "errored", "stopped"]);
|
|
3
|
+
const IMPORTED_NODE_KINDS = ["ask", "world-read", "world-run"];
|
|
4
|
+
export function preflightAmendImport(journal, predecessorRunId) {
|
|
5
|
+
const run = journal.getRun(predecessorRunId);
|
|
6
|
+
if (run === undefined)
|
|
7
|
+
return { ok: false, reason: "run_not_found" };
|
|
8
|
+
const asks = journal.listNodes(predecessorRunId, { kinds: ["ask"], withResult: false });
|
|
9
|
+
if (!completedAsksHaveBoundaries(asks)) {
|
|
10
|
+
return { ok: false, reason: "missing_boundaries" };
|
|
11
|
+
}
|
|
12
|
+
return { ok: true, run };
|
|
13
|
+
}
|
|
14
|
+
function completedAsksHaveBoundaries(nodes) {
|
|
15
|
+
for (const node of nodes) {
|
|
16
|
+
if (node.kind !== "ask" || node.status !== "completed")
|
|
17
|
+
continue;
|
|
18
|
+
if (node.messageBoundary === undefined)
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
export async function buildImportedCache(deps, predecessorRunId, options) {
|
|
24
|
+
const { actorTranscriptStore: transcripts, journal, logger } = deps;
|
|
25
|
+
const run = journal.getRun(predecessorRunId);
|
|
26
|
+
if (run === undefined)
|
|
27
|
+
return { ok: false, reason: "run_not_found" };
|
|
28
|
+
if (!TERMINAL_RUN_STATUSES.has(run.status))
|
|
29
|
+
return { ok: false, reason: "not_amendable" };
|
|
30
|
+
const nodes = journal.listNodes(predecessorRunId, {
|
|
31
|
+
kinds: IMPORTED_NODE_KINDS,
|
|
32
|
+
withResult: true,
|
|
33
|
+
});
|
|
34
|
+
if (!completedAsksHaveBoundaries(nodes))
|
|
35
|
+
return { ok: false, reason: "missing_boundaries" };
|
|
36
|
+
const asksByActor = groupAsksByActor(nodes);
|
|
37
|
+
const actors = new Map();
|
|
38
|
+
const records = journal.listActors(predecessorRunId, { withPersona: true });
|
|
39
|
+
for (const record of namedUniqueActors(records, logger)) {
|
|
40
|
+
const name = record.name;
|
|
41
|
+
const candidate = await buildActorCandidate({
|
|
42
|
+
actor: record,
|
|
43
|
+
journal,
|
|
44
|
+
...(logger === undefined ? {} : { logger }),
|
|
45
|
+
asks: asksByActor.get(actorKey(record.siteId, record.ordinal)) ?? [],
|
|
46
|
+
predecessorRunId,
|
|
47
|
+
...(options?.quietSessions === undefined ? {} : { quietSessions: options.quietSessions }),
|
|
48
|
+
...(transcripts === undefined ? {} : { transcripts }),
|
|
49
|
+
});
|
|
50
|
+
if (candidate !== undefined)
|
|
51
|
+
actors.set(name, candidate);
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
ok: true,
|
|
55
|
+
cache: { actors, world: buildWorldQueues(nodes) },
|
|
56
|
+
resumedFrom: predecessorRunId,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function namedUniqueActors(records, logger) {
|
|
60
|
+
const byName = new Map();
|
|
61
|
+
for (const record of records) {
|
|
62
|
+
const name = record.name;
|
|
63
|
+
if (name === undefined || name === "")
|
|
64
|
+
continue;
|
|
65
|
+
const bucket = byName.get(name);
|
|
66
|
+
if (bucket === undefined)
|
|
67
|
+
byName.set(name, [record]);
|
|
68
|
+
else
|
|
69
|
+
bucket.push(record);
|
|
70
|
+
}
|
|
71
|
+
const unique = [];
|
|
72
|
+
for (const [name, bucket] of byName) {
|
|
73
|
+
if (bucket.length === 1) {
|
|
74
|
+
unique.push(bucket[0]);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
logger?.warn?.("Dynamic workflow amend: duplicate actor name in predecessor, skipped", {
|
|
78
|
+
actorName: name,
|
|
79
|
+
count: bucket.length,
|
|
80
|
+
event: "dynamic_workflow.amend.duplicate_actor_name",
|
|
81
|
+
module: "bootstrap.app",
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return unique;
|
|
85
|
+
}
|
|
86
|
+
async function buildActorCandidate(input) {
|
|
87
|
+
const { actor, asks, journal, logger, predecessorRunId, quietSessions, transcripts } = input;
|
|
88
|
+
const name = actor.name;
|
|
89
|
+
if (actor.persona === undefined)
|
|
90
|
+
return undefined;
|
|
91
|
+
const { entries, next } = completedAskPrefix(asks);
|
|
92
|
+
if (entries.length === 0 && next?.status !== "running")
|
|
93
|
+
return undefined;
|
|
94
|
+
const source = resolveTranscriptSource({
|
|
95
|
+
actorName: name,
|
|
96
|
+
journal,
|
|
97
|
+
startRunId: predecessorRunId,
|
|
98
|
+
});
|
|
99
|
+
if (source === undefined) {
|
|
100
|
+
logger?.info?.("Dynamic workflow amend: no transcript source for actor, import dropped", {
|
|
101
|
+
actorName: name,
|
|
102
|
+
event: "dynamic_workflow.amend.transcript_source_missing",
|
|
103
|
+
module: "bootstrap.app",
|
|
104
|
+
runId: predecessorRunId,
|
|
105
|
+
});
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
const boundary = entries.length === 0 ? 0 : entries[entries.length - 1].messageBoundary;
|
|
109
|
+
const messageCount = transcripts === undefined ? undefined : await countSource(transcripts, source.sessionId);
|
|
110
|
+
if (transcripts !== undefined && (messageCount === undefined || messageCount < boundary)) {
|
|
111
|
+
logger?.warn?.("Dynamic workflow amend: transcript source shorter than boundary, import dropped", {
|
|
112
|
+
actorName: name,
|
|
113
|
+
event: "dynamic_workflow.amend.transcript_source_short",
|
|
114
|
+
messageBoundary: boundary,
|
|
115
|
+
module: "bootstrap.app",
|
|
116
|
+
sessionId: source.sessionId,
|
|
117
|
+
});
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
const inFlight = resolveInFlightAsk({
|
|
121
|
+
actor,
|
|
122
|
+
boundary,
|
|
123
|
+
...(logger === undefined ? {} : { logger }),
|
|
124
|
+
...(messageCount === undefined ? {} : { messageCount }),
|
|
125
|
+
...(next === undefined ? {} : { next }),
|
|
126
|
+
predecessorRunId,
|
|
127
|
+
...(quietSessions === undefined ? {} : { quietSessions }),
|
|
128
|
+
sourceSessionId: source.sessionId,
|
|
129
|
+
});
|
|
130
|
+
if (entries.length === 0 && inFlight === undefined)
|
|
131
|
+
return undefined;
|
|
132
|
+
return {
|
|
133
|
+
persona: actor.persona,
|
|
134
|
+
entries,
|
|
135
|
+
...(inFlight === undefined ? {} : { inFlight }),
|
|
136
|
+
transcriptSourceSessionId: source.sessionId,
|
|
137
|
+
...(source.resolvedModel === undefined ? {} : { resolvedModel: source.resolvedModel }),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
function resolveInFlightAsk(input) {
|
|
141
|
+
const { actor, boundary, logger, messageCount, next, quietSessions, sourceSessionId } = input;
|
|
142
|
+
if (next === undefined || next.status !== "running")
|
|
143
|
+
return undefined;
|
|
144
|
+
const drop = (reason) => {
|
|
145
|
+
logger?.info?.("Dynamic workflow amend: in-flight ask not carried", {
|
|
146
|
+
actorName: actor.name,
|
|
147
|
+
event: "dynamic_workflow.amend.in_flight_dropped",
|
|
148
|
+
module: "bootstrap.app",
|
|
149
|
+
reason,
|
|
150
|
+
runId: input.predecessorRunId,
|
|
151
|
+
sessionId: sourceSessionId,
|
|
152
|
+
});
|
|
153
|
+
return undefined;
|
|
154
|
+
};
|
|
155
|
+
if (actor.sessionId === undefined || actor.sessionId !== sourceSessionId) {
|
|
156
|
+
return drop("transcript_source_is_ancestor");
|
|
157
|
+
}
|
|
158
|
+
if (messageCount === undefined)
|
|
159
|
+
return drop("no_transcript_count");
|
|
160
|
+
if (quietSessions !== undefined && !quietSessions.has(sourceSessionId)) {
|
|
161
|
+
return drop("session_not_quiescent");
|
|
162
|
+
}
|
|
163
|
+
if (messageCount <= boundary)
|
|
164
|
+
return drop("no_transcript_beyond_prefix");
|
|
165
|
+
return { inputHash: next.inputHash, messageBoundary: messageCount };
|
|
166
|
+
}
|
|
167
|
+
function completedAskPrefix(asks) {
|
|
168
|
+
const bySeq = new Map();
|
|
169
|
+
for (const node of asks) {
|
|
170
|
+
if (node.actorSeq === undefined)
|
|
171
|
+
continue;
|
|
172
|
+
bySeq.set(node.actorSeq, node);
|
|
173
|
+
}
|
|
174
|
+
const entries = [];
|
|
175
|
+
for (let seq = 0;; seq++) {
|
|
176
|
+
const node = bySeq.get(seq);
|
|
177
|
+
if (node === undefined || node.status !== "completed") {
|
|
178
|
+
return { entries, ...(node === undefined ? {} : { next: node }) };
|
|
179
|
+
}
|
|
180
|
+
const entry = {
|
|
181
|
+
inputHash: node.inputHash,
|
|
182
|
+
result: node.result,
|
|
183
|
+
messageBoundary: node.messageBoundary,
|
|
184
|
+
};
|
|
185
|
+
if (node.stats !== undefined)
|
|
186
|
+
entry.stats = node.stats;
|
|
187
|
+
entries.push(entry);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
function resolveTranscriptSource(input) {
|
|
191
|
+
const { actorName, journal, startRunId } = input;
|
|
192
|
+
const seen = new Set();
|
|
193
|
+
let runId = startRunId;
|
|
194
|
+
while (runId !== undefined && !seen.has(runId)) {
|
|
195
|
+
seen.add(runId);
|
|
196
|
+
const matches = journal.listActors(runId, { name: actorName, withPersona: false });
|
|
197
|
+
if (matches.length !== 1)
|
|
198
|
+
return undefined;
|
|
199
|
+
const actor = matches[0];
|
|
200
|
+
if (actor.sessionId !== undefined) {
|
|
201
|
+
return {
|
|
202
|
+
sessionId: actor.sessionId,
|
|
203
|
+
...(actor.resolvedModel === undefined ? {} : { resolvedModel: actor.resolvedModel }),
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
runId = journal.getRun(runId)?.resumedFrom;
|
|
207
|
+
}
|
|
208
|
+
return undefined;
|
|
209
|
+
}
|
|
210
|
+
async function countSource(transcripts, sessionId) {
|
|
211
|
+
try {
|
|
212
|
+
return (await transcripts.messages({ sessionID: sessionId })).length;
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
return undefined;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
function actorKey(siteId, ordinal) {
|
|
219
|
+
return `${siteId}@${ordinal}`;
|
|
220
|
+
}
|
|
221
|
+
function groupAsksByActor(nodes) {
|
|
222
|
+
const groups = new Map();
|
|
223
|
+
for (const node of nodes) {
|
|
224
|
+
if (node.kind !== "ask" || node.actorSiteId === undefined || node.actorOrdinal === undefined) {
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
const key = actorKey(node.actorSiteId, node.actorOrdinal);
|
|
228
|
+
const group = groups.get(key);
|
|
229
|
+
if (group === undefined)
|
|
230
|
+
groups.set(key, [node]);
|
|
231
|
+
else
|
|
232
|
+
group.push(node);
|
|
233
|
+
}
|
|
234
|
+
return groups;
|
|
235
|
+
}
|
|
236
|
+
function buildWorldQueues(nodes) {
|
|
237
|
+
const world = new Map();
|
|
238
|
+
for (const node of nodes) {
|
|
239
|
+
if (node.kind !== "world-read" && node.kind !== "world-run")
|
|
240
|
+
continue;
|
|
241
|
+
if (node.status !== "completed")
|
|
242
|
+
continue;
|
|
243
|
+
const queue = world.get(node.inputHash);
|
|
244
|
+
const entry = {
|
|
245
|
+
inputHash: node.inputHash,
|
|
246
|
+
kind: node.kind,
|
|
247
|
+
result: node.result,
|
|
248
|
+
};
|
|
249
|
+
if (queue === undefined)
|
|
250
|
+
world.set(node.inputHash, [entry]);
|
|
251
|
+
else
|
|
252
|
+
queue.push(entry);
|
|
253
|
+
}
|
|
254
|
+
return world;
|
|
255
|
+
}
|
|
256
|
+
export async function rebuildImportedCacheForResume(deps, run) {
|
|
257
|
+
const { predecessorRunId, runId } = run;
|
|
258
|
+
const built = await buildImportedCache(deps, predecessorRunId);
|
|
259
|
+
if (built.ok)
|
|
260
|
+
return built.cache;
|
|
261
|
+
deps.logger?.info?.("Dynamic workflow amend cache rebuild skipped; resuming without it", {
|
|
262
|
+
event: "dynamic_workflow.amend.rebuild_skipped",
|
|
263
|
+
module: "bootstrap.app",
|
|
264
|
+
reason: built.reason,
|
|
265
|
+
resumedFrom: predecessorRunId,
|
|
266
|
+
runId,
|
|
267
|
+
});
|
|
268
|
+
return undefined;
|
|
269
|
+
}
|