@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,108 @@
|
|
|
1
|
+
import { type MaintenanceCause, type MaintenanceCoverage, type MaintenanceGap, type MaintenanceReceipts } from "@amalgm/live";
|
|
2
|
+
import type { FilesStageInput } from "../files-observability.js";
|
|
3
|
+
import type { RootMaintenanceResult } from "./root-examination.js";
|
|
4
|
+
/** Cadence C: the configured interval between one owner's visits, before jitter. */
|
|
5
|
+
export declare const MAINTENANCE_INTERVAL_MS = 3600000;
|
|
6
|
+
/** How long past its due time an owner owing a complete proof defers its visit. */
|
|
7
|
+
export declare const MAINTENANCE_DEFER_BOUND_MS = 10000;
|
|
8
|
+
export interface MaintenanceOwner {
|
|
9
|
+
/** The Watch root ID. */
|
|
10
|
+
readonly owner: string;
|
|
11
|
+
readonly directory: string;
|
|
12
|
+
/** Watch already owes this root a complete proof. */
|
|
13
|
+
readonly owesComplete: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface MaintenanceSweepHost {
|
|
16
|
+
/** Every owner now. One absent, or at another directory, is forgotten. */
|
|
17
|
+
owners(): readonly MaintenanceOwner[];
|
|
18
|
+
/** Whether a visit may start: never during a cold journey or while closing. */
|
|
19
|
+
ready(): boolean;
|
|
20
|
+
/** One traversal of this owner on a content thread. */
|
|
21
|
+
visit(owner: string, directory: string): Promise<RootMaintenanceResult>;
|
|
22
|
+
/** A finding at the root, or a promoted request: ring its complete proof. */
|
|
23
|
+
suspectRoot(directory: string): void;
|
|
24
|
+
/** Requests are owed to the scoped lanes. */
|
|
25
|
+
wake(): void;
|
|
26
|
+
stage(input: FilesStageInput): void;
|
|
27
|
+
}
|
|
28
|
+
/** Why a requested visit cannot answer: the owner has no materialized
|
|
29
|
+
* coverage, its binding went away, the sweep stopped (the host is closing or
|
|
30
|
+
* converging again), or its storage could not be read. */
|
|
31
|
+
export type VisitUnavailable = "not-ready" | "removed" | "stopped" | "unreadable";
|
|
32
|
+
/** One difference a requested visit reported, and so required. */
|
|
33
|
+
export interface VisitDifference {
|
|
34
|
+
readonly path: string;
|
|
35
|
+
readonly cause: MaintenanceCause;
|
|
36
|
+
}
|
|
37
|
+
/** How a requested visit settled. `visited` names a visit that began after
|
|
38
|
+
* the request, closed, and whose every required difference the ordinary
|
|
39
|
+
* lanes then discharged; its gaps are regions it could not read. */
|
|
40
|
+
export type VisitOutcome = {
|
|
41
|
+
readonly kind: "visited";
|
|
42
|
+
readonly visit: number;
|
|
43
|
+
readonly differences: readonly VisitDifference[];
|
|
44
|
+
readonly gaps: readonly MaintenanceGap[];
|
|
45
|
+
} | {
|
|
46
|
+
readonly kind: "unavailable";
|
|
47
|
+
readonly reason: VisitUnavailable;
|
|
48
|
+
readonly detail?: string;
|
|
49
|
+
};
|
|
50
|
+
export declare class MaintenanceSweep {
|
|
51
|
+
private readonly host;
|
|
52
|
+
private readonly intervalMs;
|
|
53
|
+
/** Uniform in [0, 1): each visit's jitter. */
|
|
54
|
+
private readonly random;
|
|
55
|
+
private readonly concurrency;
|
|
56
|
+
private readonly deferBoundMs;
|
|
57
|
+
private readonly ledger;
|
|
58
|
+
private readonly states;
|
|
59
|
+
/** Owners with a traversal on a content thread. It outlives stop, so a
|
|
60
|
+
* restart never runs a second traversal of the same owner. */
|
|
61
|
+
private readonly visiting;
|
|
62
|
+
/** Outstanding requests by ledger ID, for serving latency. */
|
|
63
|
+
private readonly requests;
|
|
64
|
+
private timer;
|
|
65
|
+
private running;
|
|
66
|
+
/** Starvation evidence: the longest any visit waited past its due time. */
|
|
67
|
+
private maxDeferredMs;
|
|
68
|
+
constructor(host: MaintenanceSweepHost, intervalMs?: number,
|
|
69
|
+
/** Uniform in [0, 1): each visit's jitter. */
|
|
70
|
+
random?: () => number, concurrency?: number, deferBoundMs?: number);
|
|
71
|
+
start(): void;
|
|
72
|
+
/** Stop visiting and forget every owner: nothing owed outlives this runtime. */
|
|
73
|
+
stop(): void;
|
|
74
|
+
/** The host's owners changed: a new owner's first interval starts now and a
|
|
75
|
+
* gone owner retires, instead of waiting for the next scheduled tick. */
|
|
76
|
+
ownersChanged(): void;
|
|
77
|
+
/** One visit of this owner that begins after now. Settles once that visit
|
|
78
|
+
* closed and the lanes discharged every difference it required, or with why
|
|
79
|
+
* it cannot. A request made while an earlier one still waits for its visit
|
|
80
|
+
* joins it. */
|
|
81
|
+
requestVisit(owner: string): Promise<VisitOutcome>;
|
|
82
|
+
/** Each owner's visit receipts now. */
|
|
83
|
+
receipts(): ReadonlyMap<string, MaintenanceReceipts>;
|
|
84
|
+
/** Paths owed a scoped examination. */
|
|
85
|
+
owed(owner: string): string[];
|
|
86
|
+
/** Captured at a cut, before its proof reads: a named cut answers requests
|
|
87
|
+
* at and beneath its paths, a complete cut every promoted request. */
|
|
88
|
+
cover(owner: string, paths: readonly string[] | null): MaintenanceCoverage;
|
|
89
|
+
/** The cut's proof settled or admitted: its covered requests are answered. */
|
|
90
|
+
served(coverage: MaintenanceCoverage): void;
|
|
91
|
+
/** The cut's proof escalated: its covered requests are owed to a wider
|
|
92
|
+
* examination. True when that promoted an outstanding request. */
|
|
93
|
+
promote(coverage: MaintenanceCoverage): boolean;
|
|
94
|
+
/** The next scheduled visit: one fresh draw of the interval from now. */
|
|
95
|
+
private nextDue;
|
|
96
|
+
/** Owners from the host now: new ones are scheduled, gone ones retired. */
|
|
97
|
+
private discover;
|
|
98
|
+
private tick;
|
|
99
|
+
private begin;
|
|
100
|
+
/** Findings to the ledger, each against the association it was compared with. */
|
|
101
|
+
private report;
|
|
102
|
+
/** Gaps to the ledger, then the visit closes and the lanes wake. */
|
|
103
|
+
private close;
|
|
104
|
+
/** A requested visit settles once it closed and none of its requests is owed. */
|
|
105
|
+
private settleRequests;
|
|
106
|
+
/** The owner's binding went away, or the sweep stopped. */
|
|
107
|
+
private retire;
|
|
108
|
+
}
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
/** The periodic metadata sweep. Each Watch root is one coverage owner, visited
|
|
2
|
+
* by one traversal at a time on a content thread: the same walk and comparison
|
|
3
|
+
* as root examination, against O as it stands. A visit concludes nothing. Its
|
|
4
|
+
* findings become the Live ledger's examination requests, which the ordinary
|
|
5
|
+
* scoped lanes serve; ground it could not read becomes a gap. It never writes
|
|
6
|
+
* a Record, a row or Trash, and it reads metadata only: a visit proves that
|
|
7
|
+
* the comparison completed and its resulting work was handled, never that any
|
|
8
|
+
* leaf's bytes were read again.
|
|
9
|
+
*
|
|
10
|
+
* Cadence C: an owner's next visit is due one interval after its last ended
|
|
11
|
+
* (or after it was first seen), drawn afresh for each visit as the configured
|
|
12
|
+
* interval times uniform [0.75, 1.25), so owners never visit in lockstep. The
|
|
13
|
+
* interval is a configured inter-visit interval, not a mutation-to-Record
|
|
14
|
+
* bound: traversal position, visit duration, queueing, the scoped examination
|
|
15
|
+
* and admission all come after it, and an unready host or unreadable storage
|
|
16
|
+
* suspends it. Watch's own loss evidence never waits for it: a watcher that
|
|
17
|
+
* reports loss makes its whole root suspect at once, which is immediate
|
|
18
|
+
* responsibility and scheduling, not one guaranteed pass.
|
|
19
|
+
*
|
|
20
|
+
* requestVisit makes an owner due now, for one visit that begins after the
|
|
21
|
+
* request; it is a metadata visit like any other, never a content reread.
|
|
22
|
+
*
|
|
23
|
+
* Visits pause while the host is not ready (cold journeys, convergence,
|
|
24
|
+
* shutdown). One visit runs at a time, the longest-waiting due owner first. A
|
|
25
|
+
* root Watch already owes a complete proof defers its visit, since that proof
|
|
26
|
+
* reads everything a visit would, but only for the defer bound: continuous
|
|
27
|
+
* load cannot starve an owner. Each start reports how long it waited past due
|
|
28
|
+
* and the sweep's longest. */
|
|
29
|
+
import { performance } from "node:perf_hooks";
|
|
30
|
+
import { MaintenanceLedger } from "@amalgm/live";
|
|
31
|
+
/** Cadence C: the configured interval between one owner's visits, before jitter. */
|
|
32
|
+
export const MAINTENANCE_INTERVAL_MS = 3_600_000;
|
|
33
|
+
/** How long past its due time an owner owing a complete proof defers its visit. */
|
|
34
|
+
export const MAINTENANCE_DEFER_BOUND_MS = 10_000;
|
|
35
|
+
/** A due visit the host is not ready for is checked again this soon: the
|
|
36
|
+
* host's readiness changes without telling the sweep. */
|
|
37
|
+
const READINESS_RECHECK_MS = 1_000;
|
|
38
|
+
const reported = () => ({
|
|
39
|
+
found: { new: 0, changed: 0, missing: 0, racy: 0, repository: 0 }, seen: new Map(), requests: 0,
|
|
40
|
+
});
|
|
41
|
+
export class MaintenanceSweep {
|
|
42
|
+
host;
|
|
43
|
+
intervalMs;
|
|
44
|
+
random;
|
|
45
|
+
concurrency;
|
|
46
|
+
deferBoundMs;
|
|
47
|
+
ledger = new MaintenanceLedger();
|
|
48
|
+
states = new Map();
|
|
49
|
+
/** Owners with a traversal on a content thread. It outlives stop, so a
|
|
50
|
+
* restart never runs a second traversal of the same owner. */
|
|
51
|
+
visiting = new Set();
|
|
52
|
+
/** Outstanding requests by ledger ID, for serving latency. */
|
|
53
|
+
requests = new Map();
|
|
54
|
+
timer = null;
|
|
55
|
+
running = false;
|
|
56
|
+
/** Starvation evidence: the longest any visit waited past its due time. */
|
|
57
|
+
maxDeferredMs = 0;
|
|
58
|
+
constructor(host, intervalMs = MAINTENANCE_INTERVAL_MS,
|
|
59
|
+
/** Uniform in [0, 1): each visit's jitter. */
|
|
60
|
+
random = Math.random, concurrency = 1, deferBoundMs = MAINTENANCE_DEFER_BOUND_MS) {
|
|
61
|
+
this.host = host;
|
|
62
|
+
this.intervalMs = intervalMs;
|
|
63
|
+
this.random = random;
|
|
64
|
+
this.concurrency = concurrency;
|
|
65
|
+
this.deferBoundMs = deferBoundMs;
|
|
66
|
+
}
|
|
67
|
+
start() {
|
|
68
|
+
this.running = true;
|
|
69
|
+
this.tick();
|
|
70
|
+
}
|
|
71
|
+
/** Stop visiting and forget every owner: nothing owed outlives this runtime. */
|
|
72
|
+
stop() {
|
|
73
|
+
this.running = false;
|
|
74
|
+
if (this.timer)
|
|
75
|
+
clearTimeout(this.timer);
|
|
76
|
+
this.timer = null;
|
|
77
|
+
for (const owner of [...this.states.keys()])
|
|
78
|
+
this.retire(owner, "stopped");
|
|
79
|
+
}
|
|
80
|
+
/** The host's owners changed: a new owner's first interval starts now and a
|
|
81
|
+
* gone owner retires, instead of waiting for the next scheduled tick. */
|
|
82
|
+
ownersChanged() {
|
|
83
|
+
if (this.running)
|
|
84
|
+
this.tick();
|
|
85
|
+
}
|
|
86
|
+
/** One visit of this owner that begins after now. Settles once that visit
|
|
87
|
+
* closed and the lanes discharged every difference it required, or with why
|
|
88
|
+
* it cannot. A request made while an earlier one still waits for its visit
|
|
89
|
+
* joins it. */
|
|
90
|
+
requestVisit(owner) {
|
|
91
|
+
if (!this.running)
|
|
92
|
+
return Promise.resolve({ kind: "unavailable", reason: "stopped" });
|
|
93
|
+
this.discover(performance.now());
|
|
94
|
+
const state = this.states.get(owner);
|
|
95
|
+
if (!state)
|
|
96
|
+
return Promise.resolve({ kind: "unavailable", reason: "not-ready" });
|
|
97
|
+
if (state.requested)
|
|
98
|
+
return state.requested.settled;
|
|
99
|
+
let resolve;
|
|
100
|
+
const settled = new Promise(done => { resolve = done; });
|
|
101
|
+
state.requested = { requestedAt: performance.now(), settled, resolve };
|
|
102
|
+
this.tick();
|
|
103
|
+
return settled;
|
|
104
|
+
}
|
|
105
|
+
/** Each owner's visit receipts now. */
|
|
106
|
+
receipts() {
|
|
107
|
+
return new Map([...this.states.keys()].map(owner => [owner, this.ledger.receipts(owner)]));
|
|
108
|
+
}
|
|
109
|
+
/** Paths owed a scoped examination. */
|
|
110
|
+
owed(owner) {
|
|
111
|
+
return this.ledger.owed(owner).map(owed => owed.path);
|
|
112
|
+
}
|
|
113
|
+
/** Captured at a cut, before its proof reads: a named cut answers requests
|
|
114
|
+
* at and beneath its paths, a complete cut every promoted request. */
|
|
115
|
+
cover(owner, paths) {
|
|
116
|
+
if (paths === null)
|
|
117
|
+
return this.ledger.coverWider(owner);
|
|
118
|
+
const owed = [...this.ledger.owed(owner), ...this.ledger.owedWider(owner)].map(item => item.path);
|
|
119
|
+
return this.ledger.cover(owner, owed.filter(path => paths.some(cut => cut === "" || path === cut || path.startsWith(`${cut}/`))));
|
|
120
|
+
}
|
|
121
|
+
/** The cut's proof settled or admitted: its covered requests are answered. */
|
|
122
|
+
served(coverage) {
|
|
123
|
+
if (coverage.requests.length === 0)
|
|
124
|
+
return;
|
|
125
|
+
const now = performance.now();
|
|
126
|
+
const answered = this.ledger.discharge(coverage, now);
|
|
127
|
+
if (answered === 0)
|
|
128
|
+
return;
|
|
129
|
+
const state = this.states.get(coverage.owner);
|
|
130
|
+
let latencyMs = 0;
|
|
131
|
+
for (const { id } of coverage.requests) {
|
|
132
|
+
const request = this.requests.get(id);
|
|
133
|
+
if (!request)
|
|
134
|
+
continue;
|
|
135
|
+
this.requests.delete(id);
|
|
136
|
+
latencyMs = Math.max(latencyMs, now - request.reportedAt);
|
|
137
|
+
state?.answered.set(request.path, request.observed);
|
|
138
|
+
}
|
|
139
|
+
const oldest = this.ledger.receipts(coverage.owner).oldestOwedSince;
|
|
140
|
+
this.host.stage({ primitive: "detect", stage: "maintenance-served", status: "completed",
|
|
141
|
+
rootId: coverage.owner, path: state?.directory, durationMs: latencyMs,
|
|
142
|
+
measurements: { requests: answered, latencyMs: Math.round(latencyMs),
|
|
143
|
+
oldestOwedMs: oldest === null ? null : Math.round(now - oldest) } });
|
|
144
|
+
if (state)
|
|
145
|
+
this.settleRequests(state);
|
|
146
|
+
}
|
|
147
|
+
/** The cut's proof escalated: its covered requests are owed to a wider
|
|
148
|
+
* examination. True when that promoted an outstanding request. */
|
|
149
|
+
promote(coverage) {
|
|
150
|
+
this.ledger.promote(coverage);
|
|
151
|
+
return coverage.requests.some(({ id }) => this.requests.has(id));
|
|
152
|
+
}
|
|
153
|
+
/** The next scheduled visit: one fresh draw of the interval from now. */
|
|
154
|
+
nextDue(now) {
|
|
155
|
+
return now + this.intervalMs * (0.75 + 0.5 * this.random());
|
|
156
|
+
}
|
|
157
|
+
/** Owners from the host now: new ones are scheduled, gone ones retired. */
|
|
158
|
+
discover(now) {
|
|
159
|
+
const owners = new Map(this.host.owners().map(owner => [owner.owner, owner]));
|
|
160
|
+
for (const [owner, state] of this.states) {
|
|
161
|
+
if (owners.get(owner)?.directory !== state.directory)
|
|
162
|
+
this.retire(owner, "removed");
|
|
163
|
+
}
|
|
164
|
+
for (const { owner, directory } of owners.values()) {
|
|
165
|
+
if (!this.states.has(owner)) {
|
|
166
|
+
this.states.set(owner, { directory, endedAt: now, dueAt: this.nextDue(now), visited: false,
|
|
167
|
+
answered: new Map(), requested: null, answering: new Map() });
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return owners;
|
|
171
|
+
}
|
|
172
|
+
tick() {
|
|
173
|
+
if (this.timer)
|
|
174
|
+
clearTimeout(this.timer);
|
|
175
|
+
this.timer = null;
|
|
176
|
+
if (!this.running)
|
|
177
|
+
return;
|
|
178
|
+
const now = performance.now();
|
|
179
|
+
const owners = this.discover(now);
|
|
180
|
+
// A request makes its owner due at once; waiting starts when it is due.
|
|
181
|
+
const dueSince = (state) => Math.min(state.dueAt, state.requested?.requestedAt ?? Infinity);
|
|
182
|
+
// An owner owing a complete proof is due only once its defer bound passed.
|
|
183
|
+
const dueAt = (owner, state) => dueSince(state) + (owners.get(owner).owesComplete ? this.deferBoundMs : 0);
|
|
184
|
+
const idle = [...this.states].filter(([owner]) => !this.visiting.has(owner));
|
|
185
|
+
const ready = this.host.ready();
|
|
186
|
+
if (ready) {
|
|
187
|
+
// The longest-waiting due owners first.
|
|
188
|
+
const due = idle.filter(([owner, state]) => now >= dueAt(owner, state))
|
|
189
|
+
.sort(([, left], [, right]) => dueSince(left) - dueSince(right));
|
|
190
|
+
for (const [owner, state] of due) {
|
|
191
|
+
if (this.visiting.size >= this.concurrency)
|
|
192
|
+
break;
|
|
193
|
+
this.begin(owner, state, now, dueSince(state), owners.get(owner).owesComplete);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// A finished visit ticks at once; a due owner the host is not ready for
|
|
197
|
+
// is checked again shortly.
|
|
198
|
+
const waits = idle.filter(([owner]) => !this.visiting.has(owner)).map(([owner, state]) => dueAt(owner, state) - now);
|
|
199
|
+
if (!ready && waits.some(wait => wait <= 0))
|
|
200
|
+
waits.push(READINESS_RECHECK_MS);
|
|
201
|
+
const wait = Math.min(...waits.filter(wait => wait > 0));
|
|
202
|
+
if (wait === Infinity)
|
|
203
|
+
return;
|
|
204
|
+
this.timer = setTimeout(() => this.tick(), wait);
|
|
205
|
+
this.timer.unref();
|
|
206
|
+
}
|
|
207
|
+
begin(owner, state, now, dueSince, forced) {
|
|
208
|
+
this.visiting.add(owner);
|
|
209
|
+
const visit = this.ledger.beginVisit(owner, now);
|
|
210
|
+
const requested = state.requested !== null;
|
|
211
|
+
if (state.requested) {
|
|
212
|
+
state.answering.set(visit.id, { request: state.requested, closed: false, ids: new Set(), differences: [], gaps: [] });
|
|
213
|
+
state.requested = null;
|
|
214
|
+
}
|
|
215
|
+
const visitGapMs = state.visited ? Math.round(now - state.endedAt) : null;
|
|
216
|
+
const deferredMs = Math.max(0, Math.round(now - dueSince));
|
|
217
|
+
this.maxDeferredMs = Math.max(this.maxDeferredMs, deferredMs);
|
|
218
|
+
this.host.stage({ primitive: "detect", stage: "maintenance-visit", status: "started",
|
|
219
|
+
rootId: owner, path: state.directory,
|
|
220
|
+
measurements: { visit: visit.id, visitGapMs, deferredMs, forced, requested, maxDeferredMs: this.maxDeferredMs } });
|
|
221
|
+
void this.host.visit(owner, state.directory).then(result => {
|
|
222
|
+
const into = reported();
|
|
223
|
+
this.report(state, visit, into, result.findings.map(finding => ({ ...finding, basis: result.basis })));
|
|
224
|
+
this.close(state, visit, visitGapMs, result, into);
|
|
225
|
+
}, (error) => this.close(state, visit, visitGapMs, error instanceof Error ? error.message : String(error), reported())).finally(() => {
|
|
226
|
+
this.visiting.delete(owner);
|
|
227
|
+
this.tick();
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
/** Findings to the ledger, each against the association it was compared with. */
|
|
231
|
+
report(state, visit, into, findings) {
|
|
232
|
+
const now = performance.now();
|
|
233
|
+
const { owner } = visit;
|
|
234
|
+
const answering = state.answering.get(visit.id);
|
|
235
|
+
for (const finding of findings) {
|
|
236
|
+
into.found[finding.cause] += 1;
|
|
237
|
+
into.seen.set(finding.path, finding.observed);
|
|
238
|
+
if (state.answered.get(finding.path) === finding.observed)
|
|
239
|
+
continue;
|
|
240
|
+
const id = this.ledger.report(visit, finding, now);
|
|
241
|
+
if (id === null)
|
|
242
|
+
continue;
|
|
243
|
+
if (answering) {
|
|
244
|
+
answering.ids.add(id);
|
|
245
|
+
answering.differences.push({ path: finding.path, cause: finding.cause });
|
|
246
|
+
}
|
|
247
|
+
if (this.requests.has(id))
|
|
248
|
+
continue;
|
|
249
|
+
this.requests.set(id, { owner, path: finding.path, observed: finding.observed, reportedAt: now });
|
|
250
|
+
into.requests += 1;
|
|
251
|
+
// O at the root could not be trusted: only the complete lane serves it.
|
|
252
|
+
if (finding.path === "") {
|
|
253
|
+
this.ledger.promote(this.ledger.cover(owner, [""]));
|
|
254
|
+
this.host.suspectRoot(state.directory);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/** Gaps to the ledger, then the visit closes and the lanes wake. */
|
|
259
|
+
close(state, visit, visitGapMs, outcome, { found, seen, requests }) {
|
|
260
|
+
const now = performance.now();
|
|
261
|
+
const { owner } = visit;
|
|
262
|
+
const gaps = typeof outcome === "string" ? [{ path: "", reason: `fault:${outcome}` }] : [...outcome.gaps];
|
|
263
|
+
if (typeof outcome !== "string") {
|
|
264
|
+
for (const [path, observed] of state.answered)
|
|
265
|
+
if (seen.get(path) !== observed)
|
|
266
|
+
state.answered.delete(path);
|
|
267
|
+
}
|
|
268
|
+
for (const gap of gaps)
|
|
269
|
+
this.ledger.gap(visit, gap, now);
|
|
270
|
+
const closed = this.ledger.closeVisit(visit, now);
|
|
271
|
+
state.endedAt = now;
|
|
272
|
+
state.dueAt = this.nextDue(now);
|
|
273
|
+
state.visited = true;
|
|
274
|
+
const owed = closed ? this.ledger.owed(owner).length : 0;
|
|
275
|
+
this.host.stage({ primitive: "detect", stage: "maintenance-visit",
|
|
276
|
+
status: typeof outcome === "string" ? "failed" : "completed",
|
|
277
|
+
rootId: owner, path: state.directory, durationMs: now - visit.startedAt,
|
|
278
|
+
measurements: { visit: visit.id, closed, visitGapMs,
|
|
279
|
+
entries: typeof outcome === "string" ? 0 : outcome.entries,
|
|
280
|
+
...found, gaps: gaps.length, requests, owed,
|
|
281
|
+
...(typeof outcome === "string" ? { error: outcome } : {}) } });
|
|
282
|
+
const answering = state.answering.get(visit.id);
|
|
283
|
+
if (answering) {
|
|
284
|
+
// Storage it could not read at all answers nothing.
|
|
285
|
+
const unread = gaps.find(gap => gap.path === "" && (gap.reason === "unread" || gap.reason.startsWith("fault:")));
|
|
286
|
+
if (unread) {
|
|
287
|
+
state.answering.delete(visit.id);
|
|
288
|
+
answering.request.resolve({ kind: "unavailable", reason: "unreadable", detail: unread.reason });
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
answering.closed = true;
|
|
292
|
+
answering.gaps = gaps;
|
|
293
|
+
this.settleRequests(state);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
if (owed > 0)
|
|
297
|
+
this.host.wake();
|
|
298
|
+
}
|
|
299
|
+
/** A requested visit settles once it closed and none of its requests is owed. */
|
|
300
|
+
settleRequests(state) {
|
|
301
|
+
for (const [visit, answering] of state.answering) {
|
|
302
|
+
if (!answering.closed || [...answering.ids].some(id => this.requests.has(id)))
|
|
303
|
+
continue;
|
|
304
|
+
state.answering.delete(visit);
|
|
305
|
+
answering.request.resolve({ kind: "visited", visit, differences: answering.differences, gaps: answering.gaps });
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
/** The owner's binding went away, or the sweep stopped. */
|
|
309
|
+
retire(owner, reason) {
|
|
310
|
+
const state = this.states.get(owner);
|
|
311
|
+
if (state) {
|
|
312
|
+
for (const request of [state.requested, ...[...state.answering.values()].map(({ request }) => request)]) {
|
|
313
|
+
request?.resolve({ kind: "unavailable", reason });
|
|
314
|
+
}
|
|
315
|
+
state.requested = null;
|
|
316
|
+
state.answering.clear();
|
|
317
|
+
}
|
|
318
|
+
this.ledger.forget(owner);
|
|
319
|
+
this.states.delete(owner);
|
|
320
|
+
for (const [id, request] of this.requests)
|
|
321
|
+
if (request.owner === owner)
|
|
322
|
+
this.requests.delete(id);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
//# sourceMappingURL=maintenance-sweep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maintenance-sweep.js","sourceRoot":"","sources":["../../src/detection/maintenance-sweep.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Which repositories a pruned walk's Watch names reach. Addresses are
|
|
2
|
+
* relative to one root, "" being the root; as a name, "" names only the
|
|
3
|
+
* root's own address. A repository's Git storage rings as a name beneath its
|
|
4
|
+
* address (`<address>/.git`, or `.git` for the root). */
|
|
5
|
+
/** A name reaches every repository at or beneath its address, whose whole
|
|
6
|
+
* ground the walk reads again, and the innermost repository strictly
|
|
7
|
+
* enclosing it, whose ground lists the address: a nested repository's own
|
|
8
|
+
* address is the boundary its encloser's index and identity map record. A
|
|
9
|
+
* name inside a nested repository, its Git storage included, reaches no
|
|
10
|
+
* repository enclosing that one: an enclosing Card + Checkpoint takes the
|
|
11
|
+
* nested gitlink from its own index and reads nothing there. */
|
|
12
|
+
export declare function reachedRepositories(names: readonly string[], repositories: readonly string[]): Set<string>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** Which repositories a pruned walk's Watch names reach. Addresses are
|
|
2
|
+
* relative to one root, "" being the root; as a name, "" names only the
|
|
3
|
+
* root's own address. A repository's Git storage rings as a name beneath its
|
|
4
|
+
* address (`<address>/.git`, or `.git` for the root). */
|
|
5
|
+
const holds = (repository, path) => repository === "" || path === repository || path.startsWith(`${repository}/`);
|
|
6
|
+
/** A name reaches every repository at or beneath its address, whose whole
|
|
7
|
+
* ground the walk reads again, and the innermost repository strictly
|
|
8
|
+
* enclosing it, whose ground lists the address: a nested repository's own
|
|
9
|
+
* address is the boundary its encloser's index and identity map record. A
|
|
10
|
+
* name inside a nested repository, its Git storage included, reaches no
|
|
11
|
+
* repository enclosing that one: an enclosing Card + Checkpoint takes the
|
|
12
|
+
* nested gitlink from its own index and reads nothing there. */
|
|
13
|
+
export function reachedRepositories(names, repositories) {
|
|
14
|
+
const reached = new Set();
|
|
15
|
+
for (const name of names) {
|
|
16
|
+
let owner = null;
|
|
17
|
+
for (const repository of repositories) {
|
|
18
|
+
if (repository === name || (name !== "" && repository.startsWith(`${name}/`)))
|
|
19
|
+
reached.add(repository);
|
|
20
|
+
else if (holds(repository, name) && (owner === null || repository.length > owner.length))
|
|
21
|
+
owner = repository;
|
|
22
|
+
}
|
|
23
|
+
if (owner !== null)
|
|
24
|
+
reached.add(owner);
|
|
25
|
+
}
|
|
26
|
+
return reached;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=name-reach.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"name-reach.js","sourceRoot":"","sources":["../../src/detection/name-reach.ts"],"names":[],"mappings":"AAAA;;;yDAGyD;AAEzD,MAAM,KAAK,GAAG,CAAC,UAAkB,EAAE,IAAY,EAAW,EAAE,CAC1D,UAAU,KAAK,EAAE,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC;AAEhF;;;;;;gEAMgE;AAChE,MAAM,UAAU,mBAAmB,CAAC,KAAwB,EAAE,YAA+B;IAC3F,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,KAAK,GAAkB,IAAI,CAAC;QAChC,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;YACtC,IAAI,UAAU,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;iBAClG,IAAI,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;gBAAE,KAAK,GAAG,UAAU,CAAC;QAC/G,CAAC;QACD,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -12,12 +12,10 @@ export interface NotebookBasisRow {
|
|
|
12
12
|
readonly transportVersion: string | null;
|
|
13
13
|
readonly relativePath: string;
|
|
14
14
|
readonly absolutePath: string;
|
|
15
|
-
readonly
|
|
16
|
-
readonly
|
|
17
|
-
readonly byteSize: number | null;
|
|
18
|
-
readonly modifiedTimeMs: number | null;
|
|
19
|
-
readonly changedTimeMs: number | null;
|
|
15
|
+
readonly physicalKey: string;
|
|
16
|
+
readonly sourceSignature: string | null;
|
|
20
17
|
readonly filesystemMode: number | null;
|
|
21
|
-
readonly
|
|
18
|
+
readonly contentVerifiedNs: string | null;
|
|
19
|
+
readonly gitConfigurationObservation?: string | null;
|
|
22
20
|
}
|
|
23
|
-
export declare function sameNotebookBasisRow(left: NotebookBasisRow, right: NotebookBasisRow | undefined): boolean;
|
|
21
|
+
export declare function sameNotebookBasisRow(left: NotebookBasisRow, right: NotebookBasisRow | undefined, inventory?: "entities" | "detection_notebook"): boolean;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export function sameNotebookBasisRow(left, right) {
|
|
1
|
+
export function sameNotebookBasisRow(left, right, inventory = "detection_notebook") {
|
|
2
2
|
return right !== undefined
|
|
3
3
|
&& left.resourceId === right.resourceId
|
|
4
4
|
&& left.rootUUID === right.rootUUID
|
|
@@ -12,12 +12,11 @@ export function sameNotebookBasisRow(left, right) {
|
|
|
12
12
|
&& left.transportVersion === right.transportVersion
|
|
13
13
|
&& left.relativePath === right.relativePath
|
|
14
14
|
&& left.absolutePath === right.absolutePath
|
|
15
|
-
&& left.
|
|
16
|
-
&& left.
|
|
17
|
-
&& left.byteSize === right.byteSize
|
|
18
|
-
&& left.modifiedTimeMs === right.modifiedTimeMs
|
|
19
|
-
&& left.changedTimeMs === right.changedTimeMs
|
|
15
|
+
&& left.physicalKey === right.physicalKey
|
|
16
|
+
&& left.sourceSignature === right.sourceSignature
|
|
20
17
|
&& left.filesystemMode === right.filesystemMode
|
|
21
|
-
&& left.
|
|
18
|
+
&& left.contentVerifiedNs === right.contentVerifiedNs
|
|
19
|
+
&& (inventory === "detection_notebook"
|
|
20
|
+
|| (left.gitConfigurationObservation ?? null) === (right.gitConfigurationObservation ?? null));
|
|
22
21
|
}
|
|
23
22
|
//# sourceMappingURL=notebook-basis.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notebook-basis.js","sourceRoot":"","sources":["../../src/detection/notebook-basis.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"notebook-basis.js","sourceRoot":"","sources":["../../src/detection/notebook-basis.ts"],"names":[],"mappings":"AAqBA,MAAM,UAAU,oBAAoB,CAClC,IAAsB,EACtB,KAAmC,EACnC,YAA+C,oBAAoB;IAEnE,OAAO,KAAK,KAAK,SAAS;WACrB,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU;WACpC,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;WAChC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;WACxB,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;WACxB,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU;WACpC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;WACxB,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;WAC5B,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;WAC9B,IAAI,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc;WAC5C,IAAI,CAAC,gBAAgB,KAAK,KAAK,CAAC,gBAAgB;WAChD,IAAI,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY;WACxC,IAAI,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY;WACxC,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW;WACtC,IAAI,CAAC,eAAe,KAAK,KAAK,CAAC,eAAe;WAC9C,IAAI,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc;WAC5C,IAAI,CAAC,iBAAiB,KAAK,KAAK,CAAC,iBAAiB;WAClD,CAAC,SAAS,KAAK,oBAAoB;eACjC,CAAC,IAAI,CAAC,2BAA2B,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,2BAA2B,IAAI,IAAI,CAAC,CAAC,CAAC;AACrG,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/** Where one root's sharing (B) is not yet what selection makes of its
|
|
2
|
+
* observation (O), read from committed facts alone: no ground is walked.
|
|
3
|
+
*
|
|
4
|
+
* Selection is one law, Live's selectPublication: an identity that policy or
|
|
5
|
+
* a hold withholds keeps B's row, or none, and every other takes O's;
|
|
6
|
+
* membership and payloads follow. B stands at that law's fixed point exactly
|
|
7
|
+
* when each identity selection takes from O already stands in B as O holds
|
|
8
|
+
* it (a leaf at O's version, a container at O's structure, since its
|
|
9
|
+
* membership follows from its members, and a repository at O's version or
|
|
10
|
+
* under a seal that derived O's payload and B's from one examination) and B
|
|
11
|
+
* holds nothing selection drops. Every other identity is owed a proof at each
|
|
12
|
+
* address selection reads it: O's for one it takes, and B's too wherever B
|
|
13
|
+
* holds it elsewhere or selection drops it. A root B has never held is owed
|
|
14
|
+
* whole: nothing of it was ever selected.
|
|
15
|
+
*
|
|
16
|
+
* Only an identity O and B hold differently can be owed. One they hold alike
|
|
17
|
+
* reads the same row whichever inventory selection takes it from, so it
|
|
18
|
+
* stands wherever its address holds; an address derives from its ancestors
|
|
19
|
+
* and its sibling group alone. Selection therefore reads the differences,
|
|
20
|
+
* which the ground stores as it writes (ground-differences.ts), and the
|
|
21
|
+
* unchanged structure their addresses read, as a closed scope, and reads the
|
|
22
|
+
* whole root only when that scope proves too small. */
|
|
23
|
+
import type Database from "better-sqlite3";
|
|
24
|
+
import { type GroundRow } from "../ground-row.js";
|
|
25
|
+
export interface OwedIdentity {
|
|
26
|
+
/** Root-relative address. */
|
|
27
|
+
readonly path: string;
|
|
28
|
+
/** The row selection reads there: O's, or B's where only B places it. */
|
|
29
|
+
readonly row: GroundRow;
|
|
30
|
+
/** `owed`: B holds the identity where O does, at another result.
|
|
31
|
+
* `unshared`: B lacks it, places it elsewhere, or selection drops it. */
|
|
32
|
+
readonly reason: "owed" | "unshared";
|
|
33
|
+
}
|
|
34
|
+
type Includes = (path: string) => boolean;
|
|
35
|
+
/** `observed` and `shared` are one root's O and B rows, each addressed in
|
|
36
|
+
* that root's frame; `includes` answers policy and holds for an address. */
|
|
37
|
+
export declare function owedSelection(database: Database.Database, input: {
|
|
38
|
+
readonly rootUUID: string;
|
|
39
|
+
readonly observed: readonly GroundRow[];
|
|
40
|
+
readonly shared: readonly GroundRow[];
|
|
41
|
+
readonly includes: Includes;
|
|
42
|
+
}): OwedIdentity[];
|
|
43
|
+
/** One root's owed addresses under `policy`, outermost only, read in one
|
|
44
|
+
* committed transaction. `bindings` are the materialized workspace bindings,
|
|
45
|
+
* whose unpublished declarations selection holds back. */
|
|
46
|
+
export declare function owedAddresses(database: Database.Database, input: {
|
|
47
|
+
readonly rootUUID: string;
|
|
48
|
+
readonly policy: string;
|
|
49
|
+
readonly bindings: readonly string[];
|
|
50
|
+
}): string[];
|
|
51
|
+
export {};
|