@amalgm/shell 0.1.164-preview.36072132286 → 0.1.164-preview.36809057014
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/PURPOSE.md +642 -128
- package/README.md +10 -8
- package/dist/accepted-tail.d.ts +26 -0
- package/dist/accepted-tail.js +37 -0
- package/dist/accepted-tail.js.map +1 -0
- package/dist/agent-execution.d.ts +16 -1
- package/dist/agent-execution.js +13 -5
- package/dist/agent-execution.js.map +1 -1
- package/dist/apply-cleanup.d.ts +28 -0
- package/dist/apply-cleanup.js +166 -0
- package/dist/apply-cleanup.js.map +1 -0
- package/dist/apply-recovery.d.ts +47 -0
- package/dist/apply-recovery.js +99 -0
- package/dist/apply-recovery.js.map +1 -0
- package/dist/apply-rows.d.ts +72 -0
- package/dist/apply-rows.js +150 -0
- package/dist/apply-rows.js.map +1 -0
- package/dist/apply-saves.d.ts +85 -0
- package/dist/apply-saves.js +238 -0
- package/dist/apply-saves.js.map +1 -0
- package/dist/boot.js +2 -1
- package/dist/boot.js.map +1 -1
- package/dist/capture-work.d.ts +8 -0
- package/dist/capture-work.js +67 -0
- package/dist/capture-work.js.map +1 -0
- package/dist/cargo-group.d.ts +45 -0
- package/dist/cargo-group.js +88 -0
- package/dist/cargo-group.js.map +1 -0
- package/dist/channel-session.d.ts +4 -2
- package/dist/channel-session.js +4 -3
- package/dist/channel-session.js.map +1 -1
- package/dist/chat-composition.d.ts +2 -0
- package/dist/chat-composition.js +1 -0
- package/dist/chat-composition.js.map +1 -1
- package/dist/cli.js +20 -1
- package/dist/cli.js.map +1 -1
- package/dist/construct-apply-host.d.ts +4 -2
- package/dist/construct-apply-host.js +8 -3
- package/dist/construct-apply-host.js.map +1 -1
- package/dist/construct-door.js +1 -1
- package/dist/construct-door.js.map +1 -1
- package/dist/construct-ledger.d.ts +6 -1
- package/dist/construct-ledger.js +21 -33
- package/dist/construct-ledger.js.map +1 -1
- package/dist/content-cache-collection.d.ts +18 -0
- package/dist/content-cache-collection.js +99 -0
- package/dist/content-cache-collection.js.map +1 -0
- package/dist/content-cache-host.d.ts +83 -17
- package/dist/content-cache-host.js +335 -95
- package/dist/content-cache-host.js.map +1 -1
- package/dist/content-cache-namespace.d.ts +59 -0
- package/dist/content-cache-namespace.js +210 -0
- package/dist/content-cache-namespace.js.map +1 -0
- package/dist/content-cache-ownership.d.ts +13 -0
- package/dist/content-cache-ownership.js +75 -0
- package/dist/content-cache-ownership.js.map +1 -0
- package/dist/content-cache-retention.d.ts +23 -0
- package/dist/content-cache-retention.js +195 -0
- package/dist/content-cache-retention.js.map +1 -0
- package/dist/content-capture-pool.d.ts +287 -0
- package/dist/content-capture-pool.js +461 -0
- package/dist/content-capture-pool.js.map +1 -0
- package/dist/content-capture-worker.d.ts +8 -0
- package/dist/content-capture-worker.js +109 -0
- package/dist/content-capture-worker.js.map +1 -0
- package/dist/content-clock.d.ts +42 -0
- package/dist/content-clock.js +166 -0
- package/dist/content-clock.js.map +1 -0
- package/dist/content-direct.d.ts +2 -0
- package/dist/content-direct.js +12 -0
- package/dist/content-direct.js.map +1 -1
- package/dist/content-failure.d.ts +18 -0
- package/dist/content-failure.js +38 -0
- package/dist/content-failure.js.map +1 -0
- package/dist/content-stream-thread.d.ts +60 -0
- package/dist/content-stream-thread.js +95 -0
- package/dist/content-stream-thread.js.map +1 -0
- package/dist/content-stream-worker.d.ts +7 -0
- package/dist/content-stream-worker.js +52 -0
- package/dist/content-stream-worker.js.map +1 -0
- package/dist/declaration-absorption.d.ts +37 -0
- package/dist/declaration-absorption.js +119 -0
- package/dist/declaration-absorption.js.map +1 -0
- package/dist/declaration-chain.d.ts +36 -0
- package/dist/declaration-chain.js +96 -0
- package/dist/declaration-chain.js.map +1 -0
- package/dist/declaration-commit.d.ts +31 -0
- package/dist/declaration-commit.js +49 -0
- package/dist/declaration-commit.js.map +1 -0
- package/dist/declaration-hold.d.ts +22 -0
- package/dist/declaration-hold.js +24 -0
- package/dist/declaration-hold.js.map +1 -0
- package/dist/declaration-journal.d.ts +62 -0
- package/dist/declaration-journal.js +99 -0
- package/dist/declaration-journal.js.map +1 -0
- package/dist/declaration-save.d.ts +31 -0
- package/dist/declaration-save.js +134 -0
- package/dist/declaration-save.js.map +1 -0
- package/dist/detection/accepted-result.d.ts +19 -1
- package/dist/detection/accepted-result.js +36 -5
- package/dist/detection/accepted-result.js.map +1 -1
- package/dist/detection/admission-save.d.ts +55 -0
- package/dist/detection/admission-save.js +48 -0
- package/dist/detection/admission-save.js.map +1 -0
- package/dist/detection/admission-units.d.ts +66 -0
- package/dist/detection/admission-units.js +322 -0
- package/dist/detection/admission-units.js.map +1 -0
- package/dist/detection/alias-discovery.d.ts +12 -0
- package/dist/detection/alias-discovery.js +80 -0
- package/dist/detection/alias-discovery.js.map +1 -0
- package/dist/detection/alias-examination.d.ts +30 -0
- package/dist/detection/alias-examination.js +49 -0
- package/dist/detection/alias-examination.js.map +1 -0
- package/dist/detection/apply-ownership.d.ts +81 -0
- package/dist/detection/apply-ownership.js +232 -0
- package/dist/detection/apply-ownership.js.map +1 -0
- package/dist/detection/basis-advanced.d.ts +11 -0
- package/dist/detection/basis-advanced.js +26 -0
- package/dist/detection/basis-advanced.js.map +1 -0
- package/dist/detection/capture-outcome.d.ts +16 -0
- package/dist/detection/capture-outcome.js +92 -0
- package/dist/detection/capture-outcome.js.map +1 -0
- package/dist/detection/container-membership.d.ts +32 -0
- package/dist/detection/container-membership.js +49 -0
- package/dist/detection/container-membership.js.map +1 -0
- package/dist/detection/detect-cancelled.d.ts +6 -0
- package/dist/detection/detect-cancelled.js +10 -0
- package/dist/detection/detect-cancelled.js.map +1 -0
- package/dist/detection/directory-proof.d.ts +47 -0
- package/dist/detection/directory-proof.js +77 -0
- package/dist/detection/directory-proof.js.map +1 -0
- package/dist/detection/disposition-rows.d.ts +18 -0
- package/dist/detection/disposition-rows.js +29 -0
- package/dist/detection/disposition-rows.js.map +1 -0
- package/dist/detection/dispositions.d.ts +130 -0
- package/dist/detection/dispositions.js +248 -0
- package/dist/detection/dispositions.js.map +1 -0
- package/dist/detection/git-notice.d.ts +88 -0
- package/dist/detection/git-notice.js +444 -0
- package/dist/detection/git-notice.js.map +1 -0
- package/dist/detection/ground-proof.d.ts +130 -0
- package/dist/detection/ground-proof.js +274 -0
- package/dist/detection/ground-proof.js.map +1 -0
- package/dist/detection/ground-reader.d.ts +29 -0
- package/dist/detection/ground-reader.js +102 -0
- package/dist/detection/ground-reader.js.map +1 -0
- package/dist/detection/held-territory.d.ts +51 -0
- package/dist/detection/held-territory.js +205 -0
- package/dist/detection/held-territory.js.map +1 -0
- package/dist/detection/identity-discovery.d.ts +45 -0
- package/dist/detection/identity-discovery.js +287 -0
- package/dist/detection/identity-discovery.js.map +1 -0
- package/dist/detection/maintenance-sweep.d.ts +108 -0
- package/dist/detection/maintenance-sweep.js +325 -0
- package/dist/detection/maintenance-sweep.js.map +1 -0
- package/dist/detection/name-reach.d.ts +12 -0
- package/dist/detection/name-reach.js +28 -0
- package/dist/detection/name-reach.js.map +1 -0
- package/dist/detection/notebook-basis.d.ts +5 -7
- package/dist/detection/notebook-basis.js +6 -7
- package/dist/detection/notebook-basis.js.map +1 -1
- package/dist/detection/owed-selection.d.ts +51 -0
- package/dist/detection/owed-selection.js +169 -0
- package/dist/detection/owed-selection.js.map +1 -0
- package/dist/detection/portable.d.ts +34 -34
- package/dist/detection/portable.js +67 -93
- package/dist/detection/portable.js.map +1 -1
- package/dist/detection/reconciliation-coverage.d.ts +7 -0
- package/dist/detection/reconciliation-coverage.js +16 -0
- package/dist/detection/reconciliation-coverage.js.map +1 -0
- package/dist/detection/repository-publication.d.ts +20 -0
- package/dist/detection/repository-publication.js +79 -0
- package/dist/detection/repository-publication.js.map +1 -0
- package/dist/detection/repository-routes.d.ts +43 -0
- package/dist/detection/repository-routes.js +97 -0
- package/dist/detection/repository-routes.js.map +1 -0
- package/dist/detection/root-examination.d.ts +94 -0
- package/dist/detection/root-examination.js +523 -0
- package/dist/detection/root-examination.js.map +1 -0
- package/dist/detection/runtime.d.ts +131 -64
- package/dist/detection/runtime.js +808 -1103
- package/dist/detection/runtime.js.map +1 -1
- package/dist/detection/scoped-identity-port.d.ts +34 -0
- package/dist/detection/scoped-identity-port.js +81 -0
- package/dist/detection/scoped-identity-port.js.map +1 -0
- package/dist/detection/seal-law.d.ts +66 -0
- package/dist/detection/seal-law.js +116 -0
- package/dist/detection/seal-law.js.map +1 -0
- package/dist/detection/sharing-policy.d.ts +11 -0
- package/dist/detection/sharing-policy.js +32 -0
- package/dist/detection/sharing-policy.js.map +1 -0
- package/dist/detection/thread-database.d.ts +4 -0
- package/dist/detection/thread-database.js +30 -0
- package/dist/detection/thread-database.js.map +1 -0
- package/dist/detection/unreadable.d.ts +11 -0
- package/dist/detection/unreadable.js +9 -0
- package/dist/detection/unreadable.js.map +1 -0
- package/dist/detection/verified-content.d.ts +6 -0
- package/dist/detection/verified-content.js +12 -0
- package/dist/detection/verified-content.js.map +1 -0
- package/dist/detection/walk-law.d.ts +34 -0
- package/dist/detection/walk-law.js +55 -0
- package/dist/detection/walk-law.js.map +1 -0
- package/dist/development/fly-guest.js +2 -1
- package/dist/development/fly-guest.js.map +1 -1
- package/dist/entity-apply-host.d.ts +29 -13
- package/dist/entity-apply-host.js +1426 -461
- package/dist/entity-apply-host.js.map +1 -1
- package/dist/entity-apply-store.d.ts +77 -30
- package/dist/entity-apply-store.js +221 -516
- package/dist/entity-apply-store.js.map +1 -1
- package/dist/entity-record-observability.js +2 -0
- package/dist/entity-record-observability.js.map +1 -1
- package/dist/entity-record-saves.d.ts +20 -0
- package/dist/entity-record-saves.js +91 -0
- package/dist/entity-record-saves.js.map +1 -0
- package/dist/entity-record-store.d.ts +15 -7
- package/dist/entity-record-store.js +57 -117
- package/dist/entity-record-store.js.map +1 -1
- package/dist/files-register-host.d.ts +22 -3
- package/dist/files-register-host.js +70 -31
- package/dist/files-register-host.js.map +1 -1
- package/dist/filesystem.js +3 -2
- package/dist/filesystem.js.map +1 -1
- package/dist/git-binding.d.ts +65 -0
- package/dist/git-binding.js +220 -0
- package/dist/git-binding.js.map +1 -0
- package/dist/git-capture.d.ts +39 -0
- package/dist/git-capture.js +86 -0
- package/dist/git-capture.js.map +1 -0
- package/dist/git-card.d.ts +12 -0
- package/dist/git-card.js +123 -0
- package/dist/git-card.js.map +1 -0
- package/dist/git-checkpoint-construction.d.ts +41 -0
- package/dist/git-checkpoint-construction.js +96 -0
- package/dist/git-checkpoint-construction.js.map +1 -0
- package/dist/git-checkpoint-preparation.d.ts +37 -0
- package/dist/git-checkpoint-preparation.js +145 -0
- package/dist/git-checkpoint-preparation.js.map +1 -0
- package/dist/git-command.d.ts +61 -8
- package/dist/git-command.js +217 -63
- package/dist/git-command.js.map +1 -1
- package/dist/git-configuration.d.ts +40 -0
- package/dist/git-configuration.js +217 -0
- package/dist/git-configuration.js.map +1 -0
- package/dist/git-evidence.d.ts +61 -0
- package/dist/git-evidence.js +181 -0
- package/dist/git-evidence.js.map +1 -0
- package/dist/git-index-entries.d.ts +15 -0
- package/dist/git-index-entries.js +44 -0
- package/dist/git-index-entries.js.map +1 -0
- package/dist/git-index-format.d.ts +35 -0
- package/dist/git-index-format.js +293 -0
- package/dist/git-index-format.js.map +1 -0
- package/dist/git-index-witness.d.ts +33 -0
- package/dist/git-index-witness.js +69 -0
- package/dist/git-index-witness.js.map +1 -0
- package/dist/git-literal-host.d.ts +82 -0
- package/dist/git-literal-host.js +172 -0
- package/dist/git-literal-host.js.map +1 -0
- package/dist/git-literal-read.d.ts +88 -0
- package/dist/git-literal-read.js +170 -0
- package/dist/git-literal-read.js.map +1 -0
- package/dist/git-literal-replay.d.ts +33 -0
- package/dist/git-literal-replay.js +268 -0
- package/dist/git-literal-replay.js.map +1 -0
- package/dist/git-native-file.d.ts +42 -0
- package/dist/git-native-file.js +145 -0
- package/dist/git-native-file.js.map +1 -0
- package/dist/git-native-index.d.ts +21 -0
- package/dist/git-native-index.js +44 -0
- package/dist/git-native-index.js.map +1 -0
- package/dist/git-operation-host.d.ts +48 -0
- package/dist/git-operation-host.js +127 -0
- package/dist/git-operation-host.js.map +1 -0
- package/dist/git-private-index.d.ts +11 -0
- package/dist/git-private-index.js +42 -0
- package/dist/git-private-index.js.map +1 -0
- package/dist/git-private-repository.d.ts +4 -0
- package/dist/git-private-repository.js +69 -0
- package/dist/git-private-repository.js.map +1 -0
- package/dist/git-private-view.d.ts +39 -0
- package/dist/git-private-view.js +162 -0
- package/dist/git-private-view.js.map +1 -0
- package/dist/git-ref-store.d.ts +12 -0
- package/dist/git-ref-store.js +68 -0
- package/dist/git-ref-store.js.map +1 -0
- package/dist/git-registration-host.d.ts +20 -30
- package/dist/git-registration-host.js +86 -249
- package/dist/git-registration-host.js.map +1 -1
- package/dist/git-repository-host.d.ts +148 -22
- package/dist/git-repository-host.js +633 -650
- package/dist/git-repository-host.js.map +1 -1
- package/dist/git-worktree-host.d.ts +2 -0
- package/dist/git-worktree-host.js +16 -0
- package/dist/git-worktree-host.js.map +1 -0
- package/dist/graph-publication.d.ts +75 -0
- package/dist/graph-publication.js +203 -0
- package/dist/graph-publication.js.map +1 -0
- package/dist/ground-basis.d.ts +242 -0
- package/dist/ground-basis.js +1023 -0
- package/dist/ground-basis.js.map +1 -0
- package/dist/ground-checkpoint-worker.d.ts +1 -0
- package/dist/ground-checkpoint-worker.js +84 -0
- package/dist/ground-checkpoint-worker.js.map +1 -0
- package/dist/ground-checkpoints.d.ts +16 -0
- package/dist/ground-checkpoints.js +45 -0
- package/dist/ground-checkpoints.js.map +1 -0
- package/dist/ground-coordination.d.ts +107 -3
- package/dist/ground-coordination.js +249 -24
- package/dist/ground-coordination.js.map +1 -1
- package/dist/ground-database.d.ts +42 -0
- package/dist/ground-database.js +290 -0
- package/dist/ground-database.js.map +1 -0
- package/dist/ground-differences.d.ts +23 -0
- package/dist/ground-differences.js +47 -0
- package/dist/ground-differences.js.map +1 -0
- package/dist/ground-holders.d.ts +4 -0
- package/dist/ground-holders.js +15 -0
- package/dist/ground-holders.js.map +1 -0
- package/dist/ground-initialization-worker.d.ts +1 -0
- package/dist/ground-initialization-worker.js +20 -0
- package/dist/ground-initialization-worker.js.map +1 -0
- package/dist/ground-initialization.d.ts +35 -0
- package/dist/ground-initialization.js +102 -0
- package/dist/ground-initialization.js.map +1 -0
- package/dist/ground-install-saves.d.ts +63 -0
- package/dist/ground-install-saves.js +139 -0
- package/dist/ground-install-saves.js.map +1 -0
- package/dist/ground-inventory-schema.d.ts +18 -0
- package/dist/ground-inventory-schema.js +168 -0
- package/dist/ground-inventory-schema.js.map +1 -0
- package/dist/ground-profile.d.ts +7 -0
- package/dist/ground-profile.js +52 -0
- package/dist/ground-profile.js.map +1 -0
- package/dist/ground-root-index.d.ts +2 -1
- package/dist/ground-root-index.js +16 -14
- package/dist/ground-root-index.js.map +1 -1
- package/dist/ground-row.d.ts +62 -0
- package/dist/ground-row.js +70 -0
- package/dist/ground-row.js.map +1 -0
- package/dist/ground-save-ops.d.ts +44 -0
- package/dist/ground-save-ops.js +41 -0
- package/dist/ground-save-ops.js.map +1 -0
- package/dist/ground-saver-worker.d.ts +1 -0
- package/dist/ground-saver-worker.js +156 -0
- package/dist/ground-saver-worker.js.map +1 -0
- package/dist/ground-saver.d.ts +75 -0
- package/dist/ground-saver.js +216 -0
- package/dist/ground-saver.js.map +1 -0
- package/dist/ground-store.d.ts +84 -0
- package/dist/ground-store.js +473 -0
- package/dist/ground-store.js.map +1 -0
- package/dist/ground-territory.d.ts +130 -0
- package/dist/ground-territory.js +511 -0
- package/dist/ground-territory.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/installation/ownership.d.ts +0 -2
- package/dist/installation/ownership.js +3 -15
- package/dist/installation/ownership.js.map +1 -1
- package/dist/machine-host.d.ts +3 -2
- package/dist/machine-host.js +28 -16
- package/dist/machine-host.js.map +1 -1
- package/dist/materialized-graph.d.ts +7 -7
- package/dist/materialized-graph.js +11 -23
- package/dist/materialized-graph.js.map +1 -1
- package/dist/module-thread.d.ts +9 -0
- package/dist/module-thread.js +10 -0
- package/dist/module-thread.js.map +1 -0
- package/dist/native/fsevents-stream.node +0 -0
- package/dist/physical-path-witness.d.ts +64 -0
- package/dist/physical-path-witness.js +168 -0
- package/dist/physical-path-witness.js.map +1 -0
- package/dist/register-upload-fusion.d.ts +5 -4
- package/dist/register-upload-fusion.js +9 -6
- package/dist/register-upload-fusion.js.map +1 -1
- package/dist/registry-graph.d.ts +3 -2
- package/dist/registry-graph.js +9 -6
- package/dist/registry-graph.js.map +1 -1
- package/dist/registry-page-cache.d.ts +5 -2
- package/dist/registry-page-cache.js.map +1 -1
- package/dist/repository-identity-steps.d.ts +5 -0
- package/dist/repository-identity-steps.js +33 -0
- package/dist/repository-identity-steps.js.map +1 -0
- package/dist/runtime-node-flags.d.ts +10 -0
- package/dist/runtime-node-flags.js +11 -0
- package/dist/runtime-node-flags.js.map +1 -0
- package/dist/service/adapter.d.ts +1 -1
- package/dist/service/adapter.js +1 -1
- package/dist/service/adapter.js.map +1 -1
- package/dist/service/cli.js +16 -20
- package/dist/service/cli.js.map +1 -1
- package/dist/service/control.d.ts +2 -2
- package/dist/service/keepalive.d.ts +4 -11
- package/dist/service/keepalive.js +65 -118
- package/dist/service/keepalive.js.map +1 -1
- package/dist/service/policy.d.ts +36 -0
- package/dist/service/policy.js +25 -0
- package/dist/service/policy.js.map +1 -0
- package/dist/service/portable.d.ts +1 -1
- package/dist/service/portable.js +1 -1
- package/dist/service/portable.js.map +1 -1
- package/dist/service/recovery.d.ts +10 -9
- package/dist/service/recovery.js +29 -19
- package/dist/service/recovery.js.map +1 -1
- package/dist/service/windows-action.d.ts +5 -3
- package/dist/service/windows-action.js +6 -9
- package/dist/service/windows-action.js.map +1 -1
- package/dist/service/windows-task.js +5 -5
- package/dist/service/windows-task.js.map +1 -1
- package/dist/sharing-admission.d.ts +17 -0
- package/dist/sharing-admission.js +128 -0
- package/dist/sharing-admission.js.map +1 -0
- package/dist/snapshot-delivery-baseline.d.ts +12 -3
- package/dist/snapshot-delivery-baseline.js +41 -42
- package/dist/snapshot-delivery-baseline.js.map +1 -1
- package/dist/source-proof.d.ts +36 -0
- package/dist/source-proof.js +70 -0
- package/dist/source-proof.js.map +1 -0
- package/dist/source-signature.d.ts +56 -0
- package/dist/source-signature.js +56 -0
- package/dist/source-signature.js.map +1 -0
- package/dist/source-witness.d.ts +15 -0
- package/dist/source-witness.js +29 -0
- package/dist/source-witness.js.map +1 -0
- package/dist/sqlite-durability.d.ts +31 -0
- package/dist/sqlite-durability.js +28 -0
- package/dist/sqlite-durability.js.map +1 -0
- package/dist/sqlite.d.ts +8 -2
- package/dist/sqlite.js +27 -4
- package/dist/sqlite.js.map +1 -1
- package/dist/sync-address.d.ts +19 -0
- package/dist/sync-address.js +52 -0
- package/dist/sync-address.js.map +1 -0
- package/dist/sync-setting.d.ts +15 -0
- package/dist/sync-setting.js +13 -0
- package/dist/sync-setting.js.map +1 -1
- package/dist/turns.d.ts +42 -0
- package/dist/turns.js +112 -0
- package/dist/turns.js.map +1 -0
- package/dist/updates/bootstrap.d.ts +53 -7
- package/dist/updates/bootstrap.js +224 -137
- package/dist/updates/bootstrap.js.map +1 -1
- package/dist/updates/controller.d.ts +8 -0
- package/dist/updates/controller.js +27 -3
- package/dist/updates/controller.js.map +1 -1
- package/dist/updates/store.d.ts +3 -0
- package/dist/updates/store.js +12 -0
- package/dist/updates/store.js.map +1 -1
- package/dist/user-ground-host.d.ts +364 -69
- package/dist/user-ground-host.js +5231 -3366
- package/dist/user-ground-host.js.map +1 -1
- package/dist/watching/fsevents.d.ts +52 -1
- package/dist/watching/fsevents.js +60 -25
- package/dist/watching/fsevents.js.map +1 -1
- package/dist/watching/host.d.ts +129 -5
- package/dist/watching/host.js +433 -80
- package/dist/watching/host.js.map +1 -1
- package/dist/watching/index.d.ts +1 -1
- package/dist/wire-binary.d.ts +3 -2
- package/dist/wire-binary.js +10 -8
- package/dist/wire-binary.js.map +1 -1
- package/dist/wire-client.d.ts +3 -4
- package/dist/wire-client.js +18 -44
- package/dist/wire-client.js.map +1 -1
- package/dist/wire-outbox.d.ts +34 -0
- package/dist/wire-outbox.js +127 -0
- package/dist/wire-outbox.js.map +1 -0
- package/dist/workspace-host.d.ts +4 -0
- package/dist/workspace-host.js +12 -1
- package/dist/workspace-host.js.map +1 -1
- package/examinations/fixtures/private-wire-authority.js +133 -10
- package/npm-shrinkwrap.json +43 -56
- package/package.json +26 -13
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
/** Git's index file, read as Git reads it (read-cache.c, split-index.c)
|
|
2
|
+
* without a Git process. To capture an index means its stage listing: every
|
|
3
|
+
* entry's mode, object, stage and path in the order Git holds them, written
|
|
4
|
+
* as `git ls-files --stage -z` writes them. Capture asks nothing else of an
|
|
5
|
+
* index: its private view is built from the listing, and Git lists
|
|
6
|
+
* untracked names over copied bytes. The rest of an index file — the stat
|
|
7
|
+
* data each refresh re-stamps, entry flags and optional extensions — caches
|
|
8
|
+
* that meaning, serves Git's speed, or steers commands capture never runs
|
|
9
|
+
* over the index, so equal listings give capture equal answers whatever
|
|
10
|
+
* their bytes. A capture that came to read a flag would make it meaning.
|
|
11
|
+
*
|
|
12
|
+
* Every form Git writes is read: versions 2 to 4, extended flags,
|
|
13
|
+
* prefix-compressed paths, and a split index over its shared base. A form
|
|
14
|
+
* Git never writes is refused rather than guessed, as is a required
|
|
15
|
+
* extension Git would not understand. A split index resolves as Git's own
|
|
16
|
+
* merge does, which assumes its shared base and its additions each hold
|
|
17
|
+
* Git's order, so both must. Paths stay Git's to name: capture refuses any
|
|
18
|
+
* path Git itself would refuse (git-index-entries.ts). */
|
|
19
|
+
import { ITEMS_PER_BOUNDARY } from "@amalgm/live";
|
|
20
|
+
export class GitIndexFormatError extends Error {
|
|
21
|
+
}
|
|
22
|
+
const WIDTH = { sha1: 20, sha256: 32 };
|
|
23
|
+
const STAT_BYTES = 40;
|
|
24
|
+
const MODE_AT = 24;
|
|
25
|
+
const EXTENDED = 0x4000;
|
|
26
|
+
const STAGE_SHIFT = 12;
|
|
27
|
+
const NAME_MASK = 0x0fff;
|
|
28
|
+
/** Skip-worktree and intent-to-add: the extended flags Git defines. */
|
|
29
|
+
const KNOWN_EXTENDED = 0x6000;
|
|
30
|
+
const SPARSE_DIRECTORY = 0o040000;
|
|
31
|
+
const HEX = Buffer.from("0123456789abcdef", "latin1");
|
|
32
|
+
const invalid = (why) => { throw new GitIndexFormatError(`invalid Git index: ${why}`); };
|
|
33
|
+
const overrun = () => invalid("an entry overruns the index");
|
|
34
|
+
/** Git's offset varint (varint.c): each continuation adds one before shifting. */
|
|
35
|
+
function varint(bytes, at, end) {
|
|
36
|
+
if (at >= end)
|
|
37
|
+
overrun();
|
|
38
|
+
let byte = bytes[at++];
|
|
39
|
+
let value = byte & 0x7f;
|
|
40
|
+
while (byte & 0x80) {
|
|
41
|
+
if (at >= end)
|
|
42
|
+
overrun();
|
|
43
|
+
value = (value + 1) * 0x80;
|
|
44
|
+
if (value > 0x7fffffff)
|
|
45
|
+
invalid("a path prefix overflows");
|
|
46
|
+
byte = bytes[at++];
|
|
47
|
+
value += byte & 0x7f;
|
|
48
|
+
}
|
|
49
|
+
return [value, at];
|
|
50
|
+
}
|
|
51
|
+
function* readIndexFile(bytes, width) {
|
|
52
|
+
const end = bytes.length - width;
|
|
53
|
+
if (end < 12 || bytes.toString("latin1", 0, 4) !== "DIRC")
|
|
54
|
+
invalid("no index header");
|
|
55
|
+
const version = bytes.readUInt32BE(4);
|
|
56
|
+
if (version < 2 || version > 4)
|
|
57
|
+
invalid(`unsupported version ${version}`);
|
|
58
|
+
const count = bytes.readUInt32BE(8);
|
|
59
|
+
const entries = [];
|
|
60
|
+
let offset = 12;
|
|
61
|
+
let previous = Buffer.alloc(0);
|
|
62
|
+
for (let index = 0; index < count; index += 1) {
|
|
63
|
+
if (index % ITEMS_PER_BOUNDARY === ITEMS_PER_BOUNDARY - 1)
|
|
64
|
+
yield;
|
|
65
|
+
const start = offset;
|
|
66
|
+
let at = start + STAT_BYTES + width + 2;
|
|
67
|
+
if (at > end)
|
|
68
|
+
overrun();
|
|
69
|
+
const flags = bytes.readUInt16BE(at - 2);
|
|
70
|
+
if (flags & EXTENDED) {
|
|
71
|
+
if (at + 2 > end)
|
|
72
|
+
overrun();
|
|
73
|
+
if (bytes.readUInt16BE(at) & ~KNOWN_EXTENDED)
|
|
74
|
+
invalid("unknown extended entry flags");
|
|
75
|
+
at += 2;
|
|
76
|
+
}
|
|
77
|
+
const length = flags & NAME_MASK;
|
|
78
|
+
let name;
|
|
79
|
+
if (version === 4) {
|
|
80
|
+
// A path replaces the previous path's last `strip` bytes; a NUL ends it.
|
|
81
|
+
const [strip, suffix] = varint(bytes, at, end);
|
|
82
|
+
if (strip > previous.length)
|
|
83
|
+
invalid("a path strips more than the path before it");
|
|
84
|
+
const kept = previous.length - strip;
|
|
85
|
+
const stop = length === NAME_MASK ? bytes.indexOf(0, suffix) : suffix + length - kept;
|
|
86
|
+
if (stop < suffix || stop >= end || bytes[stop] !== 0)
|
|
87
|
+
overrun();
|
|
88
|
+
name = kept === 0 ? bytes.subarray(suffix, stop) : Buffer.concat([previous.subarray(0, kept), bytes.subarray(suffix, stop)]);
|
|
89
|
+
offset = stop + 1;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
const stop = length === NAME_MASK ? bytes.indexOf(0, at) : at + length;
|
|
93
|
+
if (stop < at || stop >= end || bytes[stop] !== 0)
|
|
94
|
+
overrun();
|
|
95
|
+
name = bytes.subarray(at, stop);
|
|
96
|
+
// NUL padding completes an entry to a multiple of eight bytes.
|
|
97
|
+
offset = start + ((at - start + name.length + 8) & ~7);
|
|
98
|
+
if (offset > end)
|
|
99
|
+
overrun();
|
|
100
|
+
}
|
|
101
|
+
if (name.includes(0))
|
|
102
|
+
invalid("a path holds a NUL");
|
|
103
|
+
const mode = bytes.readUInt32BE(start + MODE_AT);
|
|
104
|
+
if (mode === SPARSE_DIRECTORY) {
|
|
105
|
+
throw new GitIndexFormatError("sparse Git index requires private tree expansion; capture is unsupported");
|
|
106
|
+
}
|
|
107
|
+
entries.push({ name, mode, object: bytes.subarray(start + STAT_BYTES, start + STAT_BYTES + width),
|
|
108
|
+
stage: (flags >> STAGE_SHIFT) & 3 });
|
|
109
|
+
previous = name;
|
|
110
|
+
}
|
|
111
|
+
let link;
|
|
112
|
+
for (let at = offset; at < end;) {
|
|
113
|
+
if (at + 8 > end)
|
|
114
|
+
invalid("an extension overruns the index");
|
|
115
|
+
const signature = bytes.toString("latin1", at, at + 4);
|
|
116
|
+
const stop = at + 8 + bytes.readUInt32BE(at + 4);
|
|
117
|
+
if (stop > end)
|
|
118
|
+
invalid("an extension overruns the index");
|
|
119
|
+
if (signature === "link") {
|
|
120
|
+
if (link !== undefined)
|
|
121
|
+
invalid("two split links");
|
|
122
|
+
link = readLink(bytes.subarray(at + 8, stop), width);
|
|
123
|
+
}
|
|
124
|
+
else if (signature !== "sdir" && !/^[A-Z]/.test(signature)) {
|
|
125
|
+
// Git ignores an extension named in uppercase and requires every other.
|
|
126
|
+
throw new GitIndexFormatError(`Git index requires the ${JSON.stringify(signature)} extension, which is not understood`);
|
|
127
|
+
}
|
|
128
|
+
at = stop;
|
|
129
|
+
}
|
|
130
|
+
return { entries, link: link ?? null, checksum: bytes.toString("hex", end) };
|
|
131
|
+
}
|
|
132
|
+
/** A zero link names no shared base; Git still reads its bitmaps. */
|
|
133
|
+
function readLink(data, width) {
|
|
134
|
+
if (data.length < width)
|
|
135
|
+
invalid("a split link is too short");
|
|
136
|
+
const base = data.toString("hex", 0, width);
|
|
137
|
+
const unlinked = /^0+$/.test(base);
|
|
138
|
+
if (data.length === width)
|
|
139
|
+
return unlinked ? null : invalid("a split link names no positions");
|
|
140
|
+
const deleted = ewahFrame(data, width);
|
|
141
|
+
const replaced = ewahFrame(data, width + deleted.length);
|
|
142
|
+
if (width + deleted.length + replaced.length !== data.length)
|
|
143
|
+
invalid("bytes follow a split link");
|
|
144
|
+
return unlinked ? null : { base, deleted, replaced };
|
|
145
|
+
}
|
|
146
|
+
/** One EWAH bitmap (ewah/ewah_io.c): its size in bits, its word count, the
|
|
147
|
+
* words, then the position of its last run-length word. */
|
|
148
|
+
function ewahFrame(data, at) {
|
|
149
|
+
if (at + 8 > data.length)
|
|
150
|
+
invalid("a split bitmap overruns its link");
|
|
151
|
+
const stop = at + 12 + data.readUInt32BE(at + 4) * 8;
|
|
152
|
+
if (stop > data.length)
|
|
153
|
+
invalid("a split bitmap overruns its link");
|
|
154
|
+
return data.subarray(at, stop);
|
|
155
|
+
}
|
|
156
|
+
/** A bitmap's set positions in ascending order (ewah_each_bit), each naming
|
|
157
|
+
* an entry of a base holding `bound` entries. A run-length word carries its
|
|
158
|
+
* run bit, a 32-bit run of 64-bit words, and the count of literal words
|
|
159
|
+
* that follow it. */
|
|
160
|
+
function* ewahPositions(bitmap, bound) {
|
|
161
|
+
const words = bitmap.readUInt32BE(4);
|
|
162
|
+
const word = (at) => [bitmap.readUInt32BE(8 + at * 8), bitmap.readUInt32BE(12 + at * 8)];
|
|
163
|
+
const past = () => invalid("a split index names an entry past its shared base");
|
|
164
|
+
const positions = [];
|
|
165
|
+
let position = 0;
|
|
166
|
+
for (let at = 0; at < words;) {
|
|
167
|
+
const [high, low] = word(at++);
|
|
168
|
+
const run = ((high & 1) * 0x80000000 + (low >>> 1)) * 64;
|
|
169
|
+
if (low & 1) {
|
|
170
|
+
if (position + run > bound)
|
|
171
|
+
past();
|
|
172
|
+
for (let bit = 0; bit < run; bit += 1)
|
|
173
|
+
positions.push(position + bit);
|
|
174
|
+
}
|
|
175
|
+
position += run;
|
|
176
|
+
const literals = high >>> 1;
|
|
177
|
+
if (at + literals > words)
|
|
178
|
+
invalid("a split bitmap overruns its words");
|
|
179
|
+
for (const stop = at + literals; at < stop; at += 1, position += 64) {
|
|
180
|
+
if (at % ITEMS_PER_BOUNDARY === 0)
|
|
181
|
+
yield;
|
|
182
|
+
const [bitsHigh, bitsLow] = word(at);
|
|
183
|
+
for (let bit = 0; bit < 32; bit += 1)
|
|
184
|
+
if ((bitsLow >>> bit) & 1)
|
|
185
|
+
positions.push(position + bit);
|
|
186
|
+
for (let bit = 0; bit < 32; bit += 1)
|
|
187
|
+
if ((bitsHigh >>> bit) & 1)
|
|
188
|
+
positions.push(position + 32 + bit);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (positions.length > 0 && positions[positions.length - 1] >= bound)
|
|
192
|
+
past();
|
|
193
|
+
return positions;
|
|
194
|
+
}
|
|
195
|
+
const compare = (a, b) => Buffer.compare(a.name, b.name) || a.stage - b.stage;
|
|
196
|
+
function* ordered(entries) {
|
|
197
|
+
for (let index = 1; index < entries.length; index += 1) {
|
|
198
|
+
if (index % ITEMS_PER_BOUNDARY === 0)
|
|
199
|
+
yield;
|
|
200
|
+
if (compare(entries[index - 1], entries[index]) >= 0)
|
|
201
|
+
invalid("entries are out of Git's order");
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/** Git's merge of a split index over its shared base (merge_base_index):
|
|
205
|
+
* the split index's first entries replace, in order, each replaced base
|
|
206
|
+
* entry's mode, object and stage under that entry's path; deleted entries
|
|
207
|
+
* leave; then each addition takes its (path, stage) slot, a merged stage
|
|
208
|
+
* also displacing its path's unmerged stages (add_index_entry). */
|
|
209
|
+
function* mergeSplit(split, link, base) {
|
|
210
|
+
if (base.link !== null)
|
|
211
|
+
invalid("a shared index is itself split");
|
|
212
|
+
if (base.checksum !== link.base)
|
|
213
|
+
invalid("a shared index does not match its link");
|
|
214
|
+
const replaced = yield* ewahPositions(link.replaced, base.entries.length);
|
|
215
|
+
const deleted = yield* ewahPositions(link.deleted, base.entries.length);
|
|
216
|
+
if (replaced.length > split.entries.length)
|
|
217
|
+
invalid("more replaced positions than replacing entries");
|
|
218
|
+
const merged = [...base.entries];
|
|
219
|
+
replaced.forEach((position, index) => {
|
|
220
|
+
const by = split.entries[index];
|
|
221
|
+
if (by.name.length > 0)
|
|
222
|
+
invalid("a replacing entry names a path");
|
|
223
|
+
merged[position] = { ...by, name: merged[position].name };
|
|
224
|
+
});
|
|
225
|
+
const gone = new Uint8Array(merged.length);
|
|
226
|
+
for (const position of deleted)
|
|
227
|
+
gone[position] = 1;
|
|
228
|
+
const remaining = merged.filter((_, position) => gone[position] === 0);
|
|
229
|
+
const additions = split.entries.slice(replaced.length);
|
|
230
|
+
if (additions.some(entry => entry.name.length === 0))
|
|
231
|
+
invalid("an added entry names no path");
|
|
232
|
+
yield* ordered(remaining);
|
|
233
|
+
yield* ordered(additions);
|
|
234
|
+
const entries = [];
|
|
235
|
+
let next = 0;
|
|
236
|
+
for (let index = 0; index < additions.length; index += 1) {
|
|
237
|
+
if (index % ITEMS_PER_BOUNDARY === ITEMS_PER_BOUNDARY - 1)
|
|
238
|
+
yield;
|
|
239
|
+
const addition = additions[index];
|
|
240
|
+
while (next < remaining.length && compare(remaining[next], addition) < 0)
|
|
241
|
+
entries.push(remaining[next++]);
|
|
242
|
+
while (next < remaining.length && remaining[next].name.equals(addition.name)
|
|
243
|
+
&& (addition.stage === 0 || remaining[next].stage === addition.stage))
|
|
244
|
+
next += 1;
|
|
245
|
+
entries.push(addition);
|
|
246
|
+
}
|
|
247
|
+
while (next < remaining.length)
|
|
248
|
+
entries.push(remaining[next++]);
|
|
249
|
+
return entries;
|
|
250
|
+
}
|
|
251
|
+
/** `<mode> <object> <stage>\t<path>\0` per entry, as ls-files writes them. */
|
|
252
|
+
function* listing(entries) {
|
|
253
|
+
const modes = new Map();
|
|
254
|
+
const modeText = (mode) => {
|
|
255
|
+
let text = modes.get(mode);
|
|
256
|
+
if (!text)
|
|
257
|
+
modes.set(mode, text = Buffer.from(`${mode.toString(8).padStart(6, "0")} `, "latin1"));
|
|
258
|
+
return text;
|
|
259
|
+
};
|
|
260
|
+
let size = 0;
|
|
261
|
+
for (const entry of entries)
|
|
262
|
+
size += modeText(entry.mode).length + entry.object.length * 2 + entry.name.length + 4;
|
|
263
|
+
const bytes = Buffer.allocUnsafe(size);
|
|
264
|
+
let at = 0;
|
|
265
|
+
for (let index = 0; index < entries.length; index += 1) {
|
|
266
|
+
if (index % ITEMS_PER_BOUNDARY === ITEMS_PER_BOUNDARY - 1)
|
|
267
|
+
yield;
|
|
268
|
+
const { mode, object, stage, name } = entries[index];
|
|
269
|
+
at += modeText(mode).copy(bytes, at);
|
|
270
|
+
for (const byte of object) {
|
|
271
|
+
bytes[at++] = HEX[byte >> 4];
|
|
272
|
+
bytes[at++] = HEX[byte & 15];
|
|
273
|
+
}
|
|
274
|
+
bytes[at++] = 0x20;
|
|
275
|
+
bytes[at++] = 0x30 + stage;
|
|
276
|
+
bytes[at++] = 0x09;
|
|
277
|
+
at += name.copy(bytes, at);
|
|
278
|
+
bytes[at++] = 0;
|
|
279
|
+
}
|
|
280
|
+
return bytes;
|
|
281
|
+
}
|
|
282
|
+
/** The stage listing of an index file's bytes. A split index reads its
|
|
283
|
+
* shared base, by name, through `shared`. */
|
|
284
|
+
export function* stageListing(bytes, format, shared) {
|
|
285
|
+
const width = WIDTH[format];
|
|
286
|
+
const index = yield* readIndexFile(bytes, width);
|
|
287
|
+
if (index.link === null)
|
|
288
|
+
return { listing: yield* listing(index.entries), base: null };
|
|
289
|
+
const name = `sharedindex.${index.link.base}`;
|
|
290
|
+
const base = yield* readIndexFile(shared(name), width);
|
|
291
|
+
return { listing: yield* listing(yield* mergeSplit(index, index.link, base)), base: name };
|
|
292
|
+
}
|
|
293
|
+
//# sourceMappingURL=git-index-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-index-format.js","sourceRoot":"","sources":["../src/git-index-format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { NativeIndexBinding } from "./git-binding.js";
|
|
2
|
+
import { type GitObjectFormat } from "./git-index-format.js";
|
|
3
|
+
import { type NativeDirectory } from "./git-native-file.js";
|
|
4
|
+
import { type Steps } from "@amalgm/live";
|
|
5
|
+
/** Where Git reads an index: the file `name` in `home`, over a shared base in
|
|
6
|
+
* the first of `bases` holding it — the Git directory, then the index's own. */
|
|
7
|
+
interface IndexAddress {
|
|
8
|
+
readonly format: GitObjectFormat;
|
|
9
|
+
readonly home: NativeDirectory;
|
|
10
|
+
readonly name: string;
|
|
11
|
+
readonly bases: readonly NativeDirectory[];
|
|
12
|
+
}
|
|
13
|
+
export interface GitIndexWitness extends IndexAddress {
|
|
14
|
+
readonly kind: "git-index";
|
|
15
|
+
/** The bytes decoded: the index, null when absent, and its shared base. */
|
|
16
|
+
readonly index: Uint8Array | null;
|
|
17
|
+
readonly base: {
|
|
18
|
+
readonly name: string;
|
|
19
|
+
readonly bytes: Uint8Array;
|
|
20
|
+
} | null;
|
|
21
|
+
/** The digest of their stage listing. */
|
|
22
|
+
readonly meaning: string;
|
|
23
|
+
}
|
|
24
|
+
export interface GitIndexObservation {
|
|
25
|
+
readonly listing: Buffer;
|
|
26
|
+
readonly witness: GitIndexWitness;
|
|
27
|
+
/** The index and its shared base by the names Git reads them under. */
|
|
28
|
+
readonly files: ReadonlyMap<string, Buffer>;
|
|
29
|
+
readonly physical: readonly string[];
|
|
30
|
+
}
|
|
31
|
+
export declare function observeGitIndex(binding: NativeIndexBinding): Steps<GitIndexObservation>;
|
|
32
|
+
export declare function judgeGitIndex(witness: GitIndexWitness): void;
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/** The index as Git reads it, observed without a Git process, and the witness
|
|
2
|
+
* that holds it. An index is versioned by its meaning, its stage listing
|
|
3
|
+
* (git-index-format.ts): a refresh that re-stamps its stat cache, or moves
|
|
4
|
+
* entries between a split index and its shared base, leaves every answer
|
|
5
|
+
* drawn from it standing. The witness keeps the bytes it decoded, so a
|
|
6
|
+
* judgment that reads them back unchanged decodes nothing; other bytes are
|
|
7
|
+
* decoded and must mean the same. */
|
|
8
|
+
import { createHash } from "node:crypto";
|
|
9
|
+
import { basename, dirname } from "node:path";
|
|
10
|
+
import { CaptureSourceChangedError } from "./content-cache-host.js";
|
|
11
|
+
import { GitIndexFormatError, stageListing } from "./git-index-format.js";
|
|
12
|
+
import { observeGitFileIn, observeNativeDirectory, rereadGitFileIn, } from "./git-native-file.js";
|
|
13
|
+
import { finishSteps } from "@amalgm/live";
|
|
14
|
+
const changed = () => { throw new CaptureSourceChangedError("repository index meaning changed"); };
|
|
15
|
+
const meaningOf = (listing) => createHash("sha256").update(listing).digest("hex");
|
|
16
|
+
/** The shared base Git reads under `name`: the first location holding it. */
|
|
17
|
+
function readBase(address, name, read) {
|
|
18
|
+
for (const directory of address.bases) {
|
|
19
|
+
const found = read(directory, name);
|
|
20
|
+
if (found)
|
|
21
|
+
return found;
|
|
22
|
+
}
|
|
23
|
+
throw new CaptureSourceChangedError("repository shared index is missing");
|
|
24
|
+
}
|
|
25
|
+
/** An absent index is Git's empty index. */
|
|
26
|
+
function* listingOf(address, index, read) {
|
|
27
|
+
if (index === null)
|
|
28
|
+
return { listing: Buffer.alloc(0), base: null };
|
|
29
|
+
let base = null;
|
|
30
|
+
const { listing } = yield* stageListing(index.bytes, address.format, name => {
|
|
31
|
+
const found = readBase(address, name, read);
|
|
32
|
+
base = { name, read: found };
|
|
33
|
+
return found.bytes;
|
|
34
|
+
});
|
|
35
|
+
return { listing, base };
|
|
36
|
+
}
|
|
37
|
+
export function* observeGitIndex(binding) {
|
|
38
|
+
const home = observeNativeDirectory(dirname(binding.index));
|
|
39
|
+
const address = { format: binding.format, home, name: basename(binding.index),
|
|
40
|
+
bases: Object.freeze(binding.gitDir === home.path ? [home] : [observeNativeDirectory(binding.gitDir), home]) };
|
|
41
|
+
const index = observeGitFileIn(home, address.name);
|
|
42
|
+
const { listing, base } = yield* listingOf(address, index, observeGitFileIn);
|
|
43
|
+
const reads = [...index ? [["index", index]] : [], ...base ? [[base.name, base.read]] : []];
|
|
44
|
+
return { listing, files: new Map(reads.map(([name, read]) => [name, read.bytes])),
|
|
45
|
+
physical: reads.map(([, read]) => read.physical),
|
|
46
|
+
witness: Object.freeze({ kind: "git-index", ...address, index: index?.bytes ?? null,
|
|
47
|
+
base: base && Object.freeze({ name: base.name, bytes: base.read.bytes }), meaning: meaningOf(listing) }) };
|
|
48
|
+
}
|
|
49
|
+
export function judgeGitIndex(witness) {
|
|
50
|
+
const index = rereadGitFileIn(witness.home, witness.name);
|
|
51
|
+
if (index === null ? witness.index === null : witness.index !== null && index.bytes.equals(witness.index)) {
|
|
52
|
+
if (witness.base === null || readBase(witness, witness.base.name, rereadGitFileIn).bytes.equals(witness.base.bytes)) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
let listing;
|
|
57
|
+
// Bytes that no longer decode are a change: the observation decoded its own.
|
|
58
|
+
try {
|
|
59
|
+
({ listing } = finishSteps(listingOf(witness, index, rereadGitFileIn)));
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
if (error instanceof GitIndexFormatError)
|
|
63
|
+
changed();
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
if (meaningOf(listing) !== witness.meaning)
|
|
67
|
+
changed();
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=git-index-witness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-index-witness.js","sourceRoot":"","sources":["../src/git-index-witness.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { type RepoIdentityEntry, type RepoIdentityMap, type Steps } from "@amalgm/live";
|
|
2
|
+
import { type LiteralLane } from "./content-capture-pool.js";
|
|
3
|
+
import type { GitCapture } from "./git-capture.js";
|
|
4
|
+
import { type GitIndexEntry } from "./git-index-entries.js";
|
|
5
|
+
import { type LiteralLeafAnswer, type LiteralMarker, type LiteralRequest, type ProvenLeaf } from "./git-literal-read.js";
|
|
6
|
+
import { PhysicalPathWitnesses, type PathsWitness, type RetainedPathWitness } from "./physical-path-witness.js";
|
|
7
|
+
import type { NativeIndexBinding } from "./git-binding.js";
|
|
8
|
+
import { type ConstructedLiteralCheckpoint } from "./git-checkpoint-construction.js";
|
|
9
|
+
import { type SourceProof } from "./source-proof.js";
|
|
10
|
+
/** A content thread's component evidence with the Stats predicates callers use. */
|
|
11
|
+
export declare class LiteralStats implements RetainedPathWitness {
|
|
12
|
+
readonly dev: bigint;
|
|
13
|
+
readonly ino: bigint;
|
|
14
|
+
readonly nlink: bigint;
|
|
15
|
+
readonly mode: bigint;
|
|
16
|
+
readonly size: bigint;
|
|
17
|
+
readonly mtimeNs: bigint;
|
|
18
|
+
readonly ctimeNs: bigint;
|
|
19
|
+
readonly directory: boolean;
|
|
20
|
+
constructor(witness: RetainedPathWitness);
|
|
21
|
+
isFile(): boolean;
|
|
22
|
+
isDirectory(): boolean;
|
|
23
|
+
isSymbolicLink(): boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface LiteralGitLeaf extends Omit<LiteralLeafAnswer, "stats" | "content"> {
|
|
26
|
+
/** Null when the request said these bytes were not needed. */
|
|
27
|
+
readonly content: Buffer | null;
|
|
28
|
+
readonly stats: LiteralStats;
|
|
29
|
+
}
|
|
30
|
+
export type LiteralObservation = {
|
|
31
|
+
readonly kind: "leaf";
|
|
32
|
+
readonly leaf: LiteralGitLeaf;
|
|
33
|
+
} | {
|
|
34
|
+
readonly kind: "directory";
|
|
35
|
+
readonly stats: LiteralStats;
|
|
36
|
+
readonly marker: LiteralMarker | null;
|
|
37
|
+
} | {
|
|
38
|
+
readonly kind: "absent";
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Read many working paths of one repository on content threads. Every
|
|
42
|
+
* batch's components join `witnesses`, so contradictory evidence across
|
|
43
|
+
* batches fails exactly as it does within one. The call returns only after
|
|
44
|
+
* every batch has settled: a failed observation leaves no read running.
|
|
45
|
+
*/
|
|
46
|
+
export declare function observeLiteralPaths(repository: string, format: string, requests: readonly LiteralRequest[], witnesses: PhysicalPathWitnesses, lane: LiteralLane): Promise<ReadonlyMap<string, LiteralObservation>>;
|
|
47
|
+
/** One path with its own witnesses, for a claim that retains its proof. The
|
|
48
|
+
* witness holds only components, never the leaf's bytes. */
|
|
49
|
+
export declare function observeLiteralPath(repository: string, path: string, format: string, lane: LiteralLane): Promise<{
|
|
50
|
+
readonly observation: LiteralObservation;
|
|
51
|
+
readonly witness: PathsWitness;
|
|
52
|
+
}>;
|
|
53
|
+
export interface LiteralRepositoryView extends ConstructedLiteralCheckpoint {
|
|
54
|
+
readonly sourceBinding: NativeIndexBinding;
|
|
55
|
+
readonly leaves: ReadonlyMap<string, Omit<LiteralGitLeaf, "content">>;
|
|
56
|
+
readonly index: readonly GitIndexEntry[];
|
|
57
|
+
readonly format: string;
|
|
58
|
+
/** Every physical identity the view read, ancestor directories included. */
|
|
59
|
+
physical(): Iterable<{
|
|
60
|
+
readonly dev: bigint;
|
|
61
|
+
readonly ino: bigint;
|
|
62
|
+
readonly nlink: bigint;
|
|
63
|
+
readonly directory: boolean;
|
|
64
|
+
}>;
|
|
65
|
+
readonly proof: SourceProof;
|
|
66
|
+
}
|
|
67
|
+
/** A caller's proof of one repository member, by its repository path. */
|
|
68
|
+
export type ProvenMembers = (path: string) => ProvenLeaf | undefined;
|
|
69
|
+
/** The request, carrying its member's proof when the caller holds one. */
|
|
70
|
+
export declare function withProof(request: LiteralRequest, proven: ProvenMembers | null): LiteralRequest;
|
|
71
|
+
/** Unclosed collection for the repository operation to finish. Its public
|
|
72
|
+
* boundary closes this proof after all Card, identity and package work.
|
|
73
|
+
* Construction reads exactly the paths it requested, all in one pooled pass;
|
|
74
|
+
* a clean member whose proof still holds is stated, never reopened. Nested
|
|
75
|
+
* repositories' files are theirs, never this Checkpoint's. */
|
|
76
|
+
export declare function collectLiteralRepositoryView(capture: GitCapture, commit: string | null, boundaries: readonly string[], lane: LiteralLane, proven: ProvenMembers | null): Promise<LiteralRepositoryView>;
|
|
77
|
+
/** Each identity entry as the view reads it: a leaf takes its type and
|
|
78
|
+
* payload from the view, every other entry stands as recorded. */
|
|
79
|
+
export declare function literalRepositoryIdentitySteps(identity: readonly RepoIdentityEntry[], view: LiteralRepositoryView): Steps<RepoIdentityEntry[]>;
|
|
80
|
+
export declare const literalRepositoryIdentity: (identity: readonly RepoIdentityEntry[], view: LiteralRepositoryView) => RepoIdentityEntry[];
|
|
81
|
+
/** The view's literal identity map, sorted and hashed. */
|
|
82
|
+
export declare function literalRepositoryIdentityMapSteps(identity: readonly RepoIdentityEntry[], view: LiteralRepositoryView): Steps<RepoIdentityMap>;
|