@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,721 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { behindReferences } from './workspace-evidence-status.js';
|
|
3
|
+
/**
|
|
4
|
+
* `sdlc workspace status`: each node's claim status in a view
|
|
5
|
+
* (docs/specs/graph-claim-status.md, Statuses and Reading status).
|
|
6
|
+
*
|
|
7
|
+
* unrecorded no source reference says where its code is
|
|
8
|
+
* planned a pending claim merged under the `plan` gate
|
|
9
|
+
* designed a pending claim merged under the `design` gate
|
|
10
|
+
* implemented it has a source reference; `environment` is the furthest
|
|
11
|
+
* one, in the order given, whose Git ref holds every commit
|
|
12
|
+
* its references were recorded at
|
|
13
|
+
* released that environment is the last one given
|
|
14
|
+
*
|
|
15
|
+
* A node that cites no code (no source reference, and a type not in
|
|
16
|
+
* `cites_code`) follows the nodes that realize it: it takes the lowest status
|
|
17
|
+
* among them and names the ones that hold it back. A reference that no longer
|
|
18
|
+
* matches the code marks the node stale and leaves its status alone. The
|
|
19
|
+
* status is derived and never stored. Graph only, read only: Git is the
|
|
20
|
+
* caller's, through `ClaimStatusGit`.
|
|
21
|
+
*/
|
|
22
|
+
export const CLAIM_STATUSES = [
|
|
23
|
+
'unrecorded',
|
|
24
|
+
'planned',
|
|
25
|
+
'designed',
|
|
26
|
+
'implemented',
|
|
27
|
+
'released'
|
|
28
|
+
];
|
|
29
|
+
export const CLAIM_STATUS_VIEWS = ['planned', 'built', 'released'];
|
|
30
|
+
const SOURCE_PROVIDER = 'sdlc.source_code';
|
|
31
|
+
const HELD_SHOWN = 5;
|
|
32
|
+
const SELECTOR = /^L(\d+)-L(\d+)$/;
|
|
33
|
+
const IDENTIFIER = /[A-Za-z_$][\w$]*/g;
|
|
34
|
+
const CODE_SUFFIXES = [
|
|
35
|
+
'.ts',
|
|
36
|
+
'.tsx',
|
|
37
|
+
'.js',
|
|
38
|
+
'.jsx',
|
|
39
|
+
'.mjs',
|
|
40
|
+
'.cjs',
|
|
41
|
+
'.py',
|
|
42
|
+
'.sql'
|
|
43
|
+
];
|
|
44
|
+
const PARAMETERS_SCANNED = 4000;
|
|
45
|
+
const MODIFIERS = '(?:export|default|async|static|public|private|protected|readonly|get|set|override)';
|
|
46
|
+
const declaration = (name) => new RegExp(`\\b(?:function\\*?|class|const|let|var|def|interface|type|enum|namespace|table|view|policy|trigger` +
|
|
47
|
+
`|index|procedure)\\s+(?:if\\s+not\\s+exists\\s+)?(?:[\\w$"]+\\.)?"?${name}"?(?![\\w$])` +
|
|
48
|
+
`|(?<![\\w$.])(?<!:)(?<!:\\s)${name}\\s*(?::[^=;,\\n]+)?=(?![=>])` +
|
|
49
|
+
`|^\\s*(?:${MODIFIERS}\\s+)*${name}\\s*(?:<[^>\\n]*>)?\\([^)\\n]*\\)\\s*(?::[^{\\n]+)?\\{` +
|
|
50
|
+
`|^\\s*(?:${MODIFIERS}\\s+)+${name}\\s*(?:<[^>\\n]*>)?\\(` +
|
|
51
|
+
`|^\\s*["']?${name}["']?\\s*:` +
|
|
52
|
+
// A CommonJS export: exports.handler = … or module.exports.handler = ….
|
|
53
|
+
`|\\b(?:module\\.)?exports\\.${name}\\s*=(?![=>])`, 'im');
|
|
54
|
+
const exported = (name) => new RegExp(`\\bexport\\s*(?:type\\s*)?\\{[^}]*\\bas\\s+${name}\\s*[,}]` +
|
|
55
|
+
`|\\bexport\\s*(?:type\\s*)?\\{(?:[^}]*[\\s,])?${name}\\s*(?:,[^}]*)?\\}\\s*from\\b`, 'im');
|
|
56
|
+
const method = (name) => new RegExp(`^[ \\t]*${name}\\s*(?:<[^>\\n]*>)?\\(`, 'gim');
|
|
57
|
+
const FLOW = ['start', 'process', 'decision', 'end'];
|
|
58
|
+
/** The relations that count as realizing, for each node type that cites no code. */
|
|
59
|
+
const REALIZED_BY = {
|
|
60
|
+
story: [['targets', 'implements'], ['sources', 'implements'], ['equivalent']],
|
|
61
|
+
...Object.fromEntries(FLOW.map((kind) => [
|
|
62
|
+
kind,
|
|
63
|
+
[['targets', 'implements'], ['parent']]
|
|
64
|
+
])),
|
|
65
|
+
goal: [['targets', 'depends_on']],
|
|
66
|
+
feature: [['children', 'story']],
|
|
67
|
+
product: [['children', 'feature']],
|
|
68
|
+
document: [['targets', 'describes']],
|
|
69
|
+
system: [
|
|
70
|
+
['children', null],
|
|
71
|
+
['targets', 'implements']
|
|
72
|
+
],
|
|
73
|
+
...Object.fromEntries(['context', 'container', 'website', 'api_gateway', 'database'].map((kind) => [kind, [['children', null]]]))
|
|
74
|
+
};
|
|
75
|
+
const UNRECORDED = {
|
|
76
|
+
status: 'unrecorded',
|
|
77
|
+
environment: null,
|
|
78
|
+
established_by: null,
|
|
79
|
+
stale: []
|
|
80
|
+
};
|
|
81
|
+
function record(value) {
|
|
82
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value)
|
|
83
|
+
? value
|
|
84
|
+
: {};
|
|
85
|
+
}
|
|
86
|
+
function text(value) {
|
|
87
|
+
return typeof value === 'string' ? value : null;
|
|
88
|
+
}
|
|
89
|
+
export function parseClaimStatusView(value) {
|
|
90
|
+
if (value === null || value === undefined)
|
|
91
|
+
return 'planned';
|
|
92
|
+
if (CLAIM_STATUS_VIEWS.includes(value))
|
|
93
|
+
return value;
|
|
94
|
+
throw new Error(`Unknown view ${value}: use ${CLAIM_STATUS_VIEWS.join(', ')}.`);
|
|
95
|
+
}
|
|
96
|
+
export function parseClaimStatus(value) {
|
|
97
|
+
if (CLAIM_STATUSES.includes(value))
|
|
98
|
+
return value;
|
|
99
|
+
throw new Error(`Unknown status ${value}: use ${CLAIM_STATUSES.join(', ')}.`);
|
|
100
|
+
}
|
|
101
|
+
/** `<key>=<ref>`, in promotion order. */
|
|
102
|
+
export function parseClaimStatusEnvironment(value) {
|
|
103
|
+
const at = value.indexOf('=');
|
|
104
|
+
const key = value.slice(0, at).trim();
|
|
105
|
+
const ref = value.slice(at + 1).trim();
|
|
106
|
+
if (at < 1 || !key || !ref) {
|
|
107
|
+
throw new Error(`An environment is <key>=<git ref>, not ${value}.`);
|
|
108
|
+
}
|
|
109
|
+
return { key, ref };
|
|
110
|
+
}
|
|
111
|
+
/** A node's source references; a legacy location gives only its path. */
|
|
112
|
+
export function claimReferences(node) {
|
|
113
|
+
const meta = record(record(record(node).data).meta);
|
|
114
|
+
const out = [];
|
|
115
|
+
const references = record(meta.evidence).references;
|
|
116
|
+
for (const value of Array.isArray(references) ? references : []) {
|
|
117
|
+
const reference = record(value);
|
|
118
|
+
const resource = record(reference.resource);
|
|
119
|
+
const path = text(resource.id);
|
|
120
|
+
if (reference.provider_key !== SOURCE_PROVIDER ||
|
|
121
|
+
resource.type !== 'file' ||
|
|
122
|
+
!path)
|
|
123
|
+
continue;
|
|
124
|
+
const anchor = record(reference.anchor);
|
|
125
|
+
const revision = record(reference.revision);
|
|
126
|
+
const symbol = anchor.type === 'symbol' ? text(anchor.id) : null;
|
|
127
|
+
const span = SELECTOR.exec(String((symbol ? anchor.selector : anchor.id) ?? ''));
|
|
128
|
+
const lines = span
|
|
129
|
+
? [Number(span[1]), Number(span[2])]
|
|
130
|
+
: null;
|
|
131
|
+
out.push({
|
|
132
|
+
path,
|
|
133
|
+
symbol,
|
|
134
|
+
lines: lines && 1 <= lines[0] && lines[0] <= lines[1] ? lines : null,
|
|
135
|
+
commit: revision.kind === 'commit' ? text(revision.value) : null,
|
|
136
|
+
relations: Array.isArray(reference.relations)
|
|
137
|
+
? reference.relations.filter((relation) => typeof relation === 'string')
|
|
138
|
+
: [],
|
|
139
|
+
legacy: false
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
const legacy = record(meta.source_evidence);
|
|
143
|
+
const locations = [
|
|
144
|
+
...(legacy.primary ? [legacy.primary] : []),
|
|
145
|
+
...(Array.isArray(legacy.references) ? legacy.references : [])
|
|
146
|
+
];
|
|
147
|
+
for (const location of locations) {
|
|
148
|
+
const path = text(record(location).path);
|
|
149
|
+
if (path)
|
|
150
|
+
out.push({
|
|
151
|
+
path,
|
|
152
|
+
symbol: null,
|
|
153
|
+
lines: null,
|
|
154
|
+
commit: null,
|
|
155
|
+
relations: [],
|
|
156
|
+
legacy: true
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
return out;
|
|
160
|
+
}
|
|
161
|
+
function escape(word) {
|
|
162
|
+
return word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
163
|
+
}
|
|
164
|
+
function names(symbol, lines) {
|
|
165
|
+
const content = lines.join('\n');
|
|
166
|
+
const words = symbol.match(IDENTIFIER) ?? [symbol];
|
|
167
|
+
return words.every((word) => new RegExp(`(?<![\\w$])${escape(word)}(?![\\w$])`).test(content));
|
|
168
|
+
}
|
|
169
|
+
function declares(symbol, lines) {
|
|
170
|
+
const words = symbol.match(IDENTIFIER);
|
|
171
|
+
if (!words)
|
|
172
|
+
return names(symbol, lines);
|
|
173
|
+
const name = escape(words[words.length - 1]);
|
|
174
|
+
const content = lines.join('\n');
|
|
175
|
+
if (declaration(name).test(content) || exported(name).test(content))
|
|
176
|
+
return true;
|
|
177
|
+
for (const match of content.matchAll(method(name))) {
|
|
178
|
+
let depth = 1;
|
|
179
|
+
let at = match.index + match[0].length;
|
|
180
|
+
const end = Math.min(content.length, match.index + match[0].length + PARAMETERS_SCANNED);
|
|
181
|
+
while (depth && at < end) {
|
|
182
|
+
depth += Number(content[at] === '(') - Number(content[at] === ')');
|
|
183
|
+
at += 1;
|
|
184
|
+
}
|
|
185
|
+
if (!depth && /^\s*[{:]/.test(content.slice(at)))
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
/** How a symbol stands in a file's lines: ok, symbol_missing, symbol_undefined, or symbol_moved (outside `span`). */
|
|
191
|
+
export function symbolStatus(symbol, lines, span, defines, path) {
|
|
192
|
+
const found = defines && CODE_SUFFIXES.some((suffix) => path.endsWith(suffix))
|
|
193
|
+
? declares
|
|
194
|
+
: names;
|
|
195
|
+
if (!names(symbol, lines))
|
|
196
|
+
return 'symbol_missing';
|
|
197
|
+
if (!found(symbol, lines))
|
|
198
|
+
return 'symbol_undefined';
|
|
199
|
+
if (span && !found(symbol, lines.slice(span[0] - 1, span[1])))
|
|
200
|
+
return 'symbol_moved';
|
|
201
|
+
return 'ok';
|
|
202
|
+
}
|
|
203
|
+
/** (status, detail) of one reference at `commit`; anything but ok and legacy is stale. */
|
|
204
|
+
export async function referenceStatus(git, commit, reference, lines_at = (c, p) => git.lines(c, p)) {
|
|
205
|
+
const lines = await lines_at(commit, reference.path);
|
|
206
|
+
if (lines === null)
|
|
207
|
+
return ['missing_file', `${reference.path} does not exist`];
|
|
208
|
+
if (reference.legacy)
|
|
209
|
+
return ['legacy', 'legacy source_evidence; only the file is checked'];
|
|
210
|
+
const span = reference.lines;
|
|
211
|
+
if (span && span[1] > lines.length) {
|
|
212
|
+
return [
|
|
213
|
+
'past_end',
|
|
214
|
+
`L${span[0]}-L${span[1]} is past the file's ${lines.length} lines`
|
|
215
|
+
];
|
|
216
|
+
}
|
|
217
|
+
if (reference.symbol) {
|
|
218
|
+
const defines = reference.relations.includes('defines');
|
|
219
|
+
const state = symbolStatus(reference.symbol, lines, span, defines, reference.path);
|
|
220
|
+
const details = {
|
|
221
|
+
symbol_missing: `${reference.symbol} is not in ${reference.path}`,
|
|
222
|
+
symbol_undefined: `${reference.path} mentions ${reference.symbol} but no longer declares it`,
|
|
223
|
+
symbol_moved: span
|
|
224
|
+
? `${reference.symbol} is no longer ${defines ? 'declared ' : ''}in L${span[0]}-L${span[1]}`
|
|
225
|
+
: null
|
|
226
|
+
};
|
|
227
|
+
return [state, details[state] ?? null];
|
|
228
|
+
}
|
|
229
|
+
if (span && reference.commit) {
|
|
230
|
+
if ((await git.resolve(reference.commit)) === null) {
|
|
231
|
+
return [
|
|
232
|
+
'revision_unknown',
|
|
233
|
+
`recorded at ${reference.commit.slice(0, 12)}, which this repository does not have`
|
|
234
|
+
];
|
|
235
|
+
}
|
|
236
|
+
const before = await lines_at(reference.commit, reference.path);
|
|
237
|
+
const range = (from) => from.slice(span[0] - 1, span[1]);
|
|
238
|
+
const was = before === null ? null : range(before);
|
|
239
|
+
const now = range(lines);
|
|
240
|
+
if (was === null ||
|
|
241
|
+
was.length !== now.length ||
|
|
242
|
+
was.some((line, at) => line !== now[at])) {
|
|
243
|
+
return [
|
|
244
|
+
'lines_changed',
|
|
245
|
+
`L${span[0]}-L${span[1]} changed since ${reference.commit.slice(0, 12)}`
|
|
246
|
+
];
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return ['ok', null];
|
|
250
|
+
}
|
|
251
|
+
function claimsOf(graph) {
|
|
252
|
+
return graph.nodes.map((node) => {
|
|
253
|
+
const label = record(record(node.data).data).label;
|
|
254
|
+
return {
|
|
255
|
+
node: node.id,
|
|
256
|
+
type: text(node.type),
|
|
257
|
+
label: typeof label === 'string' ? label : null,
|
|
258
|
+
parent: text(node.parentId),
|
|
259
|
+
references: claimReferences(node)
|
|
260
|
+
};
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
/** {node: the nodes that realize it, sorted} for every node whose type REALIZED_BY lists. */
|
|
264
|
+
export function claimRealizers(graph) {
|
|
265
|
+
const claims = claimsOf(graph);
|
|
266
|
+
const kinds = new Map(claims.map((claim) => [claim.node, claim.type]));
|
|
267
|
+
const push = (map, key, value) => {
|
|
268
|
+
const list = map.get(key);
|
|
269
|
+
if (list)
|
|
270
|
+
list.push(value);
|
|
271
|
+
else
|
|
272
|
+
map.set(key, [value]);
|
|
273
|
+
};
|
|
274
|
+
const targets = new Map();
|
|
275
|
+
const origins = new Map();
|
|
276
|
+
const children = new Map();
|
|
277
|
+
for (const edge of graph.edges) {
|
|
278
|
+
const relationship = text(record(record(edge.data).data).type);
|
|
279
|
+
push(targets, `${edge.source}\u0000${relationship}`, edge.target);
|
|
280
|
+
push(origins, `${edge.target}\u0000${relationship}`, edge.source);
|
|
281
|
+
}
|
|
282
|
+
for (const claim of claims)
|
|
283
|
+
push(children, claim.parent, claim.node);
|
|
284
|
+
const paths = new Map((graph.paths ?? []).map((path) => [
|
|
285
|
+
path.id,
|
|
286
|
+
path.anchors.map((anchor) => anchor.node_id)
|
|
287
|
+
]));
|
|
288
|
+
const through = new Map();
|
|
289
|
+
for (const [path, anchors] of paths) {
|
|
290
|
+
for (const anchor of anchors) {
|
|
291
|
+
if (!through.has(anchor))
|
|
292
|
+
through.set(anchor, new Set());
|
|
293
|
+
through.get(anchor).add(path);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
const equivalent = new Map();
|
|
297
|
+
for (const relation of graph.path_relations ?? []) {
|
|
298
|
+
if (relation.relation !== 'equivalent')
|
|
299
|
+
continue;
|
|
300
|
+
for (const [one, other] of [
|
|
301
|
+
[relation.left_path_id, relation.right_path_id],
|
|
302
|
+
[relation.right_path_id, relation.left_path_id]
|
|
303
|
+
]) {
|
|
304
|
+
if (!equivalent.has(one))
|
|
305
|
+
equivalent.set(one, new Set());
|
|
306
|
+
equivalent.get(one).add(other);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
const out = new Map();
|
|
310
|
+
for (const claim of claims) {
|
|
311
|
+
const rules = claim.type ? REALIZED_BY[claim.type] : undefined;
|
|
312
|
+
if (!rules)
|
|
313
|
+
continue;
|
|
314
|
+
const found = new Set();
|
|
315
|
+
for (const rule of rules) {
|
|
316
|
+
if (rule[0] === 'targets') {
|
|
317
|
+
for (const other of targets.get(`${claim.node}\u0000${rule[1]}`) ?? [])
|
|
318
|
+
found.add(other);
|
|
319
|
+
}
|
|
320
|
+
else if (rule[0] === 'sources') {
|
|
321
|
+
for (const other of origins.get(`${claim.node}\u0000${rule[1]}`) ?? [])
|
|
322
|
+
found.add(other);
|
|
323
|
+
}
|
|
324
|
+
else if (rule[0] === 'children') {
|
|
325
|
+
for (const child of children.get(claim.node) ?? []) {
|
|
326
|
+
if (rule[1] === null || kinds.get(child) === rule[1])
|
|
327
|
+
found.add(child);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
else if (rule[0] === 'parent') {
|
|
331
|
+
if (claim.parent)
|
|
332
|
+
found.add(claim.parent);
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
const steps = (children.get(claim.node) ?? []).filter((child) => FLOW.includes(kinds.get(child) ?? ''));
|
|
336
|
+
const own = new Set(steps.flatMap((step) => [...(through.get(step) ?? [])]));
|
|
337
|
+
const others = new Set([...own].flatMap((path) => [...(equivalent.get(path) ?? [])]));
|
|
338
|
+
for (const path of others) {
|
|
339
|
+
if (own.has(path))
|
|
340
|
+
continue;
|
|
341
|
+
for (const anchor of paths.get(path) ?? []) {
|
|
342
|
+
if (![...FLOW, 'goal'].includes(kinds.get(anchor) ?? ''))
|
|
343
|
+
found.add(anchor);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
out.set(claim.node, [...found]
|
|
349
|
+
.filter((other) => kinds.has(other) && other !== claim.node)
|
|
350
|
+
.sort());
|
|
351
|
+
}
|
|
352
|
+
return out;
|
|
353
|
+
}
|
|
354
|
+
function rank(status, environments) {
|
|
355
|
+
const low = ['unrecorded', 'planned', 'designed'];
|
|
356
|
+
if (low.includes(status.status))
|
|
357
|
+
return low.indexOf(status.status);
|
|
358
|
+
const at = environments.findIndex((environment) => environment.key === status.environment);
|
|
359
|
+
return at >= 0 ? 4 + at : 3;
|
|
360
|
+
}
|
|
361
|
+
/** Statuses for the nodes in `realized_by` with none of their own: the lowest among their realizers. */
|
|
362
|
+
function following(claims, own, realized_by, environments) {
|
|
363
|
+
const by_id = new Map(claims.map((claim) => [claim.node, claim]));
|
|
364
|
+
const settled = new Map();
|
|
365
|
+
const order = new Map();
|
|
366
|
+
const low = new Map();
|
|
367
|
+
const stack = [];
|
|
368
|
+
// Nodes that realize one another take one status, so a cycle never raises a status.
|
|
369
|
+
const settle = (group) => {
|
|
370
|
+
const found = [
|
|
371
|
+
...new Set([...group].flatMap((node) => (realized_by.get(node) ?? []).filter((other) => !group.has(other))))
|
|
372
|
+
].sort();
|
|
373
|
+
const ranked = found.map((other) => [other, own.get(other) ?? settled.get(other)]);
|
|
374
|
+
const ranks = ranked.map(([, status]) => rank(status, environments));
|
|
375
|
+
const lowest = ranks.length ? Math.min(...ranks) : null;
|
|
376
|
+
const least = ranked.find(([, status]) => rank(status, environments) === lowest)?.[1] ??
|
|
377
|
+
null;
|
|
378
|
+
const held = least === null || least.status === 'released'
|
|
379
|
+
? []
|
|
380
|
+
: ranked
|
|
381
|
+
.filter(([, status]) => rank(status, environments) === lowest)
|
|
382
|
+
.map(([other]) => ({
|
|
383
|
+
node: other,
|
|
384
|
+
type: by_id.get(other).type,
|
|
385
|
+
label: by_id.get(other).label
|
|
386
|
+
}));
|
|
387
|
+
for (const node of group) {
|
|
388
|
+
settled.set(node, least === null
|
|
389
|
+
? { ...UNRECORDED }
|
|
390
|
+
: {
|
|
391
|
+
status: least.status,
|
|
392
|
+
environment: least.environment,
|
|
393
|
+
established_by: {
|
|
394
|
+
realized_by: realized_by.get(node).length,
|
|
395
|
+
held_back: held.length,
|
|
396
|
+
held_back_by: held.slice(0, HELD_SHOWN)
|
|
397
|
+
},
|
|
398
|
+
stale: []
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
};
|
|
402
|
+
// Tarjan's walk, without recursion: a group is settled after every group it follows.
|
|
403
|
+
const visit = (start) => {
|
|
404
|
+
const frames = [];
|
|
405
|
+
const open = (node) => {
|
|
406
|
+
order.set(node, order.size);
|
|
407
|
+
low.set(node, order.get(node));
|
|
408
|
+
stack.push(node);
|
|
409
|
+
frames.push({ node, next: 0 });
|
|
410
|
+
};
|
|
411
|
+
open(start);
|
|
412
|
+
while (frames.length) {
|
|
413
|
+
const frame = frames[frames.length - 1];
|
|
414
|
+
const others = realized_by.get(frame.node) ?? [];
|
|
415
|
+
if (frame.next < others.length) {
|
|
416
|
+
const other = others[frame.next++];
|
|
417
|
+
// A realizer with no status of its own and no rules settles alone, as unrecorded.
|
|
418
|
+
if (own.has(other) || settled.has(other))
|
|
419
|
+
continue;
|
|
420
|
+
if (!order.has(other)) {
|
|
421
|
+
open(other);
|
|
422
|
+
continue;
|
|
423
|
+
}
|
|
424
|
+
low.set(frame.node, Math.min(low.get(frame.node), low.get(other)));
|
|
425
|
+
continue;
|
|
426
|
+
}
|
|
427
|
+
frames.pop();
|
|
428
|
+
const parent = frames[frames.length - 1];
|
|
429
|
+
if (low.get(frame.node) === order.get(frame.node)) {
|
|
430
|
+
const group = new Set();
|
|
431
|
+
while (!group.has(frame.node))
|
|
432
|
+
group.add(stack.pop());
|
|
433
|
+
settle(group);
|
|
434
|
+
}
|
|
435
|
+
if (parent)
|
|
436
|
+
low.set(parent.node, Math.min(low.get(parent.node), low.get(frame.node)));
|
|
437
|
+
}
|
|
438
|
+
};
|
|
439
|
+
for (const node of realized_by.keys()) {
|
|
440
|
+
if (!own.has(node) && !order.has(node))
|
|
441
|
+
visit(node);
|
|
442
|
+
}
|
|
443
|
+
return new Map([...realized_by.keys()]
|
|
444
|
+
.filter((node) => !own.has(node))
|
|
445
|
+
.map((node) => [node, settled.get(node)]));
|
|
446
|
+
}
|
|
447
|
+
function gated(rows) {
|
|
448
|
+
const status = rows.every((row) => row.gate === 'design')
|
|
449
|
+
? 'designed'
|
|
450
|
+
: 'planned';
|
|
451
|
+
const named = (values) => [
|
|
452
|
+
...new Set(values.filter((value) => Boolean(value)))
|
|
453
|
+
].sort();
|
|
454
|
+
return {
|
|
455
|
+
status,
|
|
456
|
+
environment: null,
|
|
457
|
+
stale: [],
|
|
458
|
+
established_by: {
|
|
459
|
+
gate: status,
|
|
460
|
+
gate_commits: named(rows.map((row) => row.gate_commit_id)),
|
|
461
|
+
work_streams: named(rows.map((row) => row.work_stream_workspace_id))
|
|
462
|
+
}
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
function counts() {
|
|
466
|
+
return Object.fromEntries(CLAIM_STATUSES.map((status) => [status, 0]));
|
|
467
|
+
}
|
|
468
|
+
/** Every node's status at `commit`, with the counts; the node list only when asked for. */
|
|
469
|
+
export async function claimStatus(input) {
|
|
470
|
+
const view = input.view ?? 'planned';
|
|
471
|
+
const git = input.git;
|
|
472
|
+
const commit = await git.resolve(input.commit);
|
|
473
|
+
if (commit === null)
|
|
474
|
+
throw new Error(`${input.commit} is not a commit in this repository.`);
|
|
475
|
+
const cache = new Map();
|
|
476
|
+
const lines_at = (at, path) => {
|
|
477
|
+
const key = `${at}\u0000${path}`;
|
|
478
|
+
if (!cache.has(key))
|
|
479
|
+
cache.set(key, git.lines(at, path));
|
|
480
|
+
return cache.get(key);
|
|
481
|
+
};
|
|
482
|
+
const holds = new Map();
|
|
483
|
+
const contains = (ref, at) => {
|
|
484
|
+
const key = `${ref}\u0000${at}`;
|
|
485
|
+
if (!holds.has(key))
|
|
486
|
+
holds.set(key, git.isAncestor(at, ref));
|
|
487
|
+
return holds.get(key);
|
|
488
|
+
};
|
|
489
|
+
const claims = claimsOf(input.graph);
|
|
490
|
+
const by_node = new Map();
|
|
491
|
+
for (const claim of input.pending) {
|
|
492
|
+
if (claim.entity_kind !== 'node')
|
|
493
|
+
continue;
|
|
494
|
+
by_node.set(claim.entity_id, [
|
|
495
|
+
...(by_node.get(claim.entity_id) ?? []),
|
|
496
|
+
claim
|
|
497
|
+
]);
|
|
498
|
+
}
|
|
499
|
+
const statusOf = async (claim) => {
|
|
500
|
+
const references = claim.references;
|
|
501
|
+
if (!references.length)
|
|
502
|
+
return { ...UNRECORDED };
|
|
503
|
+
const stale = [];
|
|
504
|
+
for (const reference of references) {
|
|
505
|
+
const [state, detail] = await referenceStatus(git, commit, reference, lines_at);
|
|
506
|
+
if (state !== 'ok' && state !== 'legacy') {
|
|
507
|
+
stale.push({
|
|
508
|
+
path: reference.path,
|
|
509
|
+
status: state,
|
|
510
|
+
detail: detail ?? state
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
const commits = [
|
|
515
|
+
...new Set(references
|
|
516
|
+
.map((reference) => reference.commit)
|
|
517
|
+
.filter((c) => Boolean(c)))
|
|
518
|
+
].sort();
|
|
519
|
+
let environment = null;
|
|
520
|
+
if (commits.length) {
|
|
521
|
+
for (const candidate of input.environments) {
|
|
522
|
+
const all = await Promise.all(commits.map((at) => contains(candidate.ref, at)));
|
|
523
|
+
if (!all.every(Boolean))
|
|
524
|
+
break;
|
|
525
|
+
environment = candidate;
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
const last = input.environments[input.environments.length - 1];
|
|
529
|
+
const released = Boolean(environment && last && environment.key === last.key);
|
|
530
|
+
return {
|
|
531
|
+
status: released ? 'released' : 'implemented',
|
|
532
|
+
environment: environment?.key ?? null,
|
|
533
|
+
established_by: {
|
|
534
|
+
references: references.length,
|
|
535
|
+
commits,
|
|
536
|
+
...(environment ? { ref: environment.ref } : {})
|
|
537
|
+
},
|
|
538
|
+
stale
|
|
539
|
+
};
|
|
540
|
+
};
|
|
541
|
+
const referenced = new Map();
|
|
542
|
+
for (const claim of claims) {
|
|
543
|
+
if (claim.references.length ||
|
|
544
|
+
(claim.type && input.cites_code.includes(claim.type))) {
|
|
545
|
+
referenced.set(claim.node, await statusOf(claim));
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
const realized_by = claimRealizers(input.graph);
|
|
549
|
+
const statuses = (own) => {
|
|
550
|
+
const follows = following(claims, own, realized_by, input.environments);
|
|
551
|
+
return new Map(claims.map((claim) => [
|
|
552
|
+
claim.node,
|
|
553
|
+
own.get(claim.node) ?? follows.get(claim.node) ?? { ...UNRECORDED }
|
|
554
|
+
]));
|
|
555
|
+
};
|
|
556
|
+
// As built: each node's records without its pending claim. A node never built realizes nothing.
|
|
557
|
+
const unbuilt = new Set([...by_node]
|
|
558
|
+
.filter(([, rows]) => rows.every((row) => row.built_commit_id === null))
|
|
559
|
+
.map(([node]) => node));
|
|
560
|
+
const built = statuses(new Map([
|
|
561
|
+
...referenced,
|
|
562
|
+
...[...unbuilt].map((node) => [node, { ...UNRECORDED }])
|
|
563
|
+
]));
|
|
564
|
+
const current = by_node.size
|
|
565
|
+
? statuses(new Map([
|
|
566
|
+
...referenced,
|
|
567
|
+
...[...by_node].map(([node, rows]) => [node, gated(rows)])
|
|
568
|
+
]))
|
|
569
|
+
: built;
|
|
570
|
+
const graph_nodes = new Map(input.graph.nodes.map((node) => [node.id, node]));
|
|
571
|
+
const listed = [];
|
|
572
|
+
for (const claim of claims) {
|
|
573
|
+
const rows = by_node.get(claim.node);
|
|
574
|
+
const never_built = unbuilt.has(claim.node);
|
|
575
|
+
const as_built = built.get(claim.node);
|
|
576
|
+
if (view !== 'planned' &&
|
|
577
|
+
(never_built || (view === 'released' && as_built.status !== 'released'))) {
|
|
578
|
+
continue;
|
|
579
|
+
}
|
|
580
|
+
const status = view === 'planned' ? current.get(claim.node) : as_built;
|
|
581
|
+
listed.push({
|
|
582
|
+
node: claim.node,
|
|
583
|
+
type: claim.type,
|
|
584
|
+
label: claim.label,
|
|
585
|
+
follows: !referenced.has(claim.node) && !(rows && view === 'planned'),
|
|
586
|
+
...status,
|
|
587
|
+
behind: behindReferences('node', graph_nodes.get(claim.node)).map((reference) => ({
|
|
588
|
+
reference_id: reference.reference_id,
|
|
589
|
+
provider_key: reference.provider_key,
|
|
590
|
+
resource: reference.resource,
|
|
591
|
+
claim_object_hash: reference.claim_object_hash
|
|
592
|
+
})),
|
|
593
|
+
...(rows && view === 'planned'
|
|
594
|
+
? {
|
|
595
|
+
built_as: never_built
|
|
596
|
+
? null
|
|
597
|
+
: { status: as_built.status, environment: as_built.environment }
|
|
598
|
+
}
|
|
599
|
+
: {})
|
|
600
|
+
});
|
|
601
|
+
}
|
|
602
|
+
const by_status = counts();
|
|
603
|
+
const by_environment = {};
|
|
604
|
+
const by_type = {};
|
|
605
|
+
for (const node of listed) {
|
|
606
|
+
by_status[node.status] += 1;
|
|
607
|
+
if (node.status === 'implemented') {
|
|
608
|
+
const key = node.environment ?? 'none';
|
|
609
|
+
by_environment[key] = (by_environment[key] ?? 0) + 1;
|
|
610
|
+
}
|
|
611
|
+
const kind = node.type ?? '(no type)';
|
|
612
|
+
by_type[kind] ??= counts();
|
|
613
|
+
by_type[kind][node.status] += 1;
|
|
614
|
+
}
|
|
615
|
+
const followers = listed.filter((node) => node.follows);
|
|
616
|
+
const follower_counts = counts();
|
|
617
|
+
for (const node of followers)
|
|
618
|
+
follower_counts[node.status] += 1;
|
|
619
|
+
const other_claims = {};
|
|
620
|
+
for (const claim of input.pending) {
|
|
621
|
+
if (claim.entity_kind !== 'node') {
|
|
622
|
+
other_claims[claim.entity_kind] =
|
|
623
|
+
(other_claims[claim.entity_kind] ?? 0) + 1;
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
const asked = Boolean(input.nodes?.length || input.status || input.stale_only || input.behind_only);
|
|
627
|
+
const wanted = new Set(input.nodes ?? []);
|
|
628
|
+
const sum = (value) => Object.values(value).reduce((total, n) => total + n, 0);
|
|
629
|
+
return {
|
|
630
|
+
version: 1,
|
|
631
|
+
view,
|
|
632
|
+
workspace_id: input.workspace_id,
|
|
633
|
+
graph_commit_id: input.graph_commit_id,
|
|
634
|
+
commit,
|
|
635
|
+
environments: await Promise.all(input.environments.map(async (environment) => ({
|
|
636
|
+
...environment,
|
|
637
|
+
resolved: (await git.resolve(environment.ref)) !== null
|
|
638
|
+
}))),
|
|
639
|
+
cites_code: [...input.cites_code],
|
|
640
|
+
pending: {
|
|
641
|
+
nodes: by_node.size,
|
|
642
|
+
marked_for_removal: [...by_node]
|
|
643
|
+
.filter(([, rows]) => rows.some((row) => row.change === 'removal'))
|
|
644
|
+
.map(([node]) => node)
|
|
645
|
+
.sort(),
|
|
646
|
+
other_claims
|
|
647
|
+
},
|
|
648
|
+
nodes: listed.length,
|
|
649
|
+
by_status,
|
|
650
|
+
implemented_by_environment: by_environment,
|
|
651
|
+
stale_nodes: listed.filter((node) => node.stale.length).length,
|
|
652
|
+
behind_nodes: listed.filter((node) => node.behind.length).length,
|
|
653
|
+
following: {
|
|
654
|
+
nodes: followers.length,
|
|
655
|
+
by_status: follower_counts,
|
|
656
|
+
unrealized: followers.filter((node) => !node.established_by).length
|
|
657
|
+
},
|
|
658
|
+
by_type: Object.fromEntries(Object.entries(by_type).sort(([a, x], [b, y]) => sum(y) - sum(x) || (a < b ? -1 : a > b ? 1 : 0))),
|
|
659
|
+
other_claims: {
|
|
660
|
+
edges: input.graph.edges.length,
|
|
661
|
+
paths: input.graph.paths?.length ?? 0,
|
|
662
|
+
path_relations: input.graph.path_relations?.length ?? 0
|
|
663
|
+
},
|
|
664
|
+
...(wanted.size
|
|
665
|
+
? {
|
|
666
|
+
not_found: [...wanted]
|
|
667
|
+
.filter((node) => !listed.some((entry) => entry.node === node))
|
|
668
|
+
.sort()
|
|
669
|
+
}
|
|
670
|
+
: {}),
|
|
671
|
+
...(asked
|
|
672
|
+
? {
|
|
673
|
+
claims: listed.filter((node) => (!wanted.size || wanted.has(node.node)) &&
|
|
674
|
+
(!input.status || node.status === input.status) &&
|
|
675
|
+
(!input.stale_only || node.stale.length > 0) &&
|
|
676
|
+
(!input.behind_only || node.behind.length > 0))
|
|
677
|
+
}
|
|
678
|
+
: {})
|
|
679
|
+
};
|
|
680
|
+
}
|
|
681
|
+
/** The Git reads of the repository holding `cwd`, through the git command. */
|
|
682
|
+
export function gitClaimStatusReader(cwd) {
|
|
683
|
+
// git's exit status answers the question; failing to run git, or output past
|
|
684
|
+
// the buffer, is an error, never a negative answer.
|
|
685
|
+
const run = (args) => new Promise((resolve, reject) => {
|
|
686
|
+
execFile('git', ['-C', cwd, ...args], { encoding: 'utf8', maxBuffer: 64 * 1024 * 1024 }, (error, stdout) => {
|
|
687
|
+
if (!error)
|
|
688
|
+
return resolve({ code: 0, stdout });
|
|
689
|
+
const code = error.code;
|
|
690
|
+
if (typeof code === 'number')
|
|
691
|
+
return resolve({ code, stdout });
|
|
692
|
+
reject(new Error(`git ${args[0]} could not run: ${error.message.split('\n')[0]}`));
|
|
693
|
+
});
|
|
694
|
+
});
|
|
695
|
+
return {
|
|
696
|
+
async resolve(ref) {
|
|
697
|
+
const found = await run([
|
|
698
|
+
'rev-parse',
|
|
699
|
+
'--verify',
|
|
700
|
+
'--quiet',
|
|
701
|
+
`${ref}^{commit}`
|
|
702
|
+
]);
|
|
703
|
+
return found.code === 0 ? found.stdout.trim() || null : null;
|
|
704
|
+
},
|
|
705
|
+
async isAncestor(commit, ref) {
|
|
706
|
+
return ((await run(['merge-base', '--is-ancestor', commit, ref])).code === 0);
|
|
707
|
+
},
|
|
708
|
+
async lines(commit, path) {
|
|
709
|
+
const found = await run(['show', `${commit}:${path}`]);
|
|
710
|
+
if (found.code !== 0)
|
|
711
|
+
return null;
|
|
712
|
+
// Git's lines: split on newlines only, never on form feeds.
|
|
713
|
+
const content = found.stdout;
|
|
714
|
+
if (!content)
|
|
715
|
+
return [];
|
|
716
|
+
const lines = content.split('\n');
|
|
717
|
+
return content.endsWith('\n') ? lines.slice(0, -1) : lines;
|
|
718
|
+
}
|
|
719
|
+
};
|
|
720
|
+
}
|
|
721
|
+
//# sourceMappingURL=workspace-claim-status.js.map
|