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,612 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RUN_TOKEN_KEYS = exports.RUN_RECORD_KEYS = exports.ADHOC_PHASE = exports.NO_WORKFLOW = exports.NOT_REPORTED = void 0;
|
|
4
|
+
exports.isRunId = isRunId;
|
|
5
|
+
exports.runIdElementId = runIdElementId;
|
|
6
|
+
exports.formatRunId = formatRunId;
|
|
7
|
+
exports.serializeRunRecord = serializeRunRecord;
|
|
8
|
+
exports.parseRunLog = parseRunLog;
|
|
9
|
+
exports.readRunLogAt = readRunLogAt;
|
|
10
|
+
exports.runLogDirPrefix = runLogDirPrefix;
|
|
11
|
+
exports.isRunLogPath = isRunLogPath;
|
|
12
|
+
exports.readRunLogsAt = readRunLogsAt;
|
|
13
|
+
exports.resolveRunLogPath = resolveRunLogPath;
|
|
14
|
+
exports.requireWritableRunLog = requireWritableRunLog;
|
|
15
|
+
exports.runLogPreflight = runLogPreflight;
|
|
16
|
+
exports.nextRunId = nextRunId;
|
|
17
|
+
exports.executionNotesSection = executionNotesSection;
|
|
18
|
+
exports.notesField = notesField;
|
|
19
|
+
exports.deriveNotesField = deriveNotesField;
|
|
20
|
+
exports.recordSubject = recordSubject;
|
|
21
|
+
exports.recordRun = recordRun;
|
|
22
|
+
/**
|
|
23
|
+
* The run log (task-206, `spec-016` §4): one JSON Lines record per agent run, in one file per element
|
|
24
|
+
* under `dna.yaml` `paths.runs`, committed on its own as `agent: record <run-id>`.
|
|
25
|
+
*
|
|
26
|
+
* This is the library `agent execute` (task-228), `agent list` (task-240) and `agent show` (task-220)
|
|
27
|
+
* build on. It owns:
|
|
28
|
+
* - the 18-key record of §4.2, written in a fixed key order with no insignificant whitespace, where an
|
|
29
|
+
* unreported value is the literal {@link NOT_REPORTED}, never `0` or `null` (`dl-114` Q2 (b), Q3 (i));
|
|
30
|
+
* - the run id `<element-id>/<phase>/<n>` of §4.3, `n` counted at `state_ref` (`dl-135` Q3 (a)), so
|
|
31
|
+
* every clone derives the same id from the same history (`REQ-SYS-07`);
|
|
32
|
+
* - the strict reader of §4.5, which every reader goes through;
|
|
33
|
+
* - the §4.4 commit, which contains only the element's run-log file (`commitPaths --only`), and the
|
|
34
|
+
* §4.3 collision rule, checked against the then-current `HEAD`;
|
|
35
|
+
* - the `notes` field (`dl-135` Q2 (c)).
|
|
36
|
+
*
|
|
37
|
+
* **Baseline.** The id is counted at `state_ref`, the collision is checked at `HEAD`, and `notes`
|
|
38
|
+
* compares the element at `state_ref` with the element at `HEAD`: all committed states, never the
|
|
39
|
+
* working tree, so notes an agent wrote but did not commit yield `none` (§4.2 key 18).
|
|
40
|
+
*/
|
|
41
|
+
const node_fs_1 = require("node:fs");
|
|
42
|
+
const node_path_1 = require("node:path");
|
|
43
|
+
const storage_1 = require("../storage");
|
|
44
|
+
const id_1 = require("../validation/id");
|
|
45
|
+
const confinement_1 = require("../core/confinement");
|
|
46
|
+
const revision_1 = require("../core/revision");
|
|
47
|
+
const types_1 = require("../core/types");
|
|
48
|
+
const write_guard_1 = require("../core/write-guard");
|
|
49
|
+
/** The literal of a value the agent did not report (§2.6): never `0`, `null` or an absent key. */
|
|
50
|
+
exports.NOT_REPORTED = 'not-reported';
|
|
51
|
+
/** `workflow` of a run with no step (§4.2 key 3). */
|
|
52
|
+
exports.NO_WORKFLOW = 'n/a';
|
|
53
|
+
/** `phase`, and the id's phase segment, of a run with no step (§4.3; reserved by `spec-003`). */
|
|
54
|
+
exports.ADHOC_PHASE = 'adhoc';
|
|
55
|
+
/** The record's keys, in the order §4.2 fixes and every line carries. */
|
|
56
|
+
exports.RUN_RECORD_KEYS = [
|
|
57
|
+
'id',
|
|
58
|
+
'element',
|
|
59
|
+
'workflow',
|
|
60
|
+
'phase',
|
|
61
|
+
'role',
|
|
62
|
+
'mode',
|
|
63
|
+
'agent',
|
|
64
|
+
'adapter',
|
|
65
|
+
'agent_version',
|
|
66
|
+
'model',
|
|
67
|
+
'session',
|
|
68
|
+
'tokens',
|
|
69
|
+
'wingfoil',
|
|
70
|
+
'state_ref',
|
|
71
|
+
'duration_ms',
|
|
72
|
+
'exit_status',
|
|
73
|
+
'result',
|
|
74
|
+
'notes',
|
|
75
|
+
];
|
|
76
|
+
/** The keys of the record's `tokens` object, in order (§4.2 key 12). */
|
|
77
|
+
exports.RUN_TOKEN_KEYS = ['input', 'output', 'cache_read', 'cache_write'];
|
|
78
|
+
/** A phase segment: `spec-003`'s phase-name class. */
|
|
79
|
+
const PHASE_SOURCE = '[a-z][a-z0-9-]*';
|
|
80
|
+
/** `n`: decimal, no padding, from 1. */
|
|
81
|
+
const COUNT_SOURCE = '[1-9][0-9]*';
|
|
82
|
+
const SIGNAL_RE = /^signal:[A-Z][A-Z0-9]*$/;
|
|
83
|
+
/** The largest process exit code (§4.2 key 16, bug-288). */
|
|
84
|
+
const MAX_EXIT_CODE = 255;
|
|
85
|
+
/** `element`'s `<type>:<id>` shape (`spec-008` §7): two non-empty parts. */
|
|
86
|
+
const ELEMENT_REF_RE = /^[^:\s]+:[^:\s]+$/;
|
|
87
|
+
/** The element id `<type>:<id>`'s id: everything after the first `:`. */
|
|
88
|
+
const elementIdOf = (element) => element.slice(element.indexOf(':') + 1);
|
|
89
|
+
const escapeRegExp = (text) => text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
90
|
+
/**
|
|
91
|
+
* Whether `id` is a run id of the element `elementId` (§4.3): the element id, a `/`, a phase segment
|
|
92
|
+
* in `spec-003`'s phase-name class (a lowercase letter, then lowercase letters, digits and `-`), a
|
|
93
|
+
* `/`, and a decimal count from 1 with no padding; `elementId` itself in `spec-009`'s ID class.
|
|
94
|
+
*/
|
|
95
|
+
function isRunId(id, elementId) {
|
|
96
|
+
if (!(0, id_1.isIdPiece)(elementId))
|
|
97
|
+
return false;
|
|
98
|
+
return new RegExp(`^${escapeRegExp(elementId)}/${PHASE_SOURCE}/${COUNT_SOURCE}$`).test(id);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* The element id of the run id `value` (§4.3), or `null` when `value` is not a run id of any element
|
|
102
|
+
* — the parse a caller that only has the id needs (`agent show <run-id>`, task-220). An element id is
|
|
103
|
+
* in `spec-009`'s ID class, which holds no `/`, so a run id has exactly three `/`-separated segments
|
|
104
|
+
* and the first one is the element's.
|
|
105
|
+
*/
|
|
106
|
+
function runIdElementId(value) {
|
|
107
|
+
const segments = value.split('/');
|
|
108
|
+
if (segments.length !== 3)
|
|
109
|
+
return null;
|
|
110
|
+
const elementId = segments[0];
|
|
111
|
+
return isRunId(value, elementId) ? elementId : null;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* The run id `<element-id>/<phase>/<n>` (§4.3).
|
|
115
|
+
*
|
|
116
|
+
* @throws Error when the result would not be a run id ({@link isRunId}): a caller passing a malformed
|
|
117
|
+
* element id, phase or count has a defect, not a refusal to report.
|
|
118
|
+
*/
|
|
119
|
+
function formatRunId(elementId, phase, n) {
|
|
120
|
+
const id = `${elementId}/${phase}/${n}`;
|
|
121
|
+
if (!Number.isSafeInteger(n) || !isRunId(id, elementId))
|
|
122
|
+
throw new Error(`not a run id: '${id}'`);
|
|
123
|
+
return id;
|
|
124
|
+
}
|
|
125
|
+
const isNonNegativeInteger = (value) => typeof value === 'number' && Number.isSafeInteger(value) && value >= 0;
|
|
126
|
+
/** Plain object, not an array and not `null`. */
|
|
127
|
+
const isPlainObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
128
|
+
/**
|
|
129
|
+
* The first difference between the keys `actual` has, in order, and `expected`: a missing, an
|
|
130
|
+
* unexpected or an out-of-order key, named with `prefix` (`tokens.` inside the token object).
|
|
131
|
+
*/
|
|
132
|
+
function keyOrderDefect(actual, expected, prefix = '') {
|
|
133
|
+
for (let i = 0; i < Math.max(actual.length, expected.length); i += 1) {
|
|
134
|
+
const [have, want] = [actual[i], expected[i]];
|
|
135
|
+
if (have === want)
|
|
136
|
+
continue;
|
|
137
|
+
if (have === undefined || (want !== undefined && !actual.includes(want)))
|
|
138
|
+
return `missing key '${prefix}${want}'`;
|
|
139
|
+
if (want === undefined || !expected.includes(have))
|
|
140
|
+
return `unexpected key '${prefix}${have}'`;
|
|
141
|
+
return `key '${prefix}${have}' out of order: expected '${prefix}${want}' at position ${i + 1}`;
|
|
142
|
+
}
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
/** The defect of one field's value, or `null` (§4.2 types). The token object's key order is checked here too. */
|
|
146
|
+
function fieldDefect(key, value, ordered) {
|
|
147
|
+
switch (key) {
|
|
148
|
+
case 'tokens': {
|
|
149
|
+
if (!isPlainObject(value))
|
|
150
|
+
return "'tokens' must be an object";
|
|
151
|
+
const keys = Object.keys(value);
|
|
152
|
+
const order = ordered
|
|
153
|
+
? keyOrderDefect(keys, exports.RUN_TOKEN_KEYS, 'tokens.')
|
|
154
|
+
: keyOrderDefect([...keys].sort(), [...exports.RUN_TOKEN_KEYS].sort(), 'tokens.');
|
|
155
|
+
if (order !== null)
|
|
156
|
+
return order;
|
|
157
|
+
for (const token of exports.RUN_TOKEN_KEYS) {
|
|
158
|
+
const count = value[token];
|
|
159
|
+
if (count !== exports.NOT_REPORTED && !isNonNegativeInteger(count)) {
|
|
160
|
+
return `'tokens.${token}' must be a non-negative integer or "${exports.NOT_REPORTED}"`;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
case 'duration_ms':
|
|
166
|
+
return isNonNegativeInteger(value) ? null : "'duration_ms' must be a non-negative integer";
|
|
167
|
+
case 'exit_status':
|
|
168
|
+
// A process exit code is 0–255 (bug-288): a negative or larger integer is no exit code a spawn yields.
|
|
169
|
+
return (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0 && value <= MAX_EXIT_CODE) ||
|
|
170
|
+
(typeof value === 'string' && SIGNAL_RE.test(value))
|
|
171
|
+
? null
|
|
172
|
+
: `'exit_status' must be an integer from 0 to ${MAX_EXIT_CODE} or "signal:<NAME>"`;
|
|
173
|
+
default:
|
|
174
|
+
return typeof value === 'string' ? null : `'${key}' must be a string`;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* The first defect of `value` as a run record, or `null`. Its id must be the one its own `element` and
|
|
179
|
+
* `phase` produce.
|
|
180
|
+
*
|
|
181
|
+
* @param fileElementId - The log file's basename, which the id's element segment must equal (§4.5);
|
|
182
|
+
* `null` for a record not read from a file.
|
|
183
|
+
* @param ordered - `true` for a line read back (§4.5: keys in the declared order); `false` for an
|
|
184
|
+
* object a caller built, whose key order the writer fixes itself.
|
|
185
|
+
*/
|
|
186
|
+
function recordDefect(value, fileElementId, ordered) {
|
|
187
|
+
if (!isPlainObject(value))
|
|
188
|
+
return 'not a JSON object';
|
|
189
|
+
const keys = Object.keys(value);
|
|
190
|
+
const order = ordered
|
|
191
|
+
? keyOrderDefect(keys, exports.RUN_RECORD_KEYS)
|
|
192
|
+
: keyOrderDefect([...keys].sort(), [...exports.RUN_RECORD_KEYS].sort());
|
|
193
|
+
if (order !== null)
|
|
194
|
+
return order;
|
|
195
|
+
for (const key of exports.RUN_RECORD_KEYS) {
|
|
196
|
+
const defect = fieldDefect(key, value[key], ordered);
|
|
197
|
+
if (defect !== null)
|
|
198
|
+
return defect;
|
|
199
|
+
}
|
|
200
|
+
const [id, element, phase] = [value.id, value.element, value.phase];
|
|
201
|
+
if (!ELEMENT_REF_RE.test(element))
|
|
202
|
+
return "'element' must be <type>:<id>";
|
|
203
|
+
if (fileElementId !== null && !isRunId(id, fileElementId)) {
|
|
204
|
+
return `'id' '${id}' is not a run id of element '${fileElementId}' (the file's basename)`;
|
|
205
|
+
}
|
|
206
|
+
// The id must be the one this record's own element and phase produce (task-206 review F6): an id
|
|
207
|
+
// that disagrees is counted under another (element, phase) and wedges every later run of its own.
|
|
208
|
+
if (!isRunId(id, elementIdOf(element)) || !id.startsWith(`${elementIdOf(element)}/${phase}/`)) {
|
|
209
|
+
return `'id' '${id}' does not match element '${element}' and phase '${phase}'`;
|
|
210
|
+
}
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
/** `record` as an object whose keys, and whose token keys, are in §4.2 order. */
|
|
214
|
+
function ordered(record) {
|
|
215
|
+
const out = {};
|
|
216
|
+
for (const key of exports.RUN_RECORD_KEYS) {
|
|
217
|
+
out[key] = key === 'tokens' ? Object.fromEntries(exports.RUN_TOKEN_KEYS.map((token) => [token, record.tokens[token]])) : record[key];
|
|
218
|
+
}
|
|
219
|
+
return out;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* The record as its log line (§4.2): one JSON object, keys in {@link RUN_RECORD_KEYS} order whatever
|
|
223
|
+
* order `record` was built in, no insignificant whitespace, `\n`-terminated.
|
|
224
|
+
*
|
|
225
|
+
* The record is validated first, with the reader's rules except key order, so the writer can never
|
|
226
|
+
* produce a line the reader refuses: an absent key, a `null`, a fractional count is refused rather than
|
|
227
|
+
* written.
|
|
228
|
+
*
|
|
229
|
+
* @throws Error `run record is not valid: <detail>` — a caller defect.
|
|
230
|
+
*/
|
|
231
|
+
function serializeRunRecord(record) {
|
|
232
|
+
const defect = recordDefect(record, null, false);
|
|
233
|
+
if (defect !== null)
|
|
234
|
+
throw new Error(`run record is not valid: ${defect}`);
|
|
235
|
+
return `${JSON.stringify(ordered(record))}\n`;
|
|
236
|
+
}
|
|
237
|
+
/** `run log <path>: line <k> is not a valid run record: <detail>` (§4.5). */
|
|
238
|
+
const invalidLine = (path, k, detail) => (0, types_1.coreErr)({ code: 'VALIDATION', message: `run log ${path}: line ${k} is not a valid run record: ${detail}` });
|
|
239
|
+
/**
|
|
240
|
+
* Read a run log strictly (§4.5): every line JSON, exactly the §4.2 keys in order with valid types, an
|
|
241
|
+
* `id` whose element segment is the file's basename (`<runs>/<element-id>.jsonl`), no id twice, and each
|
|
242
|
+
* line byte for byte the writer's serialization of its record — no CR, no whitespace outside a string
|
|
243
|
+
* (bug-288).
|
|
244
|
+
* The last line must be `\n`-terminated, since an append to an unterminated line would corrupt both.
|
|
245
|
+
*
|
|
246
|
+
* @param text - The file's content.
|
|
247
|
+
* @param path - Root-relative path of the file; its basename without `.jsonl` is the element id, and it
|
|
248
|
+
* is named in every refusal.
|
|
249
|
+
* @returns The records in line order, or `VALIDATION` with the §4.5 message for the first violation.
|
|
250
|
+
*/
|
|
251
|
+
function parseRunLog(text, path) {
|
|
252
|
+
const elementId = (0, node_path_1.basename)(path, '.jsonl');
|
|
253
|
+
const lines = text.split('\n');
|
|
254
|
+
const terminated = lines[lines.length - 1] === '';
|
|
255
|
+
if (terminated)
|
|
256
|
+
lines.pop();
|
|
257
|
+
const records = [];
|
|
258
|
+
const seen = new Set();
|
|
259
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
260
|
+
if (i === lines.length - 1 && !terminated)
|
|
261
|
+
return invalidLine(path, i + 1, 'not terminated by a newline');
|
|
262
|
+
let value;
|
|
263
|
+
try {
|
|
264
|
+
value = JSON.parse(lines[i]);
|
|
265
|
+
}
|
|
266
|
+
catch {
|
|
267
|
+
return invalidLine(path, i + 1, 'not JSON');
|
|
268
|
+
}
|
|
269
|
+
const defect = recordDefect(value, elementId, true);
|
|
270
|
+
if (defect !== null)
|
|
271
|
+
return invalidLine(path, i + 1, defect);
|
|
272
|
+
const record = value;
|
|
273
|
+
// The line must be exactly what the writer produces for the record it parses to (§4.2, bug-288):
|
|
274
|
+
// no CR before the newline, no whitespace outside a string. Key order is checked above, with its own
|
|
275
|
+
// message, so the comparison can only fail on those.
|
|
276
|
+
if (`${lines[i]}\n` !== serializeRunRecord(record)) {
|
|
277
|
+
return invalidLine(path, i + 1, 'not in the serialized form of spec-016 §4.2 (a CR, whitespace outside a string, or another spelling of a value)');
|
|
278
|
+
}
|
|
279
|
+
if (seen.has(record.id))
|
|
280
|
+
return (0, types_1.coreErr)({ code: 'VALIDATION', message: `run log ${path}: run id ${record.id} recorded twice` });
|
|
281
|
+
seen.add(record.id);
|
|
282
|
+
records.push(record);
|
|
283
|
+
}
|
|
284
|
+
return (0, types_1.coreOk)(records);
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* The run log `path` as commit `rev` holds it, read strictly ({@link parseRunLog}); a log the commit
|
|
288
|
+
* does not hold is no records.
|
|
289
|
+
*
|
|
290
|
+
* @returns `VALIDATION`/`NOT_FOUND` from a `rev` that is malformed or names no commit.
|
|
291
|
+
*/
|
|
292
|
+
function readRunLogAt(root, rev, path) {
|
|
293
|
+
let sha;
|
|
294
|
+
try {
|
|
295
|
+
sha = (0, revision_1.resolveRevision)(root, rev);
|
|
296
|
+
}
|
|
297
|
+
catch (error) {
|
|
298
|
+
if (error instanceof revision_1.RevisionError)
|
|
299
|
+
return (0, types_1.coreErr)(error.toCoreError());
|
|
300
|
+
throw error;
|
|
301
|
+
}
|
|
302
|
+
const text = (0, storage_1.readPathAtRev)(root, sha, path);
|
|
303
|
+
return text === null ? (0, types_1.coreOk)([]) : parseRunLog(text, path);
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* The run-log directory `dir` (`dna.yaml` `paths.runs`' one entry) as a root-relative POSIX path, joined
|
|
307
|
+
* as {@link resolveRunLogPath} joins it (a trailing slash, `./` or a doubled `/` changes nothing): `''` for
|
|
308
|
+
* the root itself.
|
|
309
|
+
*/
|
|
310
|
+
function runLogDirPrefix(root, dir) {
|
|
311
|
+
return (0, node_path_1.relative)((0, node_path_1.resolve)(root), (0, node_path_1.resolve)(root, dir.split(node_path_1.sep).join('/'))).split(node_path_1.sep).join('/');
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Whether the root-relative `path` is a run log of the directory `prefix` ({@link runLogDirPrefix}): a
|
|
315
|
+
* `.jsonl` file directly inside it (§4.1, `<runs>/<element-id>.jsonl`). Anything else there — a README, a
|
|
316
|
+
* file in a subdirectory — is not a run log: no reader reads it, and nothing reports it (task-240 review F5).
|
|
317
|
+
*/
|
|
318
|
+
function isRunLogPath(prefix, path) {
|
|
319
|
+
return path.endsWith('.jsonl') && node_path_1.posix.dirname(path) === (prefix === '' ? '.' : prefix);
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Every run log commit `sha` holds in the run-log directory `dir` (§4.1, §4.5): each `<element-id>.jsonl`
|
|
323
|
+
* directly inside it ({@link isRunLogPath}), ordered by element id in byte order — the basename without
|
|
324
|
+
* `.jsonl`, never the whole path, under which `minor-v0.3.1.jsonl` would sort before `minor-v0.3.jsonl`
|
|
325
|
+
* (task-240 review F1) — each read strictly ({@link parseRunLog}), its records in line order. The reader
|
|
326
|
+
* `agent list` lists past runs from (task-240, `spec-016` §5).
|
|
327
|
+
*
|
|
328
|
+
* `dir` is confined to the project root first (`REQ-SEC-06`), unless it is the root itself, the boundary.
|
|
329
|
+
*
|
|
330
|
+
* @param dir - `dna.yaml` `paths.runs`' one directory, non-blank.
|
|
331
|
+
* @returns The records, or the first §4.5 violation (`VALIDATION`), or a confinement refusal.
|
|
332
|
+
* @throws `StorageError` when git cannot list the commit.
|
|
333
|
+
*/
|
|
334
|
+
function readRunLogsAt(root, sha, dir) {
|
|
335
|
+
const prefix = runLogDirPrefix(root, dir);
|
|
336
|
+
// The root itself (`./`) is the one directory the confinement check names as outside: it is the boundary.
|
|
337
|
+
if (prefix !== '') {
|
|
338
|
+
const confined = (0, confinement_1.requireConfinedTarget)(root, dir, 'read');
|
|
339
|
+
if (!confined.ok)
|
|
340
|
+
return confined;
|
|
341
|
+
}
|
|
342
|
+
const elementOf = (path) => (0, node_path_1.basename)(path, '.jsonl');
|
|
343
|
+
const paths = (0, revision_1.listPathsAtCommit)(root, sha, prefix)
|
|
344
|
+
.filter((path) => isRunLogPath(prefix, path))
|
|
345
|
+
.sort((a, b) => Number(elementOf(a) > elementOf(b)) - Number(elementOf(a) < elementOf(b)));
|
|
346
|
+
const records = [];
|
|
347
|
+
for (const path of paths) {
|
|
348
|
+
const parsed = parseRunLog((0, storage_1.readPathAtRev)(root, sha, path) ?? '', path);
|
|
349
|
+
if (!parsed.ok)
|
|
350
|
+
return parsed;
|
|
351
|
+
records.push(...parsed.value);
|
|
352
|
+
}
|
|
353
|
+
return (0, types_1.coreOk)(records);
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* The run-log file of `elementId` (§4.1): `<runs>/<element-id>.jsonl`, joined as a path (a trailing
|
|
357
|
+
* slash, `./` or a doubled `/` in `paths.runs` changes nothing) and confined to the project root
|
|
358
|
+
* (`REQ-SEC-06`): `paths.runs` accepts an absolute or a `../` value, so the file it names is checked
|
|
359
|
+
* where it is resolved.
|
|
360
|
+
*
|
|
361
|
+
* @param runs - `dna.yaml` `paths.runs` (one directory; absent when undeclared).
|
|
362
|
+
* @param action - The verb of the confinement refusal (`cannot <action> '<path>'`): `write` for the
|
|
363
|
+
* recorder, `read` for a reader that opens the working tree's file (`agent show`'s hint, task-220).
|
|
364
|
+
* @returns The root-relative POSIX path, or `VALIDATION`: `dna.yaml declares no run log (paths.runs)`
|
|
365
|
+
* (`NO_RUN_LOG`, §3.7) for an absent or blank value; a confinement refusal; an element id outside
|
|
366
|
+
* `spec-009`'s ID class.
|
|
367
|
+
*/
|
|
368
|
+
function resolveRunLogPath(root, runs, elementId, action = 'write') {
|
|
369
|
+
const dir = runs?.[0];
|
|
370
|
+
if (dir === undefined || dir.trim() === '') {
|
|
371
|
+
return (0, types_1.coreErr)({ code: 'VALIDATION', message: 'dna.yaml declares no run log (paths.runs)' });
|
|
372
|
+
}
|
|
373
|
+
if (!(0, id_1.isIdPiece)(elementId)) {
|
|
374
|
+
return (0, types_1.coreErr)({ code: 'VALIDATION', message: `not an element id: '${elementId}'` });
|
|
375
|
+
}
|
|
376
|
+
const joined = node_path_1.posix.join(dir.split(node_path_1.sep).join('/'), `${elementId}.jsonl`);
|
|
377
|
+
const relativePath = (0, node_path_1.relative)((0, node_path_1.resolve)(root), (0, node_path_1.resolve)(root, joined)).split(node_path_1.sep).join('/');
|
|
378
|
+
// The run log is not Memory: the neutral confinement refusal, not REQ-SEC-06's Memory-entry text
|
|
379
|
+
// (task-206 review, decision 6). A textual escape and a symlinked ancestor leaving the root both fail.
|
|
380
|
+
// Confinement is checked on the configured spelling (`/etc/<id>.jsonl`), so a refusal names the
|
|
381
|
+
// target `paths.runs` gives rather than its `../` climb from the root (bug-288).
|
|
382
|
+
const confined = (0, confinement_1.requireConfinedTarget)(root, joined, action);
|
|
383
|
+
if (!confined.ok)
|
|
384
|
+
return confined;
|
|
385
|
+
return (0, types_1.coreOk)(relativePath);
|
|
386
|
+
}
|
|
387
|
+
/** How the write guards name the run log and its commit (`requireInspectableTarget`). */
|
|
388
|
+
const RUN_LOG_CONTRACT = {
|
|
389
|
+
noun: 'run log',
|
|
390
|
+
owner: 'run record',
|
|
391
|
+
records: 'An `agent: record` commit records one run and nothing else',
|
|
392
|
+
};
|
|
393
|
+
/**
|
|
394
|
+
* Whether the run log `logPath` may be appended to and committed now: confined to the project root
|
|
395
|
+
* with no symlinked leaf (`requireConfinedWriteTarget`), inspectable by git — no directory on the way
|
|
396
|
+
* to it is a symbolic link, which would make an empty `git status` mean nothing
|
|
397
|
+
* (`requireInspectableTarget`, task-131) — and unmodified against `HEAD` in the index and the working
|
|
398
|
+
* tree, an untracked file included (`CONFLICT` `run log <path> has uncommitted changes`, §3.7).
|
|
399
|
+
* {@link recordRun} asks it again at step 17.
|
|
400
|
+
*/
|
|
401
|
+
function requireWritableRunLog(root, logPath) {
|
|
402
|
+
const confined = (0, confinement_1.requireConfinedWriteTarget)(root, logPath, 'write');
|
|
403
|
+
if (!confined.ok)
|
|
404
|
+
return confined;
|
|
405
|
+
const inspectable = (0, write_guard_1.requireInspectableTarget)(root, logPath, RUN_LOG_CONTRACT);
|
|
406
|
+
if (!inspectable.ok)
|
|
407
|
+
return inspectable;
|
|
408
|
+
if ((0, storage_1.pathPorcelainStatus)(root, logPath) !== '') {
|
|
409
|
+
return (0, types_1.coreErr)({ code: 'CONFLICT', message: `run log ${logPath} has uncommitted changes` });
|
|
410
|
+
}
|
|
411
|
+
return (0, types_1.coreOk)(undefined);
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* The run-log pre-flight of `agent execute`'s pipeline step 6 (`spec-016` §3.3), for a caller to run
|
|
415
|
+
* **before the spawn**, so a run whose record could not be committed is refused before it starts:
|
|
416
|
+
* the log is declared (`NO_RUN_LOG`), confined, inspectable and unmodified ({@link resolveRunLogPath},
|
|
417
|
+
* then {@link requireWritableRunLog}).
|
|
418
|
+
*
|
|
419
|
+
* @param runs - `dna.yaml` `paths.runs`, read at `HEAD`.
|
|
420
|
+
* @returns The root-relative run-log path the record will be committed to.
|
|
421
|
+
*/
|
|
422
|
+
function runLogPreflight(root, runs, elementId) {
|
|
423
|
+
const path = resolveRunLogPath(root, runs, elementId);
|
|
424
|
+
if (!path.ok)
|
|
425
|
+
return path;
|
|
426
|
+
const writable = requireWritableRunLog(root, path.value);
|
|
427
|
+
return writable.ok ? path : writable;
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* The next run id (§4.3): `<element-id>/<phase>/<n>`, `n` = 1 + the records in the log **at
|
|
431
|
+
* `state_ref`** whose `element` and `phase` match, whatever their workflow. Later commits and the
|
|
432
|
+
* working tree do not count, so two clones of the same history derive the same id.
|
|
433
|
+
*
|
|
434
|
+
* @returns The id, or the strict reader's `VALIDATION` for a log at `state_ref` it refuses.
|
|
435
|
+
*/
|
|
436
|
+
function nextRunId(root, input) {
|
|
437
|
+
const records = readRunLogAt(root, input.stateRef, input.logPath);
|
|
438
|
+
if (!records.ok)
|
|
439
|
+
return records;
|
|
440
|
+
const n = 1 + records.value.filter((record) => record.element === input.element && record.phase === input.phase).length;
|
|
441
|
+
return (0, types_1.coreOk)(formatRunId(elementIdOf(input.element), input.phase, n));
|
|
442
|
+
}
|
|
443
|
+
/** The heading line that opens the section `notes` watches (§4.2 key 18, §2.4). */
|
|
444
|
+
const NOTES_HEADING = '## Execution Notes';
|
|
445
|
+
const FENCE_RE = /^ {0,3}(```|~~~)/;
|
|
446
|
+
const SECTION_END_RE = /^#{1,2}(?:\s|$)/;
|
|
447
|
+
/**
|
|
448
|
+
* The body of the `## Execution Notes` section of a Markdown document, or `null` when it has none.
|
|
449
|
+
*
|
|
450
|
+
* The section is found by its **heading line** — a line that is exactly `## Execution Notes` — never
|
|
451
|
+
* by substring, so an inline `` `## Execution Notes` `` in prose, a YAML frontmatter value or
|
|
452
|
+
* `## Triage & Execution Notes` is not it. It runs to the next level-1 or level-2 heading, or the end;
|
|
453
|
+
* lines inside a fenced code block are not headings. CRLF reads as LF.
|
|
454
|
+
*/
|
|
455
|
+
function executionNotesSection(markdown) {
|
|
456
|
+
const lines = markdown.replace(/\r\n/g, '\n').split('\n');
|
|
457
|
+
if (lines[lines.length - 1] === '')
|
|
458
|
+
lines.pop();
|
|
459
|
+
let i = 0;
|
|
460
|
+
if (lines[0] === '---') {
|
|
461
|
+
const close = lines.indexOf('---', 1);
|
|
462
|
+
i = close === -1 ? lines.length : close + 1;
|
|
463
|
+
}
|
|
464
|
+
let fenced = false;
|
|
465
|
+
let start = -1;
|
|
466
|
+
for (; i < lines.length; i += 1) {
|
|
467
|
+
const line = lines[i];
|
|
468
|
+
if (FENCE_RE.test(line)) {
|
|
469
|
+
fenced = !fenced;
|
|
470
|
+
continue;
|
|
471
|
+
}
|
|
472
|
+
if (fenced)
|
|
473
|
+
continue;
|
|
474
|
+
if (start === -1) {
|
|
475
|
+
if (line === NOTES_HEADING)
|
|
476
|
+
start = i + 1;
|
|
477
|
+
}
|
|
478
|
+
else if (SECTION_END_RE.test(line)) {
|
|
479
|
+
break;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
if (start === -1)
|
|
483
|
+
return null;
|
|
484
|
+
return lines.slice(start, i).map((line) => `${line}\n`).join('');
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* The record's `notes` (§4.2 key 18, `dl-135` Q2 (c)): `<element-id>#execution-notes` when the
|
|
488
|
+
* element's `## Execution Notes` section differs between `state_ref` and `HEAD`, else `none`. Always
|
|
489
|
+
* `none` for a type whose template has no such section.
|
|
490
|
+
*/
|
|
491
|
+
function notesField(elementId, input) {
|
|
492
|
+
if (input.template === null || executionNotesSection(input.template) === null)
|
|
493
|
+
return 'none';
|
|
494
|
+
const before = input.atStateRef === null ? null : executionNotesSection(input.atStateRef);
|
|
495
|
+
const after = input.atHead === null ? null : executionNotesSection(input.atHead);
|
|
496
|
+
return before === after ? 'none' : `${elementId}#execution-notes`;
|
|
497
|
+
}
|
|
498
|
+
/**
|
|
499
|
+
* {@link notesField} over git: the template and the element at `HEAD`, the element at `state_ref`.
|
|
500
|
+
* Committed states only, so notes left uncommitted yield `none`.
|
|
501
|
+
*/
|
|
502
|
+
function deriveNotesField(root, input) {
|
|
503
|
+
return notesField(input.elementId, {
|
|
504
|
+
template: (0, storage_1.readPathAtRev)(root, 'HEAD', input.templatePath),
|
|
505
|
+
atStateRef: (0, storage_1.readPathAtRev)(root, input.stateRef, input.elementPath),
|
|
506
|
+
atHead: (0, storage_1.readPathAtRev)(root, 'HEAD', input.elementPath),
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
/** The subject of the commit that records the run `runId` (§4.4): `agent: record <run-id>`, outside `wf()`. */
|
|
510
|
+
function recordSubject(runId) {
|
|
511
|
+
return `agent: record ${runId}`;
|
|
512
|
+
}
|
|
513
|
+
/** The record as the `details` of a refusal that loses it: one `dl-055` detail line, the JSON line. */
|
|
514
|
+
const recordDetails = (record, line) => ({
|
|
515
|
+
run_id: record.id,
|
|
516
|
+
record,
|
|
517
|
+
issues: [{ detail: line.replace(/\n$/, '') }],
|
|
518
|
+
});
|
|
519
|
+
/**
|
|
520
|
+
* `text` on one line with both spellings of the project root removed (`<root>/x` → `x`, a bare root →
|
|
521
|
+
* `.`), so a filesystem error's absolute path does not reach the operator.
|
|
522
|
+
*/
|
|
523
|
+
function withoutRoot(root, text) {
|
|
524
|
+
let detail = text;
|
|
525
|
+
const spellings = [(0, node_path_1.resolve)(root), (0, node_fs_1.realpathSync)(root)].sort((a, b) => b.length - a.length);
|
|
526
|
+
for (const spelling of spellings)
|
|
527
|
+
detail = detail.split(`${spelling}${node_path_1.sep}`).join('').split(spelling).join('.');
|
|
528
|
+
return detail
|
|
529
|
+
.split('\n')
|
|
530
|
+
.map((part) => part.trim())
|
|
531
|
+
.filter((part) => part !== '')
|
|
532
|
+
.join('; ');
|
|
533
|
+
}
|
|
534
|
+
/**
|
|
535
|
+
* The cause a failed record commit names: git's (or a hook's) explanation on one line with the project
|
|
536
|
+
* root removed (`CommitFailure.gitDetail`, task-210), plus the index problem when the index entry could
|
|
537
|
+
* not be put back.
|
|
538
|
+
*/
|
|
539
|
+
function commitCause(failure) {
|
|
540
|
+
return failure.indexProblem === undefined
|
|
541
|
+
? failure.gitDetail
|
|
542
|
+
: `${failure.gitDetail} (the index entry could not be put back: ${failure.indexProblem}; check it with git status)`;
|
|
543
|
+
}
|
|
544
|
+
/**
|
|
545
|
+
* Append `record` to its run log and commit it (§4.4, §4.3 collision, §3.7).
|
|
546
|
+
*
|
|
547
|
+
* The commit contains only `logPath` (`commitPaths`, `--only`): the agent's uncommitted and staged
|
|
548
|
+
* edits elsewhere stay as they are. Its subject is `agent: record <run-id>`, outside the `wf()`
|
|
549
|
+
* grammar because the run log is not Memory, and `commitPaths` adds `dl-111`'s `WingFoil-Version:`
|
|
550
|
+
* trailer; there is no other body.
|
|
551
|
+
*
|
|
552
|
+
* Refusals, in order, none of which writes anything:
|
|
553
|
+
* - `VALIDATION` — `record` is not a valid record, including an id that is not the one its own
|
|
554
|
+
* `element` and `phase` produce (no `details`: there is no line to give back);
|
|
555
|
+
* - every later refusal carries the record as a `details` line, so the run is not lost (§3.7, §4.3):
|
|
556
|
+
* `VALIDATION` for a record not of this log's element (its id's element segment is not the file's
|
|
557
|
+
* basename), a log path that leaves the project root, is a symlink, or lies beyond a symlinked
|
|
558
|
+
* directory; `CONFLICT` `run log <path> has uncommitted changes` ({@link requireWritableRunLog});
|
|
559
|
+
* the strict reader's `VALIDATION` for the log at `HEAD`; `CONFLICT` `run id <run-id> already
|
|
560
|
+
* recorded at HEAD`.
|
|
561
|
+
*
|
|
562
|
+
* The append and the commit go through `writeAndCommit` (task-210): under a dry run the commit is
|
|
563
|
+
* planned and nothing is written. A commit git refuses (a hook, a held `index.lock`, …) is `IO` `run
|
|
564
|
+
* <run-id> not recorded: <cause>` with the record as a `details` line, the cause naming no absolute
|
|
565
|
+
* path; the file, any directory the append created, and the index entry are put back as they were. A
|
|
566
|
+
* write the filesystem refuses (`EACCES`, `ENOSPC`) is the same `IO` refusal, the record kept.
|
|
567
|
+
*/
|
|
568
|
+
function recordRun(root, logPath, record) {
|
|
569
|
+
let line;
|
|
570
|
+
try {
|
|
571
|
+
line = serializeRunRecord(record);
|
|
572
|
+
}
|
|
573
|
+
catch (error) {
|
|
574
|
+
return (0, types_1.coreErr)({ code: 'VALIDATION', message: error.message });
|
|
575
|
+
}
|
|
576
|
+
// From here on every refusal carries the record, so the run is never lost (§3.7, §4.3; review F3).
|
|
577
|
+
const keep = (error) => (0, types_1.coreErr)({ ...error, details: recordDetails(record, line) });
|
|
578
|
+
const elementId = (0, node_path_1.basename)(logPath, '.jsonl');
|
|
579
|
+
if (!isRunId(record.id, elementId)) {
|
|
580
|
+
return keep({
|
|
581
|
+
code: 'VALIDATION',
|
|
582
|
+
message: `run log ${logPath}: run id ${record.id} is not a run id of element '${elementId}' (the file's basename)`,
|
|
583
|
+
});
|
|
584
|
+
}
|
|
585
|
+
const writable = requireWritableRunLog(root, logPath);
|
|
586
|
+
if (!writable.ok)
|
|
587
|
+
return keep(writable.error);
|
|
588
|
+
const atHead = (0, storage_1.readPathAtRev)(root, 'HEAD', logPath);
|
|
589
|
+
const existing = atHead === null ? (0, types_1.coreOk)([]) : parseRunLog(atHead, logPath);
|
|
590
|
+
if (!existing.ok)
|
|
591
|
+
return keep(existing.error);
|
|
592
|
+
if (existing.value.some((recorded) => recorded.id === record.id)) {
|
|
593
|
+
return keep({ code: 'CONFLICT', message: `run id ${record.id} already recorded at HEAD` });
|
|
594
|
+
}
|
|
595
|
+
const message = recordSubject(record.id);
|
|
596
|
+
try {
|
|
597
|
+
// task-210's primitive: plans instead of writing under a dry run, and on a refused commit puts the
|
|
598
|
+
// file, any directory it created and the index entry back before throwing a CommitFailure.
|
|
599
|
+
const sha = (0, storage_1.writeAndCommit)(root, [{ path: logPath, content: `${atHead ?? ''}${line}` }], message);
|
|
600
|
+
return (0, types_1.coreOk)({ record, sha }, { sha, message });
|
|
601
|
+
}
|
|
602
|
+
catch (error) {
|
|
603
|
+
// The dry-run stop ends the operation with its plan; it is not a failure to report.
|
|
604
|
+
if ((0, storage_1.isDryRunActive)())
|
|
605
|
+
throw error;
|
|
606
|
+
// Anything else — git refusing the commit, or the filesystem refusing the write (EACCES, ENOSPC),
|
|
607
|
+
// which writeAndCommit rethrows as raised — loses no run: the record goes back in details (§3.7).
|
|
608
|
+
const cause = error instanceof storage_1.CommitFailure ? commitCause(error) : withoutRoot(root, error instanceof Error ? error.message : String(error));
|
|
609
|
+
return keep({ code: 'IO', message: `run ${record.id} not recorded: ${cause}` });
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
//# sourceMappingURL=run-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-log.js","sourceRoot":"","sources":["../../src/agent/run-log.ts"],"names":[],"mappings":";;;AAkIA,0BAGC;AAQD,wCAKC;AAQD,kCAIC;AA4GD,gDAIC;AAkBD,kCA6BC;AAQD,oCAUC;AAOD,0CAEC;AAOD,oCAEC;AAeD,sCAkBC;AAeD,8CAsBC;AAiBD,sDASC;AAWD,0CAKC;AAqBD,8BAKC;AAeD,sDAyBC;AAiBD,gCAKC;AAgBD,4CAMC;AAGD,sCAEC;AAiED,8BAwCC;AA7qBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qCAAuC;AACvC,yCAAoE;AAEpE,wCAA+G;AAC/G,yCAA6C;AAC7C,qDAAwF;AACxF,+CAAqF;AACrF,yCAAiF;AACjF,qDAAyF;AAEzF,kGAAkG;AACrF,QAAA,YAAY,GAAG,cAAuB,CAAC;AAEpD,qDAAqD;AACxC,QAAA,WAAW,GAAG,KAAc,CAAC;AAE1C,iGAAiG;AACpF,QAAA,WAAW,GAAG,OAAgB,CAAC;AAE5C,yEAAyE;AAC5D,QAAA,eAAe,GAAG;IAC7B,IAAI;IACJ,SAAS;IACT,UAAU;IACV,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,SAAS;IACT,eAAe;IACf,OAAO;IACP,SAAS;IACT,QAAQ;IACR,UAAU;IACV,WAAW;IACX,aAAa;IACb,aAAa;IACb,QAAQ;IACR,OAAO;CACC,CAAC;AAEX,wEAAwE;AAC3D,QAAA,cAAc,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,CAAU,CAAC;AAgDxF,sDAAsD;AACtD,MAAM,YAAY,GAAG,iBAAiB,CAAC;AACvC,wCAAwC;AACxC,MAAM,YAAY,GAAG,aAAa,CAAC;AACnC,MAAM,SAAS,GAAG,yBAAyB,CAAC;AAC5C,4DAA4D;AAC5D,MAAM,aAAa,GAAG,GAAG,CAAC;AAE1B,4EAA4E;AAC5E,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAE3C,yEAAyE;AACzE,MAAM,WAAW,GAAG,CAAC,OAAe,EAAU,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAEzF,MAAM,YAAY,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAE3F;;;;GAIG;AACH,SAAgB,OAAO,CAAC,EAAU,EAAE,SAAiB;IACnD,IAAI,CAAC,IAAA,cAAS,EAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,OAAO,IAAI,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,CAAC,IAAI,YAAY,IAAI,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7F,CAAC;AAED;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,KAAa;IAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;IAC/B,OAAO,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACtD,CAAC;AAED;;;;;GAKG;AACH,SAAgB,WAAW,CAAC,SAAiB,EAAE,KAAa,EAAE,CAAS;IACrE,MAAM,EAAE,GAAG,GAAG,SAAS,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;IACxC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IAClG,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,oBAAoB,GAAG,CAAC,KAAc,EAAmB,EAAE,CAC/D,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAEzE,iDAAiD;AACjD,MAAM,aAAa,GAAG,CAAC,KAAc,EAAoC,EAAE,CACzE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEvE;;;GAGG;AACH,SAAS,cAAc,CAAC,MAAyB,EAAE,QAA2B,EAAE,MAAM,GAAG,EAAE;IACzF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,IAAI,KAAK,IAAI;YAAE,SAAS;QAC5B,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO,gBAAgB,MAAM,GAAG,IAAI,GAAG,CAAC;QAClH,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,mBAAmB,MAAM,GAAG,IAAI,GAAG,CAAC;QAC/F,OAAO,QAAQ,MAAM,GAAG,IAAI,6BAA6B,MAAM,GAAG,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;IACjG,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iHAAiH;AACjH,SAAS,WAAW,CAAC,GAAqC,EAAE,KAAc,EAAE,OAAgB;IAC1F,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;gBAAE,OAAO,4BAA4B,CAAC;YAC/D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,KAAK,GAAG,OAAO;gBACnB,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,sBAAc,EAAE,SAAS,CAAC;gBACjD,CAAC,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,sBAAc,CAAC,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;YAC5E,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YACjC,KAAK,MAAM,KAAK,IAAI,sBAAc,EAAE,CAAC;gBACnC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC3B,IAAI,KAAK,KAAK,oBAAY,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC3D,OAAO,WAAW,KAAK,wCAAwC,oBAAY,GAAG,CAAC;gBACjF,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,aAAa;YAChB,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,8CAA8C,CAAC;QAC7F,KAAK,aAAa;YAChB,uGAAuG;YACvG,OAAO,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,aAAa,CAAC;gBACvG,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpD,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,8CAA8C,aAAa,qBAAqB,CAAC;QACvF;YACE,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,oBAAoB,CAAC;IAC1E,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,YAAY,CAAC,KAAc,EAAE,aAA4B,EAAE,OAAgB;IAClF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,mBAAmB,CAAC;IACtD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,OAAO;QACnB,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,uBAAe,CAAC;QACvC,CAAC,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,uBAAe,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAClE,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACjC,KAAK,MAAM,GAAG,IAAI,uBAAe,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;QACrD,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC;IACrC,CAAC;IACD,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAY,EAAE,KAAK,CAAC,OAAiB,EAAE,KAAK,CAAC,KAAe,CAAC,CAAC;IAClG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,+BAA+B,CAAC;IAC1E,IAAI,aAAa,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,aAAa,CAAC,EAAE,CAAC;QAC1D,OAAO,SAAS,EAAE,iCAAiC,aAAa,yBAAyB,CAAC;IAC5F,CAAC;IACD,iGAAiG;IACjG,kGAAkG;IAClG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC9F,OAAO,SAAS,EAAE,6BAA6B,OAAO,gBAAgB,KAAK,GAAG,CAAC;IACjF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAGD,iFAAiF;AACjF,SAAS,OAAO,CAAC,MAAiB;IAChC,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,uBAAe,EAAE,CAAC;QAClC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,sBAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/H,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,kBAAkB,CAAC,MAAiB;IAClD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACjD,IAAI,MAAM,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC;IAC3E,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC;AAED,6EAA6E;AAC7E,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,CAAS,EAAE,MAAc,EAAqB,EAAE,CACjF,IAAA,eAAO,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,IAAI,UAAU,CAAC,+BAA+B,MAAM,EAAE,EAAE,CAAC,CAAC;AAE9G;;;;;;;;;;;GAWG;AACH,SAAgB,WAAW,CAAC,IAAY,EAAE,IAAY;IACpD,MAAM,SAAS,GAAG,IAAA,oBAAQ,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;IAClD,IAAI,UAAU;QAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,6BAA6B,CAAC,CAAC;QAC1G,IAAI,KAAc,CAAC;QACnB,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,KAAkB,CAAC;QAClC,iGAAiG;QACjG,qGAAqG;QACrG,qDAAqD;QACrD,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,IAAI,KAAK,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;YACpD,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,iHAAiH,CAAC,CAAC;QACrJ,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAAE,OAAO,IAAA,eAAO,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,IAAI,YAAY,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAChI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,IAAA,cAAM,EAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,IAAY,EAAE,GAAW,EAAE,IAAY;IAClE,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,IAAA,0BAAe,EAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,wBAAa;YAAE,OAAO,IAAA,eAAO,EAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACxE,MAAM,KAAK,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,IAAA,uBAAa,EAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5C,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAA,cAAM,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,IAAY,EAAE,GAAW;IACvD,OAAO,IAAA,oBAAQ,EAAC,IAAA,mBAAO,EAAC,IAAI,CAAC,EAAE,IAAA,mBAAO,EAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,eAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,eAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/F,CAAC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAAC,MAAc,EAAE,IAAY;IACvD,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,iBAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3F,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,aAAa,CAAC,IAAY,EAAE,GAAW,EAAE,GAAW;IAClE,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1C,0GAA0G;IAC1G,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,IAAA,mCAAqB,EAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC;IACpC,CAAC;IACD,MAAM,SAAS,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAA,oBAAQ,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,IAAA,4BAAiB,EAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC;SAC/C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;SAC5C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,WAAW,CAAC,IAAA,uBAAa,EAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,MAAM,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,IAAA,cAAM,EAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,iBAAiB,CAC/B,IAAY,EACZ,IAAmC,EACnC,SAAiB,EACjB,SAA2B,OAAO;IAElC,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3C,OAAO,IAAA,eAAO,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC,CAAC;IAC/F,CAAC;IACD,IAAI,CAAC,IAAA,cAAS,EAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAA,eAAO,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,uBAAuB,SAAS,GAAG,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,MAAM,GAAG,iBAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,QAAQ,CAAC,CAAC;IAC1E,MAAM,YAAY,GAAG,IAAA,oBAAQ,EAAC,IAAA,mBAAO,EAAC,IAAI,CAAC,EAAE,IAAA,mBAAO,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,eAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzF,iGAAiG;IACjG,uGAAuG;IACvG,gGAAgG;IAChG,iFAAiF;IACjF,MAAM,QAAQ,GAAG,IAAA,mCAAqB,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7D,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,OAAO,IAAA,cAAM,EAAC,YAAY,CAAC,CAAC;AAC9B,CAAC;AAED,yFAAyF;AACzF,MAAM,gBAAgB,GAAwB;IAC5C,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,YAAY;IACnB,OAAO,EAAE,4DAA4D;CACtE,CAAC;AAEF;;;;;;;GAOG;AACH,SAAgB,qBAAqB,CAAC,IAAY,EAAE,OAAe;IACjE,MAAM,QAAQ,GAAG,IAAA,wCAA0B,EAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACpE,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,WAAW,GAAG,IAAA,sCAAwB,EAAC,IAAI,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAC9E,IAAI,CAAC,WAAW,CAAC,EAAE;QAAE,OAAO,WAAW,CAAC;IACxC,IAAI,IAAA,6BAAmB,EAAC,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QAC9C,OAAO,IAAA,eAAO,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,OAAO,0BAA0B,EAAE,CAAC,CAAC;IAC9F,CAAC;IACD,OAAO,IAAA,cAAM,EAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,eAAe,CAAC,IAAY,EAAE,IAAmC,EAAE,SAAiB;IAClG,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACtD,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACzD,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvC,CAAC;AAcD;;;;;;GAMG;AACH,SAAgB,SAAS,CAAC,IAAY,EAAE,KAAqB;IAC3D,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAClE,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC;IAChC,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IACxH,OAAO,IAAA,cAAM,EAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,mFAAmF;AACnF,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAC3C,MAAM,QAAQ,GAAG,kBAAkB,CAAC;AACpC,MAAM,cAAc,GAAG,iBAAiB,CAAC;AAEzC;;;;;;;GAOG;AACH,SAAgB,qBAAqB,CAAC,QAAgB;IACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;QAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IAChD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IACf,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,CAAC,MAAM,CAAC;YACjB,SAAS;QACX,CAAC;QACD,IAAI,MAAM;YAAE,SAAS;QACrB,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,IAAI,IAAI,KAAK,aAAa;gBAAE,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC;aAAM,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9B,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACnE,CAAC;AAYD;;;;GAIG;AACH,SAAgB,UAAU,CAAC,SAAiB,EAAE,KAAsB;IAClE,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAC7F,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1F,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjF,OAAO,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,kBAAkB,CAAC;AACpE,CAAC;AAYD;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,IAAY,EAAE,KAA4B;IACzE,OAAO,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE;QACjC,QAAQ,EAAE,IAAA,uBAAa,EAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC;QACzD,UAAU,EAAE,IAAA,uBAAa,EAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC;QAClE,MAAM,EAAE,IAAA,uBAAa,EAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC;KACvD,CAAC,CAAC;AACL,CAAC;AAED,+GAA+G;AAC/G,SAAgB,aAAa,CAAC,KAAa;IACzC,OAAO,iBAAiB,KAAK,EAAE,CAAC;AAClC,CAAC;AAQD,uGAAuG;AACvG,MAAM,aAAa,GAAG,CAAC,MAAiB,EAAE,IAAY,EAA2B,EAAE,CAAC,CAAC;IACnF,MAAM,EAAE,MAAM,CAAC,EAAE;IACjB,MAAM;IACN,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;CAC9C,CAAC,CAAC;AAEH;;;GAGG;AACH,SAAS,WAAW,CAAC,IAAY,EAAE,IAAY;IAC7C,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,MAAM,SAAS,GAAG,CAAC,IAAA,mBAAO,EAAC,IAAI,CAAC,EAAE,IAAA,sBAAY,EAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAC1F,KAAK,MAAM,QAAQ,IAAI,SAAS;QAAE,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,GAAG,eAAG,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChH,OAAO,MAAM;SACV,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;SAC7B,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,OAAsB;IACzC,OAAO,OAAO,CAAC,YAAY,KAAK,SAAS;QACvC,CAAC,CAAC,OAAO,CAAC,SAAS;QACnB,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,4CAA4C,OAAO,CAAC,YAAY,6BAA6B,CAAC;AACxH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,SAAgB,SAAS,CAAC,IAAY,EAAE,OAAe,EAAE,MAAiB;IACxE,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAA,eAAO,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,mGAAmG;IACnG,MAAM,IAAI,GAAG,CAAC,KAAgB,EAA2B,EAAE,CAAC,IAAA,eAAO,EAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACxH,MAAM,SAAS,GAAG,IAAA,oBAAQ,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;YACV,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,WAAW,OAAO,YAAY,MAAM,CAAC,EAAE,gCAAgC,SAAS,yBAAyB;SACnH,CAAC,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE9C,MAAM,MAAM,GAAG,IAAA,uBAAa,EAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAA,cAAM,EAAc,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1F,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;QACjE,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,MAAM,CAAC,EAAE,2BAA2B,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC;QACH,mGAAmG;QACnG,2FAA2F;QAC3F,MAAM,GAAG,GAAG,IAAA,wBAAc,EAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QAClG,OAAO,IAAA,cAAM,EAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,oFAAoF;QACpF,IAAI,IAAA,wBAAc,GAAE;YAAE,MAAM,KAAK,CAAC;QAClC,kGAAkG;QAClG,kGAAkG;QAClG,MAAM,KAAK,GAAG,KAAK,YAAY,uBAAa,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9I,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,MAAM,CAAC,EAAE,kBAAkB,KAAK,EAAE,EAAE,CAAC,CAAC;IAClF,CAAC;AACH,CAAC"}
|