@software-dlc/cli 0.157.2
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/CHANGELOG.md +11 -0
- package/LICENSE +105 -0
- package/README.md +31 -0
- package/dist/checkout.d.ts +43 -0
- package/dist/checkout.d.ts.map +1 -0
- package/dist/checkout.js +92 -0
- package/dist/checkout.js.map +1 -0
- package/dist/cli-arguments.d.ts +13 -0
- package/dist/cli-arguments.d.ts.map +1 -0
- package/dist/cli-arguments.js +67 -0
- package/dist/cli-arguments.js.map +1 -0
- package/dist/cli-branch-history.d.ts +48 -0
- package/dist/cli-branch-history.d.ts.map +1 -0
- package/dist/cli-branch-history.js +319 -0
- package/dist/cli-branch-history.js.map +1 -0
- package/dist/cli-branches.d.ts +22 -0
- package/dist/cli-branches.d.ts.map +1 -0
- package/dist/cli-branches.js +59 -0
- package/dist/cli-branches.js.map +1 -0
- package/dist/cli-deploy.d.ts +14 -0
- package/dist/cli-deploy.d.ts.map +1 -0
- package/dist/cli-deploy.js +164 -0
- package/dist/cli-deploy.js.map +1 -0
- package/dist/cli-health.d.ts +3 -0
- package/dist/cli-health.d.ts.map +1 -0
- package/dist/cli-health.js +73 -0
- package/dist/cli-health.js.map +1 -0
- package/dist/cli-help.d.ts +21 -0
- package/dist/cli-help.d.ts.map +1 -0
- package/dist/cli-help.js +176 -0
- package/dist/cli-help.js.map +1 -0
- package/dist/cli-login.d.ts +76 -0
- package/dist/cli-login.d.ts.map +1 -0
- package/dist/cli-login.js +634 -0
- package/dist/cli-login.js.map +1 -0
- package/dist/cli-operation.d.ts +2 -0
- package/dist/cli-operation.d.ts.map +1 -0
- package/dist/cli-operation.js +66 -0
- package/dist/cli-operation.js.map +1 -0
- package/dist/cli-org.d.ts +12 -0
- package/dist/cli-org.d.ts.map +1 -0
- package/dist/cli-org.js +218 -0
- package/dist/cli-org.js.map +1 -0
- package/dist/cli-rebuild.d.ts +20 -0
- package/dist/cli-rebuild.d.ts.map +1 -0
- package/dist/cli-rebuild.js +29 -0
- package/dist/cli-rebuild.js.map +1 -0
- package/dist/cli-reset.d.ts +27 -0
- package/dist/cli-reset.d.ts.map +1 -0
- package/dist/cli-reset.js +44 -0
- package/dist/cli-reset.js.map +1 -0
- package/dist/cli-snapshot.d.ts +398 -0
- package/dist/cli-snapshot.d.ts.map +1 -0
- package/dist/cli-snapshot.js +45 -0
- package/dist/cli-snapshot.js.map +1 -0
- package/dist/cli-task-context.d.ts +3 -0
- package/dist/cli-task-context.d.ts.map +1 -0
- package/dist/cli-task-context.js +112 -0
- package/dist/cli-task-context.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1004 -0
- package/dist/cli.js.map +1 -0
- package/dist/graph-packages-lock.d.ts +169 -0
- package/dist/graph-packages-lock.d.ts.map +1 -0
- package/dist/graph-packages-lock.js +503 -0
- package/dist/graph-packages-lock.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/local/aggregate-preflight.d.ts +12 -0
- package/dist/local/aggregate-preflight.d.ts.map +1 -0
- package/dist/local/aggregate-preflight.js +22 -0
- package/dist/local/aggregate-preflight.js.map +1 -0
- package/dist/local/allow-mcp.d.ts +77 -0
- package/dist/local/allow-mcp.d.ts.map +1 -0
- package/dist/local/allow-mcp.js +394 -0
- package/dist/local/allow-mcp.js.map +1 -0
- package/dist/local/api-client.d.ts +15 -0
- package/dist/local/api-client.d.ts.map +1 -0
- package/dist/local/api-client.js +87 -0
- package/dist/local/api-client.js.map +1 -0
- package/dist/local/app-contract-readers.d.ts +229 -0
- package/dist/local/app-contract-readers.d.ts.map +1 -0
- package/dist/local/app-contract-readers.js +450 -0
- package/dist/local/app-contract-readers.js.map +1 -0
- package/dist/local/app-org-reader.d.ts +21 -0
- package/dist/local/app-org-reader.d.ts.map +1 -0
- package/dist/local/app-org-reader.js +66 -0
- package/dist/local/app-org-reader.js.map +1 -0
- package/dist/local/app-shell-readers.d.ts +96 -0
- package/dist/local/app-shell-readers.d.ts.map +1 -0
- package/dist/local/app-shell-readers.js +381 -0
- package/dist/local/app-shell-readers.js.map +1 -0
- package/dist/local/app-tasks-read.d.ts +202 -0
- package/dist/local/app-tasks-read.d.ts.map +1 -0
- package/dist/local/app-tasks-read.js +290 -0
- package/dist/local/app-tasks-read.js.map +1 -0
- package/dist/local/app-worktrees.d.ts +69 -0
- package/dist/local/app-worktrees.d.ts.map +1 -0
- package/dist/local/app-worktrees.js +554 -0
- package/dist/local/app-worktrees.js.map +1 -0
- package/dist/local/base-sync-manifest.d.ts +12 -0
- package/dist/local/base-sync-manifest.d.ts.map +1 -0
- package/dist/local/base-sync-manifest.js +57 -0
- package/dist/local/base-sync-manifest.js.map +1 -0
- package/dist/local/blast-radius.d.ts +191 -0
- package/dist/local/blast-radius.d.ts.map +1 -0
- package/dist/local/blast-radius.js +585 -0
- package/dist/local/blast-radius.js.map +1 -0
- package/dist/local/canonical.d.ts +2 -0
- package/dist/local/canonical.d.ts.map +1 -0
- package/dist/local/canonical.js +2 -0
- package/dist/local/canonical.js.map +1 -0
- package/dist/local/config.d.ts +22 -0
- package/dist/local/config.d.ts.map +1 -0
- package/dist/local/config.js +57 -0
- package/dist/local/config.js.map +1 -0
- package/dist/local/document-commands.d.ts +163 -0
- package/dist/local/document-commands.d.ts.map +1 -0
- package/dist/local/document-commands.js +620 -0
- package/dist/local/document-commands.js.map +1 -0
- package/dist/local/document-embeds.d.ts +21 -0
- package/dist/local/document-embeds.d.ts.map +1 -0
- package/dist/local/document-embeds.js +38 -0
- package/dist/local/document-embeds.js.map +1 -0
- package/dist/local/environment-context.d.ts +39 -0
- package/dist/local/environment-context.d.ts.map +1 -0
- package/dist/local/environment-context.js +193 -0
- package/dist/local/environment-context.js.map +1 -0
- package/dist/local/environment-exclude.d.ts +7 -0
- package/dist/local/environment-exclude.d.ts.map +1 -0
- package/dist/local/environment-exclude.js +82 -0
- package/dist/local/environment-exclude.js.map +1 -0
- package/dist/local/environment-sidecar.d.ts +126 -0
- package/dist/local/environment-sidecar.d.ts.map +1 -0
- package/dist/local/environment-sidecar.js +442 -0
- package/dist/local/environment-sidecar.js.map +1 -0
- package/dist/local/environment-switch.d.ts +22 -0
- package/dist/local/environment-switch.d.ts.map +1 -0
- package/dist/local/environment-switch.js +385 -0
- package/dist/local/environment-switch.js.map +1 -0
- package/dist/local/exact-remote-projection.d.ts +17 -0
- package/dist/local/exact-remote-projection.d.ts.map +1 -0
- package/dist/local/exact-remote-projection.js +53 -0
- package/dist/local/exact-remote-projection.js.map +1 -0
- package/dist/local/experimental/path-object-store.d.ts +66 -0
- package/dist/local/experimental/path-object-store.d.ts.map +1 -0
- package/dist/local/experimental/path-object-store.js +135 -0
- package/dist/local/experimental/path-object-store.js.map +1 -0
- package/dist/local/external-worktree-binding.d.ts +21 -0
- package/dist/local/external-worktree-binding.d.ts.map +1 -0
- package/dist/local/external-worktree-binding.js +56 -0
- package/dist/local/external-worktree-binding.js.map +1 -0
- package/dist/local/folder-members.d.ts +34 -0
- package/dist/local/folder-members.d.ts.map +1 -0
- package/dist/local/folder-members.js +168 -0
- package/dist/local/folder-members.js.map +1 -0
- package/dist/local/git-ref-authority.d.ts +11 -0
- package/dist/local/git-ref-authority.d.ts.map +1 -0
- package/dist/local/git-ref-authority.js +76 -0
- package/dist/local/git-ref-authority.js.map +1 -0
- package/dist/local/git.d.ts +88 -0
- package/dist/local/git.d.ts.map +1 -0
- package/dist/local/git.js +413 -0
- package/dist/local/git.js.map +1 -0
- package/dist/local/graph-read.d.ts +168 -0
- package/dist/local/graph-read.d.ts.map +1 -0
- package/dist/local/graph-read.js +360 -0
- package/dist/local/graph-read.js.map +1 -0
- package/dist/local/graph-sync.d.ts +39 -0
- package/dist/local/graph-sync.d.ts.map +1 -0
- package/dist/local/graph-sync.js +186 -0
- package/dist/local/graph-sync.js.map +1 -0
- package/dist/local/guide-commands.d.ts +79 -0
- package/dist/local/guide-commands.d.ts.map +1 -0
- package/dist/local/guide-commands.js +247 -0
- package/dist/local/guide-commands.js.map +1 -0
- package/dist/local/health-files.d.ts +24 -0
- package/dist/local/health-files.d.ts.map +1 -0
- package/dist/local/health-files.js +133 -0
- package/dist/local/health-files.js.map +1 -0
- package/dist/local/health-inspection.d.ts +12 -0
- package/dist/local/health-inspection.d.ts.map +1 -0
- package/dist/local/health-inspection.js +407 -0
- package/dist/local/health-inspection.js.map +1 -0
- package/dist/local/health-policy.d.ts +11 -0
- package/dist/local/health-policy.d.ts.map +1 -0
- package/dist/local/health-policy.js +257 -0
- package/dist/local/health-policy.js.map +1 -0
- package/dist/local/health-projection.d.ts +14 -0
- package/dist/local/health-projection.d.ts.map +1 -0
- package/dist/local/health-projection.js +102 -0
- package/dist/local/health-projection.js.map +1 -0
- package/dist/local/health-schema.d.ts +338 -0
- package/dist/local/health-schema.d.ts.map +1 -0
- package/dist/local/health-schema.js +213 -0
- package/dist/local/health-schema.js.map +1 -0
- package/dist/local/health-store.d.ts +61 -0
- package/dist/local/health-store.d.ts.map +1 -0
- package/dist/local/health-store.js +218 -0
- package/dist/local/health-store.js.map +1 -0
- package/dist/local/index.d.ts +66 -0
- package/dist/local/index.d.ts.map +1 -0
- package/dist/local/index.js +66 -0
- package/dist/local/index.js.map +1 -0
- package/dist/local/journey-commands.d.ts +65 -0
- package/dist/local/journey-commands.d.ts.map +1 -0
- package/dist/local/journey-commands.js +138 -0
- package/dist/local/journey-commands.js.map +1 -0
- package/dist/local/local-org-store.d.ts +46 -0
- package/dist/local/local-org-store.d.ts.map +1 -0
- package/dist/local/local-org-store.js +132 -0
- package/dist/local/local-org-store.js.map +1 -0
- package/dist/local/local-org.d.ts +389 -0
- package/dist/local/local-org.d.ts.map +1 -0
- package/dist/local/local-org.js +855 -0
- package/dist/local/local-org.js.map +1 -0
- package/dist/local/media-upload.d.ts +5 -0
- package/dist/local/media-upload.d.ts.map +1 -0
- package/dist/local/media-upload.js +41 -0
- package/dist/local/media-upload.js.map +1 -0
- package/dist/local/operation.d.ts +155 -0
- package/dist/local/operation.d.ts.map +1 -0
- package/dist/local/operation.js +340 -0
- package/dist/local/operation.js.map +1 -0
- package/dist/local/ownership-reader-schema.d.ts +117 -0
- package/dist/local/ownership-reader-schema.d.ts.map +1 -0
- package/dist/local/ownership-reader-schema.js +105 -0
- package/dist/local/ownership-reader-schema.js.map +1 -0
- package/dist/local/ownership-reader-worker.d.ts +2 -0
- package/dist/local/ownership-reader-worker.d.ts.map +1 -0
- package/dist/local/ownership-reader-worker.js +341 -0
- package/dist/local/ownership-reader-worker.js.map +1 -0
- package/dist/local/ownership-reader.d.ts +10 -0
- package/dist/local/ownership-reader.d.ts.map +1 -0
- package/dist/local/ownership-reader.js +93 -0
- package/dist/local/ownership-reader.js.map +1 -0
- package/dist/local/package-uses-check.d.ts +33 -0
- package/dist/local/package-uses-check.d.ts.map +1 -0
- package/dist/local/package-uses-check.js +62 -0
- package/dist/local/package-uses-check.js.map +1 -0
- package/dist/local/pending-recovery.d.ts +22 -0
- package/dist/local/pending-recovery.d.ts.map +1 -0
- package/dist/local/pending-recovery.js +171 -0
- package/dist/local/pending-recovery.js.map +1 -0
- package/dist/local/portable-commit-store.d.ts +28 -0
- package/dist/local/portable-commit-store.d.ts.map +1 -0
- package/dist/local/portable-commit-store.js +187 -0
- package/dist/local/portable-commit-store.js.map +1 -0
- package/dist/local/portable-commit.d.ts +109 -0
- package/dist/local/portable-commit.d.ts.map +1 -0
- package/dist/local/portable-commit.js +209 -0
- package/dist/local/portable-commit.js.map +1 -0
- package/dist/local/portable-remote.d.ts +432 -0
- package/dist/local/portable-remote.d.ts.map +1 -0
- package/dist/local/portable-remote.js +280 -0
- package/dist/local/portable-remote.js.map +1 -0
- package/dist/local/project-deleted.d.ts +4 -0
- package/dist/local/project-deleted.d.ts.map +1 -0
- package/dist/local/project-deleted.js +13 -0
- package/dist/local/project-deleted.js.map +1 -0
- package/dist/local/projection.d.ts +166 -0
- package/dist/local/projection.d.ts.map +1 -0
- package/dist/local/projection.js +709 -0
- package/dist/local/projection.js.map +1 -0
- package/dist/local/read-operation.d.ts +3 -0
- package/dist/local/read-operation.d.ts.map +1 -0
- package/dist/local/read-operation.js +19 -0
- package/dist/local/read-operation.js.map +1 -0
- package/dist/local/rebuild.d.ts +11 -0
- package/dist/local/rebuild.d.ts.map +1 -0
- package/dist/local/rebuild.js +42 -0
- package/dist/local/rebuild.js.map +1 -0
- package/dist/local/remote-base.d.ts +25 -0
- package/dist/local/remote-base.d.ts.map +1 -0
- package/dist/local/remote-base.js +68 -0
- package/dist/local/remote-base.js.map +1 -0
- package/dist/local/save-layout-worker.d.ts +19 -0
- package/dist/local/save-layout-worker.d.ts.map +1 -0
- package/dist/local/save-layout-worker.js +28 -0
- package/dist/local/save-layout-worker.js.map +1 -0
- package/dist/local/save-layout.d.ts +84 -0
- package/dist/local/save-layout.d.ts.map +1 -0
- package/dist/local/save-layout.js +221 -0
- package/dist/local/save-layout.js.map +1 -0
- package/dist/local/scope-impact.d.ts +31 -0
- package/dist/local/scope-impact.d.ts.map +1 -0
- package/dist/local/scope-impact.js +32 -0
- package/dist/local/scope-impact.js.map +1 -0
- package/dist/local/source-evidence/filesystem-worker.d.ts +2 -0
- package/dist/local/source-evidence/filesystem-worker.d.ts.map +1 -0
- package/dist/local/source-evidence/filesystem-worker.js +139 -0
- package/dist/local/source-evidence/filesystem-worker.js.map +1 -0
- package/dist/local/source-evidence/processes.d.ts +20 -0
- package/dist/local/source-evidence/processes.d.ts.map +1 -0
- package/dist/local/source-evidence/processes.js +133 -0
- package/dist/local/source-evidence/processes.js.map +1 -0
- package/dist/local/source-evidence/protocol.d.ts +52 -0
- package/dist/local/source-evidence/protocol.d.ts.map +1 -0
- package/dist/local/source-evidence/protocol.js +72 -0
- package/dist/local/source-evidence/protocol.js.map +1 -0
- package/dist/local/source-evidence/reader.d.ts +14 -0
- package/dist/local/source-evidence/reader.d.ts.map +1 -0
- package/dist/local/source-evidence/reader.js +308 -0
- package/dist/local/source-evidence/reader.js.map +1 -0
- package/dist/local/source-evidence/schema.d.ts +2504 -0
- package/dist/local/source-evidence/schema.d.ts.map +1 -0
- package/dist/local/source-evidence/schema.js +99 -0
- package/dist/local/source-evidence/schema.js.map +1 -0
- package/dist/local/source-policy/loader.d.ts +29 -0
- package/dist/local/source-policy/loader.d.ts.map +1 -0
- package/dist/local/source-policy/loader.js +209 -0
- package/dist/local/source-policy/loader.js.map +1 -0
- package/dist/local/source-policy/process.d.ts +7 -0
- package/dist/local/source-policy/process.d.ts.map +1 -0
- package/dist/local/source-policy/process.js +53 -0
- package/dist/local/source-policy/process.js.map +1 -0
- package/dist/local/source-policy/protocol.d.ts +27 -0
- package/dist/local/source-policy/protocol.d.ts.map +1 -0
- package/dist/local/source-policy/protocol.js +48 -0
- package/dist/local/source-policy/protocol.js.map +1 -0
- package/dist/local/source-policy/worker.d.ts +2 -0
- package/dist/local/source-policy/worker.d.ts.map +1 -0
- package/dist/local/source-policy/worker.js +100 -0
- package/dist/local/source-policy/worker.js.map +1 -0
- package/dist/local/state-directory.d.ts +17 -0
- package/dist/local/state-directory.d.ts.map +1 -0
- package/dist/local/state-directory.js +68 -0
- package/dist/local/state-directory.js.map +1 -0
- package/dist/local/store-database.d.ts +13 -0
- package/dist/local/store-database.d.ts.map +1 -0
- package/dist/local/store-database.js +187 -0
- package/dist/local/store-database.js.map +1 -0
- package/dist/local/store.d.ts +181 -0
- package/dist/local/store.d.ts.map +1 -0
- package/dist/local/store.js +585 -0
- package/dist/local/store.js.map +1 -0
- package/dist/local/sync.d.ts +47 -0
- package/dist/local/sync.d.ts.map +1 -0
- package/dist/local/sync.js +518 -0
- package/dist/local/sync.js.map +1 -0
- package/dist/local/task-context-inspection.d.ts +23 -0
- package/dist/local/task-context-inspection.d.ts.map +1 -0
- package/dist/local/task-context-inspection.js +165 -0
- package/dist/local/task-context-inspection.js.map +1 -0
- package/dist/local/task-context-observations.d.ts +9553 -0
- package/dist/local/task-context-observations.d.ts.map +1 -0
- package/dist/local/task-context-observations.js +232 -0
- package/dist/local/task-context-observations.js.map +1 -0
- package/dist/local/task-context-provider.d.ts +18 -0
- package/dist/local/task-context-provider.d.ts.map +1 -0
- package/dist/local/task-context-provider.js +231 -0
- package/dist/local/task-context-provider.js.map +1 -0
- package/dist/local/task-context-schema.d.ts +847 -0
- package/dist/local/task-context-schema.d.ts.map +1 -0
- package/dist/local/task-context-schema.js +305 -0
- package/dist/local/task-context-schema.js.map +1 -0
- package/dist/local/task-context-source.d.ts +16 -0
- package/dist/local/task-context-source.d.ts.map +1 -0
- package/dist/local/task-context-source.js +45 -0
- package/dist/local/task-context-source.js.map +1 -0
- package/dist/local/task-context.d.ts +14 -0
- package/dist/local/task-context.d.ts.map +1 -0
- package/dist/local/task-context.js +570 -0
- package/dist/local/task-context.js.map +1 -0
- package/dist/local/test-commands.d.ts +71 -0
- package/dist/local/test-commands.d.ts.map +1 -0
- package/dist/local/test-commands.js +292 -0
- package/dist/local/test-commands.js.map +1 -0
- package/dist/local/tree-save.d.ts +117 -0
- package/dist/local/tree-save.d.ts.map +1 -0
- package/dist/local/tree-save.js +615 -0
- package/dist/local/tree-save.js.map +1 -0
- package/dist/local/variants.d.ts +125 -0
- package/dist/local/variants.d.ts.map +1 -0
- package/dist/local/variants.js +267 -0
- package/dist/local/variants.js.map +1 -0
- package/dist/local/workspace-admission.d.ts +61 -0
- package/dist/local/workspace-admission.d.ts.map +1 -0
- package/dist/local/workspace-admission.js +112 -0
- package/dist/local/workspace-admission.js.map +1 -0
- package/dist/local/workspace-authority-guard.d.ts +18 -0
- package/dist/local/workspace-authority-guard.d.ts.map +1 -0
- package/dist/local/workspace-authority-guard.js +69 -0
- package/dist/local/workspace-authority-guard.js.map +1 -0
- package/dist/local/workspace-authority.d.ts +33 -0
- package/dist/local/workspace-authority.d.ts.map +1 -0
- package/dist/local/workspace-authority.js +33 -0
- package/dist/local/workspace-authority.js.map +1 -0
- package/dist/local/workspace-branch-runtime.d.ts +61 -0
- package/dist/local/workspace-branch-runtime.d.ts.map +1 -0
- package/dist/local/workspace-branch-runtime.js +216 -0
- package/dist/local/workspace-branch-runtime.js.map +1 -0
- package/dist/local/workspace-built-content.d.ts +137 -0
- package/dist/local/workspace-built-content.d.ts.map +1 -0
- package/dist/local/workspace-built-content.js +393 -0
- package/dist/local/workspace-built-content.js.map +1 -0
- package/dist/local/workspace-claim-status-read.d.ts +53 -0
- package/dist/local/workspace-claim-status-read.d.ts.map +1 -0
- package/dist/local/workspace-claim-status-read.js +118 -0
- package/dist/local/workspace-claim-status-read.js.map +1 -0
- package/dist/local/workspace-claim-status.d.ts +172 -0
- package/dist/local/workspace-claim-status.d.ts.map +1 -0
- package/dist/local/workspace-claim-status.js +721 -0
- package/dist/local/workspace-claim-status.js.map +1 -0
- package/dist/local/workspace-claim-views.d.ts +45 -0
- package/dist/local/workspace-claim-views.d.ts.map +1 -0
- package/dist/local/workspace-claim-views.js +45 -0
- package/dist/local/workspace-claim-views.js.map +1 -0
- package/dist/local/workspace-cli.d.ts +46 -0
- package/dist/local/workspace-cli.d.ts.map +1 -0
- package/dist/local/workspace-cli.js +1524 -0
- package/dist/local/workspace-cli.js.map +1 -0
- package/dist/local/workspace-commit-resolver.d.ts +19 -0
- package/dist/local/workspace-commit-resolver.d.ts.map +1 -0
- package/dist/local/workspace-commit-resolver.js +47 -0
- package/dist/local/workspace-commit-resolver.js.map +1 -0
- package/dist/local/workspace-decision-store.d.ts +184 -0
- package/dist/local/workspace-decision-store.d.ts.map +1 -0
- package/dist/local/workspace-decision-store.js +510 -0
- package/dist/local/workspace-decision-store.js.map +1 -0
- package/dist/local/workspace-environment-runtime.d.ts +107 -0
- package/dist/local/workspace-environment-runtime.d.ts.map +1 -0
- package/dist/local/workspace-environment-runtime.js +135 -0
- package/dist/local/workspace-environment-runtime.js.map +1 -0
- package/dist/local/workspace-evidence-drop.d.ts +21 -0
- package/dist/local/workspace-evidence-drop.d.ts.map +1 -0
- package/dist/local/workspace-evidence-drop.js +58 -0
- package/dist/local/workspace-evidence-drop.js.map +1 -0
- package/dist/local/workspace-evidence-sign-tool.d.ts +20 -0
- package/dist/local/workspace-evidence-sign-tool.d.ts.map +1 -0
- package/dist/local/workspace-evidence-sign-tool.js +85 -0
- package/dist/local/workspace-evidence-sign-tool.js.map +1 -0
- package/dist/local/workspace-evidence-status.d.ts +89 -0
- package/dist/local/workspace-evidence-status.d.ts.map +1 -0
- package/dist/local/workspace-evidence-status.js +141 -0
- package/dist/local/workspace-evidence-status.js.map +1 -0
- package/dist/local/workspace-evidence.d.ts +145 -0
- package/dist/local/workspace-evidence.d.ts.map +1 -0
- package/dist/local/workspace-evidence.js +347 -0
- package/dist/local/workspace-evidence.js.map +1 -0
- package/dist/local/workspace-graph-store.d.ts +32 -0
- package/dist/local/workspace-graph-store.d.ts.map +1 -0
- package/dist/local/workspace-graph-store.js +249 -0
- package/dist/local/workspace-graph-store.js.map +1 -0
- package/dist/local/workspace-handoff.d.ts +32 -0
- package/dist/local/workspace-handoff.d.ts.map +1 -0
- package/dist/local/workspace-handoff.js +144 -0
- package/dist/local/workspace-handoff.js.map +1 -0
- package/dist/local/workspace-history-journal.d.ts +70 -0
- package/dist/local/workspace-history-journal.d.ts.map +1 -0
- package/dist/local/workspace-history-journal.js +131 -0
- package/dist/local/workspace-history-journal.js.map +1 -0
- package/dist/local/workspace-history-store.d.ts +98 -0
- package/dist/local/workspace-history-store.d.ts.map +1 -0
- package/dist/local/workspace-history-store.js +632 -0
- package/dist/local/workspace-history-store.js.map +1 -0
- package/dist/local/workspace-history-types.d.ts +307 -0
- package/dist/local/workspace-history-types.d.ts.map +1 -0
- package/dist/local/workspace-history-types.js +2 -0
- package/dist/local/workspace-history-types.js.map +1 -0
- package/dist/local/workspace-integration-runtime.d.ts +48 -0
- package/dist/local/workspace-integration-runtime.d.ts.map +1 -0
- package/dist/local/workspace-integration-runtime.js +419 -0
- package/dist/local/workspace-integration-runtime.js.map +1 -0
- package/dist/local/workspace-lock.d.ts +7 -0
- package/dist/local/workspace-lock.d.ts.map +1 -0
- package/dist/local/workspace-lock.js +211 -0
- package/dist/local/workspace-lock.js.map +1 -0
- package/dist/local/workspace-merge.d.ts +77 -0
- package/dist/local/workspace-merge.d.ts.map +1 -0
- package/dist/local/workspace-merge.js +703 -0
- package/dist/local/workspace-merge.js.map +1 -0
- package/dist/local/workspace-mixed-history.d.ts +33 -0
- package/dist/local/workspace-mixed-history.d.ts.map +1 -0
- package/dist/local/workspace-mixed-history.js +107 -0
- package/dist/local/workspace-mixed-history.js.map +1 -0
- package/dist/local/workspace-overlap-allocation.d.ts +33 -0
- package/dist/local/workspace-overlap-allocation.d.ts.map +1 -0
- package/dist/local/workspace-overlap-allocation.js +69 -0
- package/dist/local/workspace-overlap-allocation.js.map +1 -0
- package/dist/local/workspace-overlap-impact.d.ts +46 -0
- package/dist/local/workspace-overlap-impact.d.ts.map +1 -0
- package/dist/local/workspace-overlap-impact.js +162 -0
- package/dist/local/workspace-overlap-impact.js.map +1 -0
- package/dist/local/workspace-overlap.d.ts +109 -0
- package/dist/local/workspace-overlap.d.ts.map +1 -0
- package/dist/local/workspace-overlap.js +327 -0
- package/dist/local/workspace-overlap.js.map +1 -0
- package/dist/local/workspace-paths.d.ts +4 -0
- package/dist/local/workspace-paths.d.ts.map +1 -0
- package/dist/local/workspace-paths.js +8 -0
- package/dist/local/workspace-paths.js.map +1 -0
- package/dist/local/workspace-pick-runtime.d.ts +70 -0
- package/dist/local/workspace-pick-runtime.d.ts.map +1 -0
- package/dist/local/workspace-pick-runtime.js +177 -0
- package/dist/local/workspace-pick-runtime.js.map +1 -0
- package/dist/local/workspace-pick-store.d.ts +33 -0
- package/dist/local/workspace-pick-store.d.ts.map +1 -0
- package/dist/local/workspace-pick-store.js +43 -0
- package/dist/local/workspace-pick-store.js.map +1 -0
- package/dist/local/workspace-pick.d.ts +73 -0
- package/dist/local/workspace-pick.d.ts.map +1 -0
- package/dist/local/workspace-pick.js +253 -0
- package/dist/local/workspace-pick.js.map +1 -0
- package/dist/local/workspace-portable-authoring.d.ts +43 -0
- package/dist/local/workspace-portable-authoring.d.ts.map +1 -0
- package/dist/local/workspace-portable-authoring.js +128 -0
- package/dist/local/workspace-portable-authoring.js.map +1 -0
- package/dist/local/workspace-prune.d.ts +63 -0
- package/dist/local/workspace-prune.d.ts.map +1 -0
- package/dist/local/workspace-prune.js +267 -0
- package/dist/local/workspace-prune.js.map +1 -0
- package/dist/local/workspace-remote-fetch.d.ts +82 -0
- package/dist/local/workspace-remote-fetch.d.ts.map +1 -0
- package/dist/local/workspace-remote-fetch.js +409 -0
- package/dist/local/workspace-remote-fetch.js.map +1 -0
- package/dist/local/workspace-remote-provider.d.ts +97 -0
- package/dist/local/workspace-remote-provider.d.ts.map +1 -0
- package/dist/local/workspace-remote-provider.js +400 -0
- package/dist/local/workspace-remote-provider.js.map +1 -0
- package/dist/local/workspace-remote-pull-request-journal.d.ts +49 -0
- package/dist/local/workspace-remote-pull-request-journal.d.ts.map +1 -0
- package/dist/local/workspace-remote-pull-request-journal.js +63 -0
- package/dist/local/workspace-remote-pull-request-journal.js.map +1 -0
- package/dist/local/workspace-remote-pull-request.d.ts +36 -0
- package/dist/local/workspace-remote-pull-request.d.ts.map +1 -0
- package/dist/local/workspace-remote-pull-request.js +158 -0
- package/dist/local/workspace-remote-pull-request.js.map +1 -0
- package/dist/local/workspace-remote-push.d.ts +88 -0
- package/dist/local/workspace-remote-push.d.ts.map +1 -0
- package/dist/local/workspace-remote-push.js +297 -0
- package/dist/local/workspace-remote-push.js.map +1 -0
- package/dist/local/workspace-remote-topic-journal.d.ts +56 -0
- package/dist/local/workspace-remote-topic-journal.d.ts.map +1 -0
- package/dist/local/workspace-remote-topic-journal.js +121 -0
- package/dist/local/workspace-remote-topic-journal.js.map +1 -0
- package/dist/local/workspace-remote-topic.d.ts +45 -0
- package/dist/local/workspace-remote-topic.d.ts.map +1 -0
- package/dist/local/workspace-remote-topic.js +204 -0
- package/dist/local/workspace-remote-topic.js.map +1 -0
- package/dist/local/workspace-remote-transfer.d.ts +76 -0
- package/dist/local/workspace-remote-transfer.d.ts.map +1 -0
- package/dist/local/workspace-remote-transfer.js +270 -0
- package/dist/local/workspace-remote-transfer.js.map +1 -0
- package/dist/local/workspace-resolution.d.ts +145 -0
- package/dist/local/workspace-resolution.d.ts.map +1 -0
- package/dist/local/workspace-resolution.js +479 -0
- package/dist/local/workspace-resolution.js.map +1 -0
- package/dist/local/workspace-resolver-provider.d.ts +72 -0
- package/dist/local/workspace-resolver-provider.d.ts.map +1 -0
- package/dist/local/workspace-resolver-provider.js +312 -0
- package/dist/local/workspace-resolver-provider.js.map +1 -0
- package/dist/local/workspace-runtime-handoff.d.ts +52 -0
- package/dist/local/workspace-runtime-handoff.d.ts.map +1 -0
- package/dist/local/workspace-runtime-handoff.js +237 -0
- package/dist/local/workspace-runtime-handoff.js.map +1 -0
- package/dist/local/workspace-runtime-lease.d.ts +26 -0
- package/dist/local/workspace-runtime-lease.d.ts.map +1 -0
- package/dist/local/workspace-runtime-lease.js +123 -0
- package/dist/local/workspace-runtime-lease.js.map +1 -0
- package/dist/local/workspace-runtime.d.ts +690 -0
- package/dist/local/workspace-runtime.d.ts.map +1 -0
- package/dist/local/workspace-runtime.js +2124 -0
- package/dist/local/workspace-runtime.js.map +1 -0
- package/dist/local/workspace-scope.d.ts +70 -0
- package/dist/local/workspace-scope.d.ts.map +1 -0
- package/dist/local/workspace-scope.js +206 -0
- package/dist/local/workspace-scope.js.map +1 -0
- package/dist/local/workspace-sources.d.ts +159 -0
- package/dist/local/workspace-sources.d.ts.map +1 -0
- package/dist/local/workspace-sources.js +570 -0
- package/dist/local/workspace-sources.js.map +1 -0
- package/dist/local/workspace-store-database.d.ts +5 -0
- package/dist/local/workspace-store-database.d.ts.map +1 -0
- package/dist/local/workspace-store-database.js +726 -0
- package/dist/local/workspace-store-database.js.map +1 -0
- package/dist/local/workspace-store.d.ts +261 -0
- package/dist/local/workspace-store.d.ts.map +1 -0
- package/dist/local/workspace-store.js +831 -0
- package/dist/local/workspace-store.js.map +1 -0
- package/dist/local/workspace-topology-runtime.d.ts +27 -0
- package/dist/local/workspace-topology-runtime.d.ts.map +1 -0
- package/dist/local/workspace-topology-runtime.js +396 -0
- package/dist/local/workspace-topology-runtime.js.map +1 -0
- package/dist/local/workspace-topology.d.ts +140 -0
- package/dist/local/workspace-topology.d.ts.map +1 -0
- package/dist/local/workspace-topology.js +359 -0
- package/dist/local/workspace-topology.js.map +1 -0
- package/dist/local/workspace-upstream-inspection.d.ts +60 -0
- package/dist/local/workspace-upstream-inspection.d.ts.map +1 -0
- package/dist/local/workspace-upstream-inspection.js +189 -0
- package/dist/local/workspace-upstream-inspection.js.map +1 -0
- package/dist/local/workspace-upstream-runtime.d.ts +91 -0
- package/dist/local/workspace-upstream-runtime.d.ts.map +1 -0
- package/dist/local/workspace-upstream-runtime.js +270 -0
- package/dist/local/workspace-upstream-runtime.js.map +1 -0
- package/dist/local/workspace-upstream-store.d.ts +51 -0
- package/dist/local/workspace-upstream-store.d.ts.map +1 -0
- package/dist/local/workspace-upstream-store.js +475 -0
- package/dist/local/workspace-upstream-store.js.map +1 -0
- package/dist/local/workspace-viewer-server.d.ts +136 -0
- package/dist/local/workspace-viewer-server.d.ts.map +1 -0
- package/dist/local/workspace-viewer-server.js +1097 -0
- package/dist/local/workspace-viewer-server.js.map +1 -0
- package/dist/local/workspace-viewer-snapshot.d.ts +49 -0
- package/dist/local/workspace-viewer-snapshot.d.ts.map +1 -0
- package/dist/local/workspace-viewer-snapshot.js +91 -0
- package/dist/local/workspace-viewer-snapshot.js.map +1 -0
- package/dist/local/worktree-projection.d.ts +76 -0
- package/dist/local/worktree-projection.d.ts.map +1 -0
- package/dist/local/worktree-projection.js +470 -0
- package/dist/local/worktree-projection.js.map +1 -0
- package/dist/mcp/client-identity.d.ts +8 -0
- package/dist/mcp/client-identity.d.ts.map +1 -0
- package/dist/mcp/client-identity.js +33 -0
- package/dist/mcp/client-identity.js.map +1 -0
- package/dist/mcp/graph-to-code.d.ts +53 -0
- package/dist/mcp/graph-to-code.d.ts.map +1 -0
- package/dist/mcp/graph-to-code.js +1624 -0
- package/dist/mcp/graph-to-code.js.map +1 -0
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +3 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/stdio/graph-to-code.d.ts +3 -0
- package/dist/mcp/stdio/graph-to-code.d.ts.map +1 -0
- package/dist/mcp/stdio/graph-to-code.js +55 -0
- package/dist/mcp/stdio/graph-to-code.js.map +1 -0
- package/dist/mcp/stdio/worktree.d.ts +3 -0
- package/dist/mcp/stdio/worktree.d.ts.map +1 -0
- package/dist/mcp/stdio/worktree.js +67 -0
- package/dist/mcp/stdio/worktree.js.map +1 -0
- package/dist/mcp/worktree-claim-status.d.ts +162 -0
- package/dist/mcp/worktree-claim-status.d.ts.map +1 -0
- package/dist/mcp/worktree-claim-status.js +113 -0
- package/dist/mcp/worktree-claim-status.js.map +1 -0
- package/dist/mcp/worktree-dispatch.d.ts +13 -0
- package/dist/mcp/worktree-dispatch.d.ts.map +1 -0
- package/dist/mcp/worktree-dispatch.js +52 -0
- package/dist/mcp/worktree-dispatch.js.map +1 -0
- package/dist/mcp/worktree-errors.d.ts +15 -0
- package/dist/mcp/worktree-errors.d.ts.map +1 -0
- package/dist/mcp/worktree-errors.js +17 -0
- package/dist/mcp/worktree-errors.js.map +1 -0
- package/dist/mcp/worktree-health.d.ts +12 -0
- package/dist/mcp/worktree-health.d.ts.map +1 -0
- package/dist/mcp/worktree-health.js +32 -0
- package/dist/mcp/worktree-health.js.map +1 -0
- package/dist/mcp/worktree-results.d.ts +15 -0
- package/dist/mcp/worktree-results.d.ts.map +1 -0
- package/dist/mcp/worktree-results.js +12 -0
- package/dist/mcp/worktree-results.js.map +1 -0
- package/dist/mcp/worktree-task-context.d.ts +57 -0
- package/dist/mcp/worktree-task-context.d.ts.map +1 -0
- package/dist/mcp/worktree-task-context.js +45 -0
- package/dist/mcp/worktree-task-context.js.map +1 -0
- package/dist/mcp/worktree-tools.d.ts +2648 -0
- package/dist/mcp/worktree-tools.d.ts.map +1 -0
- package/dist/mcp/worktree-tools.js +192 -0
- package/dist/mcp/worktree-tools.js.map +1 -0
- package/dist/mcp/worktree.d.ts +33 -0
- package/dist/mcp/worktree.d.ts.map +1 -0
- package/dist/mcp/worktree.js +551 -0
- package/dist/mcp/worktree.js.map +1 -0
- package/dist/own-package.d.ts +13 -0
- package/dist/own-package.d.ts.map +1 -0
- package/dist/own-package.js +32 -0
- package/dist/own-package.js.map +1 -0
- package/dist/packages-browse.d.ts +107 -0
- package/dist/packages-browse.d.ts.map +1 -0
- package/dist/packages-browse.js +646 -0
- package/dist/packages-browse.js.map +1 -0
- package/dist/packages-cli.d.ts +8 -0
- package/dist/packages-cli.d.ts.map +1 -0
- package/dist/packages-cli.js +184 -0
- package/dist/packages-cli.js.map +1 -0
- package/dist/packages-uses.d.ts +46 -0
- package/dist/packages-uses.d.ts.map +1 -0
- package/dist/packages-uses.js +737 -0
- package/dist/packages-uses.js.map +1 -0
- package/dist/portable.d.ts +7 -0
- package/dist/portable.d.ts.map +1 -0
- package/dist/portable.js +14 -0
- package/dist/portable.js.map +1 -0
- package/dist/quiet-warnings.d.ts +3 -0
- package/dist/quiet-warnings.d.ts.map +1 -0
- package/dist/quiet-warnings.js +21 -0
- package/dist/quiet-warnings.js.map +1 -0
- package/dist/view-seam.d.ts +62 -0
- package/dist/view-seam.d.ts.map +1 -0
- package/dist/view-seam.js +70 -0
- package/dist/view-seam.js.map +1 -0
- package/generated/graph-packages/index.json +5 -0
- package/graph-packages.lock.json +4 -0
- package/package.json +81 -0
- package/viewer/assets/index-BZKGDARF.css +1 -0
- package/viewer/assets/index-DWu0CbZZ.js +272 -0
- package/viewer/index.html +13 -0
|
@@ -0,0 +1,615 @@
|
|
|
1
|
+
import { GraphApiError, finalizeWorktreeTreeSave, getWorktreeSaveTransactionStatus, negotiateWorktreeSync, prepareWorktreeTreeSave, readWorktreeTreeSaveFinalizeAnswer, readWorktreeTreeSaveMissing, uploadWorktreeTreeSaveObjects } from '@software-dlc/graph/client';
|
|
2
|
+
import { buildGraphSyncManifestTree, canonicalGraphSyncJson, GRAPH_SEMANTIC_ANNOTATION_SCHEMA_VERSIONS, GRAPH_VARIANT_SET_SCHEMA_VERSIONS, graph_sync_hash_schema, graph_sync_manifest_schema, GraphSyncManifestTreeError, WORKTREE_TREE_SAVE_MISSING_PAGE_BOUND, WORKTREE_TREE_SAVE_UPLOAD_BOUND, worktree_tree_save_prepare_request_schema } from '@software-dlc/graph/schema';
|
|
3
|
+
import { readVerifiedSyncObject } from './graph-sync.js';
|
|
4
|
+
import { OperationRefusalError, checkOperation, currentOperation, markOperationDispatched, markOperationResult, setOperationPhase } from './operation.js';
|
|
5
|
+
/**
|
|
6
|
+
* The client side of a manifest version 2 worktree save
|
|
7
|
+
* (docs/specs/bulk-graph-transfer.md, rollout step 2). The save opens from
|
|
8
|
+
* roots alone, asks which manifest nodes and objects the server lacks,
|
|
9
|
+
* uploads those, and finalizes, so no request grows with the change.
|
|
10
|
+
*/
|
|
11
|
+
export const TREE_SAVE_PROTOCOL = 'graph-sync-v2';
|
|
12
|
+
// Below the 4.5 MB the hosted platform accepts for one request.
|
|
13
|
+
const UPLOAD_REQUEST_MAX_BYTES = 3 * 1_024 * 1_024;
|
|
14
|
+
// The server's bound on what one save transaction holds
|
|
15
|
+
// (upload_graph_worktree_tree_save_objects).
|
|
16
|
+
const TRANSACTION_UPLOAD_MAX_BYTES = 16 * 1_024 * 1_024;
|
|
17
|
+
// Finalize names what its walk of the tree found absent; each answer is
|
|
18
|
+
// followed by one upload.
|
|
19
|
+
const FINALIZE_ATTEMPTS = 3;
|
|
20
|
+
// What the hosted platform answers for a request it cut off for time.
|
|
21
|
+
const UPLOAD_TIMEOUT_STATUSES = new Set([408, 504]);
|
|
22
|
+
// An upload whose connection the server closed is sent again this many times
|
|
23
|
+
// in all, waiting 1, 2, 4 and 8 s before each: the platform closes kept-alive
|
|
24
|
+
// connections between requests, and staging closed every new connection for
|
|
25
|
+
// longer than three immediate attempts took (sba-proof runs 3e and 3g).
|
|
26
|
+
const UPLOAD_CONNECTION_ATTEMPTS = 5;
|
|
27
|
+
const UPLOAD_CONNECTION_FIRST_WAIT_MS = 1_000;
|
|
28
|
+
const CLOSED_CONNECTION_CODES = new Set(['UND_ERR_SOCKET', 'ECONNRESET']);
|
|
29
|
+
// How long a save waits for a background finalize before it stops and leaves
|
|
30
|
+
// `sdlc sync` to resume the wait; the worker's three attempts can take longer.
|
|
31
|
+
const FINALIZE_POLL_LIMIT_MS = 6 * 60 * 1_000;
|
|
32
|
+
const FINALIZE_POLL_FIRST_MS = 1_000;
|
|
33
|
+
const FINALIZE_POLL_MAX_MS = 5_000;
|
|
34
|
+
// How often a wait asks for finalize again. An attempt released for retry is
|
|
35
|
+
// claimed only when someone asks (or a cron does, where one runs); asking
|
|
36
|
+
// while an attempt holds the lease does nothing.
|
|
37
|
+
const FINALIZE_REREQUEST_MS = 30_000;
|
|
38
|
+
/** The exit status of a save left finalizing in the background (EX_TEMPFAIL). */
|
|
39
|
+
export const TREE_SAVE_STILL_FINALIZING_EXIT_CODE = 75;
|
|
40
|
+
/**
|
|
41
|
+
* The server is still finalizing the save in the background. Nothing is lost:
|
|
42
|
+
* the change stays pending, and `sdlc sync` resumes by polling.
|
|
43
|
+
*/
|
|
44
|
+
export class TreeSaveStillFinalizingError extends Error {
|
|
45
|
+
exit_code = TREE_SAVE_STILL_FINALIZING_EXIT_CODE;
|
|
46
|
+
transaction_id;
|
|
47
|
+
constructor(transaction_id) {
|
|
48
|
+
super(`The server is still finalizing save transaction ${transaction_id}. The change stays pending; run sdlc sync to wait for it.`);
|
|
49
|
+
this.name = 'TreeSaveStillFinalizingError';
|
|
50
|
+
this.transaction_id = transaction_id;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export function operationRequestOptions(options) {
|
|
54
|
+
checkOperation();
|
|
55
|
+
const signal = currentOperation()?.signal;
|
|
56
|
+
if (!signal)
|
|
57
|
+
return options;
|
|
58
|
+
return {
|
|
59
|
+
...options,
|
|
60
|
+
signal: options?.signal ? AbortSignal.any([signal, options.signal]) : signal
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function numberOrNull(value) {
|
|
64
|
+
return typeof value === 'number' && Number.isSafeInteger(value)
|
|
65
|
+
? value
|
|
66
|
+
: null;
|
|
67
|
+
}
|
|
68
|
+
/** The node layout versions a sync answer declares; [] from an older server. */
|
|
69
|
+
function saveLayoutVersions(response) {
|
|
70
|
+
return Array.isArray(response.supported_save_layout_versions)
|
|
71
|
+
? response.supported_save_layout_versions.filter((version) => Number.isSafeInteger(version))
|
|
72
|
+
: [];
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Asks the server which manifest versions a save may use, offering the base
|
|
76
|
+
* the session holds so an unchanged worktree answers with no graph content.
|
|
77
|
+
* Returns the base's version 2 root when the save can use version 2. The
|
|
78
|
+
* response is read field by field: a server may add keys this client does
|
|
79
|
+
* not know.
|
|
80
|
+
*/
|
|
81
|
+
export async function negotiateTreeSave(input) {
|
|
82
|
+
let response;
|
|
83
|
+
try {
|
|
84
|
+
response = (await negotiateWorktreeSync(input.client, input.worktree_id, {
|
|
85
|
+
have_sync_revision: input.sync_revision,
|
|
86
|
+
have_sync_root_hash: input.sync_root_hash,
|
|
87
|
+
supported_manifest_versions: [1, 2],
|
|
88
|
+
supported_semantic_annotation_schema_versions: [
|
|
89
|
+
...GRAPH_SEMANTIC_ANNOTATION_SCHEMA_VERSIONS
|
|
90
|
+
],
|
|
91
|
+
supported_graph_variant_set_schema_versions: [
|
|
92
|
+
...GRAPH_VARIANT_SET_SCHEMA_VERSIONS
|
|
93
|
+
]
|
|
94
|
+
}, operationRequestOptions(input.request_options)));
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
// A save that needs no negotiation must not fail on one: the server
|
|
98
|
+
// refused the question, so the save goes on with version 1. A transport
|
|
99
|
+
// failure or a cancellation would fail version 1 too, and is thrown.
|
|
100
|
+
if (!(error instanceof GraphApiError))
|
|
101
|
+
throw error;
|
|
102
|
+
return {
|
|
103
|
+
available: false,
|
|
104
|
+
reason: 'negotiation_failed',
|
|
105
|
+
status: error.status,
|
|
106
|
+
detail: error.reason
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
const versions = Array.isArray(response?.supported_manifest_versions)
|
|
110
|
+
? response.supported_manifest_versions
|
|
111
|
+
: [];
|
|
112
|
+
if (!response)
|
|
113
|
+
return { available: false, reason: 'not_advertised' };
|
|
114
|
+
const supported_save_layout_versions = saveLayoutVersions(response);
|
|
115
|
+
if (!versions.includes(2)) {
|
|
116
|
+
return {
|
|
117
|
+
available: false,
|
|
118
|
+
reason: 'not_advertised',
|
|
119
|
+
supported_save_layout_versions
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
if (response.sync_revision !== input.sync_revision ||
|
|
123
|
+
response.sync_root_hash !== input.sync_root_hash) {
|
|
124
|
+
return {
|
|
125
|
+
available: false,
|
|
126
|
+
reason: 'worktree_moved',
|
|
127
|
+
supported_save_layout_versions,
|
|
128
|
+
current_revision: numberOrNull(response.revision),
|
|
129
|
+
current_sync_revision: numberOrNull(response.sync_revision)
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
const tree_root_hash = graph_sync_hash_schema.safeParse(response.sync_tree_root_hash);
|
|
133
|
+
if (!tree_root_hash.success) {
|
|
134
|
+
const unavailable = response.sync_tree_unavailable;
|
|
135
|
+
// The server gives neither a root nor a reason when it could not build
|
|
136
|
+
// the root this time; the next save asks again.
|
|
137
|
+
if (typeof unavailable !== 'object' || unavailable === null) {
|
|
138
|
+
return {
|
|
139
|
+
available: false,
|
|
140
|
+
reason: 'tree_root_unavailable',
|
|
141
|
+
supported_save_layout_versions
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
available: false,
|
|
146
|
+
reason: 'state_entity_id',
|
|
147
|
+
supported_save_layout_versions,
|
|
148
|
+
entity_id: 'entity_id' in unavailable && typeof unavailable.entity_id === 'string'
|
|
149
|
+
? unavailable.entity_id
|
|
150
|
+
: null
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
available: true,
|
|
155
|
+
base_tree_root_hash: tree_root_hash.data,
|
|
156
|
+
supported_save_layout_versions
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* The prepare request a resumed save sends again. A save journaled with
|
|
161
|
+
* node_layouts asks the server again first and leaves them out only when the
|
|
162
|
+
* server answers without declaring the capability, so a server rolled back to
|
|
163
|
+
* a version without it, whose strict schema refuses the field, does not refuse
|
|
164
|
+
* the save on every sync. A server that did not answer keeps them: a
|
|
165
|
+
* transient failure must neither leave finalize the whole graph to lay out
|
|
166
|
+
* nor change the request hash of a transaction the server may already hold.
|
|
167
|
+
*/
|
|
168
|
+
async function prepareRequestToResend(input) {
|
|
169
|
+
const { node_layouts, ...without_layouts } = input.payload.prepare_request;
|
|
170
|
+
if (!node_layouts)
|
|
171
|
+
return input.payload.prepare_request;
|
|
172
|
+
const negotiated = await negotiateTreeSave({
|
|
173
|
+
client: input.client,
|
|
174
|
+
worktree_id: input.worktree_id,
|
|
175
|
+
sync_revision: input.payload.prepare_request.expected_sync_revision,
|
|
176
|
+
sync_root_hash: input.payload.base_sync_root_hash,
|
|
177
|
+
request_options: input.request_options
|
|
178
|
+
});
|
|
179
|
+
const declared = negotiated.supported_save_layout_versions;
|
|
180
|
+
if (declared === undefined)
|
|
181
|
+
return input.payload.prepare_request;
|
|
182
|
+
return declared.includes(1) ? input.payload.prepare_request : without_layouts;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Builds the base and target trees and names what the save changes. The base
|
|
186
|
+
* tree's root must be the one the server gave for the same state: the two
|
|
187
|
+
* parties compute a tree from its bindings alone.
|
|
188
|
+
*/
|
|
189
|
+
export function planTreeSave(input) {
|
|
190
|
+
const base_tree = buildGraphSyncManifestTree(input.base_manifest.bindings);
|
|
191
|
+
if (base_tree.root_hash !== input.base_tree_root_hash) {
|
|
192
|
+
throw new OperationRefusalError(`The server gives ${input.base_tree_root_hash} as the manifest version 2 root of the worktree's state, and this client computes ${base_tree.root_hash} from the same bindings. Nothing was saved.`);
|
|
193
|
+
}
|
|
194
|
+
let target_tree;
|
|
195
|
+
try {
|
|
196
|
+
target_tree = buildGraphSyncManifestTree(input.target_manifest.bindings);
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
if (!(error instanceof GraphSyncManifestTreeError))
|
|
200
|
+
throw error;
|
|
201
|
+
return {
|
|
202
|
+
available: false,
|
|
203
|
+
reason: 'target_entity_id',
|
|
204
|
+
detail: error.message
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
const changed_manifest_node_hashes = [...target_tree.nodes.keys()]
|
|
208
|
+
.filter((hash) => !base_tree.nodes.has(hash))
|
|
209
|
+
.sort();
|
|
210
|
+
const changed_object_hashes = [
|
|
211
|
+
...new Set(input.changed_bindings.map((binding) => binding.object_hash))
|
|
212
|
+
].sort();
|
|
213
|
+
// The server holds a transaction's uploads up to a bound, counting what it
|
|
214
|
+
// does not already store. Counting every changed object and node errs on
|
|
215
|
+
// the side of refusing here, before anything is journaled, rather than
|
|
216
|
+
// leaving a change pending that every sync would upload again.
|
|
217
|
+
const upload_bytes = changed_object_hashes.reduce((total, hash) => total + (input.object_byte_counts.get(hash) ?? 0), 0) +
|
|
218
|
+
changed_manifest_node_hashes.reduce((total, hash) => total +
|
|
219
|
+
Buffer.byteLength(canonicalGraphSyncJson(target_tree.nodes.get(hash))), 0);
|
|
220
|
+
if (upload_bytes > TRANSACTION_UPLOAD_MAX_BYTES) {
|
|
221
|
+
throw new OperationRefusalError(`This save uploads up to ${upload_bytes} bytes of objects and manifest nodes, above the ${TRANSACTION_UPLOAD_MAX_BYTES}-byte bound the server holds for one save. Save the graph in parts. Nothing was saved.`);
|
|
222
|
+
}
|
|
223
|
+
return {
|
|
224
|
+
available: true,
|
|
225
|
+
base_tree_root_hash: base_tree.root_hash,
|
|
226
|
+
target_tree_root_hash: target_tree.root_hash,
|
|
227
|
+
changed_manifest_node_hashes,
|
|
228
|
+
changed_object_hashes
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
export function parseTreeSavePayload(payload_json) {
|
|
232
|
+
const parsed = JSON.parse(payload_json);
|
|
233
|
+
if (typeof parsed !== 'object' ||
|
|
234
|
+
parsed === null ||
|
|
235
|
+
Array.isArray(parsed) ||
|
|
236
|
+
!('protocol' in parsed) ||
|
|
237
|
+
parsed.protocol !== TREE_SAVE_PROTOCOL) {
|
|
238
|
+
return null;
|
|
239
|
+
}
|
|
240
|
+
const value = parsed;
|
|
241
|
+
const hashes = graph_sync_hash_schema.array();
|
|
242
|
+
return {
|
|
243
|
+
protocol: TREE_SAVE_PROTOCOL,
|
|
244
|
+
prepare_request: worktree_tree_save_prepare_request_schema.parse(value.prepare_request),
|
|
245
|
+
base_sync_root_hash: graph_sync_hash_schema.parse(value.base_sync_root_hash),
|
|
246
|
+
changed_manifest_node_hashes: hashes.parse(value.changed_manifest_node_hashes),
|
|
247
|
+
changed_object_hashes: hashes.parse(value.changed_object_hashes),
|
|
248
|
+
target_manifest: graph_sync_manifest_schema.parse(value.target_manifest)
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
/** Asks about the hashes a page at a time, manifest nodes first. */
|
|
252
|
+
async function readMissing(input) {
|
|
253
|
+
const missing = { manifest_node_hashes: [], object_hashes: [] };
|
|
254
|
+
const { manifest_node_hashes, object_hashes } = input.hashes;
|
|
255
|
+
let node_offset = 0;
|
|
256
|
+
let object_offset = 0;
|
|
257
|
+
while (node_offset < manifest_node_hashes.length ||
|
|
258
|
+
object_offset < object_hashes.length) {
|
|
259
|
+
const node_page = manifest_node_hashes.slice(node_offset, node_offset + WORKTREE_TREE_SAVE_MISSING_PAGE_BOUND);
|
|
260
|
+
const object_page = object_hashes.slice(object_offset, object_offset + WORKTREE_TREE_SAVE_MISSING_PAGE_BOUND - node_page.length);
|
|
261
|
+
node_offset += node_page.length;
|
|
262
|
+
object_offset += object_page.length;
|
|
263
|
+
const answer = await readWorktreeTreeSaveMissing(input.client, input.worktree_id, input.transaction_id, { manifest_node_hashes: node_page, object_hashes: object_page }, operationRequestOptions(input.request_options));
|
|
264
|
+
missing.manifest_node_hashes.push(...answer.missing_manifest_node_hashes);
|
|
265
|
+
missing.object_hashes.push(...answer.missing_object_hashes);
|
|
266
|
+
}
|
|
267
|
+
return missing;
|
|
268
|
+
}
|
|
269
|
+
/** A fetch undici rejected because the server closed its connection. */
|
|
270
|
+
function closedConnection(error) {
|
|
271
|
+
const cause = error instanceof TypeError ? error.cause : undefined;
|
|
272
|
+
const code = cause && typeof cause === 'object' && 'code' in cause
|
|
273
|
+
? cause.code
|
|
274
|
+
: undefined;
|
|
275
|
+
return typeof code === 'string' && CLOSED_CONNECTION_CODES.has(code);
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Uploads manifest nodes and objects in requests bounded by entry count and
|
|
279
|
+
* by bytes. An entry larger than the byte bound travels alone.
|
|
280
|
+
*/
|
|
281
|
+
async function upload(input) {
|
|
282
|
+
let manifest_nodes = [];
|
|
283
|
+
let objects = [];
|
|
284
|
+
let bytes = 0;
|
|
285
|
+
// A request the platform cut off for time is sent again in halves, down to
|
|
286
|
+
// one entry, and one whose connection the server closed is sent again
|
|
287
|
+
// whole after a wait: the server holds what an earlier request uploaded.
|
|
288
|
+
const send = async (batch_nodes, batch_objects, attempt = 1) => {
|
|
289
|
+
markOperationDispatched();
|
|
290
|
+
const request_options = operationRequestOptions(input.request_options);
|
|
291
|
+
try {
|
|
292
|
+
await uploadWorktreeTreeSaveObjects(input.client, input.worktree_id, input.transaction_id, { objects: batch_objects, manifest_nodes: batch_nodes }, request_options);
|
|
293
|
+
}
|
|
294
|
+
catch (error) {
|
|
295
|
+
if (closedConnection(error) && attempt < UPLOAD_CONNECTION_ATTEMPTS) {
|
|
296
|
+
await sleep(UPLOAD_CONNECTION_FIRST_WAIT_MS * 2 ** (attempt - 1), request_options?.signal);
|
|
297
|
+
await send(batch_nodes, batch_objects, attempt + 1);
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
const entries = batch_nodes.length + batch_objects.length;
|
|
301
|
+
if (!(error instanceof GraphApiError) ||
|
|
302
|
+
!UPLOAD_TIMEOUT_STATUSES.has(error.status) ||
|
|
303
|
+
entries <= 1) {
|
|
304
|
+
throw error;
|
|
305
|
+
}
|
|
306
|
+
const half = Math.ceil(entries / 2);
|
|
307
|
+
const node_half = Math.min(half, batch_nodes.length);
|
|
308
|
+
await send(batch_nodes.slice(0, node_half), batch_objects.slice(0, half - node_half));
|
|
309
|
+
await send(batch_nodes.slice(node_half), batch_objects.slice(half - node_half));
|
|
310
|
+
}
|
|
311
|
+
};
|
|
312
|
+
const flush = async () => {
|
|
313
|
+
if (manifest_nodes.length + objects.length === 0)
|
|
314
|
+
return;
|
|
315
|
+
await send(manifest_nodes, objects);
|
|
316
|
+
manifest_nodes = [];
|
|
317
|
+
objects = [];
|
|
318
|
+
bytes = 0;
|
|
319
|
+
};
|
|
320
|
+
const reserve = async (entry) => {
|
|
321
|
+
const entry_bytes = Buffer.byteLength(JSON.stringify(entry)) + 1;
|
|
322
|
+
if (manifest_nodes.length + objects.length >=
|
|
323
|
+
WORKTREE_TREE_SAVE_UPLOAD_BOUND ||
|
|
324
|
+
bytes + entry_bytes > UPLOAD_REQUEST_MAX_BYTES) {
|
|
325
|
+
await flush();
|
|
326
|
+
}
|
|
327
|
+
bytes += entry_bytes;
|
|
328
|
+
};
|
|
329
|
+
for (const node_hash of [
|
|
330
|
+
...new Set(input.hashes.manifest_node_hashes)
|
|
331
|
+
].sort()) {
|
|
332
|
+
const node = input.tree.nodes.get(node_hash);
|
|
333
|
+
if (!node) {
|
|
334
|
+
throw new Error(`The server asked for manifest node ${node_hash}, which the save's tree does not hold.`);
|
|
335
|
+
}
|
|
336
|
+
const entry = { node_hash, node };
|
|
337
|
+
await reserve(entry);
|
|
338
|
+
manifest_nodes.push(entry);
|
|
339
|
+
}
|
|
340
|
+
for (const object_hash of [...new Set(input.hashes.object_hashes)].sort()) {
|
|
341
|
+
const entry = {
|
|
342
|
+
object_hash,
|
|
343
|
+
object: await readVerifiedSyncObject({ store: input.store, object_hash })
|
|
344
|
+
};
|
|
345
|
+
await reserve(entry);
|
|
346
|
+
objects.push(entry);
|
|
347
|
+
}
|
|
348
|
+
await flush();
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* What a transaction's state says about its finalize: the save's outcome, the
|
|
352
|
+
* hashes still to upload, or null while it is not ended. A failed save throws
|
|
353
|
+
* the server's refusal, with its validation issues.
|
|
354
|
+
*/
|
|
355
|
+
function backgroundFinalizeAnswer(transaction_id, status) {
|
|
356
|
+
if (status.status === 'finalized' && status.response) {
|
|
357
|
+
return {
|
|
358
|
+
status: 'answered',
|
|
359
|
+
response: { accepted: true, worktree_change: status.response }
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
if (status.status === 'expired') {
|
|
363
|
+
throw new Error(`Save transaction ${transaction_id} expired before it was finalized. Run sdlc sync to send the change again.`);
|
|
364
|
+
}
|
|
365
|
+
const outcome = status.outcome;
|
|
366
|
+
// A save that ran out of attempts failed for no reason of its content:
|
|
367
|
+
// asking for finalize again queues it again.
|
|
368
|
+
if (status.status === 'failed' &&
|
|
369
|
+
outcome?.body.reason === 'finalize_attempts_exhausted') {
|
|
370
|
+
return {
|
|
371
|
+
status: 'missing',
|
|
372
|
+
missing_manifest_node_hashes: [],
|
|
373
|
+
missing_object_hashes: []
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
if (status.status === 'failed' || status.status === 'conflict') {
|
|
377
|
+
const answer = outcome
|
|
378
|
+
? readWorktreeTreeSaveFinalizeAnswer(outcome.http_status, outcome.body)
|
|
379
|
+
: null;
|
|
380
|
+
if (answer)
|
|
381
|
+
return answer;
|
|
382
|
+
throw new GraphApiError({
|
|
383
|
+
status: outcome?.http_status ?? 500,
|
|
384
|
+
reason: typeof outcome?.body.error === 'string'
|
|
385
|
+
? outcome.body.error
|
|
386
|
+
: `Save transaction ${transaction_id} ended ${status.status}.`,
|
|
387
|
+
issues: Array.isArray(outcome?.body.issues) ? outcome.body.issues : []
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
if (status.status === 'prepared' && outcome) {
|
|
391
|
+
return readWorktreeTreeSaveFinalizeAnswer(outcome.http_status, outcome.body);
|
|
392
|
+
}
|
|
393
|
+
return null;
|
|
394
|
+
}
|
|
395
|
+
function sleep(ms, signal) {
|
|
396
|
+
return new Promise((resolve, reject) => {
|
|
397
|
+
if (signal?.aborted) {
|
|
398
|
+
reject(signal.reason);
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
const timer = setTimeout(() => {
|
|
402
|
+
signal?.removeEventListener('abort', abort);
|
|
403
|
+
resolve();
|
|
404
|
+
}, ms);
|
|
405
|
+
const abort = () => {
|
|
406
|
+
clearTimeout(timer);
|
|
407
|
+
reject(signal?.reason);
|
|
408
|
+
};
|
|
409
|
+
signal?.addEventListener('abort', abort, { once: true });
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
/** Asks the server to finalize in the background. */
|
|
413
|
+
function requestBackgroundFinalize(input) {
|
|
414
|
+
return finalizeWorktreeTreeSave(input.client, input.worktree_id, input.transaction_id, { ...operationRequestOptions(input.request_options), background: true });
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Asks for finalize of a save already finalizing, only to start a claim. A
|
|
418
|
+
* server error is read as still finalizing: a server older than the request's
|
|
419
|
+
* purpose queues it first, which waits on a running finalize's row lock past
|
|
420
|
+
* its statement timeout and answers 500, while the attempt goes on.
|
|
421
|
+
*/
|
|
422
|
+
async function askFinalizeAgain(input) {
|
|
423
|
+
try {
|
|
424
|
+
return await requestBackgroundFinalize(input);
|
|
425
|
+
}
|
|
426
|
+
catch (error) {
|
|
427
|
+
if (error instanceof GraphApiError && error.status >= 500) {
|
|
428
|
+
return { status: 'finalizing' };
|
|
429
|
+
}
|
|
430
|
+
throw error;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* Polls a transaction the server finalizes in the background until it ends,
|
|
435
|
+
* backing off from one second to five, and asks for finalize again every
|
|
436
|
+
* FINALIZE_REREQUEST_MS so an attempt released for retry resumes. Stops with
|
|
437
|
+
* TreeSaveStillFinalizingError after the poll limit; the change stays pending.
|
|
438
|
+
*/
|
|
439
|
+
async function awaitBackgroundFinalize(input) {
|
|
440
|
+
const deadline = Date.now() + (input.limit_ms ?? FINALIZE_POLL_LIMIT_MS);
|
|
441
|
+
let delay = FINALIZE_POLL_FIRST_MS;
|
|
442
|
+
// Every caller has just asked for finalize.
|
|
443
|
+
let requested_at = Date.now();
|
|
444
|
+
for (;;) {
|
|
445
|
+
const options = operationRequestOptions(input.request_options);
|
|
446
|
+
await sleep(delay, options?.signal);
|
|
447
|
+
const status = await getWorktreeSaveTransactionStatus(input.client, input.worktree_id, input.transaction_id, options);
|
|
448
|
+
if (!status.found) {
|
|
449
|
+
throw new Error(`Save transaction ${input.transaction_id} was not found while it was finalizing. Run sdlc sync to send the change again.`);
|
|
450
|
+
}
|
|
451
|
+
const answer = backgroundFinalizeAnswer(input.transaction_id, status);
|
|
452
|
+
if (answer)
|
|
453
|
+
return answer;
|
|
454
|
+
// Returned to prepared with nothing missing: ask for finalize again.
|
|
455
|
+
if (status.status !== 'finalizing') {
|
|
456
|
+
return {
|
|
457
|
+
status: 'missing',
|
|
458
|
+
missing_manifest_node_hashes: [],
|
|
459
|
+
missing_object_hashes: []
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
if (Date.now() + delay > deadline) {
|
|
463
|
+
throw new TreeSaveStillFinalizingError(input.transaction_id);
|
|
464
|
+
}
|
|
465
|
+
if (Date.now() - requested_at >= FINALIZE_REREQUEST_MS) {
|
|
466
|
+
const asked = await askFinalizeAgain(input);
|
|
467
|
+
if (asked.status !== 'finalizing')
|
|
468
|
+
return asked;
|
|
469
|
+
requested_at = Date.now();
|
|
470
|
+
}
|
|
471
|
+
delay = Math.min(delay * 2, FINALIZE_POLL_MAX_MS);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
/**
|
|
475
|
+
* Sends a journaled version 2 save, or resumes one from the transaction the
|
|
476
|
+
* pending change recorded. Every step may be repeated: the server answers a
|
|
477
|
+
* finished save with its receipt, and holds what was already uploaded.
|
|
478
|
+
*/
|
|
479
|
+
export async function executeTreeSave(input) {
|
|
480
|
+
const { prepare_request } = input.payload;
|
|
481
|
+
const tree = buildGraphSyncManifestTree(input.payload.target_manifest.bindings);
|
|
482
|
+
if (tree.root_hash !== prepare_request.target_sync_root_hash) {
|
|
483
|
+
throw new Error('Pending graph sync manifest tree failed root verification.');
|
|
484
|
+
}
|
|
485
|
+
let transaction_id = input.pending_change.transaction_id;
|
|
486
|
+
let should_prepare = !transaction_id;
|
|
487
|
+
// Hashes a background finalize found absent, stored on the transaction.
|
|
488
|
+
let resumed_missing = null;
|
|
489
|
+
if (transaction_id) {
|
|
490
|
+
const status = await getWorktreeSaveTransactionStatus(input.client, input.worktree_id, transaction_id, operationRequestOptions(input.request_options));
|
|
491
|
+
if (status.found && status.status === 'finalized' && status.response) {
|
|
492
|
+
return { accepted: true, worktree_change: status.response };
|
|
493
|
+
}
|
|
494
|
+
if (status.found && status.status === 'finalizing') {
|
|
495
|
+
setOperationPhase('finalize');
|
|
496
|
+
// An attempt released for retry stays finalizing until a claim; asking
|
|
497
|
+
// starts one, and does nothing while an attempt holds the lease.
|
|
498
|
+
const wait_input = {
|
|
499
|
+
client: input.client,
|
|
500
|
+
worktree_id: input.worktree_id,
|
|
501
|
+
transaction_id,
|
|
502
|
+
request_options: input.request_options
|
|
503
|
+
};
|
|
504
|
+
const asked = await askFinalizeAgain(wait_input);
|
|
505
|
+
const waited = asked.status === 'finalizing'
|
|
506
|
+
? await awaitBackgroundFinalize(wait_input)
|
|
507
|
+
: asked;
|
|
508
|
+
if (waited.status === 'answered')
|
|
509
|
+
return waited.response;
|
|
510
|
+
if (waited.status === 'missing') {
|
|
511
|
+
resumed_missing = {
|
|
512
|
+
manifest_node_hashes: waited.missing_manifest_node_hashes,
|
|
513
|
+
object_hashes: waited.missing_object_hashes
|
|
514
|
+
};
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
else if (status.found && status.status !== 'expired') {
|
|
518
|
+
const ended = backgroundFinalizeAnswer(transaction_id, status);
|
|
519
|
+
if (ended?.status === 'answered')
|
|
520
|
+
return ended.response;
|
|
521
|
+
}
|
|
522
|
+
if (!status.found || status.status === 'expired')
|
|
523
|
+
should_prepare = true;
|
|
524
|
+
}
|
|
525
|
+
if (should_prepare) {
|
|
526
|
+
setOperationPhase('prepare');
|
|
527
|
+
markOperationDispatched();
|
|
528
|
+
const prepared = await prepareWorktreeTreeSave(input.client, input.worktree_id, input.just_negotiated && !transaction_id
|
|
529
|
+
? prepare_request
|
|
530
|
+
: await prepareRequestToResend(input), operationRequestOptions(input.request_options));
|
|
531
|
+
if (prepared.status === 'conflict') {
|
|
532
|
+
markOperationResult(false);
|
|
533
|
+
return {
|
|
534
|
+
accepted: false,
|
|
535
|
+
reason: prepared.reason,
|
|
536
|
+
workspace_id: input.worktree_id,
|
|
537
|
+
expected_sync_revision: prepare_request.expected_sync_revision,
|
|
538
|
+
expected_sync_root_hash: input.payload.base_sync_root_hash,
|
|
539
|
+
current_revision: prepared.current_revision,
|
|
540
|
+
current_sync_revision: prepared.current_sync_revision,
|
|
541
|
+
current_sync_root_hash: prepared.current_sync_root_hash
|
|
542
|
+
};
|
|
543
|
+
}
|
|
544
|
+
if (prepared.status === 'finalized') {
|
|
545
|
+
return { accepted: true, worktree_change: prepared.response };
|
|
546
|
+
}
|
|
547
|
+
const previous_transaction_id = transaction_id;
|
|
548
|
+
transaction_id = prepared.transaction_id;
|
|
549
|
+
input.store.setPendingChangeTransaction({
|
|
550
|
+
change_id: input.pending_change.id,
|
|
551
|
+
transaction_id,
|
|
552
|
+
previous_transaction_id
|
|
553
|
+
});
|
|
554
|
+
const context = currentOperation();
|
|
555
|
+
if (context?.pending)
|
|
556
|
+
context.pending.transaction_id = transaction_id;
|
|
557
|
+
}
|
|
558
|
+
if (!transaction_id) {
|
|
559
|
+
throw new Error('Graph save did not produce a transaction id.');
|
|
560
|
+
}
|
|
561
|
+
// A version 2 transaction's status lists nothing missing, so a resumed
|
|
562
|
+
// save asks again about everything the change names.
|
|
563
|
+
setOperationPhase('upload');
|
|
564
|
+
let missing = resumed_missing && !should_prepare
|
|
565
|
+
? resumed_missing
|
|
566
|
+
: await readMissing({
|
|
567
|
+
client: input.client,
|
|
568
|
+
worktree_id: input.worktree_id,
|
|
569
|
+
transaction_id,
|
|
570
|
+
hashes: {
|
|
571
|
+
manifest_node_hashes: input.payload.changed_manifest_node_hashes,
|
|
572
|
+
object_hashes: input.payload.changed_object_hashes
|
|
573
|
+
},
|
|
574
|
+
request_options: input.request_options
|
|
575
|
+
});
|
|
576
|
+
for (let attempt = 1;; attempt += 1) {
|
|
577
|
+
setOperationPhase('upload');
|
|
578
|
+
await upload({
|
|
579
|
+
store: input.store,
|
|
580
|
+
client: input.client,
|
|
581
|
+
worktree_id: input.worktree_id,
|
|
582
|
+
transaction_id,
|
|
583
|
+
tree,
|
|
584
|
+
hashes: missing,
|
|
585
|
+
request_options: input.request_options
|
|
586
|
+
});
|
|
587
|
+
setOperationPhase('finalize');
|
|
588
|
+
markOperationDispatched();
|
|
589
|
+
const requested = await requestBackgroundFinalize({
|
|
590
|
+
client: input.client,
|
|
591
|
+
worktree_id: input.worktree_id,
|
|
592
|
+
transaction_id,
|
|
593
|
+
request_options: input.request_options
|
|
594
|
+
});
|
|
595
|
+
const finalized = requested.status === 'finalizing'
|
|
596
|
+
? await awaitBackgroundFinalize({
|
|
597
|
+
client: input.client,
|
|
598
|
+
worktree_id: input.worktree_id,
|
|
599
|
+
transaction_id,
|
|
600
|
+
request_options: input.request_options
|
|
601
|
+
})
|
|
602
|
+
: requested;
|
|
603
|
+
if (finalized.status === 'answered')
|
|
604
|
+
return finalized.response;
|
|
605
|
+
if (attempt >= FINALIZE_ATTEMPTS) {
|
|
606
|
+
throw new Error(`The server still reports ${finalized.missing_manifest_node_hashes.length +
|
|
607
|
+
finalized.missing_object_hashes.length} missing hashes after ${FINALIZE_ATTEMPTS} uploads.`);
|
|
608
|
+
}
|
|
609
|
+
missing = {
|
|
610
|
+
manifest_node_hashes: finalized.missing_manifest_node_hashes,
|
|
611
|
+
object_hashes: finalized.missing_object_hashes
|
|
612
|
+
};
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
//# sourceMappingURL=tree-save.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-save.js","sourceRoot":"","sources":["../../src/local/tree-save.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,gCAAgC,EAChC,qBAAqB,EACrB,uBAAuB,EACvB,kCAAkC,EAClC,2BAA2B,EAC3B,6BAA6B,EAI9B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,yCAAyC,EACzC,iCAAiC,EACjC,sBAAsB,EACtB,0BAA0B,EAC1B,0BAA0B,EAC1B,qCAAqC,EACrC,+BAA+B,EAC/B,yCAAyC,EAC1C,MAAM,4BAA4B,CAAC;AAWpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AAGxB;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAClD,gEAAgE;AAChE,MAAM,wBAAwB,GAAG,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC;AACnD,wDAAwD;AACxD,6CAA6C;AAC7C,MAAM,4BAA4B,GAAG,EAAE,GAAG,KAAK,GAAG,KAAK,CAAC;AACxD,wEAAwE;AACxE,0BAA0B;AAC1B,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,sEAAsE;AACtE,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACpD,6EAA6E;AAC7E,8EAA8E;AAC9E,4EAA4E;AAC5E,wEAAwE;AACxE,MAAM,0BAA0B,GAAG,CAAC,CAAC;AACrC,MAAM,+BAA+B,GAAG,KAAK,CAAC;AAC9C,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC;AAC1E,6EAA6E;AAC7E,+EAA+E;AAC/E,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;AAC9C,MAAM,sBAAsB,GAAG,KAAK,CAAC;AACrC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AACnC,6EAA6E;AAC7E,0EAA0E;AAC1E,iDAAiD;AACjD,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAErC,iFAAiF;AACjF,MAAM,CAAC,MAAM,oCAAoC,GAAG,EAAE,CAAC;AAEvD;;;GAGG;AACH,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IAC5C,SAAS,GAAG,oCAAoC,CAAC;IACjD,cAAc,CAAS;IAEhC,YAAY,cAAsB;QAChC,KAAK,CACH,mDAAmD,cAAc,2DAA2D,CAC7H,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;QAC3C,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;CACF;AA2BD,MAAM,UAAU,uBAAuB,CACrC,OAAmC;IAEnC,cAAc,EAAE,CAAC;IACjB,MAAM,MAAM,GAAG,gBAAgB,EAAE,EAAE,MAAM,CAAC;IAC1C,IAAI,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC;IAC5B,OAAO;QACL,GAAG,OAAO;QACV,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;KAC7E,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;QAC7D,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,gFAAgF;AAChF,SAAS,kBAAkB,CAAC,QAAiC;IAC3D,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC3D,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC,MAAM,CAC5C,CAAC,OAAO,EAAqB,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAC9D;QACH,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAMvC;IAgBC,IAAI,QAAwC,CAAC;IAC7C,IAAI,CAAC;QACH,QAAQ,GAAG,CAAC,MAAM,qBAAqB,CACrC,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,WAAW,EACjB;YACE,kBAAkB,EAAE,KAAK,CAAC,aAAa;YACvC,mBAAmB,EAAE,KAAK,CAAC,cAAc;YACzC,2BAA2B,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACnC,6CAA6C,EAAE;gBAC7C,GAAG,yCAAyC;aAC7C;YACD,2CAA2C,EAAE;gBAC3C,GAAG,iCAAiC;aACrC;SACF,EACD,uBAAuB,CAAC,KAAK,CAAC,eAAe,CAAC,CAC/C,CAA8C,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,oEAAoE;QACpE,wEAAwE;QACxE,qEAAqE;QACrE,IAAI,CAAC,CAAC,KAAK,YAAY,aAAa,CAAC;YAAE,MAAM,KAAK,CAAC;QACnD,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,oBAAoB;YAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,2BAA2B,CAAC;QACnE,CAAC,CAAC,QAAQ,CAAC,2BAA2B;QACtC,CAAC,CAAC,EAAE,CAAC;IACP,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACrE,MAAM,8BAA8B,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACpE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,gBAAgB;YACxB,8BAA8B;SAC/B,CAAC;IACJ,CAAC;IACD,IACE,QAAQ,CAAC,aAAa,KAAK,KAAK,CAAC,aAAa;QAC9C,QAAQ,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc,EAChD,CAAC;QACD,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,gBAAgB;YACxB,8BAA8B;YAC9B,gBAAgB,EAAE,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACjD,qBAAqB,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC;SAC5D,CAAC;IACJ,CAAC;IACD,MAAM,cAAc,GAAG,sBAAsB,CAAC,SAAS,CACrD,QAAQ,CAAC,mBAAmB,CAC7B,CAAC;IACF,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,QAAQ,CAAC,qBAAqB,CAAC;QACnD,uEAAuE;QACvE,gDAAgD;QAChD,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YAC5D,OAAO;gBACL,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,uBAAuB;gBAC/B,8BAA8B;aAC/B,CAAC;QACJ,CAAC;QACD,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,iBAAiB;YACzB,8BAA8B;YAC9B,SAAS,EACP,WAAW,IAAI,WAAW,IAAI,OAAO,WAAW,CAAC,SAAS,KAAK,QAAQ;gBACrE,CAAC,CAAC,WAAW,CAAC,SAAS;gBACvB,CAAC,CAAC,IAAI;SACX,CAAC;IACJ,CAAC;IACD,OAAO;QACL,SAAS,EAAE,IAAI;QACf,mBAAmB,EAAE,cAAc,CAAC,IAAI;QACxC,8BAA8B;KAC/B,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,sBAAsB,CAAC,KAKrC;IACC,MAAM,EAAE,YAAY,EAAE,GAAG,eAAe,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;IAC3E,IAAI,CAAC,YAAY;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;IACxD,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC;QACzC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,sBAAsB;QACnE,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,mBAAmB;QACjD,eAAe,EAAE,KAAK,CAAC,eAAe;KACvC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,UAAU,CAAC,8BAA8B,CAAC;IAC3D,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;IACjE,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC;AAChF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAO5B;IASC,MAAM,SAAS,GAAG,0BAA0B,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3E,IAAI,SAAS,CAAC,SAAS,KAAK,KAAK,CAAC,mBAAmB,EAAE,CAAC;QACtD,MAAM,IAAI,qBAAqB,CAC7B,oBAAoB,KAAK,CAAC,mBAAmB,qFAAqF,SAAS,CAAC,SAAS,6CAA6C,CACnM,CAAC;IACJ,CAAC;IACD,IAAI,WAA0D,CAAC;IAC/D,IAAI,CAAC;QACH,WAAW,GAAG,0BAA0B,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,0BAA0B,CAAC;YAAE,MAAM,KAAK,CAAC;QAChE,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,kBAAkB;YAC1B,MAAM,EAAE,KAAK,CAAC,OAAO;SACtB,CAAC;IACJ,CAAC;IACD,MAAM,4BAA4B,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC/D,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAC5C,IAAI,EAAE,CAAC;IACV,MAAM,qBAAqB,GAAG;QAC5B,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;KACzE,CAAC,IAAI,EAAE,CAAC;IACT,2EAA2E;IAC3E,yEAAyE;IACzE,uEAAuE;IACvE,+DAA+D;IAC/D,MAAM,YAAY,GAChB,qBAAqB,CAAC,MAAM,CAC1B,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAClE,CAAC,CACF;QACD,4BAA4B,CAAC,MAAM,CACjC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CACd,KAAK;YACL,MAAM,CAAC,UAAU,CAAC,sBAAsB,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EACxE,CAAC,CACF,CAAC;IACJ,IAAI,YAAY,GAAG,4BAA4B,EAAE,CAAC;QAChD,MAAM,IAAI,qBAAqB,CAC7B,2BAA2B,YAAY,mDAAmD,4BAA4B,wFAAwF,CAC/M,CAAC;IACJ,CAAC;IACD,OAAO;QACL,SAAS,EAAE,IAAI;QACf,mBAAmB,EAAE,SAAS,CAAC,SAAS;QACxC,qBAAqB,EAAE,WAAW,CAAC,SAAS;QAC5C,4BAA4B;QAC5B,qBAAqB;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,YAAoB;IAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAY,CAAC;IACnD,IACE,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,KAAK,IAAI;QACf,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACrB,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC;QACvB,MAAM,CAAC,QAAQ,KAAK,kBAAkB,EACtC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,MAAiC,CAAC;IAChD,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,EAAE,CAAC;IAC9C,OAAO;QACL,QAAQ,EAAE,kBAAkB;QAC5B,eAAe,EAAE,yCAAyC,CAAC,KAAK,CAC9D,KAAK,CAAC,eAAe,CACtB;QACD,mBAAmB,EAAE,sBAAsB,CAAC,KAAK,CAC/C,KAAK,CAAC,mBAAmB,CAC1B;QACD,4BAA4B,EAAE,MAAM,CAAC,KAAK,CACxC,KAAK,CAAC,4BAA4B,CACnC;QACD,qBAAqB,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC;QAChE,eAAe,EAAE,0BAA0B,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC;KACzE,CAAC;AACJ,CAAC;AAOD,oEAAoE;AACpE,KAAK,UAAU,WAAW,CAAC,KAM1B;IACC,MAAM,OAAO,GAAW,EAAE,oBAAoB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;IACxE,MAAM,EAAE,oBAAoB,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;IAC7D,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,OACE,WAAW,GAAG,oBAAoB,CAAC,MAAM;QACzC,aAAa,GAAG,aAAa,CAAC,MAAM,EACpC,CAAC;QACD,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAC1C,WAAW,EACX,WAAW,GAAG,qCAAqC,CACpD,CAAC;QACF,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CACrC,aAAa,EACb,aAAa,GAAG,qCAAqC,GAAG,SAAS,CAAC,MAAM,CACzE,CAAC;QACF,WAAW,IAAI,SAAS,CAAC,MAAM,CAAC;QAChC,aAAa,IAAI,WAAW,CAAC,MAAM,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAC9C,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,cAAc,EACpB,EAAE,oBAAoB,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,EAC/D,uBAAuB,CAAC,KAAK,CAAC,eAAe,CAAC,CAC/C,CAAC;QACF,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAC;QAC1E,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,wEAAwE;AACxE,SAAS,gBAAgB,CAAC,KAAc;IACtC,MAAM,KAAK,GAAG,KAAK,YAAY,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,MAAM,IAAI,GACR,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK;QACnD,CAAC,CAAC,KAAK,CAAC,IAAI;QACZ,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACvE,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,MAAM,CAAC,KAQrB;IACC,IAAI,cAAc,GAAoC,EAAE,CAAC;IACzD,IAAI,OAAO,GAA8B,EAAE,CAAC;IAC5C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,2EAA2E;IAC3E,sEAAsE;IACtE,yEAAyE;IACzE,MAAM,IAAI,GAAG,KAAK,EAChB,WAA4C,EAC5C,aAAwC,EACxC,OAAO,GAAG,CAAC,EACI,EAAE;QACjB,uBAAuB,EAAE,CAAC;QAC1B,MAAM,eAAe,GAAG,uBAAuB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACvE,IAAI,CAAC;YACH,MAAM,6BAA6B,CACjC,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,cAAc,EACpB,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,EACvD,eAAe,CAChB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,gBAAgB,CAAC,KAAK,CAAC,IAAI,OAAO,GAAG,0BAA0B,EAAE,CAAC;gBACpE,MAAM,KAAK,CACT,+BAA+B,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EACpD,eAAe,EAAE,MAAM,CACxB,CAAC;gBACF,MAAM,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;gBACpD,OAAO;YACT,CAAC;YACD,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;YAC1D,IACE,CAAC,CAAC,KAAK,YAAY,aAAa,CAAC;gBACjC,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;gBAC1C,OAAO,IAAI,CAAC,EACZ,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YACpC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;YACrD,MAAM,IAAI,CACR,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,EAC/B,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC,CACzC,CAAC;YACF,MAAM,IAAI,CACR,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,EAC5B,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,CACtC,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;QACvB,IAAI,cAAc,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACzD,MAAM,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QACpC,cAAc,GAAG,EAAE,CAAC;QACpB,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,GAAG,CAAC,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,EAAE,KAAc,EAAE,EAAE;QACvC,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;QACjE,IACE,cAAc,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;YACpC,+BAA+B;YACjC,KAAK,GAAG,WAAW,GAAG,wBAAwB,EAC9C,CAAC;YACD,MAAM,KAAK,EAAE,CAAC;QAChB,CAAC;QACD,KAAK,IAAI,WAAW,CAAC;IACvB,CAAC,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI;QACtB,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC;KAC9C,CAAC,IAAI,EAAE,EAAE,CAAC;QACT,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,sCAAsC,SAAS,wCAAwC,CACxF,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAClC,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;QACrB,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,KAAK,MAAM,WAAW,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1E,MAAM,KAAK,GAAG;YACZ,WAAW;YACX,MAAM,EAAE,MAAM,sBAAsB,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC;SAC1E,CAAC;QACF,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IACD,MAAM,KAAK,EAAE,CAAC;AAChB,CAAC;AAWD;;;;GAIG;AACH,SAAS,wBAAwB,CAC/B,cAAsB,EACtB,MAAyB;IAEzB,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrD,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,CAAC,QAAQ,EAAE;SAC/D,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,oBAAoB,cAAc,2EAA2E,CAC9G,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC/B,uEAAuE;IACvE,6CAA6C;IAC7C,IACE,MAAM,CAAC,MAAM,KAAK,QAAQ;QAC1B,OAAO,EAAE,IAAI,CAAC,MAAM,KAAK,6BAA6B,EACtD,CAAC;QACD,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,4BAA4B,EAAE,EAAE;YAChC,qBAAqB,EAAE,EAAE;SAC1B,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC/D,MAAM,MAAM,GAAG,OAAO;YACpB,CAAC,CAAC,kCAAkC,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC;YACvE,CAAC,CAAC,IAAI,CAAC;QACT,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAC1B,MAAM,IAAI,aAAa,CAAC;YACtB,MAAM,EAAE,OAAO,EAAE,WAAW,IAAI,GAAG;YACnC,MAAM,EACJ,OAAO,OAAO,EAAE,IAAI,CAAC,KAAK,KAAK,QAAQ;gBACrC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK;gBACpB,CAAC,CAAC,oBAAoB,cAAc,UAAU,MAAM,CAAC,MAAM,GAAG;YAClE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;SACvE,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,IAAI,OAAO,EAAE,CAAC;QAC5C,OAAO,kCAAkC,CACvC,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,IAAI,CACb,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,KAAK,CAAC,EAAU,EAAE,MAAoB;IAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC5C,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACzB,CAAC,CAAC;QACF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,qDAAqD;AACrD,SAAS,yBAAyB,CAAC,KAKlC;IACC,OAAO,wBAAwB,CAC7B,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,cAAc,EACpB,EAAE,GAAG,uBAAuB,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CACxE,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,gBAAgB,CAAC,KAK/B;IACC,IAAI,CAAC;QACH,OAAO,MAAM,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,aAAa,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;YAC1D,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;QAClC,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,uBAAuB,CAAC,KAMtC;IACC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,sBAAsB,CAAC,CAAC;IACzE,IAAI,KAAK,GAAG,sBAAsB,CAAC;IACnC,4CAA4C;IAC5C,IAAI,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9B,SAAS,CAAC;QACR,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC/D,MAAM,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,gCAAgC,CACnD,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,cAAc,EACpB,OAAO,CACR,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACb,oBAAoB,KAAK,CAAC,cAAc,iFAAiF,CAC1H,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,wBAAwB,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QACtE,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAC1B,qEAAqE;QACrE,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACnC,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,4BAA4B,EAAE,EAAE;gBAChC,qBAAqB,EAAE,EAAE;aAC1B,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,QAAQ,EAAE,CAAC;YAClC,MAAM,IAAI,4BAA4B,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,IAAI,qBAAqB,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY;gBAAE,OAAO,KAAK,CAAC;YAChD,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,CAAC;QACD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,oBAAoB,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KASrC;IACC,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;IAC1C,MAAM,IAAI,GAAG,0BAA0B,CACrC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CACvC,CAAC;IACF,IAAI,IAAI,CAAC,SAAS,KAAK,eAAe,CAAC,qBAAqB,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAED,IAAI,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACzD,IAAI,cAAc,GAAG,CAAC,cAAc,CAAC;IACrC,wEAAwE;IACxE,IAAI,eAAe,GAAkB,IAAI,CAAC;IAC1C,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,MAAM,gCAAgC,CACnD,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,WAAW,EACjB,cAAc,EACd,uBAAuB,CAAC,KAAK,CAAC,eAAe,CAAC,CAC/C,CAAC;QACF,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC9D,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACnD,iBAAiB,CAAC,UAAU,CAAC,CAAC;YAC9B,uEAAuE;YACvE,iEAAiE;YACjE,MAAM,UAAU,GAAG;gBACjB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,cAAc;gBACd,eAAe,EAAE,KAAK,CAAC,eAAe;aACvC,CAAC;YACF,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC;YACjD,MAAM,MAAM,GACV,KAAK,CAAC,MAAM,KAAK,YAAY;gBAC3B,CAAC,CAAC,MAAM,uBAAuB,CAAC,UAAU,CAAC;gBAC3C,CAAC,CAAC,KAAK,CAAC;YACZ,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU;gBAAE,OAAO,MAAM,CAAC,QAAQ,CAAC;YACzD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,eAAe,GAAG;oBAChB,oBAAoB,EAAE,MAAM,CAAC,4BAA4B;oBACzD,aAAa,EAAE,MAAM,CAAC,qBAAqB;iBAC5C,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,wBAAwB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;YAC/D,IAAI,KAAK,EAAE,MAAM,KAAK,UAAU;gBAAE,OAAO,KAAK,CAAC,QAAQ,CAAC;QAC1D,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;YAAE,cAAc,GAAG,IAAI,CAAC;IAC1E,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC7B,uBAAuB,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAC5C,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,eAAe,IAAI,CAAC,cAAc;YACtC,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,MAAM,sBAAsB,CAAC,KAAK,CAAC,EACvC,uBAAuB,CAAC,KAAK,CAAC,eAAe,CAAC,CAC/C,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACnC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO;gBACL,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,YAAY,EAAE,KAAK,CAAC,WAAW;gBAC/B,sBAAsB,EAAE,eAAe,CAAC,sBAAsB;gBAC9D,uBAAuB,EAAE,KAAK,CAAC,OAAO,CAAC,mBAAmB;gBAC1D,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;gBAC3C,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB;gBACrD,sBAAsB,EAAE,QAAQ,CAAC,sBAAsB;aACxD,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACpC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAChE,CAAC;QACD,MAAM,uBAAuB,GAAG,cAAc,CAAC;QAC/C,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC;QACzC,KAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC;YACtC,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC,EAAE;YAClC,cAAc;YACd,uBAAuB;SACxB,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;QACnC,IAAI,OAAO,EAAE,OAAO;YAAE,OAAO,CAAC,OAAO,CAAC,cAAc,GAAG,cAAc,CAAC;IACxE,CAAC;IACD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,uEAAuE;IACvE,qDAAqD;IACrD,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC5B,IAAI,OAAO,GACT,eAAe,IAAI,CAAC,cAAc;QAChC,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,MAAM,WAAW,CAAC;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,cAAc;YACd,MAAM,EAAE;gBACN,oBAAoB,EAAE,KAAK,CAAC,OAAO,CAAC,4BAA4B;gBAChE,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,qBAAqB;aACnD;YACD,eAAe,EAAE,KAAK,CAAC,eAAe;SACvC,CAAC,CAAC;IACT,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACrC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC5B,MAAM,MAAM,CAAC;YACX,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,cAAc;YACd,IAAI;YACJ,MAAM,EAAE,OAAO;YACf,eAAe,EAAE,KAAK,CAAC,eAAe;SACvC,CAAC,CAAC;QACH,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC9B,uBAAuB,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,MAAM,yBAAyB,CAAC;YAChD,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,cAAc;YACd,eAAe,EAAE,KAAK,CAAC,eAAe;SACvC,CAAC,CAAC;QACH,MAAM,SAAS,GACb,SAAS,CAAC,MAAM,KAAK,YAAY;YAC/B,CAAC,CAAC,MAAM,uBAAuB,CAAC;gBAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,cAAc;gBACd,eAAe,EAAE,KAAK,CAAC,eAAe;aACvC,CAAC;YACJ,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,SAAS,CAAC,MAAM,KAAK,UAAU;YAAE,OAAO,SAAS,CAAC,QAAQ,CAAC;QAC/D,IAAI,OAAO,IAAI,iBAAiB,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,4BACE,SAAS,CAAC,4BAA4B,CAAC,MAAM;gBAC7C,SAAS,CAAC,qBAAqB,CAAC,MAClC,yBAAyB,iBAAiB,WAAW,CACtD,CAAC;QACJ,CAAC;QACD,OAAO,GAAG;YACR,oBAAoB,EAAE,SAAS,CAAC,4BAA4B;YAC5D,aAAa,EAAE,SAAS,CAAC,qBAAqB;SAC/C,CAAC;IACJ,CAAC;AACH,CAAC"}
|