@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,93 @@
|
|
|
1
|
+
import { fork } from 'node:child_process';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { currentOperation, operationSignal } from './operation.js';
|
|
4
|
+
import { OWNERSHIP_READ_LIMITS, ownership_registry_schema, ownership_selection_schema, ownership_read_result_schema, ownershipUnavailable } from './ownership-reader-schema.js';
|
|
5
|
+
/** Local library boundary only. No helper invocation, discovery, migration or adapter. */
|
|
6
|
+
export async function readLocalOwnership(input) {
|
|
7
|
+
const started = performance.now();
|
|
8
|
+
const registry = ownership_registry_schema.safeParse(input.trusted_registry);
|
|
9
|
+
const selection = ownership_selection_schema.safeParse(input.selection);
|
|
10
|
+
const budget = input.timeout_ms ?? OWNERSHIP_READ_LIMITS.timeout_ms;
|
|
11
|
+
if (!registry.success ||
|
|
12
|
+
!selection.success ||
|
|
13
|
+
!Number.isInteger(budget) ||
|
|
14
|
+
budget < 1 ||
|
|
15
|
+
budget > 30_000)
|
|
16
|
+
return ownershipUnavailable('invalid_request');
|
|
17
|
+
if (registry.data.registry_id !== selection.data.registry_id)
|
|
18
|
+
return ownershipUnavailable('registry_mismatch');
|
|
19
|
+
const signal = operationSignal(input.signal);
|
|
20
|
+
const deadline = Math.min(started + budget, currentOperation()?.deadline ?? Infinity);
|
|
21
|
+
if (signal?.aborted)
|
|
22
|
+
return ownershipUnavailable('cancelled');
|
|
23
|
+
if (performance.now() >= deadline)
|
|
24
|
+
return ownershipUnavailable('deadline_exceeded');
|
|
25
|
+
return new Promise((resolve) => {
|
|
26
|
+
let answer;
|
|
27
|
+
let cancelled;
|
|
28
|
+
// A separate process also prevents diagnostic descriptor closes from disturbing
|
|
29
|
+
// another SQLite connection's process-scoped POSIX locks in the caller.
|
|
30
|
+
let child;
|
|
31
|
+
try {
|
|
32
|
+
child = fork(fileURLToPath(new URL('./ownership-reader-worker.js', import.meta.url)), [], {
|
|
33
|
+
execArgv: ['--max-old-space-size=64'],
|
|
34
|
+
env: { NODE_ENV: 'production' },
|
|
35
|
+
stdio: ['ignore', 'ignore', 'ignore', 'ipc'],
|
|
36
|
+
serialization: 'json'
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
resolve(ownershipUnavailable('reader_unavailable'));
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const stop = (reason) => {
|
|
44
|
+
cancelled ??= reason;
|
|
45
|
+
child.kill('SIGKILL');
|
|
46
|
+
};
|
|
47
|
+
const on_abort = () => stop('cancelled');
|
|
48
|
+
const timer = setTimeout(() => stop('deadline_exceeded'), Math.max(1, deadline - performance.now()));
|
|
49
|
+
signal?.addEventListener('abort', on_abort, { once: true });
|
|
50
|
+
child.on('message', (message) => {
|
|
51
|
+
const parsed = ownership_read_result_schema.safeParse(message);
|
|
52
|
+
answer = parsed.success
|
|
53
|
+
? parsed.data
|
|
54
|
+
: ownershipUnavailable('reader_unavailable');
|
|
55
|
+
});
|
|
56
|
+
child.on('error', () => {
|
|
57
|
+
answer = ownershipUnavailable('reader_unavailable');
|
|
58
|
+
});
|
|
59
|
+
child.once('close', (code) => {
|
|
60
|
+
clearTimeout(timer);
|
|
61
|
+
signal?.removeEventListener('abort', on_abort);
|
|
62
|
+
if (cancelled)
|
|
63
|
+
return resolve(ownershipUnavailable(cancelled));
|
|
64
|
+
if (performance.now() >= deadline)
|
|
65
|
+
return resolve(ownershipUnavailable('deadline_exceeded'));
|
|
66
|
+
if (code !== 0 || !answer)
|
|
67
|
+
return resolve(ownershipUnavailable('reader_unavailable'));
|
|
68
|
+
// Re-evaluate temporal ownership at delivery, not just the database snapshot.
|
|
69
|
+
if (answer.status !== 'unavailable') {
|
|
70
|
+
answer.completed_at = Date.now() / 1000;
|
|
71
|
+
if (answer.completed_at < answer.observed_at)
|
|
72
|
+
return resolve(ownershipUnavailable('changed_during_read'));
|
|
73
|
+
if (answer.status === 'observed' && answer.owner) {
|
|
74
|
+
if (answer.owner.expires_at <= answer.completed_at)
|
|
75
|
+
answer.ownership = 'expired';
|
|
76
|
+
else if (answer.owner.execution_status === 'complete' ||
|
|
77
|
+
answer.owner.heartbeat_at + 1800 <= answer.completed_at)
|
|
78
|
+
answer.ownership = 'inactive';
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const checked = ownership_read_result_schema.safeParse(answer);
|
|
82
|
+
resolve(checked.success ? checked.data : ownershipUnavailable('invalid_state'));
|
|
83
|
+
});
|
|
84
|
+
if (signal?.aborted)
|
|
85
|
+
on_abort();
|
|
86
|
+
else
|
|
87
|
+
child.send({ trusted_registry: registry.data, selection: selection.data }, (error) => {
|
|
88
|
+
if (error)
|
|
89
|
+
stop('reader_unavailable');
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=ownership-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ownership-reader.js","sourceRoot":"","sources":["../../src/local/ownership-reader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type ContentTypeRegistry, type PackageSource, type PackageUseRecord } from '@software-dlc/graph/packages';
|
|
2
|
+
import type { PortableGraph } from '@software-dlc/graph/types';
|
|
3
|
+
import { type FloorPolicyFor } from '../packages-uses.js';
|
|
4
|
+
/** The uses a commit adds or changes: those it must resolve before it records them. */
|
|
5
|
+
export declare function changedPackageUses(input: {
|
|
6
|
+
base_graph: PortableGraph | null;
|
|
7
|
+
graph: PortableGraph;
|
|
8
|
+
}): PackageUseRecord[];
|
|
9
|
+
/**
|
|
10
|
+
* Why a commit cannot record its package uses (graph-packages.md, Local resolution): each use it
|
|
11
|
+
* adds or changes is resolved against what is held here, and any blocking finding refuses it, so
|
|
12
|
+
* a use is committed only where its document is held. A use that resolves runs the floor check
|
|
13
|
+
* (graph-packages.md, Floors), so a fork or extension that drops what a floor requires is refused
|
|
14
|
+
* too. A use the commit leaves alone is not resolved again: reads report an unresolved use without
|
|
15
|
+
* failing the graph.
|
|
16
|
+
*/
|
|
17
|
+
export declare function packageUseCommitIssues(input: {
|
|
18
|
+
base_graph: PortableGraph | null;
|
|
19
|
+
graph: PortableGraph;
|
|
20
|
+
/** Built only when a use changed, so a commit without one reads no package. */
|
|
21
|
+
source: () => HeldPackages;
|
|
22
|
+
registry?: ContentTypeRegistry;
|
|
23
|
+
/** The org policy each floor check runs with; none until the local governance graph holds one. */
|
|
24
|
+
floorPolicy?: FloorPolicyFor;
|
|
25
|
+
}): string[];
|
|
26
|
+
/** What a commit resolves against, and the coordinate of each package some version of which is held. */
|
|
27
|
+
export type HeldPackages = {
|
|
28
|
+
source: PackageSource;
|
|
29
|
+
coordinateOf: (package_id: string) => string | null;
|
|
30
|
+
};
|
|
31
|
+
/** The packages a workspace commit resolves against: the bundled snapshot and the download cache. */
|
|
32
|
+
export declare function heldPackages(env?: NodeJS.ProcessEnv): HeldPackages;
|
|
33
|
+
//# sourceMappingURL=package-uses-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-uses-check.d.ts","sourceRoot":"","sources":["../../src/local/package-uses-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAQ/D,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAO7B,uFAAuF;AACvF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,UAAU,EAAE,aAAa,GAAG,IAAI,CAAC;IACjC,KAAK,EAAE,aAAa,CAAC;CACtB,GAAG,gBAAgB,EAAE,CAUrB;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,UAAU,EAAE,aAAa,GAAG,IAAI,CAAC;IACjC,KAAK,EAAE,aAAa,CAAC;IACrB,+EAA+E;IAC/E,MAAM,EAAE,MAAM,YAAY,CAAC;IAC3B,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,kGAAkG;IAClG,WAAW,CAAC,EAAE,cAAc,CAAC;CAC9B,GAAG,MAAM,EAAE,CAwBX;AAED,wGAAwG;AACxG,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,aAAa,CAAC;IACtB,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CACrD,CAAC;AAEF,qGAAqG;AACrG,wBAAgB,YAAY,CAC1B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,YAAY,CAWd"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { graphPackageContentTypes, resolvePackageUse } from '@software-dlc/graph/packages';
|
|
2
|
+
import { defaultGraphPackagesCacheDir } from '../graph-packages-lock.js';
|
|
3
|
+
import { defaultGraphPackagesSnapshotDir, localPackageSource, readLocalPackages } from '../packages-browse.js';
|
|
4
|
+
import { describeFloor, describeUseFinding, useFloors } from '../packages-uses.js';
|
|
5
|
+
import { stringifyCanonicalJson } from './canonical.js';
|
|
6
|
+
function useKey(use) {
|
|
7
|
+
return `${use.package_id}\u0000${use.project_id ?? ''}`;
|
|
8
|
+
}
|
|
9
|
+
/** The uses a commit adds or changes: those it must resolve before it records them. */
|
|
10
|
+
export function changedPackageUses(input) {
|
|
11
|
+
const before = new Map((input.base_graph?.package_uses ?? []).map((use) => [
|
|
12
|
+
useKey(use),
|
|
13
|
+
stringifyCanonicalJson(use)
|
|
14
|
+
]));
|
|
15
|
+
return (input.graph.package_uses ?? []).filter((use) => before.get(useKey(use)) !== stringifyCanonicalJson(use));
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Why a commit cannot record its package uses (graph-packages.md, Local resolution): each use it
|
|
19
|
+
* adds or changes is resolved against what is held here, and any blocking finding refuses it, so
|
|
20
|
+
* a use is committed only where its document is held. A use that resolves runs the floor check
|
|
21
|
+
* (graph-packages.md, Floors), so a fork or extension that drops what a floor requires is refused
|
|
22
|
+
* too. A use the commit leaves alone is not resolved again: reads report an unresolved use without
|
|
23
|
+
* failing the graph.
|
|
24
|
+
*/
|
|
25
|
+
export function packageUseCommitIssues(input) {
|
|
26
|
+
const changed = changedPackageUses(input);
|
|
27
|
+
if (changed.length === 0)
|
|
28
|
+
return [];
|
|
29
|
+
const { source, coordinateOf } = input.source();
|
|
30
|
+
const registry = input.registry ?? graphPackageContentTypes;
|
|
31
|
+
return changed.flatMap((use) => {
|
|
32
|
+
const coordinate = coordinateOf(use.package_id);
|
|
33
|
+
const label = `${coordinate ?? use.package_id}@${use.version} (${use.mode})`;
|
|
34
|
+
const resolved = resolvePackageUse({
|
|
35
|
+
use,
|
|
36
|
+
graph: 'project',
|
|
37
|
+
source,
|
|
38
|
+
registry
|
|
39
|
+
});
|
|
40
|
+
if (resolved.findings.length > 0)
|
|
41
|
+
return resolved.findings.map((finding) => `${label}: ${describeUseFinding(finding, use, coordinate)}`);
|
|
42
|
+
const floors = useFloors(resolved, input.floorPolicy);
|
|
43
|
+
if (!floors.blocking)
|
|
44
|
+
return [];
|
|
45
|
+
return floors.findings
|
|
46
|
+
.filter((finding) => finding.severity === 'floor')
|
|
47
|
+
.map((finding) => `${label}: ${describeFloor(finding)}`);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/** The packages a workspace commit resolves against: the bundled snapshot and the download cache. */
|
|
51
|
+
export function heldPackages(env = process.env) {
|
|
52
|
+
const local = readLocalPackages({
|
|
53
|
+
snapshotDir: defaultGraphPackagesSnapshotDir(),
|
|
54
|
+
cacheDir: defaultGraphPackagesCacheDir(env)
|
|
55
|
+
});
|
|
56
|
+
return {
|
|
57
|
+
source: localPackageSource(local),
|
|
58
|
+
coordinateOf: (package_id) => local.packages.find((entry) => entry.id === package_id)?.coordinate ??
|
|
59
|
+
null
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=package-uses-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-uses-check.js","sourceRoot":"","sources":["../../src/local/package-uses-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type GraphClientOptions, type GraphClientRequestOptions } from '@software-dlc/graph/client';
|
|
2
|
+
import { LocalSdlcStore } from './store.js';
|
|
3
|
+
import { type ManagedProjectionStatus } from './worktree-projection.js';
|
|
4
|
+
export type StalePendingRecoveryResult = {
|
|
5
|
+
recovered: true;
|
|
6
|
+
superseded_change_ids: string[];
|
|
7
|
+
remote_revision: number;
|
|
8
|
+
remote_sync_revision: number;
|
|
9
|
+
remote_sync_root_hash: string;
|
|
10
|
+
status: ManagedProjectionStatus;
|
|
11
|
+
};
|
|
12
|
+
export declare function recoverManagedProjectionFromStalePending(input: {
|
|
13
|
+
store: LocalSdlcStore;
|
|
14
|
+
client: GraphClientOptions;
|
|
15
|
+
worktree_id: string;
|
|
16
|
+
expected_remote_revision: number;
|
|
17
|
+
expected_remote_sync_revision: number;
|
|
18
|
+
expected_remote_sync_root_hash: string;
|
|
19
|
+
allow_unapplied_remote_state?: boolean;
|
|
20
|
+
request_options?: GraphClientRequestOptions;
|
|
21
|
+
}): Promise<StalePendingRecoveryResult>;
|
|
22
|
+
//# sourceMappingURL=pending-recovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending-recovery.d.ts","sourceRoot":"","sources":["../../src/local/pending-recovery.ts"],"names":[],"mappings":"AAOA,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC/B,MAAM,4BAA4B,CAAC;AAcpC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,0BAA0B,CAAC;AAElC,MAAM,MAAM,0BAA0B,GAAG;IACvC,SAAS,EAAE,IAAI,CAAC;IAChB,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,uBAAuB,CAAC;CACjC,CAAC;AAEF,wBAAsB,wCAAwC,CAAC,KAAK,EAAE;IACpE,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,wBAAwB,EAAE,MAAM,CAAC;IACjC,6BAA6B,EAAE,MAAM,CAAC;IACtC,8BAA8B,EAAE,MAAM,CAAC;IACvC,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,eAAe,CAAC,EAAE,yBAAyB,CAAC;CAC7C,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAuLtC"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { GRAPH_SEMANTIC_ANNOTATION_SCHEMA_VERSIONS, GRAPH_VARIANT_SET_SCHEMA_VERSIONS, graph_sync_hash_schema, portable_graph_schema, worktree_sync_response_schema } from '@software-dlc/graph/schema';
|
|
2
|
+
import { getWorktreeChangeStatus, getWorktreeGraph, negotiateWorktreeSync } from '@software-dlc/graph/client';
|
|
3
|
+
import { stringifyCanonicalGraph } from './canonical.js';
|
|
4
|
+
import { reconstructNegotiatedWorktreeGraph } from './graph-sync.js';
|
|
5
|
+
import { OperationRefusalError } from './operation.js';
|
|
6
|
+
import { composeGraphProjection, diffProjectionGraphs, materializeGraphProjection, restoreMissingProjectionEntities, validateProjectionGraph } from './projection.js';
|
|
7
|
+
import { getManagedProjectionStatus } from './worktree-projection.js';
|
|
8
|
+
export async function recoverManagedProjectionFromStalePending(input) {
|
|
9
|
+
const session = input.store.getActiveSession(input.worktree_id);
|
|
10
|
+
if (!session) {
|
|
11
|
+
throw new OperationRefusalError('Stale-pending recovery requires an active local session.');
|
|
12
|
+
}
|
|
13
|
+
// A graph-file save needs no managed projection, so its pending request is
|
|
14
|
+
// recovered without one: there is no local proposal to validate or rebase.
|
|
15
|
+
const projection_state = input.store.getProjectionState(input.worktree_id);
|
|
16
|
+
const pending_changes = input.store.listPendingChanges(session.id);
|
|
17
|
+
if (pending_changes.length === 0) {
|
|
18
|
+
throw new OperationRefusalError('No pending worktree changes require recovery.');
|
|
19
|
+
}
|
|
20
|
+
const receipt_statuses = await Promise.all(pending_changes.map((change) => getWorktreeChangeStatus(input.client, input.worktree_id, change.idempotency_key, input.request_options)));
|
|
21
|
+
if (receipt_statuses.some((status) => status.found)) {
|
|
22
|
+
throw new OperationRefusalError('A pending worktree change has a server receipt. Run sdlc sync instead of recovery.');
|
|
23
|
+
}
|
|
24
|
+
const response = await getWorktreeGraph(input.client, input.worktree_id, input.request_options);
|
|
25
|
+
if (response.resource.type !== 'worktree' ||
|
|
26
|
+
response.resource.id !== input.worktree_id) {
|
|
27
|
+
throw new OperationRefusalError('Remote graph response does not match the bound worktree.');
|
|
28
|
+
}
|
|
29
|
+
const remote_revision = response.resource.revision;
|
|
30
|
+
const remote_sync_revision = response.resource.sync_revision;
|
|
31
|
+
const parsed_remote_root = graph_sync_hash_schema.safeParse(response.resource.sync_root_hash);
|
|
32
|
+
if (!Number.isSafeInteger(remote_revision) ||
|
|
33
|
+
(remote_revision ?? -1) < 0 ||
|
|
34
|
+
!Number.isSafeInteger(remote_sync_revision) ||
|
|
35
|
+
(remote_sync_revision ?? -1) < 0 ||
|
|
36
|
+
!parsed_remote_root.success) {
|
|
37
|
+
throw new OperationRefusalError('Remote worktree did not expose a valid revision/root tuple.');
|
|
38
|
+
}
|
|
39
|
+
const remote_sync_root_hash = parsed_remote_root.data;
|
|
40
|
+
if (remote_revision !== input.expected_remote_revision ||
|
|
41
|
+
remote_sync_revision !== input.expected_remote_sync_revision ||
|
|
42
|
+
remote_sync_root_hash !== input.expected_remote_sync_root_hash) {
|
|
43
|
+
throw new OperationRefusalError('Remote worktree state does not match the explicitly expected recovery tuple.');
|
|
44
|
+
}
|
|
45
|
+
// A session that was never checked out has acknowledged a revision only.
|
|
46
|
+
const session_has_sync_base = session.last_acknowledged_sync_revision !== null &&
|
|
47
|
+
session.last_acknowledged_sync_root_hash !== null;
|
|
48
|
+
const remote_state_unchanged = remote_revision === session.last_acknowledged_revision &&
|
|
49
|
+
(!session_has_sync_base ||
|
|
50
|
+
(remote_sync_revision === session.last_acknowledged_sync_revision &&
|
|
51
|
+
remote_sync_root_hash === session.last_acknowledged_sync_root_hash));
|
|
52
|
+
if (remote_state_unchanged && !input.allow_unapplied_remote_state) {
|
|
53
|
+
throw new OperationRefusalError('Remote worktree state has not advanced beyond the acknowledged local base; run sdlc sync or explicitly discard confirmed-unapplied pending requests.');
|
|
54
|
+
}
|
|
55
|
+
if (!remote_state_unchanged &&
|
|
56
|
+
pending_changes.some((change) => change.expected_revision >= remote_revision)) {
|
|
57
|
+
throw new OperationRefusalError('Recovery requires the remote worktree revision to be newer than every pending request base.');
|
|
58
|
+
}
|
|
59
|
+
const remote_compatibility_graph = portable_graph_schema.parse(response.graph);
|
|
60
|
+
const sync_response = worktree_sync_response_schema.parse(await negotiateWorktreeSync(input.client, input.worktree_id, {
|
|
61
|
+
supported_manifest_versions: [1],
|
|
62
|
+
supported_semantic_annotation_schema_versions: [
|
|
63
|
+
...GRAPH_SEMANTIC_ANNOTATION_SCHEMA_VERSIONS
|
|
64
|
+
],
|
|
65
|
+
supported_graph_variant_set_schema_versions: [
|
|
66
|
+
...GRAPH_VARIANT_SET_SCHEMA_VERSIONS
|
|
67
|
+
]
|
|
68
|
+
}, input.request_options));
|
|
69
|
+
if (sync_response.worktree_id !== input.worktree_id ||
|
|
70
|
+
sync_response.revision !== remote_revision ||
|
|
71
|
+
sync_response.sync_revision !== remote_sync_revision ||
|
|
72
|
+
sync_response.sync_root_hash !== remote_sync_root_hash) {
|
|
73
|
+
throw new OperationRefusalError('Remote worktree graph and sync manifest do not expose the same recovery tuple.');
|
|
74
|
+
}
|
|
75
|
+
if (sync_response.mode !== 'manifest') {
|
|
76
|
+
throw new OperationRefusalError('Stale-pending recovery requires a complete remote sync manifest.');
|
|
77
|
+
}
|
|
78
|
+
const reconstructed = await reconstructNegotiatedWorktreeGraph({
|
|
79
|
+
store: input.store,
|
|
80
|
+
base_graph: remote_compatibility_graph,
|
|
81
|
+
base_manifest: null,
|
|
82
|
+
response: sync_response
|
|
83
|
+
});
|
|
84
|
+
const remote_graph = reconstructed.graph;
|
|
85
|
+
if (projection_state) {
|
|
86
|
+
await rebaseProjectionOntoRemote({
|
|
87
|
+
store: input.store,
|
|
88
|
+
worktree_id: input.worktree_id,
|
|
89
|
+
projection_dir: projection_state.projection_dir,
|
|
90
|
+
remote_graph
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
const checkpoint = await input.store.checkpoint({
|
|
94
|
+
session_id: session.id,
|
|
95
|
+
revision: remote_revision,
|
|
96
|
+
graph_json: stringifyCanonicalGraph(remote_graph)
|
|
97
|
+
});
|
|
98
|
+
const superseded_change_ids = input.store.supersedePendingChangesAndAdoptCheckpoint({
|
|
99
|
+
session_id: session.id,
|
|
100
|
+
expected_pending_change_ids: pending_changes.map((change) => change.id),
|
|
101
|
+
checkpoint_id: checkpoint.checkpoint_id,
|
|
102
|
+
revision: remote_revision,
|
|
103
|
+
graph_hash: checkpoint.graph_hash,
|
|
104
|
+
sync_revision: remote_sync_revision,
|
|
105
|
+
sync_root_hash: remote_sync_root_hash,
|
|
106
|
+
reason: remote_state_unchanged
|
|
107
|
+
? 'remote_state_unchanged_without_receipt'
|
|
108
|
+
: 'remote_state_advanced_without_receipt'
|
|
109
|
+
});
|
|
110
|
+
if (projection_state) {
|
|
111
|
+
input.store.setProjectionState({
|
|
112
|
+
worktree_id: input.worktree_id,
|
|
113
|
+
projection_dir: projection_state.projection_dir,
|
|
114
|
+
base_revision: remote_revision,
|
|
115
|
+
base_graph_hash: checkpoint.graph_hash
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
recovered: true,
|
|
120
|
+
superseded_change_ids,
|
|
121
|
+
remote_revision,
|
|
122
|
+
remote_sync_revision,
|
|
123
|
+
remote_sync_root_hash,
|
|
124
|
+
status: await getManagedProjectionStatus({
|
|
125
|
+
store: input.store,
|
|
126
|
+
worktree_id: input.worktree_id
|
|
127
|
+
})
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Validates the preserved local projection against the newer remote graph and
|
|
132
|
+
* restores remote entities it lacks, without overwriting a local entity.
|
|
133
|
+
*/
|
|
134
|
+
async function rebaseProjectionOntoRemote(input) {
|
|
135
|
+
const { remote_graph } = input;
|
|
136
|
+
const composed = await composeGraphProjection(input.projection_dir);
|
|
137
|
+
const validation = validateProjectionGraph(composed.graph);
|
|
138
|
+
if (!validation.is_valid) {
|
|
139
|
+
throw new OperationRefusalError('Managed projection validation failed; recovery left local state unchanged.');
|
|
140
|
+
}
|
|
141
|
+
let recovered_graph = composed.graph;
|
|
142
|
+
let rebased_diff = diffProjectionGraphs({
|
|
143
|
+
base_graph: remote_graph,
|
|
144
|
+
current_graph: recovered_graph,
|
|
145
|
+
deletion_intents: input.store.listProjectionDeletions(input.worktree_id)
|
|
146
|
+
});
|
|
147
|
+
if (rebased_diff.missing_unrecorded.length > 0) {
|
|
148
|
+
recovered_graph = restoreMissingProjectionEntities({
|
|
149
|
+
current_graph: recovered_graph,
|
|
150
|
+
source_graph: remote_graph,
|
|
151
|
+
entries: rebased_diff.missing_unrecorded
|
|
152
|
+
});
|
|
153
|
+
const recovered_validation = validateProjectionGraph(recovered_graph);
|
|
154
|
+
if (!recovered_validation.is_valid) {
|
|
155
|
+
throw new OperationRefusalError('Restoring newer remote entities would make the preserved local projection invalid; recovery left local files unchanged.');
|
|
156
|
+
}
|
|
157
|
+
rebased_diff = diffProjectionGraphs({
|
|
158
|
+
base_graph: remote_graph,
|
|
159
|
+
current_graph: recovered_graph,
|
|
160
|
+
deletion_intents: input.store.listProjectionDeletions(input.worktree_id)
|
|
161
|
+
});
|
|
162
|
+
if (rebased_diff.missing_unrecorded.length > 0) {
|
|
163
|
+
throw new OperationRefusalError('Rebased projection still has unrecorded deletions after restoring newer remote entities.');
|
|
164
|
+
}
|
|
165
|
+
await materializeGraphProjection({
|
|
166
|
+
projection_dir: input.projection_dir,
|
|
167
|
+
graph: recovered_graph
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=pending-recovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending-recovery.js","sourceRoot":"","sources":["../../src/local/pending-recovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type LocalCommitPortableAttestation, type LocalHistoryPortableConversion, type PortableCommit, type PortableIdentityClaim } from './portable-commit.js';
|
|
2
|
+
import type { LocalWorkspaceHistoryStore } from './workspace-history-store.js';
|
|
3
|
+
import type { LocalWorkspaceStoreDatabase } from './workspace-store-database.js';
|
|
4
|
+
export declare class LocalPortableCommitStore {
|
|
5
|
+
private readonly database;
|
|
6
|
+
private readonly history;
|
|
7
|
+
constructor(database: LocalWorkspaceStoreDatabase, history: LocalWorkspaceHistoryStore);
|
|
8
|
+
private assertIntegrity;
|
|
9
|
+
getCommit(commit_id: string): PortableCommit | null;
|
|
10
|
+
getLocalMapping(local_commit_id: string): string | null;
|
|
11
|
+
getLocalAttestation(local_commit_id: string): LocalCommitPortableAttestation | null;
|
|
12
|
+
planLocalHistory(head_commit_id: string): {
|
|
13
|
+
version: 1;
|
|
14
|
+
head_local_commit_id: string;
|
|
15
|
+
head_portable_commit_id: string | null;
|
|
16
|
+
unmapped_local_commit_ids: string[];
|
|
17
|
+
required_author_workspace_ids: string[];
|
|
18
|
+
external_parent_ids: string[];
|
|
19
|
+
};
|
|
20
|
+
migrateLocalHistory(input: {
|
|
21
|
+
head_commit_ids: string[];
|
|
22
|
+
author_claims: Record<string, PortableIdentityClaim>;
|
|
23
|
+
committer: PortableIdentityClaim;
|
|
24
|
+
external_parent_ids?: Record<string, string>;
|
|
25
|
+
reuse_existing_mappings?: boolean;
|
|
26
|
+
}): LocalHistoryPortableConversion;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=portable-commit-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portable-commit-store.d.ts","sourceRoot":"","sources":["../../src/local/portable-commit-store.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACnC,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAEjF,qBAAa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,QAAQ,EAAE,2BAA2B,EACrC,OAAO,EAAE,0BAA0B;IAKtD,OAAO,CAAC,eAAe;IAyCvB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IASnD,eAAe,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IASvD,mBAAmB,CACjB,eAAe,EAAE,MAAM,GACtB,8BAA8B,GAAG,IAAI;IAaxC,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG;QACxC,OAAO,EAAE,CAAC,CAAC;QACX,oBAAoB,EAAE,MAAM,CAAC;QAC7B,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;QACvC,yBAAyB,EAAE,MAAM,EAAE,CAAC;QACpC,6BAA6B,EAAE,MAAM,EAAE,CAAC;QACxC,mBAAmB,EAAE,MAAM,EAAE,CAAC;KAC/B;IAuCD,mBAAmB,CAAC,KAAK,EAAE;QACzB,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QACrD,SAAS,EAAE,qBAAqB,CAAC;QACjC,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7C,uBAAuB,CAAC,EAAE,OAAO,CAAC;KACnC,GAAG,8BAA8B;CAoHnC"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { stringifyCanonicalJson } from './canonical.js';
|
|
2
|
+
import { convertLocalWorkspaceHistory, local_commit_portable_attestation_schema, parsePortableCommit } from './portable-commit.js';
|
|
3
|
+
export class LocalPortableCommitStore {
|
|
4
|
+
database;
|
|
5
|
+
history;
|
|
6
|
+
constructor(database, history) {
|
|
7
|
+
this.database = database;
|
|
8
|
+
this.history = history;
|
|
9
|
+
this.assertIntegrity();
|
|
10
|
+
}
|
|
11
|
+
assertIntegrity() {
|
|
12
|
+
const commits = this.database
|
|
13
|
+
.prepare('select id, commit_json from portable_commit order by id')
|
|
14
|
+
.all();
|
|
15
|
+
for (const row of commits) {
|
|
16
|
+
const commit = parsePortableCommit(JSON.parse(row.commit_json));
|
|
17
|
+
if (commit.id !== row.id) {
|
|
18
|
+
throw new Error(`Portable commit row ${row.id} has mismatched content.`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const mappings = this.database
|
|
22
|
+
.prepare(`
|
|
23
|
+
select local_commit_id, portable_commit_id, attestation_json
|
|
24
|
+
from local_commit_portable_mapping order by local_commit_id
|
|
25
|
+
`)
|
|
26
|
+
.all();
|
|
27
|
+
for (const row of mappings) {
|
|
28
|
+
const attestation = local_commit_portable_attestation_schema.parse(JSON.parse(row.attestation_json));
|
|
29
|
+
if (attestation.local_commit_id !== row.local_commit_id ||
|
|
30
|
+
attestation.portable_commit_id !== row.portable_commit_id) {
|
|
31
|
+
throw new Error(`Local commit ${row.local_commit_id} has a corrupt portable mapping.`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
getCommit(commit_id) {
|
|
36
|
+
const row = this.database
|
|
37
|
+
.prepare('select commit_json from portable_commit where id = ?')
|
|
38
|
+
.get(commit_id);
|
|
39
|
+
return row
|
|
40
|
+
? parsePortableCommit(JSON.parse(row.commit_json))
|
|
41
|
+
: null;
|
|
42
|
+
}
|
|
43
|
+
getLocalMapping(local_commit_id) {
|
|
44
|
+
const row = this.database
|
|
45
|
+
.prepare('select portable_commit_id from local_commit_portable_mapping where local_commit_id = ?')
|
|
46
|
+
.get(local_commit_id);
|
|
47
|
+
return row?.portable_commit_id ?? null;
|
|
48
|
+
}
|
|
49
|
+
getLocalAttestation(local_commit_id) {
|
|
50
|
+
const row = this.database
|
|
51
|
+
.prepare('select attestation_json from local_commit_portable_mapping where local_commit_id = ?')
|
|
52
|
+
.get(local_commit_id);
|
|
53
|
+
return row
|
|
54
|
+
? local_commit_portable_attestation_schema.parse(JSON.parse(row.attestation_json))
|
|
55
|
+
: null;
|
|
56
|
+
}
|
|
57
|
+
planLocalHistory(head_commit_id) {
|
|
58
|
+
const unmapped_local_commit_ids = new Set();
|
|
59
|
+
const required_author_workspace_ids = new Set();
|
|
60
|
+
const external_parent_ids = new Set();
|
|
61
|
+
const visiting = new Set();
|
|
62
|
+
const collect = (commit_id) => {
|
|
63
|
+
if (this.getLocalMapping(commit_id))
|
|
64
|
+
return;
|
|
65
|
+
if (this.getCommit(commit_id))
|
|
66
|
+
return;
|
|
67
|
+
const commit = this.history.getCommit(commit_id);
|
|
68
|
+
if (!commit) {
|
|
69
|
+
external_parent_ids.add(commit_id);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (visiting.has(commit_id)) {
|
|
73
|
+
throw new Error('Local commit history contains a cycle.');
|
|
74
|
+
}
|
|
75
|
+
if (unmapped_local_commit_ids.has(commit_id))
|
|
76
|
+
return;
|
|
77
|
+
if (commit.validation_status !== 'passed') {
|
|
78
|
+
throw new Error(`Local commit ${commit.id} did not pass validation.`);
|
|
79
|
+
}
|
|
80
|
+
visiting.add(commit_id);
|
|
81
|
+
commit.parent_ids.forEach(collect);
|
|
82
|
+
visiting.delete(commit_id);
|
|
83
|
+
unmapped_local_commit_ids.add(commit.id);
|
|
84
|
+
required_author_workspace_ids.add(commit.author_workspace_id);
|
|
85
|
+
};
|
|
86
|
+
collect(head_commit_id);
|
|
87
|
+
return {
|
|
88
|
+
version: 1,
|
|
89
|
+
head_local_commit_id: head_commit_id,
|
|
90
|
+
head_portable_commit_id: this.getLocalMapping(head_commit_id),
|
|
91
|
+
unmapped_local_commit_ids: [...unmapped_local_commit_ids].sort(),
|
|
92
|
+
required_author_workspace_ids: [...required_author_workspace_ids].sort(),
|
|
93
|
+
external_parent_ids: [...external_parent_ids].sort()
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
migrateLocalHistory(input) {
|
|
97
|
+
const local_commits = new Map();
|
|
98
|
+
const visiting = new Set();
|
|
99
|
+
const resolved_external_parent_ids = { ...input.external_parent_ids };
|
|
100
|
+
const collect = (commit_id) => {
|
|
101
|
+
if (local_commits.has(commit_id))
|
|
102
|
+
return;
|
|
103
|
+
const existing_mapping = input.reuse_existing_mappings
|
|
104
|
+
? this.getLocalMapping(commit_id)
|
|
105
|
+
: null;
|
|
106
|
+
if (existing_mapping) {
|
|
107
|
+
const requested_mapping = resolved_external_parent_ids[commit_id];
|
|
108
|
+
if (requested_mapping && requested_mapping !== existing_mapping) {
|
|
109
|
+
throw new Error(`Local commit ${commit_id} already has a different portable mapping.`);
|
|
110
|
+
}
|
|
111
|
+
resolved_external_parent_ids[commit_id] = existing_mapping;
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
const portable_commit = this.getCommit(commit_id);
|
|
115
|
+
if (portable_commit) {
|
|
116
|
+
const requested_mapping = resolved_external_parent_ids[commit_id];
|
|
117
|
+
if (requested_mapping && requested_mapping !== commit_id) {
|
|
118
|
+
throw new Error(`Portable commit ${commit_id} cannot be remapped to another parent.`);
|
|
119
|
+
}
|
|
120
|
+
resolved_external_parent_ids[commit_id] = commit_id;
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const commit = this.history.getCommit(commit_id);
|
|
124
|
+
if (!commit) {
|
|
125
|
+
if (resolved_external_parent_ids[commit_id])
|
|
126
|
+
return;
|
|
127
|
+
throw new Error(`Local commit parent ${commit_id} requires an explicit portable mapping.`);
|
|
128
|
+
}
|
|
129
|
+
if (visiting.has(commit_id)) {
|
|
130
|
+
throw new Error('Local commit history contains a cycle.');
|
|
131
|
+
}
|
|
132
|
+
visiting.add(commit_id);
|
|
133
|
+
commit.parent_ids.forEach(collect);
|
|
134
|
+
visiting.delete(commit_id);
|
|
135
|
+
local_commits.set(commit_id, commit);
|
|
136
|
+
};
|
|
137
|
+
[...new Set(input.head_commit_ids)].sort().forEach(collect);
|
|
138
|
+
const conversion = convertLocalWorkspaceHistory({
|
|
139
|
+
...input,
|
|
140
|
+
external_parent_ids: resolved_external_parent_ids,
|
|
141
|
+
commits: [...local_commits.values()]
|
|
142
|
+
});
|
|
143
|
+
this.database.exec('begin immediate');
|
|
144
|
+
try {
|
|
145
|
+
for (const commit of conversion.commits) {
|
|
146
|
+
const commit_json = stringifyCanonicalJson(commit);
|
|
147
|
+
this.database
|
|
148
|
+
.prepare('insert into portable_commit (id, commit_json) values (?, ?) on conflict(id) do nothing')
|
|
149
|
+
.run(commit.id, commit_json);
|
|
150
|
+
const persisted = this.database
|
|
151
|
+
.prepare('select commit_json from portable_commit where id = ?')
|
|
152
|
+
.get(commit.id);
|
|
153
|
+
if (persisted.commit_json !== commit_json) {
|
|
154
|
+
throw new Error(`Portable commit ${commit.id} conflicts with stored bytes.`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
for (const attestation of conversion.attestations) {
|
|
158
|
+
const attestation_json = stringifyCanonicalJson(attestation);
|
|
159
|
+
this.database
|
|
160
|
+
.prepare(`
|
|
161
|
+
insert into local_commit_portable_mapping (
|
|
162
|
+
local_commit_id, portable_commit_id, attestation_json
|
|
163
|
+
) values (?, ?, ?)
|
|
164
|
+
on conflict(local_commit_id) do nothing
|
|
165
|
+
`)
|
|
166
|
+
.run(attestation.local_commit_id, attestation.portable_commit_id, attestation_json);
|
|
167
|
+
const persisted = this.database
|
|
168
|
+
.prepare(`
|
|
169
|
+
select portable_commit_id, attestation_json
|
|
170
|
+
from local_commit_portable_mapping where local_commit_id = ?
|
|
171
|
+
`)
|
|
172
|
+
.get(attestation.local_commit_id);
|
|
173
|
+
if (persisted.portable_commit_id !== attestation.portable_commit_id ||
|
|
174
|
+
persisted.attestation_json !== attestation_json) {
|
|
175
|
+
throw new Error(`Local commit ${attestation.local_commit_id} already has a different portable mapping.`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
this.database.exec('commit');
|
|
179
|
+
return conversion;
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
this.database.exec('rollback');
|
|
183
|
+
throw error;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=portable-commit-store.js.map
|