@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,20 @@
|
|
|
1
|
+
import type { PersonaSpec } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* persona 规范化:字符串视为 system prompt;display name 落到 persona.name。
|
|
4
|
+
*
|
|
5
|
+
* 对象 persona 只取认得的三个键、且只收字符串值:它来自沙箱的线上 JSON,而 persona 会原样落进
|
|
6
|
+
* journal、进缓存比对与宿主的建会话路径——一个脚本经类型断言塞进来的怪值(`model: 42`、多余
|
|
7
|
+
* 的键)不该一路搬下去。`model` 缺席即「跑 run 的子代理模型」。
|
|
8
|
+
*/
|
|
9
|
+
export declare function normalizePersona(name: string | undefined, persona: string | PersonaSpec | undefined): PersonaSpec;
|
|
10
|
+
/**
|
|
11
|
+
* persona 里参与缓存身份比对的部分:名字与 system prompt,**不含 `model`**
|
|
12
|
+
* (docs/dynamic-workflow/authoring.md「Choosing a model per subagent」)。
|
|
13
|
+
*
|
|
14
|
+
* 换模型与改 persona 不是一回事:旧 system prompt 产的转录接新 persona 是身份错乱,而「这个
|
|
15
|
+
* 子代理改跑另一个模型」是用户对**接下来**的工作的显式选择——与 `AmendWorkflow` 带
|
|
16
|
+
* `subagent_model` 同一条规则(execution-engine.md「Subagent sessions」):已完成的活照旧导入,
|
|
17
|
+
* 下一次 live ask 跑在新模型上。把 model 算进身份,改一个裁判的模型就会让它整段重跑。
|
|
18
|
+
*/
|
|
19
|
+
export declare function personaIdentity(persona: PersonaSpec): PersonaSpec;
|
|
20
|
+
//# sourceMappingURL=persona.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persona.d.ts","sourceRoot":"","sources":["../../src/engine/persona.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,GACxC,WAAW,CAWb;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,CAIjE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// actor persona 的两个纯函数:规范化(createActor)与缓存身份(matchImportedActor)
|
|
3
|
+
// ============================================================
|
|
4
|
+
// 从 engine.ts / imported-cache.ts 拆出:两者都是「persona 里哪些东西算数」的回答,住在一处才不会
|
|
5
|
+
// 一边加了字段、另一边忘了排除(docs/execution-engine.md「Engine-side persona」)。
|
|
6
|
+
/**
|
|
7
|
+
* persona 规范化:字符串视为 system prompt;display name 落到 persona.name。
|
|
8
|
+
*
|
|
9
|
+
* 对象 persona 只取认得的三个键、且只收字符串值:它来自沙箱的线上 JSON,而 persona 会原样落进
|
|
10
|
+
* journal、进缓存比对与宿主的建会话路径——一个脚本经类型断言塞进来的怪值(`model: 42`、多余
|
|
11
|
+
* 的键)不该一路搬下去。`model` 缺席即「跑 run 的子代理模型」。
|
|
12
|
+
*/
|
|
13
|
+
export function normalizePersona(name, persona) {
|
|
14
|
+
const base = {};
|
|
15
|
+
if (typeof persona === "string") {
|
|
16
|
+
base.system = persona;
|
|
17
|
+
}
|
|
18
|
+
else if (persona !== null && typeof persona === "object") {
|
|
19
|
+
if (typeof persona.name === "string")
|
|
20
|
+
base.name = persona.name;
|
|
21
|
+
if (typeof persona.system === "string")
|
|
22
|
+
base.system = persona.system;
|
|
23
|
+
if (typeof persona.model === "string")
|
|
24
|
+
base.model = persona.model;
|
|
25
|
+
}
|
|
26
|
+
if (base.name === undefined && name !== undefined)
|
|
27
|
+
base.name = name;
|
|
28
|
+
return base;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* persona 里参与缓存身份比对的部分:名字与 system prompt,**不含 `model`**
|
|
32
|
+
* (docs/dynamic-workflow/authoring.md「Choosing a model per subagent」)。
|
|
33
|
+
*
|
|
34
|
+
* 换模型与改 persona 不是一回事:旧 system prompt 产的转录接新 persona 是身份错乱,而「这个
|
|
35
|
+
* 子代理改跑另一个模型」是用户对**接下来**的工作的显式选择——与 `AmendWorkflow` 带
|
|
36
|
+
* `subagent_model` 同一条规则(execution-engine.md「Subagent sessions」):已完成的活照旧导入,
|
|
37
|
+
* 下一次 live ask 跑在新模型上。把 model 算进身份,改一个裁判的模型就会让它整段重跑。
|
|
38
|
+
*/
|
|
39
|
+
export function personaIdentity(persona) {
|
|
40
|
+
const { model: _model, ...identity } = persona;
|
|
41
|
+
void _model;
|
|
42
|
+
return identity;
|
|
43
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Replay 的**结算次序闸**(docs/execution-engine.md「Replaying the settle order」)。
|
|
3
|
+
*
|
|
4
|
+
* 站点序号是调用到达时的计数器,所以一条分支在 await **之后**做的每一次 journal 调用,
|
|
5
|
+
* 编号依的是扇出完成的顺序,而不是脚本发起的顺序。那个顺序是墙钟的,节点行里没有任何东西
|
|
6
|
+
* 能复现它:按准入顺序释放缓存结算,重放的 `Promise.all` 会按数组顺序跑续体,join 之后的第一条
|
|
7
|
+
* `report` 于是拿到 journal 给「最先跑完的那条分支」的序号,run 死在自己的防御性校验里
|
|
8
|
+
* (`InputHashMismatch`),被指认为不确定的却是一个纯脚本。2026-09-17 实盘:五路并行调研,
|
|
9
|
+
* 完成顺序 1、4、2、5、3,resume 在 report#2@2 上炸。
|
|
10
|
+
*
|
|
11
|
+
* 所以 resume 重放的是**调度**,不只是答案:本闸持有首生的结算次序,命中缓存的结算在释放点
|
|
12
|
+
* 挂起,直到它前面的每一条都已释放。次序表之外的实例直接放行——闸门只约束它有证据的那些,
|
|
13
|
+
* 因此对旧 journal(事件早于本规则)退化成原行为,也不可能把一个它一无所知的 run 锁死。
|
|
14
|
+
*/
|
|
15
|
+
import type { InstanceRef, JournalStorePort, NodeKind, NodeRecord } from "./types.js";
|
|
16
|
+
/**
|
|
17
|
+
* 重放时一定会兑现一个 promise 的节点 kind:除 `report`(void)与 `artifact`(要看成员族,
|
|
18
|
+
* 见 {@link claimsOnReplay})之外的全部。从 {@link NODE_KINDS} 派生:新增的 kind 默认算进来。
|
|
19
|
+
*/
|
|
20
|
+
export declare const REPLAY_WORK_KINDS: readonly NodeKind[];
|
|
21
|
+
/**
|
|
22
|
+
* 结算次序要的节点行:工作行**不带结果**(只看 kind / status / 坐标),产物行带结果(成员族在
|
|
23
|
+
* `result.kind` 上,而产物行有界:32 个 id × 每 id 16 版)。报告行一条都不读——它们从不认领
|
|
24
|
+
* 闸门,而一个 run 可以有 65,536 条(docs/execution-engine.md「Reading the journal」)。
|
|
25
|
+
*/
|
|
26
|
+
export declare function readReplayRows(journal: JournalStorePort, runId: string): {
|
|
27
|
+
workRows: NodeRecord[];
|
|
28
|
+
artifactRows: NodeRecord[];
|
|
29
|
+
};
|
|
30
|
+
export declare class ReplaySettleOrder {
|
|
31
|
+
private readonly order;
|
|
32
|
+
/** 实例键 → 它在首生结算次序里的位置。 */
|
|
33
|
+
private readonly position;
|
|
34
|
+
/** 已释放到哪一位(次序表的游标)。 */
|
|
35
|
+
private cursor;
|
|
36
|
+
/** 已到达、正在等自己那一位的释放动作。 */
|
|
37
|
+
private readonly parked;
|
|
38
|
+
/** 已轮到、排在微任务里等着投递的释放动作(FIFO,见 {@link enqueue})。 */
|
|
39
|
+
private queue;
|
|
40
|
+
private flushing;
|
|
41
|
+
/** run 结算后闸门永久打开(见 {@link open})。 */
|
|
42
|
+
private opened;
|
|
43
|
+
constructor(order?: readonly string[]);
|
|
44
|
+
static empty(): ReplaySettleOrder;
|
|
45
|
+
/** 首生的结算次序(诊断与测试用)。 */
|
|
46
|
+
recorded(): readonly string[];
|
|
47
|
+
/**
|
|
48
|
+
* 受次序约束地释放一次 replay 命中。表里没有这个实例(全新调用、旧 journal)、闸门已打开、
|
|
49
|
+
* 或它的位次已被越过时立即执行;否则挂起,等轮到它。
|
|
50
|
+
*/
|
|
51
|
+
hold(instance: InstanceRef, release: () => void): void;
|
|
52
|
+
/**
|
|
53
|
+
* 投递永远晚于**产生这个 promise 的那次调用**:释放动作先进队列,一个微任务之后才执行。
|
|
54
|
+
*
|
|
55
|
+
* 少了这一跳,次序就是反的:`Promise.all` 里每条分支都在同一个同步片里发起自己的调用,
|
|
56
|
+
* 队首那条的释放会**在它自己的 `ask()` 里**同步发生——那时它的 `await` 还没挂上去,于是
|
|
57
|
+
* 它的续体排在「早先已挂上、刚被这次 pump 兑现」的那条后面。微任务这一跳让所有 `await`
|
|
58
|
+
* 先挂稳,投递次序因此就是释放次序。这不是时钟:跳的是确定的一步,队列是 FIFO。
|
|
59
|
+
*/
|
|
60
|
+
private enqueue;
|
|
61
|
+
/** 把排好的投递按 FIFO 执行完(队列空即空跑,故重复调用安全)。 */
|
|
62
|
+
private flush;
|
|
63
|
+
/**
|
|
64
|
+
* run 结算:闸门永久打开,挂起的按记录次序放完。
|
|
65
|
+
*
|
|
66
|
+
* 不放的后果是脚本那侧的 promise 永远不兑现——在 harness 里沙箱马上就被关掉,但在同进程
|
|
67
|
+
* 跑脚本的装配(引擎测试、`EvalWorkflowSnippet`)里那就是一次挂死。结算之后释放是安全的:
|
|
68
|
+
* 引擎已 markSettled,每条 host 路径都以 `isRunSettled()` 开头。
|
|
69
|
+
*/
|
|
70
|
+
open(): void;
|
|
71
|
+
/** 游标能往前走多少就走多少:队首已到达即释放,然后看下一位。 */
|
|
72
|
+
private pump;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 从 run 自己的事件日志恢复首生的结算次序。
|
|
76
|
+
*
|
|
77
|
+
* 事实来源是事件而不是新列:结算次序**本来就**逐条记在 `dwf_event` 里,而它与 journal 行同一次
|
|
78
|
+
* 写入落库;读回来既不用迁移,也让本规则之前跑出来的 journal 立刻可 resume(本地库里 258 个 run
|
|
79
|
+
* 有 54 个正卡在这个形状上)。同一条路 `recoverImportClosure` 已经走过(零 schema 变更地从事件
|
|
80
|
+
* 次序恢复关门判定)。
|
|
81
|
+
*
|
|
82
|
+
* 只收**每个实例首次**结算的那一条:重放的一世会按本闸释放的次序再发一遍 cached 事件,取首次
|
|
83
|
+
* 因而跨世稳定,第三世恢复出的仍是同一张表。
|
|
84
|
+
*
|
|
85
|
+
* 表里只留「重放时会兑现一个 promise 的终态行」:`report` 是 void、预置产物声明是同步的,两者
|
|
86
|
+
* 永远不会来认领,留在表里就会把游标堵死;仍是 `running` 的行按重新 live 执行处理,也不认领。
|
|
87
|
+
*/
|
|
88
|
+
export declare function recoverSettleOrder(journal: JournalStorePort, runId: string,
|
|
89
|
+
/** 已读好的节点行(引擎的 resume 分支本来就要读一次,传进来省掉第二次读)。 */
|
|
90
|
+
nodes?: readonly NodeRecord[]): ReplaySettleOrder;
|
|
91
|
+
/**
|
|
92
|
+
* 受次序闸约束地兑现一次 replay 命中:轮到它时才执行 `settle` 并按其结果兑现 / 拒绝。
|
|
93
|
+
* 给的是 promise 路径(world 节点与内容产物);ask 的释放本就是回调,直接用 {@link ReplaySettleOrder.hold}。
|
|
94
|
+
*/
|
|
95
|
+
export declare function heldResolution<T>(hold: (instance: InstanceRef, release: () => void) => void, instance: InstanceRef, settle: () => T): Promise<T>;
|
|
96
|
+
//# sourceMappingURL=replay-order.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay-order.d.ts","sourceRoot":"","sources":["../../src/engine/replay-order.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAY,MAAM,YAAY,CAAC;AAGhG;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,QAAQ,EAEhD,CAAC;AASF;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,MAAM,GACZ;IAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAAC,YAAY,EAAE,UAAU,EAAE,CAAA;CAAE,CAKxD;AAED,qBAAa,iBAAiB;IAahB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAZlC,0BAA0B;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IACvD,uBAAuB;IACvB,OAAO,CAAC,MAAM,CAAK;IACnB,yBAAyB;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IACxD,mDAAmD;IACnD,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,QAAQ,CAAS;IACzB,qCAAqC;IACrC,OAAO,CAAC,MAAM,CAAS;gBAEM,KAAK,GAAE,SAAS,MAAM,EAAO;IAM1D,MAAM,CAAC,KAAK,IAAI,iBAAiB;IAIjC,uBAAuB;IACvB,QAAQ,IAAI,SAAS,MAAM,EAAE;IAI7B;;;OAGG;IACH,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAWtD;;;;;;;OAOG;IACH,OAAO,CAAC,OAAO;IAOf,wCAAwC;IACxC,OAAO,CAAC,KAAK;IAOb;;;;;;OAMG;IACH,IAAI,IAAI,IAAI;IAqBZ,oCAAoC;IACpC,OAAO,CAAC,IAAI;CAWb;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,MAAM;AACb,+CAA+C;AAC/C,KAAK,GAAE,SAAS,UAAU,EAAyD,GAClF,iBAAiB,CAqBnB;AA2BD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,IAAI,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,IAAI,KAAK,IAAI,EAC1D,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,MAAM,CAAC,GACd,OAAO,CAAC,CAAC,CAAC,CAUZ"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Replay 的**结算次序闸**(docs/execution-engine.md「Replaying the settle order」)。
|
|
3
|
+
*
|
|
4
|
+
* 站点序号是调用到达时的计数器,所以一条分支在 await **之后**做的每一次 journal 调用,
|
|
5
|
+
* 编号依的是扇出完成的顺序,而不是脚本发起的顺序。那个顺序是墙钟的,节点行里没有任何东西
|
|
6
|
+
* 能复现它:按准入顺序释放缓存结算,重放的 `Promise.all` 会按数组顺序跑续体,join 之后的第一条
|
|
7
|
+
* `report` 于是拿到 journal 给「最先跑完的那条分支」的序号,run 死在自己的防御性校验里
|
|
8
|
+
* (`InputHashMismatch`),被指认为不确定的却是一个纯脚本。2026-09-17 实盘:五路并行调研,
|
|
9
|
+
* 完成顺序 1、4、2、5、3,resume 在 report#2@2 上炸。
|
|
10
|
+
*
|
|
11
|
+
* 所以 resume 重放的是**调度**,不只是答案:本闸持有首生的结算次序,命中缓存的结算在释放点
|
|
12
|
+
* 挂起,直到它前面的每一条都已释放。次序表之外的实例直接放行——闸门只约束它有证据的那些,
|
|
13
|
+
* 因此对旧 journal(事件早于本规则)退化成原行为,也不可能把一个它一无所知的 run 锁死。
|
|
14
|
+
*/
|
|
15
|
+
import { isArtifactPresetOp } from "../facade/registry.js";
|
|
16
|
+
import { NODE_KINDS } from "./journal-read-types.js";
|
|
17
|
+
import { refToString } from "./types.js";
|
|
18
|
+
/**
|
|
19
|
+
* 重放时一定会兑现一个 promise 的节点 kind:除 `report`(void)与 `artifact`(要看成员族,
|
|
20
|
+
* 见 {@link claimsOnReplay})之外的全部。从 {@link NODE_KINDS} 派生:新增的 kind 默认算进来。
|
|
21
|
+
*/
|
|
22
|
+
export const REPLAY_WORK_KINDS = NODE_KINDS.filter((kind) => kind !== "report" && kind !== "artifact");
|
|
23
|
+
/** 结算次序只看这三种事件({@link settledInstanceKey}),其余事件不必读出来。 */
|
|
24
|
+
const SETTLE_EVENT_TYPES = [
|
|
25
|
+
"node-settled",
|
|
26
|
+
"artifact-published",
|
|
27
|
+
"artifact-failed",
|
|
28
|
+
];
|
|
29
|
+
/**
|
|
30
|
+
* 结算次序要的节点行:工作行**不带结果**(只看 kind / status / 坐标),产物行带结果(成员族在
|
|
31
|
+
* `result.kind` 上,而产物行有界:32 个 id × 每 id 16 版)。报告行一条都不读——它们从不认领
|
|
32
|
+
* 闸门,而一个 run 可以有 65,536 条(docs/execution-engine.md「Reading the journal」)。
|
|
33
|
+
*/
|
|
34
|
+
export function readReplayRows(journal, runId) {
|
|
35
|
+
return {
|
|
36
|
+
workRows: journal.listNodes(runId, { kinds: REPLAY_WORK_KINDS, withResult: false }),
|
|
37
|
+
artifactRows: journal.listNodes(runId, { kinds: ["artifact"], withResult: true }),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export class ReplaySettleOrder {
|
|
41
|
+
order;
|
|
42
|
+
/** 实例键 → 它在首生结算次序里的位置。 */
|
|
43
|
+
position;
|
|
44
|
+
/** 已释放到哪一位(次序表的游标)。 */
|
|
45
|
+
cursor = 0;
|
|
46
|
+
/** 已到达、正在等自己那一位的释放动作。 */
|
|
47
|
+
parked = new Map();
|
|
48
|
+
/** 已轮到、排在微任务里等着投递的释放动作(FIFO,见 {@link enqueue})。 */
|
|
49
|
+
queue = [];
|
|
50
|
+
flushing = false;
|
|
51
|
+
/** run 结算后闸门永久打开(见 {@link open})。 */
|
|
52
|
+
opened = false;
|
|
53
|
+
constructor(order = []) {
|
|
54
|
+
this.order = order;
|
|
55
|
+
const position = new Map();
|
|
56
|
+
order.forEach((key, index) => position.set(key, index));
|
|
57
|
+
this.position = position;
|
|
58
|
+
}
|
|
59
|
+
static empty() {
|
|
60
|
+
return new ReplaySettleOrder([]);
|
|
61
|
+
}
|
|
62
|
+
/** 首生的结算次序(诊断与测试用)。 */
|
|
63
|
+
recorded() {
|
|
64
|
+
return this.order;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 受次序约束地释放一次 replay 命中。表里没有这个实例(全新调用、旧 journal)、闸门已打开、
|
|
68
|
+
* 或它的位次已被越过时立即执行;否则挂起,等轮到它。
|
|
69
|
+
*/
|
|
70
|
+
hold(instance, release) {
|
|
71
|
+
const key = refToString(instance);
|
|
72
|
+
const at = this.position.get(key);
|
|
73
|
+
if (this.opened || at === undefined || at < this.cursor) {
|
|
74
|
+
release();
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
this.parked.set(key, release);
|
|
78
|
+
this.pump();
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* 投递永远晚于**产生这个 promise 的那次调用**:释放动作先进队列,一个微任务之后才执行。
|
|
82
|
+
*
|
|
83
|
+
* 少了这一跳,次序就是反的:`Promise.all` 里每条分支都在同一个同步片里发起自己的调用,
|
|
84
|
+
* 队首那条的释放会**在它自己的 `ask()` 里**同步发生——那时它的 `await` 还没挂上去,于是
|
|
85
|
+
* 它的续体排在「早先已挂上、刚被这次 pump 兑现」的那条后面。微任务这一跳让所有 `await`
|
|
86
|
+
* 先挂稳,投递次序因此就是释放次序。这不是时钟:跳的是确定的一步,队列是 FIFO。
|
|
87
|
+
*/
|
|
88
|
+
enqueue(release) {
|
|
89
|
+
this.queue.push(release);
|
|
90
|
+
if (this.flushing)
|
|
91
|
+
return;
|
|
92
|
+
this.flushing = true;
|
|
93
|
+
queueMicrotask(() => this.flush());
|
|
94
|
+
}
|
|
95
|
+
/** 把排好的投递按 FIFO 执行完(队列空即空跑,故重复调用安全)。 */
|
|
96
|
+
flush() {
|
|
97
|
+
this.flushing = false;
|
|
98
|
+
const batch = this.queue;
|
|
99
|
+
this.queue = [];
|
|
100
|
+
for (const release of batch)
|
|
101
|
+
release();
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* run 结算:闸门永久打开,挂起的按记录次序放完。
|
|
105
|
+
*
|
|
106
|
+
* 不放的后果是脚本那侧的 promise 永远不兑现——在 harness 里沙箱马上就被关掉,但在同进程
|
|
107
|
+
* 跑脚本的装配(引擎测试、`EvalWorkflowSnippet`)里那就是一次挂死。结算之后释放是安全的:
|
|
108
|
+
* 引擎已 markSettled,每条 host 路径都以 `isRunSettled()` 开头。
|
|
109
|
+
*/
|
|
110
|
+
open() {
|
|
111
|
+
if (this.opened)
|
|
112
|
+
return;
|
|
113
|
+
this.opened = true;
|
|
114
|
+
// 已排队的先按次序放完:结算路径在 `run-settled` **之前**调用本方法,同步放完这一批,
|
|
115
|
+
// 命中事件因此不会落到那条终态事件后面。此刻每个挂起项的 await 早就挂稳了,不需要再跳。
|
|
116
|
+
this.flush();
|
|
117
|
+
for (let i = this.cursor; i < this.order.length; i++) {
|
|
118
|
+
const key = this.order[i];
|
|
119
|
+
if (key === undefined)
|
|
120
|
+
continue;
|
|
121
|
+
const release = this.parked.get(key);
|
|
122
|
+
if (release === undefined)
|
|
123
|
+
continue;
|
|
124
|
+
this.parked.delete(key);
|
|
125
|
+
release();
|
|
126
|
+
}
|
|
127
|
+
this.cursor = this.order.length;
|
|
128
|
+
// 次序表之外的键从不入 parked,这一轮理论上是空的;兜底清空,绝不留下没人兑现的 promise。
|
|
129
|
+
const leftovers = [...this.parked.values()];
|
|
130
|
+
this.parked.clear();
|
|
131
|
+
for (const release of leftovers)
|
|
132
|
+
release();
|
|
133
|
+
}
|
|
134
|
+
/** 游标能往前走多少就走多少:队首已到达即释放,然后看下一位。 */
|
|
135
|
+
pump() {
|
|
136
|
+
while (this.cursor < this.order.length) {
|
|
137
|
+
const key = this.order[this.cursor];
|
|
138
|
+
if (key === undefined)
|
|
139
|
+
break;
|
|
140
|
+
const release = this.parked.get(key);
|
|
141
|
+
if (release === undefined)
|
|
142
|
+
break;
|
|
143
|
+
this.parked.delete(key);
|
|
144
|
+
this.cursor++;
|
|
145
|
+
this.enqueue(release);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* 从 run 自己的事件日志恢复首生的结算次序。
|
|
151
|
+
*
|
|
152
|
+
* 事实来源是事件而不是新列:结算次序**本来就**逐条记在 `dwf_event` 里,而它与 journal 行同一次
|
|
153
|
+
* 写入落库;读回来既不用迁移,也让本规则之前跑出来的 journal 立刻可 resume(本地库里 258 个 run
|
|
154
|
+
* 有 54 个正卡在这个形状上)。同一条路 `recoverImportClosure` 已经走过(零 schema 变更地从事件
|
|
155
|
+
* 次序恢复关门判定)。
|
|
156
|
+
*
|
|
157
|
+
* 只收**每个实例首次**结算的那一条:重放的一世会按本闸释放的次序再发一遍 cached 事件,取首次
|
|
158
|
+
* 因而跨世稳定,第三世恢复出的仍是同一张表。
|
|
159
|
+
*
|
|
160
|
+
* 表里只留「重放时会兑现一个 promise 的终态行」:`report` 是 void、预置产物声明是同步的,两者
|
|
161
|
+
* 永远不会来认领,留在表里就会把游标堵死;仍是 `running` 的行按重新 live 执行处理,也不认领。
|
|
162
|
+
*/
|
|
163
|
+
export function recoverSettleOrder(journal, runId,
|
|
164
|
+
/** 已读好的节点行(引擎的 resume 分支本来就要读一次,传进来省掉第二次读)。 */
|
|
165
|
+
nodes = Object.values(readReplayRows(journal, runId)).flat()) {
|
|
166
|
+
const claimable = new Set();
|
|
167
|
+
for (const node of nodes) {
|
|
168
|
+
if (node.status !== "completed" && node.status !== "failed")
|
|
169
|
+
continue;
|
|
170
|
+
if (!claimsOnReplay(node))
|
|
171
|
+
continue;
|
|
172
|
+
claimable.add(refToString(node));
|
|
173
|
+
}
|
|
174
|
+
if (claimable.size === 0)
|
|
175
|
+
return ReplaySettleOrder.empty();
|
|
176
|
+
const order = [];
|
|
177
|
+
const seen = new Set();
|
|
178
|
+
for (const { event } of journal.listEvents(runId, {
|
|
179
|
+
types: SETTLE_EVENT_TYPES,
|
|
180
|
+
reportItems: { limit: 0 },
|
|
181
|
+
})) {
|
|
182
|
+
const key = settledInstanceKey(event);
|
|
183
|
+
if (key === undefined || seen.has(key) || !claimable.has(key))
|
|
184
|
+
continue;
|
|
185
|
+
seen.add(key);
|
|
186
|
+
order.push(key);
|
|
187
|
+
}
|
|
188
|
+
return new ReplaySettleOrder(order);
|
|
189
|
+
}
|
|
190
|
+
/** 结算事件 → 它结算的实例键;不是结算事件则 undefined。 */
|
|
191
|
+
function settledInstanceKey(event) {
|
|
192
|
+
if (event.type === "node-settled" ||
|
|
193
|
+
event.type === "artifact-published" ||
|
|
194
|
+
event.type === "artifact-failed") {
|
|
195
|
+
return refToString(event.instance);
|
|
196
|
+
}
|
|
197
|
+
return undefined;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* 这一行在 replay 时会不会兑现一个脚本能等的 promise。
|
|
201
|
+
* ask / world 节点会;`report` 不会(void);产物行要看成员族——内容成员是效应(async),
|
|
202
|
+
* 预置声明是同步的,只有前者会来认领闸门。失败的产物行只可能来自内容成员(声明没有拒绝通道)。
|
|
203
|
+
*/
|
|
204
|
+
function claimsOnReplay(node) {
|
|
205
|
+
if (node.kind === "report")
|
|
206
|
+
return false;
|
|
207
|
+
if (node.kind !== "artifact")
|
|
208
|
+
return true;
|
|
209
|
+
if (node.status === "failed")
|
|
210
|
+
return true;
|
|
211
|
+
const kind = node.result?.kind;
|
|
212
|
+
return typeof kind === "string" && !isArtifactPresetOp(kind);
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* 受次序闸约束地兑现一次 replay 命中:轮到它时才执行 `settle` 并按其结果兑现 / 拒绝。
|
|
216
|
+
* 给的是 promise 路径(world 节点与内容产物);ask 的释放本就是回调,直接用 {@link ReplaySettleOrder.hold}。
|
|
217
|
+
*/
|
|
218
|
+
export function heldResolution(hold, instance, settle) {
|
|
219
|
+
return new Promise((resolve, reject) => {
|
|
220
|
+
hold(instance, () => {
|
|
221
|
+
try {
|
|
222
|
+
resolve(settle());
|
|
223
|
+
}
|
|
224
|
+
catch (cause) {
|
|
225
|
+
reject(cause);
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ProviderStop` 的结构化明细:通知与
|
|
3
|
+
* GetWorkflowRun 据此选文案,绝不从 message 反向解析。`reason` 是 contracts 的
|
|
4
|
+
* `ModelFailureReason` 值(`auth_failed` / `invalid_request` / `rate_limited` …),纯包不 import
|
|
5
|
+
* contracts 故为 string;`kind` 是策略表的判定键(认证 / 未配置 / 模型不可用 / 请求无效 /
|
|
6
|
+
* 配额 / 兜底),读文案表时用它而不是 reason。
|
|
7
|
+
*/
|
|
8
|
+
export interface ProviderStopDetails {
|
|
9
|
+
kind: "auth" | "not_configured" | "model_unavailable" | "invalid_request" | "quota" | "other";
|
|
10
|
+
reason: string;
|
|
11
|
+
providerId?: string;
|
|
12
|
+
providerLabel?: string;
|
|
13
|
+
modelId?: string;
|
|
14
|
+
providerCode?: string;
|
|
15
|
+
/** 触发停止的子代理(`refToString(instance)`)与它的名字 / 出生阶段(有则带)。 */
|
|
16
|
+
subagent?: string;
|
|
17
|
+
subagentName?: string;
|
|
18
|
+
phase?: string;
|
|
19
|
+
/** provider 的原文,逐字(有界,由 driver 截断)。 */
|
|
20
|
+
rawMessage?: string;
|
|
21
|
+
/** 配额类:provider 给出的重置时刻(epoch ms),能解析出来才在场。 */
|
|
22
|
+
resetAt?: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* run 级停滞:driver 观察到本 run 连续
|
|
26
|
+
* `sinceMs` 毫秒没有任何一次成功的模型请求、期间至少排定过一次重试。纯观察事件,引擎只
|
|
27
|
+
* `record()`;core 据它发一条 run 中通知。`reason` 是期间占多数的重试原因(`ModelRetryReason`
|
|
28
|
+
* 值,开放字符串),`cap` 是此刻该 provider 桶的 cap。
|
|
29
|
+
*/
|
|
30
|
+
export interface RunStallInfo {
|
|
31
|
+
sinceMs: number;
|
|
32
|
+
reason?: string;
|
|
33
|
+
cap?: number;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=run-terminal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-terminal.d.ts","sourceRoot":"","sources":["../../src/engine/run-terminal.ts"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,mBAAmB,GAAG,iBAAiB,GAAG,OAAO,GAAG,OAAO,CAAC;IAC9F,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// run 终态的结构化明细
|
|
3
|
+
// ============================================================
|
|
4
|
+
// 从 types.ts 拆出(那份文件抵 400 行 lint 门):`ProviderStop` 错误码的明细与 run 级停滞观察
|
|
5
|
+
// 事件的载荷。词汇(RunStatus / RunStopReason / WorkflowErrorCode)仍在 types.ts,这里只有
|
|
6
|
+
// 「明细」——它们不参与联合类型,拆走不影响穷举消费者。
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scheduler.ts 顶到 oxlint max-lines 上限(400 行),把 Boundary B 的两条向上回报
|
|
3
|
+
* (submit_result 到达、turn 结束)及其 repair / nudge 预算与 submit 归一化拆到本文件;
|
|
4
|
+
* 公开面仍从 scheduler.ts 导出。
|
|
5
|
+
*
|
|
6
|
+
* 自由函数经 {@link SubmitSeam} 拿到调度器的 live 节点表与两条结算入口;AskScheduler 上的
|
|
7
|
+
* submitAttempted / turnEnded 只是薄委托。
|
|
8
|
+
*/
|
|
9
|
+
import type { AskNode, SchedulerHost } from "./scheduler-types.js";
|
|
10
|
+
import type { InstanceRef } from "./types.js";
|
|
11
|
+
import { WorkflowError } from "./types.js";
|
|
12
|
+
/** 调度器暴露给回报处理的最小接缝:查 live 节点、按结果结算。 */
|
|
13
|
+
export interface SubmitSeam {
|
|
14
|
+
readonly host: SchedulerHost;
|
|
15
|
+
/** 按实例查 live 节点(已离开 liveNodes 的返回 undefined)。 */
|
|
16
|
+
liveNode(instance: InstanceRef): AskNode | undefined;
|
|
17
|
+
settleOk(node: AskNode, artifact: unknown): void;
|
|
18
|
+
settleFailed(node: AskNode, error: WorkflowError): void;
|
|
19
|
+
}
|
|
20
|
+
export declare function handleSubmitAttempted(seam: SubmitSeam, instance: InstanceRef, payload: unknown): void;
|
|
21
|
+
export declare function handleTurnEnded(seam: SubmitSeam, instance: InstanceRef, finalText: string): void;
|
|
22
|
+
//# sourceMappingURL=scheduler-submit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler-submit.d.ts","sourceRoot":"","sources":["../../src/engine/scheduler-submit.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,YAAY,CAAC;AACzD,OAAO,EAAmB,aAAa,EAAE,MAAM,YAAY,CAAC;AAE5D,uCAAuC;AACvC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACjD,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;CACzD;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,OAAO,GACf,IAAI,CA4BN;AAuCD,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAsBhG"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scheduler.ts 顶到 oxlint max-lines 上限(400 行),把 Boundary B 的两条向上回报
|
|
3
|
+
* (submit_result 到达、turn 结束)及其 repair / nudge 预算与 submit 归一化拆到本文件;
|
|
4
|
+
* 公开面仍从 scheduler.ts 导出。
|
|
5
|
+
*
|
|
6
|
+
* 自由函数经 {@link SubmitSeam} 拿到调度器的 live 节点表与两条结算入口;AskScheduler 上的
|
|
7
|
+
* submitAttempted / turnEnded 只是薄委托。
|
|
8
|
+
*/
|
|
9
|
+
import { REPAIR_ATTEMPTS, WorkflowError } from "./types.js";
|
|
10
|
+
export function handleSubmitAttempted(seam, instance, payload) {
|
|
11
|
+
const node = seam.liveNode(instance);
|
|
12
|
+
if (node === undefined || node.settled)
|
|
13
|
+
return;
|
|
14
|
+
// untyped ask 不提供 submit_result;即便收到也不据其结算。
|
|
15
|
+
if (!node.spec.typed)
|
|
16
|
+
return;
|
|
17
|
+
const { value, violations } = normalizeSubmit(seam.host, node.spec.schema, payload);
|
|
18
|
+
if (violations.length === 0) {
|
|
19
|
+
seam.host.driver.respondToSubmit(instance, { kind: "accept" });
|
|
20
|
+
seam.settleOk(node, value);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
if (node.repairsRemaining > 0) {
|
|
24
|
+
node.repairsRemaining--;
|
|
25
|
+
const attempt = REPAIR_ATTEMPTS - node.repairsRemaining;
|
|
26
|
+
seam.host.driver.respondToSubmit(instance, { kind: "reject", violations });
|
|
27
|
+
seam.host.record({ type: "node-repairing", instance, attempt, violations });
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
seam.host.driver.cancelAsk(instance);
|
|
31
|
+
seam.settleFailed(node, new WorkflowError("ValidationFailed", "submit_result failed schema validation repeatedly and the repair budget is exhausted.", { violations }));
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 宽松归一化 submit payload:先按原值校验;仅当原值不过、且原值是 string 时,做一次 JSON.parse
|
|
35
|
+
* 再校验,成功则以解析后的值为准(既回裁决也落 journal)。
|
|
36
|
+
*
|
|
37
|
+
* 实盘发现(GLM-5.3 经 Anthropic 兼容端点):真实模型常把 submit_result 的 `result` 参数序列化成
|
|
38
|
+
* JSON 字符串(如 `"{\"title\":...}"`)而非 JSON 对象,导致校验器正确报「expected object, got string」、
|
|
39
|
+
* repair 3 次后 run 失败。legacy script-workflow 的 parseStructuredResponse 早以宽松 JSON 解析容忍此
|
|
40
|
+
* 情形;此处补上同等容忍,但 schema-aware:
|
|
41
|
+
* 1. 原值直接过 → 用原值,绝不解析(保住合法的 string 结果,如 `string | null` schema,`"42"` 须留 `"42"`)。
|
|
42
|
+
* 2. 原值不过且是 string → 单次 JSON.parse(不递归、不双解析,沿用 legacy 单次抽取先例)后再校验,过则取解析值。
|
|
43
|
+
* 3. 否则 → 回原值 + 原始违规,交模型 repair。
|
|
44
|
+
* 引擎是纯包,JSON.parse 纯确定、无 I/O,放这里安全。
|
|
45
|
+
*/
|
|
46
|
+
function normalizeSubmit(host, schema, payload) {
|
|
47
|
+
const direct = host.validate(schema, payload);
|
|
48
|
+
if (direct.length === 0)
|
|
49
|
+
return { value: payload, violations: [] };
|
|
50
|
+
if (typeof payload === "string") {
|
|
51
|
+
try {
|
|
52
|
+
const parsed = JSON.parse(payload);
|
|
53
|
+
const after = host.validate(schema, parsed);
|
|
54
|
+
if (after.length === 0)
|
|
55
|
+
return { value: parsed, violations: [] };
|
|
56
|
+
// bug:解析成功但解析值仍不过时,曾上报解析前的
|
|
57
|
+
// `direct` 违规("$: expected object, got string"),模型面对的其实是已解码对象,无从修起,
|
|
58
|
+
// 只能反复重引号/双重编码/退化成 "{}",耗尽 repair 预算。修复违规必须描述模型可修改的值,
|
|
59
|
+
// 故此处返回 `after`(解析后对象上的路径级违规),单次解析契约不变。
|
|
60
|
+
return { value: parsed, violations: after };
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// 非 JSON 字符串:JSON.parse 抛出,回落到原值违规,交模型 repair。
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return { value: payload, violations: direct };
|
|
67
|
+
}
|
|
68
|
+
export function handleTurnEnded(seam, instance, finalText) {
|
|
69
|
+
const node = seam.liveNode(instance);
|
|
70
|
+
if (node === undefined || node.settled)
|
|
71
|
+
return;
|
|
72
|
+
if (!node.spec.typed) {
|
|
73
|
+
seam.settleOk(node, finalText);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (node.nudgesRemaining > 0) {
|
|
77
|
+
node.nudgesRemaining--;
|
|
78
|
+
seam.host.driver.respondToSubmit(instance, { kind: "nudge" });
|
|
79
|
+
seam.host.record({ type: "node-nudged", instance });
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
seam.host.driver.cancelAsk(instance);
|
|
83
|
+
seam.settleFailed(node, new WorkflowError("ResultNotSubmitted", "The typed ask ended without a submit_result call, so there is no result.", { finalText }));
|
|
84
|
+
}
|