wingfoil 0.2.2 → 0.3.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 +83 -43
- package/dist/agent/discovery.d.ts +72 -0
- package/dist/agent/discovery.d.ts.map +1 -0
- package/dist/agent/discovery.js +210 -0
- package/dist/agent/discovery.js.map +1 -0
- package/dist/agent/execute.d.ts +206 -0
- package/dist/agent/execute.d.ts.map +1 -0
- package/dist/agent/execute.js +581 -0
- package/dist/agent/execute.js.map +1 -0
- package/dist/agent/index.d.ts +23 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +85 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/launch.d.ts +133 -0
- package/dist/agent/launch.d.ts.map +1 -0
- package/dist/agent/launch.js +380 -0
- package/dist/agent/launch.js.map +1 -0
- package/dist/agent/manifest.d.ts +30 -0
- package/dist/agent/manifest.d.ts.map +1 -0
- package/dist/agent/manifest.js +93 -0
- package/dist/agent/manifest.js.map +1 -0
- package/dist/agent/placeholders.d.ts +49 -0
- package/dist/agent/placeholders.d.ts.map +1 -0
- package/dist/agent/placeholders.js +177 -0
- package/dist/agent/placeholders.js.map +1 -0
- package/dist/agent/run-log.d.ts +254 -0
- package/dist/agent/run-log.d.ts.map +1 -0
- package/dist/agent/run-log.js +612 -0
- package/dist/agent/run-log.js.map +1 -0
- package/dist/agent/schema.d.ts +100 -0
- package/dist/agent/schema.d.ts.map +1 -0
- package/dist/agent/schema.js +89 -0
- package/dist/agent/schema.js.map +1 -0
- package/dist/agent/step.d.ts +41 -0
- package/dist/agent/step.d.ts.map +1 -0
- package/dist/agent/step.js +95 -0
- package/dist/agent/step.js.map +1 -0
- package/dist/build-info.json +4 -0
- package/dist/cli/error.d.ts +11 -2
- package/dist/cli/error.d.ts.map +1 -1
- package/dist/cli/error.js +27 -6
- package/dist/cli/error.js.map +1 -1
- package/dist/cli/exit.d.ts +33 -3
- package/dist/cli/exit.d.ts.map +1 -1
- package/dist/cli/exit.js +54 -3
- package/dist/cli/exit.js.map +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init-command.d.ts.map +1 -1
- package/dist/cli/init-command.js +4 -2
- package/dist/cli/init-command.js.map +1 -1
- package/dist/cli/mcp-command.d.ts +13 -4
- package/dist/cli/mcp-command.d.ts.map +1 -1
- package/dist/cli/mcp-command.js +25 -8
- package/dist/cli/mcp-command.js.map +1 -1
- package/dist/cli/output.d.ts +12 -4
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +15 -4
- package/dist/cli/output.js.map +1 -1
- package/dist/cli/program.d.ts +1 -1
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +162 -40
- package/dist/cli/program.js.map +1 -1
- package/dist/cli/registrar.d.ts +1 -1
- package/dist/cli/registrar.d.ts.map +1 -1
- package/dist/cli/registrar.js +67 -6
- package/dist/cli/registrar.js.map +1 -1
- package/dist/cli/suggest.d.ts +20 -0
- package/dist/cli/suggest.d.ts.map +1 -0
- package/dist/cli/suggest.js +49 -0
- package/dist/cli/suggest.js.map +1 -0
- package/dist/cli/warning.d.ts +26 -0
- package/dist/cli/warning.d.ts.map +1 -0
- package/dist/cli/warning.js +66 -0
- package/dist/cli/warning.js.map +1 -0
- package/dist/cli.js +11 -2
- package/dist/cli.js.map +1 -1
- package/dist/core/agent-execute.d.ts +44 -0
- package/dist/core/agent-execute.d.ts.map +1 -0
- package/dist/core/agent-execute.js +71 -0
- package/dist/core/agent-execute.js.map +1 -0
- package/dist/core/agent-list.d.ts +95 -0
- package/dist/core/agent-list.d.ts.map +1 -0
- package/dist/core/agent-list.js +207 -0
- package/dist/core/agent-list.js.map +1 -0
- package/dist/core/agent-show.d.ts +44 -0
- package/dist/core/agent-show.d.ts.map +1 -0
- package/dist/core/agent-show.js +188 -0
- package/dist/core/agent-show.js.map +1 -0
- package/dist/core/approval-authority.d.ts +17 -14
- package/dist/core/approval-authority.d.ts.map +1 -1
- package/dist/core/approval-authority.js +9 -9
- package/dist/core/approval-authority.js.map +1 -1
- package/dist/core/builtin-asset.d.ts +18 -15
- package/dist/core/builtin-asset.d.ts.map +1 -1
- package/dist/core/builtin-asset.js +17 -14
- package/dist/core/builtin-asset.js.map +1 -1
- package/dist/core/builtin-integrity.d.ts +12 -2
- package/dist/core/builtin-integrity.d.ts.map +1 -1
- package/dist/core/builtin-integrity.js +85 -9
- package/dist/core/builtin-integrity.js.map +1 -1
- package/dist/core/confinement.d.ts +3 -1
- package/dist/core/confinement.d.ts.map +1 -1
- package/dist/core/confinement.js +7 -4
- package/dist/core/confinement.js.map +1 -1
- package/dist/core/context.d.ts +150 -98
- package/dist/core/context.d.ts.map +1 -1
- package/dist/core/context.js +602 -66
- package/dist/core/context.js.map +1 -1
- package/dist/core/directive-assign.d.ts +33 -7
- package/dist/core/directive-assign.d.ts.map +1 -1
- package/dist/core/directive-assign.js +67 -27
- package/dist/core/directive-assign.js.map +1 -1
- package/dist/core/directive-scope.d.ts +36 -0
- package/dist/core/directive-scope.d.ts.map +1 -0
- package/dist/core/directive-scope.js +34 -0
- package/dist/core/directive-scope.js.map +1 -0
- package/dist/core/directives-list.d.ts +13 -3
- package/dist/core/directives-list.d.ts.map +1 -1
- package/dist/core/directives-list.js +18 -6
- package/dist/core/directives-list.js.map +1 -1
- package/dist/core/dry-run.d.ts +33 -0
- package/dist/core/dry-run.d.ts.map +1 -0
- package/dist/core/dry-run.js +45 -0
- package/dist/core/dry-run.js.map +1 -0
- package/dist/core/element-ref.d.ts +23 -0
- package/dist/core/element-ref.d.ts.map +1 -0
- package/dist/core/element-ref.js +24 -0
- package/dist/core/element-ref.js.map +1 -0
- package/dist/core/error-details.d.ts +20 -0
- package/dist/core/error-details.d.ts.map +1 -0
- package/dist/core/error-details.js +65 -0
- package/dist/core/error-details.js.map +1 -0
- package/dist/core/exit-code.d.ts.map +1 -1
- package/dist/core/exit-code.js +6 -7
- package/dist/core/exit-code.js.map +1 -1
- package/dist/core/git-identity.d.ts +46 -11
- package/dist/core/git-identity.d.ts.map +1 -1
- package/dist/core/git-identity.js +140 -27
- package/dist/core/git-identity.js.map +1 -1
- package/dist/core/index.d.ts +184 -10
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1045 -185
- package/dist/core/index.js.map +1 -1
- package/dist/core/init.d.ts +45 -5
- package/dist/core/init.d.ts.map +1 -1
- package/dist/core/init.js +134 -24
- package/dist/core/init.js.map +1 -1
- package/dist/core/loaders.d.ts +170 -14
- package/dist/core/loaders.d.ts.map +1 -1
- package/dist/core/loaders.js +570 -89
- package/dist/core/loaders.js.map +1 -1
- package/dist/core/memory-add-link.d.ts +28 -0
- package/dist/core/memory-add-link.d.ts.map +1 -0
- package/dist/core/memory-add-link.js +67 -0
- package/dist/core/memory-add-link.js.map +1 -0
- package/dist/core/memory-add-type.d.ts +25 -1
- package/dist/core/memory-add-type.d.ts.map +1 -1
- package/dist/core/memory-add-type.js +59 -1
- package/dist/core/memory-add-type.js.map +1 -1
- package/dist/core/memory-amend.d.ts +80 -0
- package/dist/core/memory-amend.d.ts.map +1 -0
- package/dist/core/memory-amend.js +160 -0
- package/dist/core/memory-amend.js.map +1 -0
- package/dist/core/memory-supersede.d.ts +28 -0
- package/dist/core/memory-supersede.d.ts.map +1 -0
- package/dist/core/memory-supersede.js +79 -0
- package/dist/core/memory-supersede.js.map +1 -0
- package/dist/core/memory-transition.d.ts +190 -30
- package/dist/core/memory-transition.d.ts.map +1 -1
- package/dist/core/memory-transition.js +480 -59
- package/dist/core/memory-transition.js.map +1 -1
- package/dist/core/registry.d.ts +82 -10
- package/dist/core/registry.d.ts.map +1 -1
- package/dist/core/registry.js +50 -0
- package/dist/core/registry.js.map +1 -1
- package/dist/core/relevance.d.ts +74 -12
- package/dist/core/relevance.d.ts.map +1 -1
- package/dist/core/relevance.js +45 -27
- package/dist/core/relevance.js.map +1 -1
- package/dist/core/require-reason.d.ts.map +1 -1
- package/dist/core/require-reason.js +6 -5
- package/dist/core/require-reason.js.map +1 -1
- package/dist/core/required-fields.d.ts +28 -0
- package/dist/core/required-fields.d.ts.map +1 -0
- package/dist/core/required-fields.js +60 -0
- package/dist/core/required-fields.js.map +1 -0
- package/dist/core/revision.d.ts +82 -0
- package/dist/core/revision.d.ts.map +1 -0
- package/dist/core/revision.js +144 -0
- package/dist/core/revision.js.map +1 -0
- package/dist/core/types.d.ts +28 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +12 -3
- package/dist/core/types.js.map +1 -1
- package/dist/core/workflow-core-checks.d.ts +34 -0
- package/dist/core/workflow-core-checks.d.ts.map +1 -0
- package/dist/core/workflow-core-checks.js +403 -0
- package/dist/core/workflow-core-checks.js.map +1 -0
- package/dist/core/workflow-create-remove.d.ts +65 -0
- package/dist/core/workflow-create-remove.d.ts.map +1 -0
- package/dist/core/workflow-create-remove.js +277 -0
- package/dist/core/workflow-create-remove.js.map +1 -0
- package/dist/core/workflow-deduction.d.ts +48 -0
- package/dist/core/workflow-deduction.d.ts.map +1 -0
- package/dist/core/workflow-deduction.js +523 -0
- package/dist/core/workflow-deduction.js.map +1 -0
- package/dist/core/workflow-diagnostics.d.ts +83 -0
- package/dist/core/workflow-diagnostics.d.ts.map +1 -0
- package/dist/core/workflow-diagnostics.js +375 -0
- package/dist/core/workflow-diagnostics.js.map +1 -0
- package/dist/core/workflow-exit-state.d.ts +125 -0
- package/dist/core/workflow-exit-state.d.ts.map +1 -0
- package/dist/core/workflow-exit-state.js +243 -0
- package/dist/core/workflow-exit-state.js.map +1 -0
- package/dist/core/workflow-finalize.d.ts +37 -0
- package/dist/core/workflow-finalize.d.ts.map +1 -0
- package/dist/core/workflow-finalize.js +153 -0
- package/dist/core/workflow-finalize.js.map +1 -0
- package/dist/core/workflow-list-show.d.ts +176 -0
- package/dist/core/workflow-list-show.d.ts.map +1 -0
- package/dist/core/workflow-list-show.js +268 -0
- package/dist/core/workflow-list-show.js.map +1 -0
- package/dist/core/workflow-next.d.ts +268 -0
- package/dist/core/workflow-next.d.ts.map +1 -0
- package/dist/core/workflow-next.js +503 -0
- package/dist/core/workflow-next.js.map +1 -0
- package/dist/core/workflow-registry.d.ts +52 -0
- package/dist/core/workflow-registry.d.ts.map +1 -0
- package/dist/core/workflow-registry.js +158 -0
- package/dist/core/workflow-registry.js.map +1 -0
- package/dist/core/workflow-start-end.d.ts +71 -0
- package/dist/core/workflow-start-end.d.ts.map +1 -0
- package/dist/core/workflow-start-end.js +298 -0
- package/dist/core/workflow-start-end.js.map +1 -0
- package/dist/core/workflow-status.d.ts +83 -0
- package/dist/core/workflow-status.d.ts.map +1 -0
- package/dist/core/workflow-status.js +125 -0
- package/dist/core/workflow-status.js.map +1 -0
- package/dist/core/write-guard.d.ts +51 -8
- package/dist/core/write-guard.d.ts.map +1 -1
- package/dist/core/write-guard.js +139 -9
- package/dist/core/write-guard.js.map +1 -1
- package/dist/directives/index.d.ts +3 -2
- package/dist/directives/index.d.ts.map +1 -1
- package/dist/directives/index.js +5 -3
- package/dist/directives/index.js.map +1 -1
- package/dist/directives/schema.d.ts +34 -29
- package/dist/directives/schema.d.ts.map +1 -1
- package/dist/directives/schema.js +35 -29
- package/dist/directives/schema.js.map +1 -1
- package/dist/directives/version.d.ts +28 -0
- package/dist/directives/version.d.ts.map +1 -0
- package/dist/directives/version.js +51 -0
- package/dist/directives/version.js.map +1 -0
- package/dist/dna/edit.d.ts +7 -6
- package/dist/dna/edit.d.ts.map +1 -1
- package/dist/dna/edit.js +96 -41
- package/dist/dna/edit.js.map +1 -1
- package/dist/dna/mutate.js +18 -3
- package/dist/dna/mutate.js.map +1 -1
- package/dist/dna/path.d.ts +2 -2
- package/dist/dna/roles.d.ts +1 -1
- package/dist/dna/schema.d.ts +61 -3
- package/dist/dna/schema.d.ts.map +1 -1
- package/dist/dna/schema.js +121 -6
- package/dist/dna/schema.js.map +1 -1
- package/dist/mcp/dna-resource.d.ts.map +1 -1
- package/dist/mcp/dna-resource.js +4 -4
- package/dist/mcp/dna-resource.js.map +1 -1
- package/dist/mcp/index.d.ts +8 -4
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +13 -2
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/memory-resource.d.ts.map +1 -1
- package/dist/mcp/memory-resource.js +30 -19
- package/dist/mcp/memory-resource.js.map +1 -1
- package/dist/mcp/prompt.d.ts +61 -24
- package/dist/mcp/prompt.d.ts.map +1 -1
- package/dist/mcp/prompt.js +176 -47
- package/dist/mcp/prompt.js.map +1 -1
- package/dist/mcp/read-only.d.ts +39 -0
- package/dist/mcp/read-only.d.ts.map +1 -1
- package/dist/mcp/read-only.js +61 -0
- package/dist/mcp/read-only.js.map +1 -1
- package/dist/mcp/registrar.d.ts +10 -0
- package/dist/mcp/registrar.d.ts.map +1 -1
- package/dist/mcp/registrar.js +48 -12
- package/dist/mcp/registrar.js.map +1 -1
- package/dist/mcp/server.d.ts +21 -14
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +41 -15
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/session-resource.d.ts +13 -0
- package/dist/mcp/session-resource.d.ts.map +1 -0
- package/dist/mcp/session-resource.js +65 -0
- package/dist/mcp/session-resource.js.map +1 -0
- package/dist/mcp/workflow-resource.d.ts +18 -0
- package/dist/mcp/workflow-resource.d.ts.map +1 -1
- package/dist/mcp/workflow-resource.js +37 -8
- package/dist/mcp/workflow-resource.js.map +1 -1
- package/dist/memory/add.d.ts +110 -24
- package/dist/memory/add.d.ts.map +1 -1
- package/dist/memory/add.js +251 -64
- package/dist/memory/add.js.map +1 -1
- package/dist/memory/audit.d.ts +152 -39
- package/dist/memory/audit.d.ts.map +1 -1
- package/dist/memory/audit.js +257 -103
- package/dist/memory/audit.js.map +1 -1
- package/dist/memory/commit-message.d.ts +60 -38
- package/dist/memory/commit-message.d.ts.map +1 -1
- package/dist/memory/commit-message.js +167 -21
- package/dist/memory/commit-message.js.map +1 -1
- package/dist/memory/entry.d.ts.map +1 -1
- package/dist/memory/entry.js +1 -2
- package/dist/memory/entry.js.map +1 -1
- package/dist/memory/frontmatter-edit.d.ts +16 -4
- package/dist/memory/frontmatter-edit.d.ts.map +1 -1
- package/dist/memory/frontmatter-edit.js +13 -1
- package/dist/memory/frontmatter-edit.js.map +1 -1
- package/dist/memory/git-log.d.ts +18 -6
- package/dist/memory/git-log.d.ts.map +1 -1
- package/dist/memory/git-log.js +40 -13
- package/dist/memory/git-log.js.map +1 -1
- package/dist/memory/history.d.ts +73 -12
- package/dist/memory/history.d.ts.map +1 -1
- package/dist/memory/history.js +128 -44
- package/dist/memory/history.js.map +1 -1
- package/dist/memory/index.d.ts +13 -11
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +34 -3
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/query.d.ts +161 -19
- package/dist/memory/query.d.ts.map +1 -1
- package/dist/memory/query.js +435 -55
- package/dist/memory/query.js.map +1 -1
- package/dist/memory/schema.d.ts +52 -3
- package/dist/memory/schema.d.ts.map +1 -1
- package/dist/memory/schema.js +132 -8
- package/dist/memory/schema.js.map +1 -1
- package/dist/memory/state-machine.d.ts +65 -10
- package/dist/memory/state-machine.d.ts.map +1 -1
- package/dist/memory/state-machine.js +134 -46
- package/dist/memory/state-machine.js.map +1 -1
- package/dist/memory/submit.d.ts +52 -3
- package/dist/memory/submit.d.ts.map +1 -1
- package/dist/memory/submit.js +118 -11
- package/dist/memory/submit.js.map +1 -1
- package/dist/storage/build-stamp.d.ts +18 -0
- package/dist/storage/build-stamp.d.ts.map +1 -0
- package/dist/storage/build-stamp.js +68 -0
- package/dist/storage/build-stamp.js.map +1 -0
- package/dist/storage/builtin-adapters.d.ts +32 -0
- package/dist/storage/builtin-adapters.d.ts.map +1 -0
- package/dist/storage/builtin-adapters.js +100 -0
- package/dist/storage/builtin-adapters.js.map +1 -0
- package/dist/storage/builtin-directives.d.ts +0 -29
- package/dist/storage/builtin-directives.d.ts.map +1 -1
- package/dist/storage/builtin-directives.js +9 -4
- package/dist/storage/builtin-directives.js.map +1 -1
- package/dist/storage/commit.d.ts +310 -3
- package/dist/storage/commit.d.ts.map +1 -1
- package/dist/storage/commit.js +807 -33
- package/dist/storage/commit.js.map +1 -1
- package/dist/storage/document.d.ts +6 -0
- package/dist/storage/document.d.ts.map +1 -1
- package/dist/storage/document.js +10 -1
- package/dist/storage/document.js.map +1 -1
- package/dist/storage/dry-run.d.ts +65 -0
- package/dist/storage/dry-run.d.ts.map +1 -0
- package/dist/storage/dry-run.js +150 -0
- package/dist/storage/dry-run.js.map +1 -0
- package/dist/storage/errors.d.ts +26 -0
- package/dist/storage/errors.d.ts.map +1 -1
- package/dist/storage/errors.js +27 -1
- package/dist/storage/errors.js.map +1 -1
- package/dist/storage/frontmatter.d.ts +1 -1
- package/dist/storage/frontmatter.js +1 -1
- package/dist/storage/git-read.d.ts +64 -0
- package/dist/storage/git-read.d.ts.map +1 -0
- package/dist/storage/git-read.js +107 -0
- package/dist/storage/git-read.js.map +1 -0
- package/dist/storage/index.d.ts +13 -5
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +39 -2
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/layout.d.ts +2 -2
- package/dist/storage/layout.d.ts.map +1 -1
- package/dist/storage/layout.js +2 -7
- package/dist/storage/layout.js.map +1 -1
- package/dist/storage/memory-path.d.ts +18 -5
- package/dist/storage/memory-path.d.ts.map +1 -1
- package/dist/storage/memory-path.js +41 -5
- package/dist/storage/memory-path.js.map +1 -1
- package/dist/storage/snapshot.js +1 -1
- package/dist/storage/templates.d.ts +33 -6
- package/dist/storage/templates.d.ts.map +1 -1
- package/dist/storage/templates.js +170 -16
- package/dist/storage/templates.js.map +1 -1
- package/dist/validation/config-version.d.ts +19 -0
- package/dist/validation/config-version.d.ts.map +1 -0
- package/dist/validation/config-version.js +53 -0
- package/dist/validation/config-version.js.map +1 -0
- package/dist/validation/diagnostic.d.ts +40 -0
- package/dist/validation/diagnostic.d.ts.map +1 -0
- package/dist/validation/diagnostic.js +41 -0
- package/dist/validation/diagnostic.js.map +1 -0
- package/dist/validation/format.d.ts +74 -0
- package/dist/validation/format.d.ts.map +1 -0
- package/dist/validation/format.js +104 -0
- package/dist/validation/format.js.map +1 -0
- package/dist/validation/id.d.ts +14 -0
- package/dist/validation/id.d.ts.map +1 -1
- package/dist/validation/id.js +35 -11
- package/dist/validation/id.js.map +1 -1
- package/dist/validation/identity.d.ts +40 -0
- package/dist/validation/identity.d.ts.map +1 -0
- package/dist/validation/identity.js +78 -0
- package/dist/validation/identity.js.map +1 -0
- package/dist/validation/index.d.ts +9 -3
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +30 -1
- package/dist/validation/index.js.map +1 -1
- package/dist/validation/secret-scan.d.ts +3 -2
- package/dist/validation/secret-scan.d.ts.map +1 -1
- package/dist/validation/secret-scan.js +32 -11
- package/dist/validation/secret-scan.js.map +1 -1
- package/dist/validation/warning.d.ts +30 -16
- package/dist/validation/warning.d.ts.map +1 -1
- package/dist/validation/warning.js +74 -7
- package/dist/validation/warning.js.map +1 -1
- package/dist/workflow/bindings.d.ts +152 -0
- package/dist/workflow/bindings.d.ts.map +1 -0
- package/dist/workflow/bindings.js +249 -0
- package/dist/workflow/bindings.js.map +1 -0
- package/dist/workflow/create.d.ts +13 -0
- package/dist/workflow/create.d.ts.map +1 -0
- package/dist/workflow/create.js +41 -0
- package/dist/workflow/create.js.map +1 -0
- package/dist/workflow/deduce.d.ts +400 -0
- package/dist/workflow/deduce.d.ts.map +1 -0
- package/dist/workflow/deduce.js +1109 -0
- package/dist/workflow/deduce.js.map +1 -0
- package/dist/workflow/manifest-edit.d.ts +19 -0
- package/dist/workflow/manifest-edit.d.ts.map +1 -0
- package/dist/workflow/manifest-edit.js +124 -0
- package/dist/workflow/manifest-edit.js.map +1 -0
- package/dist/workflow/schema.d.ts +158 -19
- package/dist/workflow/schema.d.ts.map +1 -1
- package/dist/workflow/schema.js +163 -15
- package/dist/workflow/schema.js.map +1 -1
- package/package.json +18 -8
|
@@ -0,0 +1,523 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readDirtyRunLogs = readDirtyRunLogs;
|
|
4
|
+
exports.readDirtyPaths = readDirtyPaths;
|
|
5
|
+
exports.instancePlanIds = instancePlanIds;
|
|
6
|
+
exports.readDeductionSnapshotAtHead = readDeductionSnapshotAtHead;
|
|
7
|
+
exports.deduceWorkflowStateAtHead = deduceWorkflowStateAtHead;
|
|
8
|
+
exports.selectWorkflowInstance = selectWorkflowInstance;
|
|
9
|
+
/**
|
|
10
|
+
* The `HEAD` snapshot workflow state deduction reads (task-198, task-203; `spec-017` §1.1–§1.3, §3.3,
|
|
11
|
+
* §4.8), and the deduction at `HEAD` every workflow consumer calls.
|
|
12
|
+
*
|
|
13
|
+
* {@link readDeductionSnapshotAtHead} is the one impure step: it resolves `HEAD` once and reads every
|
|
14
|
+
* input at that sha — the workflow registry with its core checks (`loadWorkflowRegistryAtCommit`),
|
|
15
|
+
* `memory.yaml`, `dna.yaml`, every Memory document in sorted path order (tolerant, task-171), the file
|
|
16
|
+
* list, each open plan's start commit and what each instance's walk holds (phase records, step linkages,
|
|
17
|
+
* re-entries) — plus, to **explain** and never to decide, the working-tree paths among the inputs that
|
|
18
|
+
* differ from `HEAD` (`W_UNCOMMITTED_INPUTS`, §1.2; the `command-baseline` directive). The deduction
|
|
19
|
+
* itself is the pure `deduceWorkflowState` (`src/workflow/deduce.ts`).
|
|
20
|
+
*
|
|
21
|
+
* History is read at the cost §4.8 states (REQ-PERF-03): **one** `git log` over the union of the open
|
|
22
|
+
* instances' walks, bounded by the parents of the starts' octopus merge base (one `git merge-base
|
|
23
|
+
* --octopus`), from which each instance's own walk is cut in memory through the parent links; plus one
|
|
24
|
+
* lookup per element a re-entry in the walk names, and one batched read (`git cat-file --batch`) of those
|
|
25
|
+
* elements' files at the bracketless `add` / `submit` commits that name them (task-281, `bug-300`).
|
|
26
|
+
*
|
|
27
|
+
* git is read with `runGitRead` (stderr captured, `bug-093`) and the `git log` walk with
|
|
28
|
+
* `walkGitLogFields` (NUL-framed, `bug-050`); every `git log` passes `--no-show-signature` and checks the
|
|
29
|
+
* commit names it parses (`task-268`, `bug-291`), so a `log.showSignature` setting cannot put signature
|
|
30
|
+
* text among the parsed lines; the `git merge-base` that bounds the walk takes no such flag, and its
|
|
31
|
+
* output is checked the same way. No clock, no randomness, nothing cached between calls.
|
|
32
|
+
*/
|
|
33
|
+
const path_1 = require("path");
|
|
34
|
+
const run_log_1 = require("../agent/run-log");
|
|
35
|
+
const path_2 = require("../dna/path");
|
|
36
|
+
const audit_1 = require("../memory/audit");
|
|
37
|
+
const git_log_1 = require("../memory/git-log");
|
|
38
|
+
const query_1 = require("../memory/query");
|
|
39
|
+
const state_machine_1 = require("../memory/state-machine");
|
|
40
|
+
const storage_1 = require("../storage");
|
|
41
|
+
const validation_1 = require("../validation");
|
|
42
|
+
const deduce_1 = require("../workflow/deduce");
|
|
43
|
+
const schema_1 = require("../workflow/schema");
|
|
44
|
+
const loaders_1 = require("./loaders");
|
|
45
|
+
const revision_1 = require("./revision");
|
|
46
|
+
const types_1 = require("./types");
|
|
47
|
+
const workflow_registry_1 = require("./workflow-registry");
|
|
48
|
+
/** The trailer that marks a phase record (`spec-003` § "Evidence"). */
|
|
49
|
+
const PHASE_TRAILER = 'WingFoil-Phase';
|
|
50
|
+
const RECORD_SUFFIX = ' completed';
|
|
51
|
+
/** A non-blank string frontmatter value, or `null`. */
|
|
52
|
+
function text(value) {
|
|
53
|
+
return typeof value === 'string' && value.trim() !== '' ? value : null;
|
|
54
|
+
}
|
|
55
|
+
/** The marker that opens one commit of {@link readStarts}'s `git log` (a byte no path or sha holds). */
|
|
56
|
+
const COMMIT_MARK = String.fromCharCode(1);
|
|
57
|
+
/**
|
|
58
|
+
* The start commit of each plan at `paths` (§3.3): the latest commit reachable from `sha` that **added**
|
|
59
|
+
* the file at its current path (`--no-renames`, so a moved plan starts where it arrived). One
|
|
60
|
+
* `git log --topo-order` over all of them: the commits come out in `git rev-list --topo-order` order,
|
|
61
|
+
* so a start's position is the index of its commit among them (`0` the most recent).
|
|
62
|
+
*/
|
|
63
|
+
function readStarts(root, sha, paths) {
|
|
64
|
+
const starts = new Map();
|
|
65
|
+
if (paths.length === 0)
|
|
66
|
+
return starts;
|
|
67
|
+
const args = ['-c', 'core.quotePath=false', 'log', '--no-show-signature', '--topo-order', '--no-renames', '--diff-filter=A', '--name-only', '--format=%x01%H', sha, '--'];
|
|
68
|
+
const wanted = new Set(paths);
|
|
69
|
+
let commit = '';
|
|
70
|
+
let position = -1;
|
|
71
|
+
for (const line of (0, storage_1.runGitRead)(root, [...args, ...paths.map((path) => `:(literal)${path}`)]).stdout.split('\n')) {
|
|
72
|
+
if (line.startsWith(COMMIT_MARK)) {
|
|
73
|
+
commit = (0, storage_1.requireCommitName)(line.slice(1), 'git log --diff-filter=A');
|
|
74
|
+
position += 1;
|
|
75
|
+
}
|
|
76
|
+
else if (wanted.has(line) && !starts.has(line)) {
|
|
77
|
+
starts.set(line, { commit, position });
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return starts;
|
|
81
|
+
}
|
|
82
|
+
/** The value of each `key: value` line of a trailer block, by key (the last one wins), or `null`. */
|
|
83
|
+
function trailerValue(block, key) {
|
|
84
|
+
let found = null;
|
|
85
|
+
for (const line of block.split('\n')) {
|
|
86
|
+
const colon = line.indexOf(':');
|
|
87
|
+
if (colon !== -1 && line.slice(0, colon).trim() === key)
|
|
88
|
+
found = line.slice(colon + 1).trim();
|
|
89
|
+
}
|
|
90
|
+
return found;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* The walk's lower bound (§4.8, review F3 ruling (a)): `^@` of the octopus merge base of every start
|
|
94
|
+
* commit, or none when the starts share no ancestor (unrelated histories; `git merge-base` exits 1). The
|
|
95
|
+
* base is an ancestor of (or equal to) each start, so whatever its parents reach is reachable from every
|
|
96
|
+
* start's parents: outside every instance's walk. A commit some instance's walk holds is therefore never
|
|
97
|
+
* cut off, as it could be by the oldest start alone in a branching history. `merge-base` prints a commit
|
|
98
|
+
* name and takes no `--no-show-signature` (git refuses the option; `log.showSignature` does not apply to
|
|
99
|
+
* it); its output is refused unless it is a commit name (`requireCommitName`, task-268).
|
|
100
|
+
*/
|
|
101
|
+
function readWalkBound(root, starts) {
|
|
102
|
+
const commits = [...new Set(starts.map((entry) => entry.commit))].sort();
|
|
103
|
+
const run = (0, storage_1.runGitRead)(root, ['merge-base', '--octopus', ...commits], { accepted: [0, 1] });
|
|
104
|
+
if (run.status === 1)
|
|
105
|
+
return [];
|
|
106
|
+
const base = (0, storage_1.requireCommitName)(run.stdout.trim(), 'git merge-base --octopus');
|
|
107
|
+
return ['--not', `${base}^@`];
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* The union of the open instances' walks (§4.8): one `git log --topo-order` of the commits reachable
|
|
111
|
+
* from `sha` and not from `bound` (`readWalkBound`), newest first, with each commit's parents, subject
|
|
112
|
+
* and trailers. Every instance's walk lies inside this one.
|
|
113
|
+
*/
|
|
114
|
+
function readWalk(root, sha, bound) {
|
|
115
|
+
const rows = (0, git_log_1.walkGitLogFields)(root, ['%H', '%P', '%s', '%(trailers:only,unfold)'], [], ['--topo-order', sha, ...bound]);
|
|
116
|
+
// `walkGitLogFields` returns oldest first; the walk position counts from `HEAD`.
|
|
117
|
+
return rows.reverse().map(([commit, parents, subject, trailers], position) => ({
|
|
118
|
+
commit: commit,
|
|
119
|
+
position,
|
|
120
|
+
parents: parents.split(' ').filter((parent) => parent !== ''),
|
|
121
|
+
subject: subject,
|
|
122
|
+
trailers: trailers,
|
|
123
|
+
}));
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* The commits of one instance's walk (§4.8): those of the union walk not reachable from `start`'s
|
|
127
|
+
* parents. Reachability is followed through the walk's own parent links: a commit on a path from a
|
|
128
|
+
* parent of `start` down to a commit of the union walk is itself in the union walk, so nothing outside
|
|
129
|
+
* it is needed.
|
|
130
|
+
*/
|
|
131
|
+
function instanceWalk(walk, byCommit, start) {
|
|
132
|
+
const excluded = new Set();
|
|
133
|
+
// Every start lies in the union walk: it descends from (or is) the merge base, so it is not reachable
|
|
134
|
+
// from the base's parents.
|
|
135
|
+
const pending = [...byCommit.get(start).parents];
|
|
136
|
+
while (pending.length > 0) {
|
|
137
|
+
const commit = pending.pop();
|
|
138
|
+
const entry = byCommit.get(commit);
|
|
139
|
+
if (entry === undefined || excluded.has(commit))
|
|
140
|
+
continue;
|
|
141
|
+
excluded.add(commit);
|
|
142
|
+
pending.push(...entry.parents);
|
|
143
|
+
}
|
|
144
|
+
return new Set(walk.filter((entry) => !excluded.has(entry.commit)).map((entry) => entry.commit));
|
|
145
|
+
}
|
|
146
|
+
/** The ids a `wf(<type>): <verb> <ids> [<bracket>]` subject names, in order. */
|
|
147
|
+
function subjectIds(subject) {
|
|
148
|
+
const rest = subject.replace(/^wf\([^)]*\):\s*\S+\s*/, '').replace(/\[[^[\]]*\]\s*$/, '');
|
|
149
|
+
return rest
|
|
150
|
+
.split(',')
|
|
151
|
+
.map((id) => id.trim())
|
|
152
|
+
.filter((id) => id !== '');
|
|
153
|
+
}
|
|
154
|
+
/** The scope of a `wf(<scope>): …` subject — the Memory type of a Memory operation. */
|
|
155
|
+
function subjectType(subject) {
|
|
156
|
+
return /^wf\(([^)]*)\)/.exec(subject)[1];
|
|
157
|
+
}
|
|
158
|
+
/** The verbs whose subject carries no bracket (`spec-008` §2): `add` and `submit`. */
|
|
159
|
+
const BRACKETLESS_VERBS = ['add', 'submit'];
|
|
160
|
+
/**
|
|
161
|
+
* Read one walk commit. A re-entry is a `reject` or `park` whose bracket ends at an earlier position of
|
|
162
|
+
* the type's `sequence` than it starts from: a `bug` rejected `open → closed` moves forward, which
|
|
163
|
+
* decides the phase rather than re-entering it (§5.2).
|
|
164
|
+
*/
|
|
165
|
+
function readFacts(entry, memoryYaml) {
|
|
166
|
+
const { commit, position, subject, trailers } = entry;
|
|
167
|
+
const phase = trailerValue(trailers, PHASE_TRAILER);
|
|
168
|
+
const instance = trailerValue(trailers, 'WingFoil-Instance');
|
|
169
|
+
const record = phase !== null && phase.endsWith(RECORD_SUFFIX) && instance !== null
|
|
170
|
+
? {
|
|
171
|
+
commit,
|
|
172
|
+
position,
|
|
173
|
+
phase: phase.slice(0, -RECORD_SUFFIX.length).trim(),
|
|
174
|
+
instance,
|
|
175
|
+
element: trailerValue(trailers, 'WingFoil-Element'),
|
|
176
|
+
item: trailerValue(trailers, 'WingFoil-Item'),
|
|
177
|
+
}
|
|
178
|
+
: null;
|
|
179
|
+
const facts = { record, links: [], reentries: [], transitions: [], bracketless: [] };
|
|
180
|
+
const operation = (0, audit_1.parseMemoryOperation)(subject);
|
|
181
|
+
if (operation === null)
|
|
182
|
+
return facts;
|
|
183
|
+
const type = subjectType(subject);
|
|
184
|
+
const ids = subjectIds(subject);
|
|
185
|
+
const step = trailerValue(trailers, 'WingFoil-Step');
|
|
186
|
+
if (operation === 'add' && instance !== null && step !== null) {
|
|
187
|
+
for (const id of ids)
|
|
188
|
+
facts.links.push({ commit, position, instance, step, type, id });
|
|
189
|
+
}
|
|
190
|
+
const hops = (0, audit_1.parseBracketHops)(subject);
|
|
191
|
+
if (hops === null) {
|
|
192
|
+
if (BRACKETLESS_VERBS.includes(operation))
|
|
193
|
+
for (const id of ids)
|
|
194
|
+
facts.bracketless.push({ commit, position, type, id });
|
|
195
|
+
return facts;
|
|
196
|
+
}
|
|
197
|
+
const from = hops[0].from;
|
|
198
|
+
const to = hops[hops.length - 1].to;
|
|
199
|
+
for (const id of ids)
|
|
200
|
+
facts.transitions.push({ commit, position, type, id, to });
|
|
201
|
+
if ((operation === 'reject' || operation === 'park') && memoryYaml !== null && Object.prototype.hasOwnProperty.call(memoryYaml.types, type)) {
|
|
202
|
+
const sequence = (0, state_machine_1.resolveStateMachine)(memoryYaml, type).sequence;
|
|
203
|
+
const target = sequence.indexOf(to);
|
|
204
|
+
if (target !== -1 && target < sequence.indexOf(from)) {
|
|
205
|
+
for (const id of ids)
|
|
206
|
+
facts.reentries.push({ commit, position, verb: operation, type, id, from, to });
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return facts;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* The latest commit of the walk that changed the file at `path` — one `git log -1` bounded like the
|
|
213
|
+
* walk — or `null` when no commit of the walk did.
|
|
214
|
+
*/
|
|
215
|
+
function readLastChange(root, sha, bound, path, byCommit) {
|
|
216
|
+
const out = (0, storage_1.runGitRead)(root, ['log', '--no-show-signature', '--topo-order', '-1', '--format=%H', sha, ...bound, '--', `:(literal)${path}`]).stdout.trim();
|
|
217
|
+
if (out === '')
|
|
218
|
+
return null;
|
|
219
|
+
const entry = byCommit.get((0, storage_1.requireCommitName)(out, 'git log -1'));
|
|
220
|
+
return entry === undefined ? null : { commit: entry.commit, position: entry.position };
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Read the history every open instance's deduction needs (§4.8): one walk for the union of the instances'
|
|
224
|
+
* walks, each instance's records, linkages and re-entries cut from it, the transition commits naming a
|
|
225
|
+
* re-entered element (a bracketless `add` / `submit` through the status its file holds there, one batched
|
|
226
|
+
* read), the walk's parent links, and one lookup per re-entered element (its file's latest change in the
|
|
227
|
+
* walk). With no start, nothing is read.
|
|
228
|
+
*/
|
|
229
|
+
function readHistory(root, sha, starts, memoryYaml, documents) {
|
|
230
|
+
const read = { history: new Map(), transitions: [], lastChanges: new Map(), parents: new Map() };
|
|
231
|
+
if (starts.length === 0)
|
|
232
|
+
return read;
|
|
233
|
+
const bound = readWalkBound(root, starts);
|
|
234
|
+
const walk = readWalk(root, sha, bound);
|
|
235
|
+
const byCommit = new Map(walk.map((entry) => [entry.commit, entry]));
|
|
236
|
+
for (const entry of walk)
|
|
237
|
+
read.parents.set(entry.commit, entry.parents);
|
|
238
|
+
const facts = walk.map((entry) => readFacts(entry, memoryYaml));
|
|
239
|
+
const reentered = new Set();
|
|
240
|
+
for (const start of [...new Set(starts.map((entry) => entry.commit))].sort()) {
|
|
241
|
+
const members = instanceWalk(walk, byCommit, start);
|
|
242
|
+
const inWalk = facts.filter((_, index) => members.has(walk[index].commit));
|
|
243
|
+
const history = {
|
|
244
|
+
records: inWalk.flatMap((fact) => (fact.record === null ? [] : [fact.record])),
|
|
245
|
+
links: inWalk.flatMap((fact) => fact.links),
|
|
246
|
+
reentries: inWalk.flatMap((fact) => fact.reentries),
|
|
247
|
+
};
|
|
248
|
+
for (const reentry of history.reentries)
|
|
249
|
+
reentered.add(`${reentry.type}:${reentry.id}`);
|
|
250
|
+
read.history.set(start, history);
|
|
251
|
+
}
|
|
252
|
+
if (reentered.size === 0)
|
|
253
|
+
return read;
|
|
254
|
+
const pathOf = new Map();
|
|
255
|
+
for (const key of [...reentered].sort()) {
|
|
256
|
+
const document = documents.find(({ frontmatter }) => `${text(frontmatter['type'])}:${text(frontmatter['id'])}` === key);
|
|
257
|
+
if (document !== undefined)
|
|
258
|
+
pathOf.set(key, document.path);
|
|
259
|
+
}
|
|
260
|
+
const statuses = readBracketlessStatuses(root, facts.flatMap((fact) => fact.bracketless), pathOf);
|
|
261
|
+
// In walk order (newest first): a bracketed transition as its bracket says, a bracketless `add` / `submit`
|
|
262
|
+
// as the file it names holds at that commit (task-281, `bug-300`).
|
|
263
|
+
for (const fact of facts) {
|
|
264
|
+
read.transitions.push(...fact.transitions.filter((entry) => reentered.has(`${entry.type}:${entry.id}`)));
|
|
265
|
+
for (const entry of fact.bracketless) {
|
|
266
|
+
const to = statuses.get(`${entry.commit} ${entry.type}:${entry.id}`);
|
|
267
|
+
if (to !== undefined)
|
|
268
|
+
read.transitions.push({ commit: entry.commit, position: entry.position, type: entry.type, id: entry.id, to });
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
for (const key of [...reentered].sort()) {
|
|
272
|
+
const document = documents.find(({ frontmatter }) => `${text(frontmatter['type'])}:${text(frontmatter['id'])}` === key);
|
|
273
|
+
if (document === undefined)
|
|
274
|
+
continue;
|
|
275
|
+
const last = readLastChange(root, sha, bound, document.path, byCommit);
|
|
276
|
+
if (last !== null)
|
|
277
|
+
read.lastChanges.set(key, last);
|
|
278
|
+
}
|
|
279
|
+
return read;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* The `status` each bracketless `add` / `submit` of a re-entered element left in that element's file
|
|
283
|
+
* (§4.8, task-281, `bug-300`), by `<commit> <type>:<id>`: one `git cat-file --batch` for all of them, the
|
|
284
|
+
* file read at its path at `HEAD` (`pathOf`). A commit whose tree does not hold that path, or whose
|
|
285
|
+
* frontmatter does not parse or has no `status`, gives no entry — the subject is then not counted.
|
|
286
|
+
*/
|
|
287
|
+
function readBracketlessStatuses(root, entries, pathOf) {
|
|
288
|
+
const requests = entries.flatMap((entry) => {
|
|
289
|
+
const path = pathOf.get(`${entry.type}:${entry.id}`);
|
|
290
|
+
return path === undefined ? [] : [{ key: `${entry.commit} ${entry.type}:${entry.id}`, rev: entry.commit, path }];
|
|
291
|
+
});
|
|
292
|
+
const statuses = new Map();
|
|
293
|
+
if (requests.length === 0)
|
|
294
|
+
return statuses;
|
|
295
|
+
const contents = (0, storage_1.readRevisionPaths)(root, requests);
|
|
296
|
+
requests.forEach((request, index) => {
|
|
297
|
+
const status = frontmatterStatus(contents[index], `${request.rev}:${request.path}`);
|
|
298
|
+
if (status !== null)
|
|
299
|
+
statuses.set(request.key, status);
|
|
300
|
+
});
|
|
301
|
+
return statuses;
|
|
302
|
+
}
|
|
303
|
+
/** The frontmatter `status` of a document's bytes, or `null` (absent, no frontmatter, unparsable, no string status). */
|
|
304
|
+
function frontmatterStatus(raw, label) {
|
|
305
|
+
if (raw === null)
|
|
306
|
+
return null;
|
|
307
|
+
const { frontmatter } = (0, storage_1.splitFrontmatter)(raw);
|
|
308
|
+
if (frontmatter === null)
|
|
309
|
+
return null;
|
|
310
|
+
try {
|
|
311
|
+
const data = (0, validation_1.parseYaml)(frontmatter, label);
|
|
312
|
+
return text(data?.['status']);
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
return null;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
/** The static directory (or file) a `produces` pattern names before its first token, or `null` for the whole tree. */
|
|
319
|
+
function staticPrefix(pattern) {
|
|
320
|
+
const brace = pattern.indexOf('{');
|
|
321
|
+
if (brace === -1)
|
|
322
|
+
return pattern;
|
|
323
|
+
const slash = pattern.lastIndexOf('/', brace);
|
|
324
|
+
return slash <= 0 ? null : pattern.slice(0, slash + 1);
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* The working-tree paths among the deduction's inputs that differ from `HEAD` (§1.2): the Memory scan
|
|
328
|
+
* roots, the configuration files §1.1 reads at `HEAD` — `.wingfoil/workflows.yaml` and
|
|
329
|
+
* `.wingfoil/workflows/`, `memory.yaml`, `dna.yaml`, `roles.yaml` and `.wingfoil/directives/` (task-281,
|
|
330
|
+
* `bug-301`, approver ruling D2) — every `produces` pattern's static part and `paths.runs`; modified,
|
|
331
|
+
* staged, deleted or untracked, sorted.
|
|
332
|
+
*/
|
|
333
|
+
function readDirty(root, memoryYaml, dnaYaml, workflows) {
|
|
334
|
+
const specs = new Set(['.wingfoil/workflows.yaml', '.wingfoil/workflows/', loaders_1.MEMORY_YAML_PATH, loaders_1.DNA_YAML_PATH, loaders_1.ROLES_YAML_PATH, `${loaders_1.DIRECTIVES_DIR_PATH}/`]);
|
|
335
|
+
for (const dir of memoryYaml === null ? [] : (0, query_1.computeMemoryContentRoots)(memoryYaml))
|
|
336
|
+
specs.add(`${dir}/`);
|
|
337
|
+
for (const workflow of workflows) {
|
|
338
|
+
for (const phase of workflow.phases) {
|
|
339
|
+
for (const entry of phase.produces ?? []) {
|
|
340
|
+
const prefix = staticPrefix((0, schema_1.producesPath)(entry));
|
|
341
|
+
if (prefix !== null)
|
|
342
|
+
specs.add(prefix);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
const runLogs = (dnaYaml?.paths?.runs ?? []).flatMap((dir) => readDirtyRunLogs(root, dir));
|
|
347
|
+
return [...new Set([...readDirtyPaths(root, [...specs]), ...runLogs])].sort();
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* The run logs of the directory `dir` (`paths.runs`) that differ from `HEAD`: only the `.jsonl` files
|
|
351
|
+
* directly inside it, the files a run-log reader reads (`isRunLogPath`, `spec-016` §4.1). A dirty README
|
|
352
|
+
* there, or a nested file, is no deduction input and no `agent list` input, so it is not reported
|
|
353
|
+
* (task-240 review F5). Sorted.
|
|
354
|
+
*
|
|
355
|
+
* @throws `StorageError` when git cannot answer.
|
|
356
|
+
*/
|
|
357
|
+
function readDirtyRunLogs(root, dir) {
|
|
358
|
+
const prefix = (0, run_log_1.runLogDirPrefix)(root, dir);
|
|
359
|
+
return readDirtyPaths(root, [dir]).filter((path) => (0, run_log_1.isRunLogPath)(prefix, path));
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* The working-tree paths under `specs` (literal pathspecs: files or directories ending in `/`) that differ
|
|
363
|
+
* from `HEAD` — modified, staged, deleted or untracked — sorted, each once (`spec-017` §1.2). The deduction's
|
|
364
|
+
* input check, and `agent list --past`'s for the run log when no deduction runs (`spec-016` §5, task-240).
|
|
365
|
+
*
|
|
366
|
+
* @throws `StorageError` when git cannot answer.
|
|
367
|
+
*/
|
|
368
|
+
function readDirtyPaths(root, specs) {
|
|
369
|
+
const pathspecs = [...new Set(specs)].sort().map((spec) => `:(literal)${spec}`);
|
|
370
|
+
const status = (0, storage_1.runGitRead)(root, ['status', '--porcelain=v1', '-z', '--no-renames', '--untracked-files=all', '--', ...pathspecs]).stdout;
|
|
371
|
+
const dirty = status
|
|
372
|
+
.split('\0')
|
|
373
|
+
.filter((entry) => entry.length > 3)
|
|
374
|
+
.map((entry) => entry.slice(3));
|
|
375
|
+
return [...new Set(dirty)].sort();
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* The entries of every collection a loaded workflow iterates over (`spec-003` § "Collections", `dl-104`
|
|
379
|
+
* D2 (b)), by reference in byte order: `dna:<path>` from `dna.yaml` (the `spec-008` §9 path syntax),
|
|
380
|
+
* `bindings:<name>` from `workflows/bindings.yaml`'s `collections`, both at the snapshot's commit. A
|
|
381
|
+
* `dna:` reference with no `dna.yaml` is left out: it has no candidates.
|
|
382
|
+
*/
|
|
383
|
+
function readCollections(workflows, dnaYaml, bindings) {
|
|
384
|
+
const references = new Set();
|
|
385
|
+
for (const workflow of workflows) {
|
|
386
|
+
for (const phase of workflow.phases) {
|
|
387
|
+
if (phase.iterate_over !== undefined && /^(dna|bindings):/.test(phase.iterate_over))
|
|
388
|
+
references.add(phase.iterate_over);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
const collections = new Map();
|
|
392
|
+
for (const reference of [...references].sort()) {
|
|
393
|
+
// Every reference resolves to a list here: the registry refuses one that does not
|
|
394
|
+
// (`E_WORKFLOW_COLLECTION_UNRESOLVED`), except a `dna:` reference without `dna.yaml`, which is undecided
|
|
395
|
+
// there and has no candidates here.
|
|
396
|
+
if (reference.startsWith('bindings:')) {
|
|
397
|
+
collections.set(reference, bindings.collections[reference.slice('bindings:'.length)]);
|
|
398
|
+
}
|
|
399
|
+
else if (dnaYaml !== null) {
|
|
400
|
+
collections.set(reference, (0, path_2.resolveDnaPath)(dnaYaml, reference.slice('dna:'.length)).target.value);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
return collections;
|
|
404
|
+
}
|
|
405
|
+
/** `read`, called at most once: later calls answer the first call's value. */
|
|
406
|
+
function once(read) {
|
|
407
|
+
let done = false;
|
|
408
|
+
let value;
|
|
409
|
+
return () => {
|
|
410
|
+
if (!done) {
|
|
411
|
+
value = read();
|
|
412
|
+
done = true;
|
|
413
|
+
}
|
|
414
|
+
return value;
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
/** The snapshot of a repository with nothing committed: no instance can be open. */
|
|
418
|
+
function emptySnapshot() {
|
|
419
|
+
return {
|
|
420
|
+
commit: '',
|
|
421
|
+
workflows: [],
|
|
422
|
+
workflowFiles: [],
|
|
423
|
+
registryDiagnostics: [],
|
|
424
|
+
memoryYaml: null,
|
|
425
|
+
documents: [],
|
|
426
|
+
scanDiagnostics: [],
|
|
427
|
+
tree: [],
|
|
428
|
+
starts: new Map(),
|
|
429
|
+
history: new Map(),
|
|
430
|
+
transitions: [],
|
|
431
|
+
lastChanges: new Map(),
|
|
432
|
+
parents: new Map(),
|
|
433
|
+
dirty: [],
|
|
434
|
+
collections: new Map(),
|
|
435
|
+
bindings: null,
|
|
436
|
+
dnaYaml: null,
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
/** Whether a document's frontmatter is a plan of the instance kind (§3.1): type `plan`, `parent` empty. */
|
|
440
|
+
function isInstancePlan(frontmatter) {
|
|
441
|
+
return text(frontmatter['type']) === deduce_1.PLAN_TYPE && text(frontmatter['parent']) === null;
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* The ids of the instance plans among `documents` (§3.1: type `plan`, `parent` empty), in any status, in
|
|
445
|
+
* document order — what a `<ref>` may name besides a loaded workflow (§10, task-281, `bug-326`).
|
|
446
|
+
*/
|
|
447
|
+
function instancePlanIds(documents) {
|
|
448
|
+
return documents.flatMap(({ frontmatter }) => {
|
|
449
|
+
const id = text(frontmatter['id']);
|
|
450
|
+
return isInstancePlan(frontmatter) && id !== null ? [id] : [];
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Read everything workflow state deduction needs, as `HEAD` holds it (`spec-017` §1.1), plus the
|
|
455
|
+
* dirty input paths (§1.2). A repository with no commit gives an empty snapshot.
|
|
456
|
+
*
|
|
457
|
+
* @throws `DiagnosticsError` (`VALIDATION`, exit `1`) when the workflow registry has an error
|
|
458
|
+
* (`spec-017` §2); `StorageError` `E_GIT_READ_FAILED` when git cannot answer.
|
|
459
|
+
*/
|
|
460
|
+
function readDeductionSnapshotAtHead(root) {
|
|
461
|
+
const sha = (0, revision_1.atHeadOr)(root, () => (0, revision_1.resolveRevision)(root, 'HEAD'), null);
|
|
462
|
+
if (sha === null)
|
|
463
|
+
return emptySnapshot();
|
|
464
|
+
// `HEAD` is resolved once, above, and every pillar is read at that sha (task-283, `bug-309`): no loader
|
|
465
|
+
// resolves it again, and `memory.yaml` / `dna.yaml` are read and parsed once, for the registry's core
|
|
466
|
+
// checks and for the snapshot alike, in the order the registry reads them.
|
|
467
|
+
const memoryYamlOnce = once(() => (0, loaders_1.loadMemoryYamlAtCommit)(root, sha));
|
|
468
|
+
const dnaYamlOnce = once(() => (0, loaders_1.loadDnaYamlAtCommit)(root, sha));
|
|
469
|
+
const registry = (0, workflow_registry_1.loadWorkflowRegistryAtCommit)(root, sha, undefined, { memoryYaml: memoryYamlOnce, dnaYaml: dnaYamlOnce });
|
|
470
|
+
const memoryYaml = memoryYamlOnce();
|
|
471
|
+
const dnaYaml = dnaYamlOnce();
|
|
472
|
+
const scanDiagnostics = [];
|
|
473
|
+
// The whole scan keeps archived documents: an archived bound element abandons its instance (§4.11), and
|
|
474
|
+
// the deduction keeps them out of every selection and iteration itself.
|
|
475
|
+
const documents = memoryYaml === null ? [] : (0, query_1.loadMemoryDocumentsAtCommit)(root, sha, memoryYaml, { onDiagnostic: (diagnostic) => scanDiagnostics.push(diagnostic) });
|
|
476
|
+
// The plans that may be open instances (§3.2's status and `parent` rules; the workflow rule is the deduction's).
|
|
477
|
+
const candidates = documents
|
|
478
|
+
.filter(({ frontmatter }) => isInstancePlan(frontmatter) && deduce_1.OPEN_PLAN_STATUSES.includes(text(frontmatter['status']) ?? ''))
|
|
479
|
+
.map((document) => document.path);
|
|
480
|
+
const starts = readStarts(root, sha, candidates);
|
|
481
|
+
const { history, transitions, lastChanges, parents } = readHistory(root, sha, [...starts.values()], memoryYaml, documents);
|
|
482
|
+
return {
|
|
483
|
+
commit: sha,
|
|
484
|
+
workflows: registry.workflows,
|
|
485
|
+
workflowFiles: (registry.manifest?.include ?? []).map((file) => path_1.posix.normalize(`.wingfoil/${file}`)),
|
|
486
|
+
registryDiagnostics: registry.diagnostics,
|
|
487
|
+
memoryYaml,
|
|
488
|
+
documents,
|
|
489
|
+
scanDiagnostics,
|
|
490
|
+
tree: (0, revision_1.listPathsAtCommit)(root, sha, '').sort(),
|
|
491
|
+
starts,
|
|
492
|
+
history,
|
|
493
|
+
transitions,
|
|
494
|
+
lastChanges,
|
|
495
|
+
parents,
|
|
496
|
+
dirty: readDirty(root, memoryYaml, dnaYaml, registry.workflows),
|
|
497
|
+
collections: readCollections(registry.workflows, dnaYaml, registry.bindings),
|
|
498
|
+
bindings: registry.bindings,
|
|
499
|
+
dnaYaml,
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
/**
|
|
503
|
+
* Workflow state deduced at `HEAD` (`spec-017` §1–§4): {@link readDeductionSnapshotAtHead}, then the
|
|
504
|
+
* pure `deduceWorkflowState`. The one function `workflow next|status|list`, the MCP Resources and
|
|
505
|
+
* `agent execute --next` answer from.
|
|
506
|
+
*
|
|
507
|
+
* @throws as {@link readDeductionSnapshotAtHead}.
|
|
508
|
+
*/
|
|
509
|
+
function deduceWorkflowStateAtHead(root) {
|
|
510
|
+
return (0, deduce_1.deduceWorkflowState)(readDeductionSnapshotAtHead(root));
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* The instance `ref` selects (`spec-017` §3.3): a workflow name — its most recently started open
|
|
514
|
+
* instance — or an open instance id; without `ref`, the active instance (`null` when none is open).
|
|
515
|
+
* A `ref` that names no open instance is `NOT_FOUND` `workflow is not open: <ref>` (§10).
|
|
516
|
+
*/
|
|
517
|
+
function selectWorkflowInstance(deduction, ref) {
|
|
518
|
+
const found = (0, deduce_1.resolveInstanceRef)(deduction, ref);
|
|
519
|
+
if (ref !== undefined && found === null)
|
|
520
|
+
return (0, types_1.coreErr)({ code: 'NOT_FOUND', message: `workflow is not open: ${ref}`, details: { ref } });
|
|
521
|
+
return (0, types_1.coreOk)(found);
|
|
522
|
+
}
|
|
523
|
+
//# sourceMappingURL=workflow-deduction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-deduction.js","sourceRoot":"","sources":["../../src/core/workflow-deduction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Workflow pillar's **loader** checks (spec-003-workflows-yaml-schema § "Diagnostics", rows whose
|
|
3
|
+
* "Runs in" is `loader`; task-136): the checks that need the loaded workflow files and nothing from
|
|
4
|
+
* another pillar, run by `loadWorkflowsYaml` (`./loaders.ts`) as caller-supplied semantic checks
|
|
5
|
+
* (spec-009-validation-strategy §1). Every check here reads only the files `workflows.yaml` lists, so
|
|
6
|
+
* the loader keeps its pillar isolation (REQ-SYS-02).
|
|
7
|
+
*
|
|
8
|
+
* The output is one ordered array (REQ-SYS-07): within a file, workflow-level before phase-level,
|
|
9
|
+
* phases in declared order, and per phase the table's rows in table order. The manifest's own
|
|
10
|
+
* diagnostics and the order of files are the loader's ({@link workflowFileDiagnostics} is called once
|
|
11
|
+
* per file, in `include` order).
|
|
12
|
+
*/
|
|
13
|
+
import type { Diagnostic } from '../validation';
|
|
14
|
+
import { BindingsYaml } from '../workflow/bindings';
|
|
15
|
+
import { Workflow } from '../workflow/schema';
|
|
16
|
+
/** One included file as the loader saw it, in manifest `include` order. */
|
|
17
|
+
export interface LoadedWorkflowFile {
|
|
18
|
+
/** The manifest `include` entry, relative to `.wingfoil/` — the diagnostics' `file`. */
|
|
19
|
+
readonly file: string;
|
|
20
|
+
/** The validated workflow, or `null` when the file failed its structural pass. */
|
|
21
|
+
readonly workflow: Workflow | null;
|
|
22
|
+
/** The raw `name`, when it is a string — kept for a structurally invalid file too. */
|
|
23
|
+
readonly rawName: string | null;
|
|
24
|
+
}
|
|
25
|
+
/** The registry the cross-file checks resolve names against, built once from every loaded file. */
|
|
26
|
+
export interface WorkflowRegistryIndex {
|
|
27
|
+
/** Name → index (into the loaded files) of the **first** file declaring it. */
|
|
28
|
+
readonly byName: ReadonlyMap<string, number>;
|
|
29
|
+
/**
|
|
30
|
+
* `false` when some included file is missing or carries no readable `name`: a phase `include` may
|
|
31
|
+
* then name a workflow the loader could not see, so neither `E_WORKFLOW_INCLUDE_UNRESOLVED` nor
|
|
32
|
+
* `E_NO_MAIN_WORKFLOW` is decidable and neither is reported (the root error is).
|
|
33
|
+
*/
|
|
34
|
+
readonly namesComplete: boolean;
|
|
35
|
+
}
|
|
36
|
+
/** Index the loaded files by name; `missing` counts manifest entries whose file does not exist. */
|
|
37
|
+
export declare function indexWorkflowFiles(files: readonly LoadedWorkflowFile[], missing: number): WorkflowRegistryIndex;
|
|
38
|
+
/**
|
|
39
|
+
* Every loader diagnostic of file `i` (spec-003 § "Diagnostics"), in spec-003's order. A file that
|
|
40
|
+
* failed its structural pass contributes nothing here — its structural diagnostics are the loader's.
|
|
41
|
+
*/
|
|
42
|
+
export declare function workflowFileDiagnostics(files: readonly LoadedWorkflowFile[], index: WorkflowRegistryIndex, i: number, bindings?: BindingsContext): Diagnostic[];
|
|
43
|
+
/**
|
|
44
|
+
* `E_NO_MAIN_WORKFLOW` (spec-003 Layer 1; `dl-109` Action 1): a present manifest whose loaded files
|
|
45
|
+
* hold no startable workflow. Not decided while some file is missing or unreadable (see
|
|
46
|
+
* {@link WorkflowRegistryIndex.namesComplete}) or failed its structural pass.
|
|
47
|
+
*/
|
|
48
|
+
export declare function noStartableDiagnostic(files: readonly LoadedWorkflowFile[], index: WorkflowRegistryIndex): Diagnostic | null;
|
|
49
|
+
/** What the loader knows about `workflows/bindings.yaml` when it checks the workflow files' tokens. */
|
|
50
|
+
export interface BindingsContext {
|
|
51
|
+
/** The validated file, or `null` when there is none (or it failed its own checks). */
|
|
52
|
+
readonly bindings: BindingsYaml | null;
|
|
53
|
+
/**
|
|
54
|
+
* `false` when the file exists but failed its YAML or structural pass: a token may be bound by the
|
|
55
|
+
* part the loader could not read, so `W_WORKFLOW_UNBOUND_TOKEN` is not decided (spec-003: a loader
|
|
56
|
+
* diagnostic is not decided when its inputs are missing).
|
|
57
|
+
*/
|
|
58
|
+
readonly decided: boolean;
|
|
59
|
+
}
|
|
60
|
+
/** An absent `bindings.yaml`: no bindings, and that is known (spec-003 Layer 3: "Optional"). */
|
|
61
|
+
export declare const NO_BINDINGS_FILE: BindingsContext;
|
|
62
|
+
/**
|
|
63
|
+
* The index of a **self-creating** workflow's creating phase (spec-003 Layer 2 `element`): a
|
|
64
|
+
* startable workflow with no `element` whose phases `memory.add` — the phase holding the first such
|
|
65
|
+
* action. `-1` for every other workflow.
|
|
66
|
+
*/
|
|
67
|
+
export declare function creatingPhaseIndex(workflow: Workflow): number;
|
|
68
|
+
/**
|
|
69
|
+
* Whether the string `produces` entry `entry` of phase `p` has an **implicit owner** (`dl-104` D3,
|
|
70
|
+
* `W_PHASE_PRODUCES_OWNER_IMPLICIT`): a bare `{<field>}` token in a phase that also `memory.add`s,
|
|
71
|
+
* other than a self-creating workflow's creating phase. The loader warns on it; state deduction
|
|
72
|
+
* (task-198, `spec-017` §4.3) shows it and does not count it as evidence — one rule for both.
|
|
73
|
+
*/
|
|
74
|
+
export declare function isImplicitOwnerProduces(workflow: Workflow, p: number, entry: string): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* The loader rows of `workflows/bindings.yaml` (spec-003 Layer 3), on a structurally valid file:
|
|
77
|
+
* sections in a fixed order (`checks`, then `actions`, then `collections`), entries in declared order,
|
|
78
|
+
* and per entry the table's rows in table order — `E_BINDING_PARTIAL_INTERPOLATION` (per `run`
|
|
79
|
+
* element), `E_BINDING_BUILTIN_TOKEN`, `E_BINDING_AGENT_CHECK`; then `E_BINDING_COLLECTION_KEY` per
|
|
80
|
+
* collection entry (approver ruling D1 (a)).
|
|
81
|
+
*/
|
|
82
|
+
export declare function bindingsFileDiagnostics(bindings: BindingsYaml): Diagnostic[];
|
|
83
|
+
//# sourceMappingURL=workflow-diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-diagnostics.d.ts","sourceRoot":"","sources":["../../src/core/workflow-diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAEL,YAAY,EAQb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAKL,QAAQ,EAGT,MAAM,oBAAoB,CAAC;AAE5B,2EAA2E;AAC3E,MAAM,WAAW,kBAAkB;IACjC,wFAAwF;IACxF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACnC,sFAAsF;IACtF,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,mGAAmG;AACnG,MAAM,WAAW,qBAAqB;IACpC,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C;;;;OAIG;IACH,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC;AAwBD,mGAAmG;AACnG,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,kBAAkB,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,qBAAqB,CAW/G;AA2ID;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,kBAAkB,EAAE,EACpC,KAAK,EAAE,qBAAqB,EAC5B,CAAC,EAAE,MAAM,EACT,QAAQ,GAAE,eAAkC,GAC3C,UAAU,EAAE,CAsFd;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,kBAAkB,EAAE,EAAE,KAAK,EAAE,qBAAqB,GAAG,UAAU,GAAG,IAAI,CAS3H;AAID,uGAAuG;AACvG,MAAM,WAAW,eAAe;IAC9B,sFAAsF;IACtF,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IACvC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,gGAAgG;AAChG,eAAO,MAAM,gBAAgB,EAAE,eAAmD,CAAC;AAQnF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAG7D;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAG7F;AA+ED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,UAAU,EAAE,CA6B5E"}
|