@astrosheep/keiyaku 4.5.29 → 4.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku/SKILL.md +0 -13
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-akuma/SKILL.md +47 -78
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-akuma/references/automation.md +54 -41
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-babysit/SKILL.md +10 -0
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-bind/SKILL.md +27 -9
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-workflow/SKILL.md +68 -71
- package/build/src/akuma/akuma-call.d.ts +53 -0
- package/build/src/akuma/akuma-call.js +113 -0
- package/build/src/akuma/akuma-instance.d.ts +20 -18
- package/build/src/akuma/akuma-instance.js +65 -175
- package/build/src/akuma/akuma-observe.d.ts +3 -21
- package/build/src/akuma/akuma-observe.js +7 -24
- package/build/src/akuma/{akuma-handle.d.ts → akuma-owner.d.ts} +55 -27
- package/build/src/akuma/{akuma-handle.js → akuma-owner.js} +24 -23
- package/build/src/akuma/akuma-selection-execution.d.ts +51 -0
- package/build/src/akuma/akuma-selection-execution.js +134 -0
- package/build/src/akuma/{fleet-execution.d.ts → akuma-wait.d.ts} +24 -44
- package/build/src/akuma/akuma-wait.js +113 -0
- package/build/src/akuma/akuma.d.ts +35 -89
- package/build/src/akuma/akuma.js +148 -30
- package/build/src/akuma/archetype.d.ts +12 -0
- package/build/src/akuma/archetype.js +47 -19
- package/build/src/akuma/body.d.ts +76 -36
- package/build/src/akuma/body.js +84 -49
- package/build/src/akuma/call-initial-tell.d.ts +131 -22
- package/build/src/akuma/call-initial-tell.js +31 -1
- package/build/src/akuma/call-request.d.ts +237 -31
- package/build/src/akuma/call-request.js +67 -94
- package/build/src/akuma/coordinate.d.ts +15 -5
- package/build/src/akuma/coordinate.js +12 -22
- package/build/src/akuma/dispatch-association.d.ts +1 -1
- package/build/src/akuma/dispatch-association.js +1 -10
- package/build/src/akuma/heart/activity-schema.d.ts +325 -0
- package/build/src/akuma/heart/activity-schema.js +53 -0
- package/build/src/akuma/heart/facts.d.ts +1 -6
- package/build/src/akuma/heart/index.d.ts +3 -1
- package/build/src/akuma/heart/index.js +4 -1
- package/build/src/akuma/heart/rows.d.ts +49 -2
- package/build/src/akuma/heart/rows.js +16 -2
- package/build/src/akuma/heart/soul.d.ts +1 -0
- package/build/src/akuma/heart/soul.js +6 -4
- package/build/src/akuma/heart/tells.d.ts +1 -0
- package/build/src/akuma/heart/tells.js +18 -0
- package/build/src/akuma/identity.d.ts +10 -7
- package/build/src/akuma/identity.js +23 -0
- package/build/src/akuma/index.d.ts +10 -8
- package/build/src/akuma/index.js +2 -2
- package/build/src/akuma/nuke.d.ts +3 -0
- package/build/src/akuma/nuke.js +13 -7
- package/build/src/akuma/projection.d.ts +0 -5
- package/build/src/akuma/projection.js +22 -43
- package/build/src/akuma/provider-recipe.d.ts +58 -13
- package/build/src/akuma/provider-recipe.js +62 -80
- package/build/src/akuma/provider.d.ts +6 -76
- package/build/src/akuma/provider.js +11 -219
- package/build/src/akuma/providers/acp/config.d.ts +2 -0
- package/build/src/akuma/providers/acp/config.js +26 -1
- package/build/src/akuma/providers/acp/core.d.ts +7 -0
- package/build/src/akuma/providers/acp/core.js +49 -18
- package/build/src/akuma/providers/acp/index.js +14 -6
- package/build/src/akuma/providers/grok-build/index.js +44 -13
- package/build/src/akuma/providers/index.d.ts +3 -3
- package/build/src/akuma/providers/index.js +2 -13
- package/build/src/akuma/providers/opencode-sdk/event-stream.d.ts +28 -0
- package/build/src/akuma/providers/opencode-sdk/event-stream.js +92 -0
- package/build/src/akuma/providers/opencode-sdk/events.d.ts +0 -1
- package/build/src/akuma/providers/opencode-sdk/index.js +200 -64
- package/build/src/akuma/providers/opencode-sdk/session.d.ts +41 -1
- package/build/src/akuma/providers/opencode-sdk/session.js +69 -2
- package/build/src/akuma/providers/pi/events.js +5 -2
- package/build/src/akuma/providers/pi/index.d.ts +3 -4
- package/build/src/akuma/providers/pi/index.js +99 -45
- package/build/src/akuma/publication.d.ts +84 -3
- package/build/src/akuma/publication.js +145 -2
- package/build/src/akuma/read-pool.d.ts +2 -0
- package/build/src/akuma/read-pool.js +15 -0
- package/build/src/akuma/request-rendezvous.js +10 -0
- package/build/src/akuma/request-serve.js +7 -0
- package/build/src/akuma/request-wire.d.ts +14 -26
- package/build/src/akuma/request-wire.js +4 -0
- package/build/src/akuma/requests.d.ts +0 -2
- package/build/src/akuma/requests.js +0 -17
- package/build/src/akuma/{fleet-observation.d.ts → selection-observation.d.ts} +37 -36
- package/build/src/akuma/selection-observation.js +65 -0
- package/build/src/akuma/{fleet-owner-port.d.ts → selection-owner-port.d.ts} +3 -3
- package/build/src/akuma/{fleet-owner-port.js → selection-owner-port.js} +11 -17
- package/build/src/akuma/{fleet-request.d.ts → selection-request.d.ts} +42 -82
- package/build/src/akuma/{fleet-request.js → selection-request.js} +92 -136
- package/build/src/akuma/turn-drive.js +73 -14
- package/build/src/akuma-body.js +91 -56
- package/build/src/body/amend.d.ts +5 -0
- package/build/src/body/amend.js +26 -50
- package/build/src/body/arc.d.ts +4 -2
- package/build/src/body/arc.js +19 -26
- package/build/src/body/criteria.d.ts +6 -0
- package/build/src/body/criteria.js +37 -0
- package/build/src/body/decode.js +5 -42
- package/build/src/body/region.d.ts +5 -0
- package/build/src/body/region.js +45 -2
- package/build/src/body/render.js +2 -4
- package/build/src/cli/activity.d.ts +26 -0
- package/build/src/cli/activity.js +75 -0
- package/build/src/cli/actor.d.ts +3 -1
- package/build/src/cli/actor.js +15 -2
- package/build/src/cli/commands/akuma-grammar.d.ts +75 -0
- package/build/src/cli/commands/akuma-grammar.js +414 -0
- package/build/src/cli/commands/akuma.d.ts +5 -69
- package/build/src/cli/commands/akuma.js +352 -319
- package/build/src/cli/commands/amend.d.ts +4 -5
- package/build/src/cli/commands/amend.js +1 -2
- package/build/src/cli/commands/bind.d.ts +4 -5
- package/build/src/cli/commands/bind.js +7 -10
- package/build/src/cli/commands/contract-grammar.d.ts +112 -0
- package/build/src/cli/commands/contract-grammar.js +282 -0
- package/build/src/cli/commands/contract-help.d.ts +17 -22
- package/build/src/cli/commands/contract-help.js +37 -24
- package/build/src/cli/commands/contract.d.ts +18 -97
- package/build/src/cli/commands/contract.js +621 -233
- package/build/src/cli/commands/install.d.ts +1 -1
- package/build/src/cli/commands/install.js +2 -2
- package/build/src/cli/commands/task-grammar.d.ts +19 -0
- package/build/src/cli/commands/task-grammar.js +438 -0
- package/build/src/cli/commands/task-query.js +23 -104
- package/build/src/cli/commands/task.d.ts +5 -20
- package/build/src/cli/commands/task.js +414 -364
- package/build/src/cli/coordinates.d.ts +10 -0
- package/build/src/cli/coordinates.js +20 -0
- package/build/src/cli/draft.d.ts +7 -1
- package/build/src/cli/main.js +10 -1
- package/build/src/cli/parse.d.ts +8 -9
- package/build/src/cli/parse.js +62 -62
- package/build/src/cli/render/akuma-activity.d.ts +54 -36
- package/build/src/cli/render/akuma-activity.js +262 -242
- package/build/src/cli/render/akuma-tool.d.ts +8 -4
- package/build/src/cli/render/akuma-tool.js +6 -5
- package/build/src/cli/render/akuma.d.ts +36 -16
- package/build/src/cli/render/akuma.js +65 -132
- package/build/src/cli/render/audit.d.ts +6 -2
- package/build/src/cli/render/audit.js +59 -28
- package/build/src/cli/render/catalog.d.ts +11 -2
- package/build/src/cli/render/catalog.js +75 -95
- package/build/src/cli/render/contract-history.d.ts +3 -1
- package/build/src/cli/render/contract-history.js +215 -22
- package/build/src/cli/render/contract-observation.d.ts +10 -5
- package/build/src/cli/render/contract-observation.js +29 -46
- package/build/src/cli/render/contract.d.ts +10 -3
- package/build/src/cli/render/contract.js +252 -103
- package/build/src/cli/render/effects.d.ts +26 -0
- package/build/src/cli/render/effects.js +41 -0
- package/build/src/cli/render/execution-progress.d.ts +18 -6
- package/build/src/cli/render/execution-progress.js +34 -31
- package/build/src/cli/render/kanshi-akuma.d.ts +1 -2
- package/build/src/cli/render/kanshi-akuma.js +5 -26
- package/build/src/cli/render/kanshi.js +107 -128
- package/build/src/cli/render/marks.d.ts +13 -0
- package/build/src/cli/render/marks.js +74 -0
- package/build/src/cli/render/nuke.js +18 -7
- package/build/src/cli/render/receipt.d.ts +10 -4
- package/build/src/cli/render/receipt.js +124 -44
- package/build/src/cli/render/reconcile.d.ts +5 -0
- package/build/src/cli/render/reconcile.js +152 -0
- package/build/src/cli/render/refusal.d.ts +21 -4
- package/build/src/cli/render/refusal.js +60 -33
- package/build/src/cli/render/region.js +3 -2
- package/build/src/cli/render/settings.js +2 -12
- package/build/src/cli/render/task.d.ts +37 -6
- package/build/src/cli/render/task.js +161 -157
- package/build/src/cli/render/terminal.d.ts +20 -1
- package/build/src/cli/render/terminal.js +92 -18
- package/build/src/cli/runtime.d.ts +32 -8
- package/build/src/cli/runtime.js +157 -165
- package/build/src/cli/selectors.d.ts +5 -2
- package/build/src/cli/selectors.js +11 -3
- package/build/src/cli/streams.d.ts +11 -0
- package/build/src/cli/streams.js +32 -0
- package/build/src/cli/usage.d.ts +2 -0
- package/build/src/cli/usage.js +12 -8
- package/build/src/contract-guidance.js +3 -7
- package/build/src/contract-worktree.d.ts +20 -28
- package/build/src/contract-worktree.js +18 -70
- package/build/src/coordination/durable-file.d.ts +2 -2
- package/build/src/coordination/durable-file.js +0 -27
- package/build/src/core/facts/codec.d.ts +1 -2
- package/build/src/core/facts/codec.js +6 -7
- package/build/src/core/facts/gate.d.ts +0 -1
- package/build/src/core/facts/gate.js +0 -82
- package/build/src/core/facts/types.d.ts +1 -2
- package/build/src/core/verbs/abandon.d.ts +2 -6
- package/build/src/core/verbs/abandon.js +0 -16
- package/build/src/core/verbs/amend.d.ts +0 -1
- package/build/src/core/verbs/amend.js +0 -20
- package/build/src/core/verbs/arc.d.ts +7 -8
- package/build/src/core/verbs/arc.js +2 -19
- package/build/src/core/verbs/attestation.d.ts +2 -6
- package/build/src/core/verbs/attestation.js +0 -16
- package/build/src/core/verbs/bind.d.ts +0 -1
- package/build/src/core/verbs/bind.js +0 -16
- package/build/src/core/verbs/deliver.d.ts +0 -1
- package/build/src/core/verbs/deliver.js +0 -16
- package/build/src/core/verbs/placement.d.ts +2 -1
- package/build/src/core/verbs/placement.js +10 -59
- package/build/src/git/admission.d.ts +6 -4
- package/build/src/git/admission.js +4 -0
- package/build/src/git/hooks.d.ts +55 -30
- package/build/src/git/hooks.js +30 -3
- package/build/src/git/identity.d.ts +6 -0
- package/build/src/git/identity.js +47 -0
- package/build/src/git/integration.d.ts +31 -13
- package/build/src/git/integration.js +32 -1
- package/build/src/git/nuke.d.ts +10 -1
- package/build/src/git/nuke.js +31 -11
- package/build/src/git/observe.js +2 -15
- package/build/src/git/private-state-seat.d.ts +6 -7
- package/build/src/git/private-state-seat.js +8 -6
- package/build/src/git/read-observation.d.ts +6 -1
- package/build/src/git/read-observation.js +81 -46
- package/build/src/git/reconcile.d.ts +117 -40
- package/build/src/git/reconcile.js +169 -40
- package/build/src/git/scratch.d.ts +7 -4
- package/build/src/git/scratch.js +28 -6
- package/build/src/git/target-placement.d.ts +53 -38
- package/build/src/git/target-placement.js +69 -54
- package/build/src/git/tender.d.ts +37 -28
- package/build/src/git/tender.js +39 -0
- package/build/src/git/terminal-reconcile.js +21 -23
- package/build/src/git/terminal-seal.d.ts +8 -6
- package/build/src/git/terminal-seal.js +10 -0
- package/build/src/git/workspace.d.ts +29 -15
- package/build/src/git/workspace.js +28 -2
- package/build/src/identity/normalize.js +19 -6
- package/build/src/index.d.ts +78 -7
- package/build/src/index.js +52 -4
- package/build/src/kanshi/read.d.ts +3 -3
- package/build/src/kanshi/read.js +21 -21
- package/build/src/kanshi/report.d.ts +9 -8
- package/build/src/kanshi/roster.d.ts +2 -0
- package/build/src/kanshi/roster.js +2 -0
- package/build/src/kanshi/select.js +7 -3
- package/build/src/library/address.d.ts +3 -7
- package/build/src/library/address.js +7 -7
- package/build/src/library/akuma-creation.d.ts +21 -32
- package/build/src/library/akuma-creation.js +148 -165
- package/build/src/library/akumas.d.ts +20 -22
- package/build/src/library/akumas.js +43 -20
- package/build/src/library/bind.d.ts +107 -13
- package/build/src/library/bind.js +29 -23
- package/build/src/library/continuation.d.ts +556 -28
- package/build/src/library/continuation.js +29 -54
- package/build/src/library/contract-composition.d.ts +40 -0
- package/build/src/library/contract-composition.js +105 -0
- package/build/src/library/contract-creation.d.ts +7 -0
- package/build/src/library/contract-creation.js +192 -0
- package/build/src/library/contract-execution.d.ts +29 -40
- package/build/src/library/contract-execution.js +503 -128
- package/build/src/library/contract-operations.d.ts +275 -134
- package/build/src/library/contract-operations.js +83 -92
- package/build/src/library/contract-outcomes.d.ts +71 -0
- package/build/src/library/contract-outcomes.js +32 -0
- package/build/src/library/contract-settings.d.ts +25 -0
- package/build/src/library/contract-settings.js +135 -0
- package/build/src/library/contract-types.d.ts +17 -38
- package/build/src/library/delivery.d.ts +530 -10
- package/build/src/library/delivery.js +20 -45
- package/build/src/library/input.d.ts +3 -1
- package/build/src/library/input.js +11 -16
- package/build/src/library/invocation.d.ts +87 -0
- package/build/src/library/invocation.js +290 -0
- package/build/src/library/keiyaku.d.ts +45 -22
- package/build/src/library/keiyaku.js +134 -8
- package/build/src/library/nuke.d.ts +2 -11
- package/build/src/library/nuke.js +70 -57
- package/build/src/library/outcome.d.ts +13196 -0
- package/build/src/library/outcome.js +487 -0
- package/build/src/library/reconcile.d.ts +96 -24
- package/build/src/library/reconcile.js +102 -42
- package/build/src/library/refusal.d.ts +470 -42
- package/build/src/library/refusal.js +55 -143
- package/build/src/library/region.d.ts +15 -7
- package/build/src/library/region.js +23 -3
- package/build/src/library/repo.d.ts +2 -12
- package/build/src/library/repo.js +1 -22
- package/build/src/library/selection.d.ts +121 -0
- package/build/src/library/{fleet.js → selection.js} +169 -152
- package/build/src/plugin/public.d.ts +2 -0
- package/build/src/protocol/abandon.d.ts +2 -2
- package/build/src/protocol/abandon.js +1 -0
- package/build/src/protocol/amend.js +1 -0
- package/build/src/protocol/arc.d.ts +6 -4
- package/build/src/protocol/attempt.d.ts +4 -2
- package/build/src/protocol/attempt.js +10 -0
- package/build/src/protocol/audit.d.ts +255 -52
- package/build/src/protocol/audit.js +63 -5
- package/build/src/protocol/bind.d.ts +18 -17
- package/build/src/protocol/bind.js +9 -28
- package/build/src/protocol/completion.d.ts +256 -22
- package/build/src/protocol/completion.js +100 -12
- package/build/src/protocol/deliver.d.ts +34 -23
- package/build/src/protocol/deliver.js +39 -25
- package/build/src/protocol/execution-observation.d.ts +36 -37
- package/build/src/protocol/execution-observation.js +7 -9
- package/build/src/protocol/intent.d.ts +101 -30
- package/build/src/protocol/intent.js +74 -1
- package/build/src/protocol/operations.d.ts +570 -64
- package/build/src/protocol/operations.js +189 -9
- package/build/src/protocol/outcome.d.ts +2 -1
- package/build/src/protocol/placement.d.ts +2 -2
- package/build/src/protocol/placement.js +3 -1
- package/build/src/protocol/progress.d.ts +108 -65
- package/build/src/protocol/progress.js +82 -132
- package/build/src/protocol/read/status.d.ts +4 -3
- package/build/src/protocol/read/status.js +6 -5
- package/build/src/protocol/reconcile.d.ts +3 -3
- package/build/src/protocol/reconcile.js +4 -0
- package/build/src/protocol/reintegrate.d.ts +2 -2
- package/build/src/protocol/review.d.ts +30 -12
- package/build/src/protocol/review.js +15 -24
- package/build/src/protocol/run.d.ts +34 -5
- package/build/src/protocol/run.js +24 -12
- package/build/src/runtime/proc/windows-launch.exe +0 -0
- package/build/src/settings.d.ts +0 -10
- package/build/src/settings.js +0 -76
- package/build/src/settlement/holder.d.ts +1 -1
- package/build/src/settlement/settle.d.ts +25 -16
- package/build/src/settlement/settle.js +80 -20
- package/build/src/task/board.d.ts +3 -1
- package/build/src/task/board.js +13 -17
- package/build/src/task/catalog.d.ts +0 -4
- package/build/src/task/catalog.js +0 -15
- package/build/src/task/compose-language.d.ts +19 -9
- package/build/src/task/compose-language.js +30 -20
- package/build/src/task/compose.d.ts +7 -37
- package/build/src/task/compose.js +20 -2
- package/build/src/task/created-observation.d.ts +0 -1
- package/build/src/task/created-observation.js +1 -4
- package/build/src/task/document.d.ts +12 -2
- package/build/src/task/document.js +4 -0
- package/build/src/task/identity.d.ts +4 -1
- package/build/src/task/identity.js +21 -17
- package/build/src/task/index.d.ts +36 -16
- package/build/src/task/index.js +103 -96
- package/build/src/task/lifecycle-operations.d.ts +1 -1
- package/build/src/task/mutation-result.d.ts +647 -586
- package/build/src/task/mutation-result.js +79 -46
- package/build/src/task/mutation.d.ts +298 -270
- package/build/src/task/mutation.js +93 -110
- package/build/src/task/operation-types.d.ts +6 -49
- package/build/src/task/operations.d.ts +2 -1
- package/build/src/task/operations.js +35 -12
- package/build/src/task/query.d.ts +9 -3
- package/build/src/task/query.js +42 -16
- package/build/src/task/store.d.ts +2 -1
- package/build/src/task/store.js +10 -14
- package/build/src/verification/declaration.d.ts +0 -1
- package/build/src/verification/declaration.js +1 -18
- package/build/src/verification/execution.d.ts +6 -2
- package/build/src/verification/observation.d.ts +1 -1
- package/package.json +2 -18
- package/build/src/akuma/akuma-product.d.ts +0 -58
- package/build/src/akuma/akuma-product.js +0 -276
- package/build/src/akuma/fleet-execution.js +0 -234
- package/build/src/akuma/fleet-observation.js +0 -97
- package/build/src/cli/accepted.d.ts +0 -24
- package/build/src/cli/accepted.js +0 -167
- package/build/src/cli/catalog.d.ts +0 -45
- package/build/src/cli/catalog.js +0 -1
- package/build/src/cli/commands/akuma-invoke.d.ts +0 -114
- package/build/src/cli/commands/akuma-invoke.js +0 -375
- package/build/src/cli/commands/contract-invoke.d.ts +0 -34
- package/build/src/cli/commands/contract-invoke.js +0 -259
- package/build/src/cli/commands/nuke.d.ts +0 -10
- package/build/src/cli/commands/nuke.js +0 -20
- package/build/src/cli/commands/status-set.d.ts +0 -4
- package/build/src/cli/commands/status-set.js +0 -52
- package/build/src/cli/commands/task-invoke.d.ts +0 -49
- package/build/src/cli/commands/task-invoke.js +0 -306
- package/build/src/cli/invoke.d.ts +0 -27
- package/build/src/cli/invoke.js +0 -521
- package/build/src/cli/render/board.d.ts +0 -3
- package/build/src/cli/render/board.js +0 -25
- package/build/src/cli/render/status-set.d.ts +0 -5
- package/build/src/cli/render/status-set.js +0 -19
- package/build/src/cli/render/text.d.ts +0 -3
- package/build/src/cli/render/text.js +0 -33
- package/build/src/cli/result.d.ts +0 -240
- package/build/src/cli/result.js +0 -1
- package/build/src/git/result-codec.d.ts +0 -29
- package/build/src/git/result-codec.js +0 -309
- package/build/src/kanshi/fleet.d.ts +0 -6
- package/build/src/kanshi/fleet.js +0 -27
- package/build/src/library/audit.d.ts +0 -29
- package/build/src/library/audit.js +0 -41
- package/build/src/library/composition.d.ts +0 -15
- package/build/src/library/composition.js +0 -28
- package/build/src/library/configuration.d.ts +0 -4
- package/build/src/library/configuration.js +0 -2
- package/build/src/library/contract-bind.d.ts +0 -31
- package/build/src/library/contract-bind.js +0 -140
- package/build/src/library/contract-forwarding.d.ts +0 -55
- package/build/src/library/contract-forwarding.js +0 -67
- package/build/src/library/contract-handle.d.ts +0 -50
- package/build/src/library/contract-handle.js +0 -385
- package/build/src/library/contract.d.ts +0 -46
- package/build/src/library/contract.js +0 -73
- package/build/src/library/execution-result.d.ts +0 -243
- package/build/src/library/execution-result.js +0 -101
- package/build/src/library/execution.d.ts +0 -8
- package/build/src/library/execution.js +0 -102
- package/build/src/library/fleet.d.ts +0 -83
- package/build/src/library/mutation.d.ts +0 -501
- package/build/src/library/mutation.js +0 -248
- package/build/src/library/result-codec.d.ts +0 -2
- package/build/src/library/result-codec.js +0 -12
- package/build/src/protocol/result-codec.d.ts +0 -23
- package/build/src/protocol/result-codec.js +0 -488
- package/build/src/settlement/result-codec.d.ts +0 -2
- package/build/src/settlement/result-codec.js +0 -56
- package/build/src/task/public.d.ts +0 -2
- package/build/src/task/public.js +0 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
import type { Offer } from "../core/facts/offer.js";
|
|
2
3
|
import type { GitAdmissionSnapshot } from "./observe.js";
|
|
3
4
|
import { type GitRefAssertion } from "./repository.js";
|
|
@@ -7,10 +8,11 @@ type Accepted = Readonly<{
|
|
|
7
8
|
kind: "accepted";
|
|
8
9
|
heads: Readonly<Record<string, ContractHead>>;
|
|
9
10
|
}>;
|
|
10
|
-
export
|
|
11
|
-
kind: "publication-failed"
|
|
12
|
-
diagnostic:
|
|
13
|
-
}>;
|
|
11
|
+
export declare const publicationFailedSchema: z.ZodObject<{
|
|
12
|
+
kind: z.ZodLiteral<"publication-failed">;
|
|
13
|
+
diagnostic: z.ZodString;
|
|
14
|
+
}, z.core.$strict>;
|
|
15
|
+
export type PublicationFailed = z.infer<typeof publicationFailedSchema>;
|
|
14
16
|
type Unknown = Readonly<{
|
|
15
17
|
kind: "unknown";
|
|
16
18
|
}>;
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
import { decodeJournal, encodeEntry } from "../core/facts/codec.js";
|
|
2
3
|
import { AuthorityCorruptionError } from "../core/facts/errors.js";
|
|
3
4
|
import { foldJournal } from "../core/facts/fold.js";
|
|
4
5
|
import { GIT_FORMAT_BYTES, GIT_FORMAT_PATH, GIT_REF, updateGitTreeFromFrozenDirectories, updateRefsAtomically, writeBlob, writeStateCommit, } from "./repository.js";
|
|
5
6
|
import { contractJournalPath, contractJournalPaths, gitObjectIdForSnapshot, mintContractHead, mintSnapshotId, } from "./identity.js";
|
|
6
7
|
import { validPath } from "./tree.js";
|
|
8
|
+
export const publicationFailedSchema = z
|
|
9
|
+
.object({ kind: z.literal("publication-failed"), diagnostic: z.string() })
|
|
10
|
+
.strict();
|
|
7
11
|
const CONTRACT_JOURNAL_PATH = /^contracts\/(?:active|terminal)\/[0-9a-f]{2}\/[0-9a-f]{2}\/[0-9a-f]{60}\.jsonl$/u;
|
|
8
12
|
function assertAppendStructure(appends) {
|
|
9
13
|
const seen = new Set();
|
package/build/src/git/hooks.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
import { type Settings } from "../settings.js";
|
|
2
3
|
export type HookCommand = Readonly<{
|
|
3
4
|
name: string;
|
|
@@ -8,42 +9,65 @@ export type WorktreeHooks = Readonly<{
|
|
|
8
9
|
create: readonly HookCommand[];
|
|
9
10
|
destroy: readonly HookCommand[];
|
|
10
11
|
}>;
|
|
11
|
-
export
|
|
12
|
-
kind: "exit"
|
|
13
|
-
code:
|
|
14
|
-
stdout:
|
|
15
|
-
stderr:
|
|
16
|
-
truncated:
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
kind: "unknown-exit"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}>;
|
|
31
|
-
export type
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
12
|
+
export declare const hookFailureSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
13
|
+
kind: z.ZodLiteral<"exit">;
|
|
14
|
+
code: z.ZodNumber;
|
|
15
|
+
stdout: z.ZodString;
|
|
16
|
+
stderr: z.ZodString;
|
|
17
|
+
truncated: z.ZodBoolean;
|
|
18
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
19
|
+
stdout: z.ZodOptional<z.ZodString>;
|
|
20
|
+
stderr: z.ZodOptional<z.ZodString>;
|
|
21
|
+
truncated: z.ZodOptional<z.ZodBoolean>;
|
|
22
|
+
kind: z.ZodLiteral<"timeout">;
|
|
23
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
24
|
+
stdout: z.ZodOptional<z.ZodString>;
|
|
25
|
+
stderr: z.ZodOptional<z.ZodString>;
|
|
26
|
+
truncated: z.ZodOptional<z.ZodBoolean>;
|
|
27
|
+
kind: z.ZodLiteral<"unknown-exit">;
|
|
28
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
29
|
+
kind: z.ZodLiteral<"spawn-error">;
|
|
30
|
+
diagnostic: z.ZodString;
|
|
31
|
+
}, z.core.$strict>]>;
|
|
32
|
+
export type HookFailure = z.infer<typeof hookFailureSchema>;
|
|
33
|
+
export declare const worktreeHookLagSchema: z.ZodObject<{
|
|
34
|
+
kind: z.ZodLiteral<"worktree-hook-failed">;
|
|
35
|
+
phase: z.ZodEnum<{
|
|
36
|
+
destroy: "destroy";
|
|
37
|
+
create: "create";
|
|
38
|
+
}>;
|
|
39
|
+
path: z.ZodString;
|
|
40
|
+
command: z.ZodNumber;
|
|
41
|
+
name: z.ZodString;
|
|
42
|
+
failure: z.ZodUnion<readonly [z.ZodObject<{
|
|
43
|
+
kind: z.ZodLiteral<"exit">;
|
|
44
|
+
code: z.ZodNumber;
|
|
45
|
+
stdout: z.ZodString;
|
|
46
|
+
stderr: z.ZodString;
|
|
47
|
+
truncated: z.ZodBoolean;
|
|
48
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
49
|
+
stdout: z.ZodOptional<z.ZodString>;
|
|
50
|
+
stderr: z.ZodOptional<z.ZodString>;
|
|
51
|
+
truncated: z.ZodOptional<z.ZodBoolean>;
|
|
52
|
+
kind: z.ZodLiteral<"timeout">;
|
|
53
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
54
|
+
stdout: z.ZodOptional<z.ZodString>;
|
|
55
|
+
stderr: z.ZodOptional<z.ZodString>;
|
|
56
|
+
truncated: z.ZodOptional<z.ZodBoolean>;
|
|
57
|
+
kind: z.ZodLiteral<"unknown-exit">;
|
|
58
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
59
|
+
kind: z.ZodLiteral<"spawn-error">;
|
|
60
|
+
diagnostic: z.ZodString;
|
|
61
|
+
}, z.core.$strict>]>;
|
|
62
|
+
}, z.core.$strict>;
|
|
63
|
+
export type WorktreeHookLag = z.infer<typeof worktreeHookLagSchema>;
|
|
39
64
|
export type HookPhase = "create" | "destroy";
|
|
40
|
-
|
|
65
|
+
type WorktreeHooksFromInput = Readonly<{
|
|
41
66
|
settings: Settings;
|
|
42
67
|
}>;
|
|
43
68
|
export declare function worktreeHooksFrom(input: WorktreeHooksFromInput): WorktreeHooks;
|
|
44
69
|
export declare function normalizedWorktreeHooks(value: unknown): WorktreeHooks;
|
|
45
70
|
export declare const EMPTY_WORKTREE_HOOKS: WorktreeHooks;
|
|
46
|
-
export declare function worktreeHooksOption(value: unknown): WorktreeHooks;
|
|
47
71
|
export type HookCommandRun = Readonly<{
|
|
48
72
|
kind: "ok";
|
|
49
73
|
}> | Readonly<{
|
|
@@ -67,3 +91,4 @@ export type HookPhaseRun = Readonly<{
|
|
|
67
91
|
}>;
|
|
68
92
|
export declare function runCreateHooks(worktree: string, hooks: WorktreeHooks): Promise<HookPhaseRun>;
|
|
69
93
|
export declare function runDestroyHooks(worktree: string, hooks: WorktreeHooks): Promise<HookPhaseRun>;
|
|
94
|
+
export {};
|
package/build/src/git/hooks.js
CHANGED
|
@@ -1,5 +1,35 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
import { runProcess } from "../runtime/proc/run.js";
|
|
2
3
|
import { SettingsError } from "../settings.js";
|
|
4
|
+
const hookOutputFields = {
|
|
5
|
+
stdout: z.string().optional(),
|
|
6
|
+
stderr: z.string().optional(),
|
|
7
|
+
truncated: z.boolean().optional(),
|
|
8
|
+
};
|
|
9
|
+
export const hookFailureSchema = z.union([
|
|
10
|
+
z
|
|
11
|
+
.object({
|
|
12
|
+
kind: z.literal("exit"),
|
|
13
|
+
code: z.number().int(),
|
|
14
|
+
stdout: z.string(),
|
|
15
|
+
stderr: z.string(),
|
|
16
|
+
truncated: z.boolean(),
|
|
17
|
+
})
|
|
18
|
+
.strict(),
|
|
19
|
+
z.object({ kind: z.literal("timeout"), ...hookOutputFields }).strict(),
|
|
20
|
+
z.object({ kind: z.literal("unknown-exit"), ...hookOutputFields }).strict(),
|
|
21
|
+
z.object({ kind: z.literal("spawn-error"), diagnostic: z.string().refine((value) => value.trim() !== "") }).strict(),
|
|
22
|
+
]);
|
|
23
|
+
export const worktreeHookLagSchema = z
|
|
24
|
+
.object({
|
|
25
|
+
kind: z.literal("worktree-hook-failed"),
|
|
26
|
+
phase: z.enum(["create", "destroy"]),
|
|
27
|
+
path: z.string().refine((value) => value.trim() !== ""),
|
|
28
|
+
command: z.number().int().nonnegative(),
|
|
29
|
+
name: z.string().refine((value) => value.trim() !== ""),
|
|
30
|
+
failure: hookFailureSchema,
|
|
31
|
+
})
|
|
32
|
+
.strict();
|
|
3
33
|
function record(value) {
|
|
4
34
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
5
35
|
}
|
|
@@ -80,9 +110,6 @@ export const EMPTY_WORKTREE_HOOKS = Object.freeze({
|
|
|
80
110
|
create: Object.freeze([]),
|
|
81
111
|
destroy: Object.freeze([]),
|
|
82
112
|
});
|
|
83
|
-
export function worktreeHooksOption(value) {
|
|
84
|
-
return value === undefined ? EMPTY_WORKTREE_HOOKS : normalizedWorktreeHooks(value);
|
|
85
|
-
}
|
|
86
113
|
function failedOutcome(outcome) {
|
|
87
114
|
if (outcome.kind === "terminal") {
|
|
88
115
|
return outcome.code === 0
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
import { type ChangeId, type ContractHead, type ContractId, type SnapshotId } from "../core/facts/types.js";
|
|
3
|
+
export declare const contractIdSchema: z.ZodPipe<z.ZodString, z.ZodTransform<ContractId, string>>;
|
|
4
|
+
export declare const snapshotIdSchema: z.ZodPipe<z.ZodString, z.ZodTransform<SnapshotId, string>>;
|
|
5
|
+
export declare const contractHeadSchema: z.ZodPipe<z.ZodString, z.ZodTransform<ContractHead, string>>;
|
|
6
|
+
export declare const changeIdSchema: z.ZodPipe<z.ZodString, z.ZodTransform<ChangeId, string>>;
|
|
7
|
+
export declare const mintedSnapshotInputSchema: z.ZodPipe<z.ZodString, z.ZodTransform<SnapshotId, string>>;
|
|
2
8
|
declare const gitObjectIdBrand: unique symbol;
|
|
3
9
|
export type GitObjectId = string & {
|
|
4
10
|
readonly [gitObjectIdBrand]: "GitObjectId";
|
|
@@ -1,5 +1,52 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
import { createHash } from "node:crypto";
|
|
2
3
|
import { changeId, contractHead, contractId, snapshotId, } from "../core/facts/types.js";
|
|
4
|
+
// Structural admission reuses the pure identity constructors; physical minting remains distinct.
|
|
5
|
+
export const contractIdSchema = z.string().transform((value, context) => {
|
|
6
|
+
try {
|
|
7
|
+
return contractId(value);
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
context.addIssue({ code: "custom", message: "invalid contractId" });
|
|
11
|
+
return z.NEVER;
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
export const snapshotIdSchema = z.string().transform((value, context) => {
|
|
15
|
+
try {
|
|
16
|
+
return snapshotId(value);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
context.addIssue({ code: "custom", message: "invalid snapshotId" });
|
|
20
|
+
return z.NEVER;
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
export const contractHeadSchema = z.string().transform((value, context) => {
|
|
24
|
+
try {
|
|
25
|
+
return contractHead(value);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
context.addIssue({ code: "custom", message: "invalid ContractHead" });
|
|
29
|
+
return z.NEVER;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
export const changeIdSchema = z.string().transform((value, context) => {
|
|
33
|
+
try {
|
|
34
|
+
return changeId(value);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
context.addIssue({ code: "custom", message: "invalid changeId" });
|
|
38
|
+
return z.NEVER;
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
export const mintedSnapshotInputSchema = z.string().transform((value, context) => {
|
|
42
|
+
try {
|
|
43
|
+
return mintSnapshotId(value);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
context.addIssue({ code: "custom", message: "invalid mintSnapshotId" });
|
|
47
|
+
return z.NEVER;
|
|
48
|
+
}
|
|
49
|
+
});
|
|
3
50
|
const GIT_OBJECT_ID = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/;
|
|
4
51
|
function locator(value) {
|
|
5
52
|
return createHash("sha256").update(value, "utf8").digest("hex");
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
import type { Preparation } from "../core/decide.js";
|
|
2
3
|
import type { ChangeId, ContractCoordinates, ContractId, SnapshotId } from "../core/facts/types.js";
|
|
3
4
|
import { type GitObjectId } from "./identity.js";
|
|
@@ -6,18 +7,35 @@ import type { DeliveryCommitMetadata, TenderCapture } from "./tender.js";
|
|
|
6
7
|
import { workspaceMergeStatePresent } from "./workspace.js";
|
|
7
8
|
export { workspaceMergeStatePresent };
|
|
8
9
|
type IntegrationTender = Pick<TenderCapture, "head" | "tree">;
|
|
9
|
-
declare const
|
|
10
|
-
|
|
10
|
+
export declare const integrationPreparationRefusalSchema: z.ZodUnion<readonly [z.ZodPipe<z.ZodObject<{
|
|
11
|
+
kind: z.ZodLiteral<"integration-failed">;
|
|
12
|
+
contractId: z.ZodPipe<z.ZodString, z.ZodTransform<ContractId, string>>;
|
|
13
|
+
reason: z.ZodEnum<{
|
|
14
|
+
"not-based-on-target": "not-based-on-target";
|
|
15
|
+
"unrelated-histories": "unrelated-histories";
|
|
16
|
+
conflict: "conflict";
|
|
17
|
+
}>;
|
|
18
|
+
targetHead: z.ZodPipe<z.ZodString, z.ZodTransform<SnapshotId, string>>;
|
|
19
|
+
conflictPaths: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
20
|
+
}, z.core.$strict>, z.ZodTransform<{
|
|
11
21
|
kind: "integration-failed";
|
|
12
22
|
contractId: ContractId;
|
|
13
23
|
reason: "not-based-on-target" | "unrelated-histories" | "conflict";
|
|
14
24
|
targetHead: SnapshotId;
|
|
25
|
+
} & {
|
|
15
26
|
conflictPaths?: readonly string[];
|
|
16
|
-
}
|
|
17
|
-
kind: "integration-
|
|
27
|
+
}, {
|
|
28
|
+
kind: "integration-failed";
|
|
18
29
|
contractId: ContractId;
|
|
19
|
-
|
|
20
|
-
|
|
30
|
+
reason: "not-based-on-target" | "unrelated-histories" | "conflict";
|
|
31
|
+
targetHead: SnapshotId;
|
|
32
|
+
conflictPaths?: readonly string[] | undefined;
|
|
33
|
+
}>>, z.ZodObject<{
|
|
34
|
+
kind: z.ZodLiteral<"integration-unsupported">;
|
|
35
|
+
contractId: z.ZodPipe<z.ZodString, z.ZodTransform<ContractId, string>>;
|
|
36
|
+
requiredGit: z.ZodLiteral<"2.38">;
|
|
37
|
+
}, z.core.$strict>]>;
|
|
38
|
+
export type IntegrationPreparationRefusal = z.infer<typeof integrationPreparationRefusalSchema>;
|
|
21
39
|
export type IntegrationCoordinates = Readonly<{
|
|
22
40
|
contractId: ContractId;
|
|
23
41
|
coordinates: ContractCoordinates;
|
|
@@ -38,13 +56,13 @@ export declare function planIntegration(repository: GitRepository, input: Integr
|
|
|
38
56
|
kind: "target-missing";
|
|
39
57
|
contractId: ContractId;
|
|
40
58
|
}> | IntegrationPreparationRefusal>>;
|
|
41
|
-
export
|
|
42
|
-
filesChanged:
|
|
43
|
-
insertions:
|
|
44
|
-
deletions:
|
|
45
|
-
paths
|
|
46
|
-
}>;
|
|
47
|
-
|
|
59
|
+
export declare const deliveryDiffScopeSchema: z.ZodObject<{
|
|
60
|
+
filesChanged: z.ZodNumber;
|
|
61
|
+
insertions: z.ZodNumber;
|
|
62
|
+
deletions: z.ZodNumber;
|
|
63
|
+
paths: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
64
|
+
}, z.core.$strict>;
|
|
65
|
+
type DeliveryDiffScope = z.infer<typeof deliveryDiffScopeSchema>;
|
|
48
66
|
export declare function readDeliveryScope(repository: GitRepository, predecessor: SnapshotId, candidate: SnapshotId, includePaths: boolean): Promise<DeliveryDiffScope>;
|
|
49
67
|
/** Read a recorded integration pair's patch, or null when Git no longer has it. */
|
|
50
68
|
export declare function readDeliveryDiff(repository: GitRepository, predecessor: SnapshotId, candidate: SnapshotId): Promise<string | null>;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { contractIdSchema, snapshotIdSchema } from "./identity.js";
|
|
2
|
+
import { z } from "zod";
|
|
1
3
|
import { AuthorityCorruptionError } from "../core/facts/errors.js";
|
|
2
4
|
import { gitObjectId, gitObjectIdForSnapshot, mintChangeId, mintSnapshotId } from "./identity.js";
|
|
3
5
|
import { decodeGitNameOnly, decodeGitNumstat, readRef } from "./repository.js";
|
|
@@ -15,6 +17,28 @@ async function runAllowingNonzero(repository, args, input) {
|
|
|
15
17
|
return { stdout: error.stdout, stderr: error.stderr, status: error.status };
|
|
16
18
|
}
|
|
17
19
|
}
|
|
20
|
+
export const integrationPreparationRefusalSchema = z.union([
|
|
21
|
+
z
|
|
22
|
+
.object({
|
|
23
|
+
kind: z.literal("integration-failed"),
|
|
24
|
+
contractId: contractIdSchema,
|
|
25
|
+
reason: z.enum(["not-based-on-target", "unrelated-histories", "conflict"]),
|
|
26
|
+
targetHead: snapshotIdSchema,
|
|
27
|
+
conflictPaths: z
|
|
28
|
+
.array(z.string().refine((value) => value.trim() !== ""))
|
|
29
|
+
.readonly()
|
|
30
|
+
.optional(),
|
|
31
|
+
})
|
|
32
|
+
.strict()
|
|
33
|
+
.transform(({ conflictPaths, ...refusal }) => ({ ...refusal, ...(conflictPaths === undefined ? {} : { conflictPaths }) })),
|
|
34
|
+
z
|
|
35
|
+
.object({
|
|
36
|
+
kind: z.literal("integration-unsupported"),
|
|
37
|
+
contractId: contractIdSchema,
|
|
38
|
+
requiredGit: z.literal(REQUIRED_GIT),
|
|
39
|
+
})
|
|
40
|
+
.strict(),
|
|
41
|
+
]);
|
|
18
42
|
/** Mint the one worktree-content identity shared by review and delivery. */
|
|
19
43
|
export async function worktreeChangeId(repository, input, tender) {
|
|
20
44
|
const result = await runGitPipe(repository, [
|
|
@@ -290,7 +314,14 @@ async function deliverySnapshotAvailability(repository, predecessor, candidate)
|
|
|
290
314
|
}
|
|
291
315
|
return "available";
|
|
292
316
|
}
|
|
293
|
-
|
|
317
|
+
export const deliveryDiffScopeSchema = z
|
|
318
|
+
.object({
|
|
319
|
+
filesChanged: z.number().int(),
|
|
320
|
+
insertions: z.number().int(),
|
|
321
|
+
deletions: z.number().int(),
|
|
322
|
+
paths: z.array(z.string()).readonly().optional(),
|
|
323
|
+
})
|
|
324
|
+
.strict();
|
|
294
325
|
export async function readDeliveryScope(repository, predecessor, candidate, includePaths) {
|
|
295
326
|
const scope = decodeGitNumstat(await runGit(repository, [
|
|
296
327
|
"diff",
|
package/build/src/git/nuke.d.ts
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
import type { WorldRoot } from "../world.js";
|
|
2
2
|
import { type GitRepository } from "./process.js";
|
|
3
3
|
import { type PrivateStateSeatOutcome } from "./private-state-seat.js";
|
|
4
|
-
export declare
|
|
4
|
+
export declare class GitResetStopError extends Error {
|
|
5
|
+
constructor(message: string);
|
|
6
|
+
}
|
|
7
|
+
export declare function nukeGit(world: WorldRoot, gitPath?: string, options?: Readonly<Pick<GitRepository, "onPrivateStateSeatContention" | "onPrivateStateSeatClose">>, progress?: (confirmed: Readonly<{
|
|
8
|
+
refs?: number;
|
|
9
|
+
worktrees?: number;
|
|
10
|
+
}>) => void): Promise<PrivateStateSeatOutcome<Readonly<{
|
|
11
|
+
refs: number;
|
|
12
|
+
worktrees: number;
|
|
13
|
+
}>>>;
|
package/build/src/git/nuke.js
CHANGED
|
@@ -5,6 +5,12 @@ import { GitPlumbingError, runGit } from "./process.js";
|
|
|
5
5
|
import { confirmPrivateStatePublication, withPrivateStatePublicationSeat, } from "./private-state-seat.js";
|
|
6
6
|
import { CANDIDATE_PIN_REF_NAMESPACE, DELIVERY_REF_NAMESPACE, GIT_REF, NoGitWorldError, readRef, registeredWorktrees, repositoryAt, worktreeGitDirectory, } from "./repository.js";
|
|
7
7
|
import { worktreePath } from "./workspace.js";
|
|
8
|
+
export class GitResetStopError extends Error {
|
|
9
|
+
constructor(message) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = "GitResetStopError";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
8
14
|
async function managedCustody(repository) {
|
|
9
15
|
const register = await readPlaceRegister(repository);
|
|
10
16
|
return {
|
|
@@ -64,7 +70,7 @@ async function removeUnregisteredResidue(repository, entry) {
|
|
|
64
70
|
if (!present)
|
|
65
71
|
return true;
|
|
66
72
|
if (!(await unregisteredResidueBelongsToRepository(repository, entry.path))) {
|
|
67
|
-
throw new
|
|
73
|
+
throw new GitResetStopError(`managed Place path has foreign custody: ${entry.path}`);
|
|
68
74
|
}
|
|
69
75
|
await rm(entry.path, { recursive: true, force: true });
|
|
70
76
|
try {
|
|
@@ -75,7 +81,7 @@ async function removeUnregisteredResidue(repository, entry) {
|
|
|
75
81
|
return true;
|
|
76
82
|
throw error;
|
|
77
83
|
}
|
|
78
|
-
throw new
|
|
84
|
+
throw new GitResetStopError(`managed Place worktree remains present: ${entry.path}`);
|
|
79
85
|
}
|
|
80
86
|
async function removeManagedWorktree(repository, entry) {
|
|
81
87
|
const registered = (await registeredWorktrees(repository)).find((candidate) => candidate.path === entry.path);
|
|
@@ -85,7 +91,7 @@ async function removeManagedWorktree(repository, entry) {
|
|
|
85
91
|
return false;
|
|
86
92
|
await runGit(repository, ["worktree", "remove", "--force", entry.path]);
|
|
87
93
|
if ((await registeredWorktrees(repository)).some((candidate) => candidate.path === entry.path)) {
|
|
88
|
-
throw new
|
|
94
|
+
throw new GitResetStopError(`managed Place worktree remains registered: ${entry.path}`);
|
|
89
95
|
}
|
|
90
96
|
try {
|
|
91
97
|
await access(entry.path);
|
|
@@ -95,7 +101,7 @@ async function removeManagedWorktree(repository, entry) {
|
|
|
95
101
|
return true;
|
|
96
102
|
throw error;
|
|
97
103
|
}
|
|
98
|
-
throw new
|
|
104
|
+
throw new GitResetStopError(`managed Place worktree remains present: ${entry.path}`);
|
|
99
105
|
}
|
|
100
106
|
async function deleteRefAt(repository, ref, expectedOid) {
|
|
101
107
|
await runGit(repository, ["update-ref", "--no-deref", "-d", ref, expectedOid]);
|
|
@@ -114,9 +120,10 @@ async function deleteObservedStateRef(repository, expectedOid, seat) {
|
|
|
114
120
|
confirmPrivateStatePublication(seat);
|
|
115
121
|
return;
|
|
116
122
|
}
|
|
117
|
-
throw new
|
|
123
|
+
throw new GitResetStopError("state-ref deletion outcome is unknown");
|
|
118
124
|
}
|
|
119
|
-
async function removeOwnedRefs(repository) {
|
|
125
|
+
async function removeOwnedRefs(repository, onRemoved) {
|
|
126
|
+
let removed = 0;
|
|
120
127
|
const roots = [DELIVERY_REF_NAMESPACE, CANDIDATE_PIN_REF_NAMESPACE];
|
|
121
128
|
for (const root of roots) {
|
|
122
129
|
const refs = (await runGit(repository, ["for-each-ref", "--format=%(refname)", root]))
|
|
@@ -125,34 +132,47 @@ async function removeOwnedRefs(repository) {
|
|
|
125
132
|
.filter((ref) => ref.length > root.length && ref.startsWith(`${root}/`));
|
|
126
133
|
for (const ref of refs) {
|
|
127
134
|
const oid = await readRef(repository, ref);
|
|
128
|
-
if (oid !== null)
|
|
135
|
+
if (oid !== null) {
|
|
129
136
|
await deleteRefAt(repository, ref, oid);
|
|
137
|
+
removed += 1;
|
|
138
|
+
onRemoved?.(1);
|
|
139
|
+
}
|
|
130
140
|
}
|
|
131
141
|
}
|
|
142
|
+
return removed;
|
|
132
143
|
}
|
|
133
|
-
export async function nukeGit(world, gitPath = "git", options) {
|
|
144
|
+
export async function nukeGit(world, gitPath = "git", options, progress) {
|
|
134
145
|
let repository;
|
|
135
146
|
try {
|
|
136
147
|
repository = { ...(await repositoryAt(world, gitPath)), ...options };
|
|
137
148
|
}
|
|
138
149
|
catch (error) {
|
|
139
150
|
if (error instanceof NoGitWorldError)
|
|
140
|
-
return { value:
|
|
151
|
+
return { value: { refs: 0, worktrees: 0 } };
|
|
141
152
|
throw error;
|
|
142
153
|
}
|
|
143
154
|
return await withPlaceAuthorityFence(repository, async (placeFence) => {
|
|
144
155
|
const custody = await managedCustody(repository);
|
|
145
156
|
return await withPrivateStatePublicationSeat(repository, async (seat) => {
|
|
157
|
+
let refs = 0;
|
|
158
|
+
let worktrees = 0;
|
|
146
159
|
const state = await readRef(repository, GIT_REF);
|
|
147
|
-
if (state !== null)
|
|
160
|
+
if (state !== null) {
|
|
148
161
|
await deleteObservedStateRef(repository, state, seat);
|
|
162
|
+
refs += 1;
|
|
163
|
+
progress?.({ refs: 1 });
|
|
164
|
+
}
|
|
149
165
|
for (const entry of custody.entries) {
|
|
150
166
|
if (await removeManagedWorktree(repository, entry)) {
|
|
167
|
+
worktrees += 1;
|
|
168
|
+
progress?.({ worktrees: 1 });
|
|
151
169
|
await releaseManagedWorktrees(repository, [entry.contract], placeFence);
|
|
152
170
|
}
|
|
153
171
|
}
|
|
154
172
|
await nukeEmptyPlaceAuthority(repository, placeFence);
|
|
155
|
-
await removeOwnedRefs(repository);
|
|
173
|
+
const ownedRefs = await removeOwnedRefs(repository, (count) => progress?.({ refs: count }));
|
|
174
|
+
refs += ownedRefs;
|
|
175
|
+
return { refs, worktrees };
|
|
156
176
|
});
|
|
157
177
|
});
|
|
158
178
|
}
|
package/build/src/git/observe.js
CHANGED
|
@@ -4,7 +4,7 @@ import { foldJournal } from "../core/facts/fold.js";
|
|
|
4
4
|
import { contractJournalPath, contractJournalPaths, mintContractHead, mintSnapshotId, } from "./identity.js";
|
|
5
5
|
import { isKeiyakuOwnedRef } from "./repository.js";
|
|
6
6
|
import { GitPlumbingError, runGit } from "./process.js";
|
|
7
|
-
import { readGitTreeSelection, withGitTargetedReadObservation, } from "./read-observation.js";
|
|
7
|
+
import { readBlobResults, readGitTreeSelection, withGitTargetedReadObservation, } from "./read-observation.js";
|
|
8
8
|
export async function observeDeliveryTargetAt(observation, state) {
|
|
9
9
|
const target = state.coordinates.target;
|
|
10
10
|
if (target === undefined)
|
|
@@ -288,20 +288,7 @@ export async function extendContractsForAdmissionAt(channel, observation, ids) {
|
|
|
288
288
|
const missing = ids.filter((id) => !observation.decision.has(id));
|
|
289
289
|
if (missing.length === 0)
|
|
290
290
|
return observation;
|
|
291
|
-
const readBlobsAt = async (oids) =>
|
|
292
|
-
const objects = await channel.readObjects(oids);
|
|
293
|
-
const blobs = new Map();
|
|
294
|
-
for (const [oid, object] of objects) {
|
|
295
|
-
if (object.kind === "missing")
|
|
296
|
-
blobs.set(oid, object);
|
|
297
|
-
else {
|
|
298
|
-
if (object.type !== "blob")
|
|
299
|
-
throw new AuthorityCorruptionError(`Git object is not a blob: ${oid}`);
|
|
300
|
-
blobs.set(oid, { kind: "present", bytes: object.bytes });
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
return blobs;
|
|
304
|
-
};
|
|
291
|
+
const readBlobsAt = async (oids) => await readBlobResults(channel, oids);
|
|
305
292
|
const snapshot = observation.admission.snapshot;
|
|
306
293
|
if (snapshot.tree === null)
|
|
307
294
|
return observation;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
import type { GitRepository } from "./process.js";
|
|
2
3
|
declare const privateStateSeat: unique symbol;
|
|
3
4
|
/** Timed-out wait for the private-state publication seat. The holder and lock are unchanged. */
|
|
@@ -10,11 +11,11 @@ export type PrivateStatePublicationSeat = Readonly<{
|
|
|
10
11
|
readonly [privateStateSeat]: true;
|
|
11
12
|
}>;
|
|
12
13
|
/** Post-confirmation failure to release the private-state publication seat. */
|
|
13
|
-
export
|
|
14
|
-
kind: "private-state-seat-close-failed"
|
|
15
|
-
diagnostic:
|
|
16
|
-
}>;
|
|
17
|
-
|
|
14
|
+
export declare const privateStateSeatCloseLagSchema: z.ZodObject<{
|
|
15
|
+
kind: z.ZodLiteral<"private-state-seat-close-failed">;
|
|
16
|
+
diagnostic: z.ZodString;
|
|
17
|
+
}, z.core.$strict>;
|
|
18
|
+
export type PrivateStateSeatCloseLag = z.infer<typeof privateStateSeatCloseLagSchema>;
|
|
18
19
|
export type PrivateStateSeatOutcome<T> = Readonly<{
|
|
19
20
|
value: T;
|
|
20
21
|
closeLag?: PrivateStateSeatCloseLag;
|
|
@@ -25,8 +26,6 @@ export declare function privateStatePublicationSeatPath(repository: GitRepositor
|
|
|
25
26
|
export declare function privateStateSeatCloseLag(error: unknown): PrivateStateSeatCloseLag;
|
|
26
27
|
export declare function concatenatePrivateStateSeatClose(current: readonly PrivateStateSeatCloseLag[] | undefined, next: readonly PrivateStateSeatCloseLag[] | undefined): readonly PrivateStateSeatCloseLag[] | undefined;
|
|
27
28
|
export declare function appendPrivateStateSeatClose(current: readonly PrivateStateSeatCloseLag[] | undefined, closeLag: PrivateStateSeatCloseLag): readonly PrivateStateSeatCloseLag[];
|
|
28
|
-
/** Unwrap a seat outcome that has no typed lag surface; confirmed close lag throws. */
|
|
29
|
-
export declare function requireClosedPrivateStateSeat<T>(outcome: PrivateStateSeatOutcome<T>): T;
|
|
30
29
|
/** Unwrap a seat outcome through an owner-typed merge of confirmed close lag. */
|
|
31
30
|
export declare function mergePrivateStateSeatClose<T>(outcome: PrivateStateSeatOutcome<T>, merge: (value: T, closeLag: PrivateStateSeatCloseLag) => T): T;
|
|
32
31
|
export declare function isPrivateStateSeatContention(error: unknown): error is GitPrivateStateSeatContentionError;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
3
|
import { join } from "node:path";
|
|
3
4
|
import { acquireSqliteTransactionLock, SqliteTransactionLockError } from "../coordination/sqlite-transaction-lock.js";
|
|
@@ -14,6 +15,13 @@ export class GitPrivateStateSeatContentionError extends Error {
|
|
|
14
15
|
this.name = "GitPrivateStateSeatContentionError";
|
|
15
16
|
}
|
|
16
17
|
}
|
|
18
|
+
/** Post-confirmation failure to release the private-state publication seat. */
|
|
19
|
+
export const privateStateSeatCloseLagSchema = z
|
|
20
|
+
.object({
|
|
21
|
+
kind: z.literal("private-state-seat-close-failed"),
|
|
22
|
+
diagnostic: z.string().refine((value) => value.trim() !== ""),
|
|
23
|
+
})
|
|
24
|
+
.strict();
|
|
17
25
|
/** Record a known or exact-read-back-proven private-root publication. */
|
|
18
26
|
export function confirmPrivateStatePublication(seat) {
|
|
19
27
|
confirmedPublications.add(seat);
|
|
@@ -34,12 +42,6 @@ export function concatenatePrivateStateSeatClose(current, next) {
|
|
|
34
42
|
export function appendPrivateStateSeatClose(current, closeLag) {
|
|
35
43
|
return current === undefined ? [closeLag] : [...current, closeLag];
|
|
36
44
|
}
|
|
37
|
-
/** Unwrap a seat outcome that has no typed lag surface; confirmed close lag throws. */
|
|
38
|
-
export function requireClosedPrivateStateSeat(outcome) {
|
|
39
|
-
if (outcome.closeLag !== undefined)
|
|
40
|
-
throw new Error(outcome.closeLag.diagnostic);
|
|
41
|
-
return outcome.value;
|
|
42
|
-
}
|
|
43
45
|
/** Unwrap a seat outcome through an owner-typed merge of confirmed close lag. */
|
|
44
46
|
export function mergePrivateStateSeatClose(outcome, merge) {
|
|
45
47
|
return outcome.closeLag === undefined ? outcome.value : merge(outcome.value, outcome.closeLag);
|
|
@@ -36,7 +36,12 @@ export declare function readGitTreeSelection(channel: GitDecodeChannel, root: Gi
|
|
|
36
36
|
paths: ReadonlyMap<string, TreeEntry>;
|
|
37
37
|
directories: ReadonlyMap<string, ReadonlyMap<string, TreeEntry>>;
|
|
38
38
|
}>>;
|
|
39
|
-
export declare function withGitDecodeChannel<Value>(repository: GitRepository, consume: (channel: GitDecodeChannel) => Value | PromiseLike<Value
|
|
39
|
+
export declare function withGitDecodeChannel<Value>(repository: GitRepository, consume: (channel: GitDecodeChannel) => Value | PromiseLike<Value>, onRetirementFailure?: (error: unknown) => void): Promise<Value>;
|
|
40
|
+
/**
|
|
41
|
+
* Blob-only reads over a decode channel: a missing object stays missing, and a present
|
|
42
|
+
* non-blob object is authority corruption, never a silent skip.
|
|
43
|
+
*/
|
|
44
|
+
export declare function readBlobResults(channel: GitDecodeChannel, oids: readonly GitOid[]): Promise<ReadonlyMap<GitOid, GitBlobResult>>;
|
|
40
45
|
export declare function withGitReadObservation<Value>(repository: GitRepository, channel: GitDecodeChannel, consume: (observation: GitReadObservation) => Value | PromiseLike<Value>): Promise<Value>;
|
|
41
46
|
export declare function withGitTargetedReadObservation<Value>(repository: GitRepository, channel: GitDecodeChannel, selection: GitTreeSelection, consume: (observation: GitReadObservation) => Value | PromiseLike<Value>): Promise<Value>;
|
|
42
47
|
export {};
|