ai-workflow-flow-dsl-reference 0.1.6 → 0.2.1
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/dist/resource-module/KindDefinitions/WikiPage/manifest.xnl +15 -3
- package/dist/resource-module/WikiPages/README/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/foundation__depa-axioms/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/foundation__naming-axioms/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/foundation__syntax-axioms/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__ai-workflow__ctrl-workflow/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__ai-workflow__data-workflow/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__ai-workflow__holon-task/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__ai-workflow__resources/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__bp-ctrl-flow__domains/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__bp-ctrl-flow__nodes/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__eager-data-flow__domains/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__eager-data-flow__files/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__eager-data-flow__nodes/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__eager-data-flow__refs/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__flow-core__domains/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__flow-core__files/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__flow-core__instance-run/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__flow-core__nodes/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__flow-core__orchestration/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__flow-core__refs/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__instant-ctrl-flow__domains/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__instant-ctrl-flow__nodes/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__port-control-graph__index/manifest.xnl +6 -0
- package/dist/resource-module/WikiPages/spec__work-ctrl-flow__domains/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__work-ctrl-flow__nodes/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/std__ai-ctrl-workflow__axioms/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/std__ai-data-workflow__axioms/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/std__behavior-tree__axioms/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/std__bp-ctrl-flow__axioms/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/std__eager-data-flow__axioms/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/std__instant-ctrl-flow__axioms/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/std__work-ctrl-flow__axioms/manifest.xnl +1 -1
- package/dist/resource-module/content/.depa-flow-dsl-provenance.json +12 -8
- package/dist/resource-module/content/README.md +2 -0
- package/dist/resource-module/content/spec/ai-workflow/ctrl-workflow.md +7 -1
- package/dist/resource-module/content/spec/ai-workflow/data-workflow.md +5 -1
- package/dist/resource-module/content/spec/ai-workflow/resources.md +19 -0
- package/dist/resource-module/content/spec/flow-core/nodes.md +23 -0
- package/dist/resource-module/content/spec/flow-core/orchestration.md +7 -0
- package/dist/resource-module/content/spec/port-control-graph/index.md +82 -0
- package/dist/resource-module/manifest.xnl +1 -1
- package/package.json +2 -2
|
@@ -1,10 +1,22 @@
|
|
|
1
|
-
<KindDefinition #Halfcode.ResourceDsl.KindDefinition.WikiPage
|
|
1
|
+
<KindDefinition #Halfcode.ResourceDsl.KindDefinition.WikiPage envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Kind definition for canonical documentation pages referenced from the Resource DSL package root."
|
|
4
4
|
resourceKind = "WikiPage"
|
|
5
|
+
subjectFqn = "Halfcode.ResourceKind.WikiPage"
|
|
5
6
|
sourceShapes = ["directory"]
|
|
6
|
-
currentApiVersion = "halfcode.resources/v1"
|
|
7
|
-
supportedApiVersions = ["halfcode.resources/v1"]
|
|
8
7
|
} (
|
|
8
|
+
<SpecRevisions [
|
|
9
|
+
<SpecRevision #v1 {
|
|
10
|
+
specVersion = 1
|
|
11
|
+
schemaRef = "vfs://./spec-v1.schema.json"
|
|
12
|
+
schemaFingerprint = "sha256:1111111111111111111111111111111111111111111111111111111111111111"
|
|
13
|
+
contractFingerprint = "sha256:2222222222222222222222222222222222222222222222222222222222222222"
|
|
14
|
+
semanticValidatorFingerprint = "sha256:3333333333333333333333333333333333333333333333333333333333333333"
|
|
15
|
+
referenceProjectionFingerprint = "sha256:4444444444444444444444444444444444444444444444444444444444444444"
|
|
16
|
+
compilerInputFingerprint = "sha256:5555555555555555555555555555555555555555555555555555555555555555"
|
|
17
|
+
stability = "stable"
|
|
18
|
+
}>
|
|
19
|
+
]>
|
|
20
|
+
|
|
9
21
|
<DescriptorContract>
|
|
10
22
|
)>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Readme
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Readme envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: README.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Foundation.Depa.Axioms
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Foundation.Depa.Axioms envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: foundation/depa-axioms.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Foundation.Naming.Axioms
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Foundation.Naming.Axioms envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: foundation/naming-axioms.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Foundation.Syntax.Axioms
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Foundation.Syntax.Axioms envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: foundation/syntax-axioms.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Ai.Workflow.Ctrl.Workflow
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Ai.Workflow.Ctrl.Workflow envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/ai-workflow/ctrl-workflow.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Ai.Workflow.Data.Workflow
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Ai.Workflow.Data.Workflow envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/ai-workflow/data-workflow.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Ai.Workflow.Holon.Task
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Ai.Workflow.Holon.Task envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/ai-workflow/holon-task.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Ai.Workflow.Resources
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Ai.Workflow.Resources envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/ai-workflow/resources.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Bp.Ctrl.Flow.Domains
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Bp.Ctrl.Flow.Domains envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/bp-ctrl-flow/domains.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Bp.Ctrl.Flow.Nodes
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Bp.Ctrl.Flow.Nodes envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/bp-ctrl-flow/nodes.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Eager.Data.Flow.Domains
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Eager.Data.Flow.Domains envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/eager-data-flow/domains.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Eager.Data.Flow.Files
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Eager.Data.Flow.Files envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/eager-data-flow/files.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Eager.Data.Flow.Nodes
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Eager.Data.Flow.Nodes envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/eager-data-flow/nodes.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Eager.Data.Flow.Refs
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Eager.Data.Flow.Refs envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/eager-data-flow/refs.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Domains
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Domains envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/flow-core/domains.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Files
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Files envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/flow-core/files.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Instance.Run
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Instance.Run envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/flow-core/instance-run.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Nodes
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Nodes envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/flow-core/nodes.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Orchestration
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Orchestration envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/flow-core/orchestration.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Refs
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Refs envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/flow-core/refs.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Instant.Ctrl.Flow.Domains
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Instant.Ctrl.Flow.Domains envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/instant-ctrl-flow/domains.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Instant.Ctrl.Flow.Nodes
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Instant.Ctrl.Flow.Nodes envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/instant-ctrl-flow/nodes.md."
|
|
4
4
|
} (
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Port.Control.Graph.Index envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
|
+
lifecycle = "Stable"
|
|
3
|
+
description = "Canonical depa Flow DSL reference page: spec/port-control-graph/index.md."
|
|
4
|
+
} (
|
|
5
|
+
<Instruction { href = "vfs://@/content/spec/port-control-graph/index.md" format = "markdown" }>
|
|
6
|
+
)>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Work.Ctrl.Flow.Domains
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Work.Ctrl.Flow.Domains envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/work-ctrl-flow/domains.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Work.Ctrl.Flow.Nodes
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Work.Ctrl.Flow.Nodes envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/work-ctrl-flow/nodes.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Ai.Ctrl.Workflow.Axioms
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Ai.Ctrl.Workflow.Axioms envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: std/ai-ctrl-workflow/axioms.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Ai.Data.Workflow.Axioms
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Ai.Data.Workflow.Axioms envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: std/ai-data-workflow/axioms.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Behavior.Tree.Axioms
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Behavior.Tree.Axioms envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: std/behavior-tree/axioms.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Bp.Ctrl.Flow.Axioms
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Bp.Ctrl.Flow.Axioms envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: std/bp-ctrl-flow/axioms.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Eager.Data.Flow.Axioms
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Eager.Data.Flow.Axioms envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: std/eager-data-flow/axioms.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Instant.Ctrl.Flow.Axioms
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Instant.Ctrl.Flow.Axioms envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: std/instant-ctrl-flow/axioms.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Work.Ctrl.Flow.Axioms
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Work.Ctrl.Flow.Axioms envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: std/work-ctrl-flow/axioms.md."
|
|
4
4
|
} (
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
"schemaVersion": "depa.flow-dsl-reference/v1",
|
|
3
3
|
"moduleId": "DepaFlowsFlowDslReference",
|
|
4
4
|
"packageName": "ai-workflow-flow-dsl-reference",
|
|
5
|
-
"packageVersion": "0.1
|
|
5
|
+
"packageVersion": "0.2.1",
|
|
6
6
|
"resourcePackageVersion": "1.0.1",
|
|
7
7
|
"source": "depa-flows/docs/flow-dsl",
|
|
8
|
-
"sourceTreeDigest": "sha256:
|
|
8
|
+
"sourceTreeDigest": "sha256:8e7d1382cd02b09df109b15b1aeb569f5b7827becd8e1969d50883eac668273e",
|
|
9
9
|
"files": [
|
|
10
10
|
{
|
|
11
11
|
"path": "README.md",
|
|
12
|
-
"contentDigest": "sha256:
|
|
12
|
+
"contentDigest": "sha256:25a4649612014c903612e62bb56db0d1ffaee4413438f82d427b2741ea82309d"
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
"path": "foundation/depa-axioms.md",
|
|
@@ -25,11 +25,11 @@
|
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
"path": "spec/ai-workflow/ctrl-workflow.md",
|
|
28
|
-
"contentDigest": "sha256:
|
|
28
|
+
"contentDigest": "sha256:a095ceab8ebce3dc6d9972c66e2c2974a19d4299ee52fc0513fd09f3047a9ee0"
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
"path": "spec/ai-workflow/data-workflow.md",
|
|
32
|
-
"contentDigest": "sha256:
|
|
32
|
+
"contentDigest": "sha256:9b6807ef5ad9f8fe25e2f125a7488069922f7ccae9435d6b5616aefe50825dc7"
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
"path": "spec/ai-workflow/holon-task.md",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
"path": "spec/ai-workflow/resources.md",
|
|
40
|
-
"contentDigest": "sha256:
|
|
40
|
+
"contentDigest": "sha256:e90ba43342ce79358853e7b6a8258a4c39f390e3fe8a4ef1bb7c173cc1f5d19c"
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
"path": "spec/bp-ctrl-flow/domains.md",
|
|
@@ -77,11 +77,11 @@
|
|
|
77
77
|
},
|
|
78
78
|
{
|
|
79
79
|
"path": "spec/flow-core/nodes.md",
|
|
80
|
-
"contentDigest": "sha256:
|
|
80
|
+
"contentDigest": "sha256:954e3e4544cf5bfa9709ed202a745db4df16c3ac80e0cf04d3a79f9a8841f1c1"
|
|
81
81
|
},
|
|
82
82
|
{
|
|
83
83
|
"path": "spec/flow-core/orchestration.md",
|
|
84
|
-
"contentDigest": "sha256:
|
|
84
|
+
"contentDigest": "sha256:08569ccb71fbc6998b0b572026b11e79d0f8704b1f44b0e1fb6947cc09ce373c"
|
|
85
85
|
},
|
|
86
86
|
{
|
|
87
87
|
"path": "spec/flow-core/refs.md",
|
|
@@ -95,6 +95,10 @@
|
|
|
95
95
|
"path": "spec/instant-ctrl-flow/nodes.md",
|
|
96
96
|
"contentDigest": "sha256:332dabf3c05acfea45dac712db224c42f8f39d8375d6950515e987e6dd798af5"
|
|
97
97
|
},
|
|
98
|
+
{
|
|
99
|
+
"path": "spec/port-control-graph/index.md",
|
|
100
|
+
"contentDigest": "sha256:bb6ddf496d8de43d3835c52c4b328fa53e2fbc0028a90fc357890d67080f7c82"
|
|
101
|
+
},
|
|
98
102
|
{
|
|
99
103
|
"path": "spec/work-ctrl-flow/domains.md",
|
|
100
104
|
"contentDigest": "sha256:feebd80d291b9c8899d9558fb81e1bf2262277320a9ec542dc8eb2fb6eb176c9"
|
|
@@ -39,6 +39,8 @@ CtrlFlow 是一套共享的 **statements 语法、canonical AST 和编辑投影*
|
|
|
39
39
|
|
|
40
40
|
`EagerDataFlow` 是另一种公开执行产品,根 `[]` 直接承载一次调用内主动求值的 DAG nodes;它不使用 CtrlFlow statements 或其内部计划,也不是长生命周期的 lazy signal DataGraph。`AIDataWorkflow` 在 EagerDataFlow authoring plan 之上增加可恢复 RunGraph、patch/generation/invalidation 与 run-local semantic reuse 状态。
|
|
41
41
|
|
|
42
|
+
图式控制流定义另有 [CtrlFlowGraph profile](spec/port-control-graph/index.md):先编译到 InstantCtrlFlow statements + Blocks/RunBlock,再由现有引擎执行。
|
|
43
|
+
|
|
42
44
|
## 产品与制品矩阵
|
|
43
45
|
|
|
44
46
|
| 产品 | definition 根 | 目录入口 | 根 `[]` | 根 `()` | 跨 unit scheme |
|
|
@@ -43,7 +43,13 @@ export function draftContext(runtime: AICtrlRuntime, input: SupportReviewInput,
|
|
|
43
43
|
}
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
-
普通 `Run` 节点可通过exact frozen Agent task binding调用typed Agent Processor。底层只提供runtime-first `runAgent(agentRuntime, input, config)`与`runTargetedAgent(agentRuntime, selector, invocation, config)`;组合边界提供同名 `runtime.ai.effects` bound facade。selector只能是exact `{
|
|
46
|
+
普通 `Run` 节点可通过exact frozen Agent task binding调用typed Agent Processor。底层只提供runtime-first `runAgent(agentRuntime, input, config)`与`runTargetedAgent(agentRuntime, selector, invocation, config)`;组合边界提供同名 `runtime.ai.effects` bound facade。selector只能是exact `{byId}`或`{byName}`,旧的instance-prefixed keys fail closed;resolved identity与receipt随WorkCtrl snapshot进入同一canonical checkpoint;authored surface不暴露generic `invoke`。
|
|
47
|
+
|
|
48
|
+
需要遵循启动时已冻结的节点来源时,使用显式节点入口 `runtime.ai.tasks.invoke(input, {agentDefinitionRef})`,返回本次任务的业务输出。它先验证同节点的冻结 Agent 定义证明:未覆盖来源时调用原资源 Agent Processor;已覆盖时只调用原准入委托 owner,unknown 继续观察原 invocation,不回退新建 Agent。来源来自 canonical checkpoint 的不可变配置,不能由任务 input 指定。委托路径拒绝额外 `instanceName`、`materialRefs` 或 `effectPolicy`,避免静默忽略与原准入不一致的 Agent 选项;其材料、模型、上下文沿冻结委托。原 `runAgent`/`runTargetedAgent` 仍保留严格定义、selector 与来源保护。这不是通用 Effect 派发入口。
|
|
49
|
+
|
|
50
|
+
Host 可在首次 checkpoint 中冻结 `workflowAgentContexts[nodeId] = {schemaVersion: "workflow.agent-context/v1", agentDefinitionRef, sessionPolicy}`。`shared` 通过同一 canonical 实例索引把后续完整任务交给原实例;`independent-per-generation` 按实际节点代次及原生 lane scope 使用不同实例。配置缺省时,旧命名、targeted 和 receipt 行为保持。ctrl 绑定器提供的 `nodeContext` 只用于显式策略,不把旧 receipt 的缺省代次改写成新事实。错误定义、缺代次、越代或跨 lane 的 targeted 及额外实例名均在派发前拒绝;不能用作者指定名字替换冻结上下文身份。该配置只管理原生实例选择,不选择主机模型、读主机文件或承担频道派工。
|
|
51
|
+
|
|
52
|
+
`sessionPolicy: "authored"` 保留作者的原实例名和显式 targeted 选择,只采用真实节点代次;适合保留既有作者执行方式的新运行。Host 可同时冻结 `nodeIdentity: true` 作为新节点身份协议的采用标记。旧冻结配置没有该标记时,主机不能给既有请求补字段而改变原 Effect 请求指纹或历史身份。
|
|
47
53
|
|
|
48
54
|
## State and recovery
|
|
49
55
|
|
|
@@ -110,7 +110,11 @@ Machine nodes default to `semantic-hash`; manual nodes default to `never`. Autho
|
|
|
110
110
|
|
|
111
111
|
Semantic reuse is run-local. Generation is history metadata and is not part of the reuse fingerprint.
|
|
112
112
|
|
|
113
|
-
Runtime-bearing普通 `TransformNode`/`SinkNode` code保持 `output = fn(runtime, input, config)`。首次调用使用同名bound `runAgent`;后继节点可从declared port构造exact `{
|
|
113
|
+
Runtime-bearing普通 `TransformNode`/`SinkNode` code保持 `output = fn(runtime, input, config)`。首次调用使用同名bound `runAgent`;后继节点可从declared port构造exact `{byId}`,或使用static `{byName}`调用bound `runTargetedAgent`。旧的instance-prefixed keys fail closed。底层Processor始终显式接收runtime;Agent instance index/receipt与RunGraph只写同一canonical checkpoint,authored surface不暴露generic `invoke`。
|
|
114
|
+
|
|
115
|
+
同一脚本需要适配启动时已准入的 Task、Session 或 from-node 来源时,显式调用 `runtime.ai.tasks.invoke(input, {agentDefinitionRef})`,再将业务输出包装为本节点声明的精确端口。绑定器先核冻结节点证明,然后依据不可变配置选择原资源 Agent 或原委托 owner;未知回执只观察原调用,不新派发或回退 Agent。委托路径不接受会被忽略的 Agent 实例名、材料覆盖或 Effect 策略,仍消费冻结材料和执行配置。该节点入口不改变旧 targeted 的精确定义与 selector 协议,也不允许脚本挑选 owner。
|
|
116
|
+
|
|
117
|
+
显式 Agent 上下文策略使用与 ctrl 相同的首次冻结 `workflowAgentContexts` 协议,按 canonical 节点代次选择共享原实例或每代独立实例。旧快照没有该字段时仍执行原命名与 targeted 协议;错误代次、定义或实例身份不能绕过独立策略。协议和限制见 [ctrl 节点上下文](ctrl-workflow.md)。
|
|
114
118
|
|
|
115
119
|
See [Definition、Instance 与 Run](../flow-core/instance-run.md) for the physical hierarchy, seed exact-once rule and fresh recovery path.
|
|
116
120
|
|
|
@@ -150,6 +150,25 @@ projector 只读取这些固定位置。普通 prompt、description、metadata
|
|
|
150
150
|
|
|
151
151
|
depa-flows 只投影并冻结 schema/policy 领域事实,不选择 JSON Schema validator、不解析 host tool catalog,也不创建 actor。JSON Schema 校验、exact tool binding 与 actor lifecycle 由运行 host 承担。
|
|
152
152
|
|
|
153
|
+
## Agent selection owner
|
|
154
|
+
|
|
155
|
+
`projectAIAgentDefinitionCandidates`、`admitAIAgentDefinitionSelection`、`reconcileAuthoredAIAgentDefinition` 和 `freezeSelectedAIAgentTaskBinding` 通过显式 `selectionOwner` 共享 authoring 门禁。支持 authoring 的 resource host 创建一次 owner,并在所有 observation、refresh、admission、reconcile 和新任务 freeze 中复用它:
|
|
156
|
+
|
|
157
|
+
```ts
|
|
158
|
+
import { createAIAgentDefinitionSelectionOwner } from 'ai-workflow-logic';
|
|
159
|
+
|
|
160
|
+
const receiptAuthority = authoringRuntime.transaction;
|
|
161
|
+
const selectionOwner = createAIAgentDefinitionSelectionOwner({ receiptAuthority });
|
|
162
|
+
// Pass selectionOwner to every candidate projection, admission, reconcile and freeze.
|
|
163
|
+
// Reconcile also receives this same receiptAuthority object.
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
owner 绑定 Halfcode 的 `loadReceipt` 端口,并拥有进程内 pending 与 observation supersession 状态。不同 resource host 使用不同 owner,因此即使 FQN、candidate digest 和 receipt bytes 完全相同也不会互相阻塞。owner 不进入任何资源摘要,不从物理路径、packageId、FQN 或内容猜测归属,也不代替 Halfcode 的 CAS、publication 或 durable receipt store。
|
|
167
|
+
|
|
168
|
+
有状态 `author-new` / `revise-existing` 缺 owner 时返回 `selection-owner-required`;挪用其他 owner 的候选返回 `selection-owner-mismatch`。一个 registry 一旦绑定 owner,省略或更换 owner 的重新投影会拒绝。pending 跨同 owner 的 registry refresh 保留,revision reconcile 后旧 observation 的 selection/freeze 失效,已冻结 task 仍为不可变输入。已有纯读取/选择入口可继续不传 owner;支持 authoring 的 host 必须统一走拥有 owner 的入口。
|
|
169
|
+
|
|
170
|
+
owner 是不可序列化的进程内句柄。新进程为对应的持久 Halfcode store 构造新的 receipt 端口和 owner;先由 Halfcode 恢复出版事务事实,再建立新的 observation。此 API 不恢复旧进程的内存 admission,也不要求跨进程保留对象身份。旧 frozen run 的恢复仍从持久冻结资源和代码材料经公开 API 重建 authentic proof。
|
|
171
|
+
|
|
153
172
|
## MaterialPort and MaterialBinding
|
|
154
173
|
|
|
155
174
|
`MaterialPort` 定义 Agent 可消费的 material contract:
|
|
@@ -201,3 +201,26 @@ output = fn(runtime, input, config)
|
|
|
201
201
|
| `output` | code export | 普通 data;predicate 限定为 boolean;技术失败通过 fault 通道表达。 |
|
|
202
202
|
|
|
203
203
|
代码可同步或异步返回;runner 必须 await 后再推进下一条 statement。XNL 只保存 `vfs://...#Export`,不内嵌函数、表达式字符串、闭包或 handler object。
|
|
204
|
+
|
|
205
|
+
## Blocks/RunBlock
|
|
206
|
+
|
|
207
|
+
首版仅在 InstantCtrlFlow 实际执行并验收;WorkCtrlFlow/BPCtrlFlow/AICtrlWorkflow 的持久游标和恢复合同未扩展,loader/compiler 返回 unsupported-block-profile。
|
|
208
|
+
|
|
209
|
+
```xnl
|
|
210
|
+
<InstantCtrlFlow #demo.Blocks apiVersion="depa.flows/v1" version="1" (
|
|
211
|
+
<FlowContract #demo.Blocks>
|
|
212
|
+
<Blocks [
|
|
213
|
+
<Block #shared [<Run #append {src="vfs://./code.ts#append"}>]>
|
|
214
|
+
]>
|
|
215
|
+
) [
|
|
216
|
+
<RunBlock #first {block="block://#shared"}>
|
|
217
|
+
<RunBlock #second {block="block://#shared"}>
|
|
218
|
+
<Return #result>
|
|
219
|
+
]>
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Blocks 是 flow-local 命名 statements 集合;每个 Block ID 唯一,所有 statement ID(含主树及 block 内)全局唯一。RunBlock 的 block 必须引用本 flow 中已有的 `block://#id`,没有 inline body、input/config override,首版拒绝递归与互递归。
|
|
223
|
+
|
|
224
|
+
RunBlock 复用调用侧 runtime/current/context/config 和循环作用域,不创建 child flow、闭包或新 execution environment。Block 正常完成时,其 output 成为调用点下一条 statement 的 input;每个调用实际执行,不缓存结果。Block 内 Return 结束调用侧整个 flow,fault 传播并跳过调用点 continuation。Until body 内的 RunBlock 更新值供下一轮 predicate 使用。
|
|
225
|
+
|
|
226
|
+
编译时为每个调用位置建立独立游标键;复用 block definition 不表示复用运行 cursor。公开输出仍是 statements/blocks,不暴露内部 BT nodes。图转换规则见 [ported graph profile](../port-control-graph/index.md)。
|
|
@@ -60,6 +60,12 @@ output = fn(runtime, input, config)
|
|
|
60
60
|
|
|
61
61
|
## 产品能力矩阵
|
|
62
62
|
|
|
63
|
+
`Until` 可显式设置 `onExhausted="complete"`,达到本次 `maxIterations` 后正常继续;省略或 `fail` 保持原来的失败语义。正常耗尽不表示业务已经收敛,业务输出须保留自己的收敛状态。
|
|
64
|
+
|
|
65
|
+
`ForEach` 可声明 `maxItems=1..1000` 和 `concurrency=1..min(32,maxItems)`;超过集合预算在提交任何分项前拒绝,不截断集合。未声明 `maxItems` 的普通遍历仍遍历全部输入。WorkCtrl 首次展开将集合、数量和并发预算持久化,模板沿 instance 的冻结定义读取;等待项继续占槽,恢复按原 lane 和 wait 身份推进,输出按输入顺序归并。后续 statement 只在所有分项完成后执行。
|
|
66
|
+
|
|
67
|
+
Host 可调用纯函数 `applyFlowControlOptions(spec, options)` 在检查时生成本次定义副本。最多64个精确节点覆盖;Until 的次数覆盖为1..1000,Map预算与并发按上界验证。该转换不修改原模板或旧运行,重置使用原定义重新转换;它本身不授予目录权限或启动执行。
|
|
68
|
+
|
|
63
69
|
| 能力 | InstantCtrlFlow | WorkCtrlFlow | BPCtrlFlow |
|
|
64
70
|
|---|---|---|---|
|
|
65
71
|
| `Run` / `If` / `Require` / `Fallback` / `Until` / `Return` | 是 | 是 | 是 |
|
|
@@ -159,3 +165,4 @@ canonical XNL definition
|
|
|
159
165
|
## 规范约束
|
|
160
166
|
|
|
161
167
|
该矩阵和边界由 loader、compiler、runtime、examples 与 tests 共同验证。合法 definition 仍可能因为当前 runtime capability 不可用而得到 `runtime-capability-unavailable`;实现不得静默降级成其他 profile 或节点语义。
|
|
168
|
+
原生持久化将编译生成的谓词、分支与 fallback 动作投影到其精确的定义步骤 owner;不会按名称前缀接纳任意新动作。checkpoint 读回会对照冻结编译结果,旧格式未携带此投影时仍从原冻结定义恢复。运行期故障只在引擎拥有的 fault 槽中投影为诊断数据;业务输出仍须满足封闭数据合同。
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# 带端口控制流图 authoring profile
|
|
2
|
+
|
|
3
|
+
> 目录职责 · holds: CtrlFlowGraph 输入、结构化规则、公开 helper 与输出边界 · excludes: DAG 数据流与持久运行快照 · tier: stable · ⬆from: port-ctrl-graph-to-tree mission · ⬇to: DSL authoring 与 package consumers
|
|
4
|
+
|
|
5
|
+
`CtrlFlowGraph` 是编译为 `InstantCtrlFlow` 的图式定义;不是 EagerDataFlow,也不引入新的执行引擎。首版为单文件 XNL,FlowContract、Nodes、Edges 内联,代码仍可位于 bundle 下的真实文件。
|
|
6
|
+
|
|
7
|
+
## 输入与端口
|
|
8
|
+
|
|
9
|
+
```xnl
|
|
10
|
+
<CtrlFlowGraph #demo.Route apiVersion="depa.flows/v1" version="1" {
|
|
11
|
+
targetForm = "InstantCtrlFlow"
|
|
12
|
+
entry = "ctrl-node://#route"
|
|
13
|
+
} (
|
|
14
|
+
<FlowContract #demo.Route>
|
|
15
|
+
<Nodes [
|
|
16
|
+
<If #route (<Ports [
|
|
17
|
+
<Port #accepted {order=0 when="vfs://./code.ts#accept"}>
|
|
18
|
+
<Port #otherwise {order=1 default=true}>
|
|
19
|
+
]>)>
|
|
20
|
+
<Run #charge {src="vfs://./code.ts#charge"}>
|
|
21
|
+
<Run #refuse {src="vfs://./code.ts#refuse"}>
|
|
22
|
+
<Return #done>
|
|
23
|
+
]>
|
|
24
|
+
<Edges [
|
|
25
|
+
<Edge #accepted-charge {from="port://#route/accepted" to="port://#charge/enter"}>
|
|
26
|
+
<Edge #otherwise-refuse {from="port://#route/otherwise" to="port://#refuse/enter"}>
|
|
27
|
+
<Edge #charge-done {from="port://#charge/next" to="port://#done/enter"}>
|
|
28
|
+
<Edge #refuse-done {from="port://#refuse/next" to="port://#done/enter"}>
|
|
29
|
+
]>
|
|
30
|
+
)>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
- 节点和边 identity 唯一。端口 URI 为 `port://#nodeId/portId`;目的端口只能是 `enter`。同节点对的不同端口边分别保留。
|
|
34
|
+
- Run:enter/next;Return:enter,无输出。If:enter/next 和命名 Port;Until:enter/next/body。
|
|
35
|
+
- 每个输出端口至多一条边;不隐含 fan-out 或 AND join。多个互斥分支允许汇合到同一 enter。
|
|
36
|
+
- `Port.order` 为唯一非负整数,按 order first-true;default 至多一个且排最后,没有 predicate。非 default 的 when/config 进入树的 Branch。
|
|
37
|
+
- 无连接的分支 body 为空;无匹配且没有 default 时保留当前值并正常完成该控制块。显式 next 仍会执行。推导必须纳入空分支/无匹配路径,不可凭非空分支猜测 next。
|
|
38
|
+
- FlowAuthoring 只保存布局。图标题左 enter、右 next;分支端口在标题下按 order 展示。树继续使用上下 next。
|
|
39
|
+
|
|
40
|
+
## 结构化与作用域
|
|
41
|
+
|
|
42
|
+
If.next 是整个控制块的 continuation。未显式连接时,分析所有可达选择路径的最近公共正常 continuation,并将分支截在此节点前。Return 是 flow exit,不冒充普通 next;某条路径自然终止或 Return 时,不把其他路径的后续提升为所有分支的 next。
|
|
43
|
+
|
|
44
|
+
显式 next 与分支同一边界重合时只执行一次。已连接的各分支具有公共后续、却无法到达声明的 next 时,返回 `next-conflict`,不择一覆盖源图。公共后续只属于部分路径时,编译为主树和共享 block 森林,由相应调用位置执行 RunBlock。
|
|
45
|
+
|
|
46
|
+
Until 的 body 边进入嵌套 body,body 的自然结束返回 owner 重新检查 predicate;next 边在循环自然完成后执行。body 不是需要显式 back-edge 的物理环。body/next 共享同一个尾部时可提取 block,但每次调用均实际执行,没有缓存。Return/fault 仍取调用侧作用域。
|
|
47
|
+
|
|
48
|
+
当前节点集合为 Run、If、Until、Return。任意 back-edge、不可约循环、Parallel/Race、显式 Regions、Work/BP/AI 持久 profile 均拒绝,不自动增加 dispatcher 或复制独立子流。
|
|
49
|
+
|
|
50
|
+
## 公共包与 receipt
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
import {SingleEntryGraph} from 'depa-processor/algo';
|
|
54
|
+
import {lowerPortControlGraph} from 'port-control-graph-logic';
|
|
55
|
+
import {compileCtrlFlowGraph} from 'instant-ctrl-flow-logic/graph';
|
|
56
|
+
import {runInstantCtrlFlowSpec} from 'instant-ctrl-flow-logic/browser';
|
|
57
|
+
const compiled = compileCtrlFlowGraph(xnl, {baseUri});
|
|
58
|
+
await runInstantCtrlFlowSpec(compiled.spec, {input, runtime, resolveCode});
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
泛型 helper 接受 `ControlGraphRuntime<N,ID,Port>` 与 `PortControlGraph<N,ID,Port,EdgeID>`,输出 `StructuredForest` 或节点/边可定位的 diagnostics。它不认识 XNL、Vue、文件系统或业务 effects。SingleEntryGraph 仅用于节点邻接分析;完整 PortEdge 是输入权威,不用 node-pair Set 替代它。预算缺省为 1000 nodes、5000 edges、10000 structural contexts。
|
|
62
|
+
|
|
63
|
+
具体 adapter 返回实际生成的 source、canonical spec、statement→source-node provenance、inferredNext,以及 `depa.flows/ctrl-graph-receipt/v1`。receipt 含 compiler identity、profile、源文本 SHA-256、输出文本 SHA-256。布局也属于文本 digest;布局变更会使旧 receipt 失效,但不改变控制轨迹。
|
|
64
|
+
|
|
65
|
+
共享节点在不同 stop-boundary 下具有不同结构上下文;生成的 statement ID 保持全局唯一并通过 provenance 关联原节点。block ID 对同一输入确定,不承诺跨定义修订的持久 checkpoint 身份。修改定义后必须重新编译,不用此 receipt 恢复 Work/BP/AI 运行。
|
|
66
|
+
|
|
67
|
+
## 可复现现场
|
|
68
|
+
|
|
69
|
+
- [完全汇合](../../../../examples/xnl-bundles/port-ctrl-graph-diamond/manifest.xnl)
|
|
70
|
+
- [三分支部分汇合 → 两棵树](../../../../examples/xnl-bundles/port-ctrl-graph-partial/manifest.xnl):A/B 经各自 Run 后调用同一共享 block,C 独立 Return。If 无 next,shared/Return 构成第二棵树。
|
|
71
|
+
- [嵌套部分汇合](../../../../examples/xnl-bundles/port-ctrl-graph-nested/manifest.xnl)
|
|
72
|
+
- [循环体分支与汇合](../../../../examples/xnl-bundles/port-ctrl-graph-loop/manifest.xnl):Until.body 内按迭代奇偶选择 fast/slow,推导 chooseStep.next=advance;循环结束后 finalize/Return。测试含0/1/3/5次及超限拒绝。
|
|
73
|
+
|
|
74
|
+
每个 bundle 有真实 flow-code 和独立 verification/generated-tree.xnl、compile-receipt.json。测试加载实际代码并断言轨迹/输出;更新 golden 需显式执行 `bun tools/generate-port-control-fixtures.ts`,测试不会自动改写期望。
|
|
75
|
+
|
|
76
|
+
```sh
|
|
77
|
+
bun run flow-dsl-check examples/xnl-bundles/port-ctrl-graph-{diamond,partial,nested,loop}
|
|
78
|
+
bun test packages/port-control-graph-logic packages/instant-ctrl-flow-logic/test
|
|
79
|
+
bun tools/verify-port-control-package.ts
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Blocks/RunBlock 的运行合同见 [flow-core nodes](../flow-core/nodes.md#blocksrunblock)。
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<ResourcePackage #Depa.Flows.FlowDsl.Reference.Package
|
|
1
|
+
<ResourcePackage #Depa.Flows.FlowDsl.Reference.Package envelopeVersion="halfcode.resource-envelope/v1" specVersion=1 {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL documentation reference resources for authoring Skills."
|
|
4
4
|
} (
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai-workflow-flow-dsl-reference",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Canonical depa Flow DSL reference module for Halfcode authoring assemblies",
|
|
6
6
|
"type": "module",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"test": "bun run build && bun test"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"halfcode-compiler.xnl": "0.2
|
|
24
|
+
"halfcode-compiler.xnl": "0.3.2"
|
|
25
25
|
},
|
|
26
26
|
"publishConfig": {
|
|
27
27
|
"access": "public"
|