@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,10 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { chmod, lstat, readFile } from "node:fs/promises";
|
|
2
3
|
import { join } from "node:path";
|
|
3
|
-
import { acquireSqliteTransactionLock } from "./coordination/sqlite-transaction-lock.js";
|
|
4
4
|
import { repairDerivedFile } from "./coordination/durable-file.js";
|
|
5
|
-
import {
|
|
6
|
-
import { CONTRACT_DELIVERER_SKILL, CONTRACT_REVIEWER_SKILL, CONTRACT_ONBOARDING_SKILL, renderContractAppointment, renderContractGuidance, } from "./contract-guidance.js";
|
|
7
|
-
import { worktreeGitDirectory, worktreeRoot } from "./git/repository.js";
|
|
5
|
+
import { CONTRACT_DELIVERER_SKILL, CONTRACT_REVIEWER_SKILL, CONTRACT_ONBOARDING_SKILL, renderContractGuidance, } from "./contract-guidance.js";
|
|
8
6
|
import { GitPlumbingError, runGit } from "./git/process.js";
|
|
9
7
|
import { worktreePath } from "./git/workspace.js";
|
|
10
8
|
import { appointmentFor, placeRegisterPath } from "./workspace-place.js";
|
|
@@ -18,22 +16,21 @@ const SEAT_SKILLS = [
|
|
|
18
16
|
["keiyaku-deliver", CONTRACT_DELIVERER_SKILL],
|
|
19
17
|
["keiyaku-review", CONTRACT_REVIEWER_SKILL],
|
|
20
18
|
];
|
|
21
|
-
export
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
19
|
+
export const contractFileEffectSchema = z
|
|
20
|
+
.object({
|
|
21
|
+
kind: z.literal("contract-file"),
|
|
22
|
+
path: z.string().refine((value) => value.trim() !== ""),
|
|
23
|
+
action: z.enum(["created", "updated", "unchanged", "removed"]),
|
|
24
|
+
})
|
|
25
|
+
.strict();
|
|
26
|
+
export const contractFileLagSchema = z
|
|
27
|
+
.object({
|
|
28
|
+
kind: z.literal("contract-file-failed"),
|
|
29
|
+
worktree: z.string().refine((value) => value.trim() !== ""),
|
|
30
|
+
path: z.string().refine((value) => value.trim() !== ""),
|
|
31
|
+
diagnostic: z.string().refine((value) => value.trim() !== ""),
|
|
32
|
+
})
|
|
33
|
+
.strict();
|
|
37
34
|
async function isTracked(repository, relativePath) {
|
|
38
35
|
try {
|
|
39
36
|
await runGit(repository, ["ls-files", "--error-unmatch", "--", relativePath]);
|
|
@@ -48,55 +45,6 @@ async function isTracked(repository, relativePath) {
|
|
|
48
45
|
function generatedPath(worktree, name) {
|
|
49
46
|
return join(worktree, ".keiyaku", name);
|
|
50
47
|
}
|
|
51
|
-
function appointedContract(bytes) {
|
|
52
|
-
const lines = bytes.split(/\r?\n/u), close = lines.indexOf("---", 1);
|
|
53
|
-
if (lines[0] !== "---" || (close !== 2 && close !== 3) || !lines[1]?.startsWith("contract: "))
|
|
54
|
-
return undefined;
|
|
55
|
-
if (close === 3 && !lines[2]?.startsWith("description: "))
|
|
56
|
-
return undefined;
|
|
57
|
-
try {
|
|
58
|
-
return contractId(lines[1].slice("contract: ".length));
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
return undefined;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
export async function readContractAppointment(repository) {
|
|
65
|
-
const path = generatedPath(await worktreeRoot(repository), "KEIYAKU.md");
|
|
66
|
-
const stat = await lstat(path).catch((error) => error.code === "ENOENT" ? undefined : Promise.reject(error));
|
|
67
|
-
if (stat === undefined)
|
|
68
|
-
return { kind: "absent", path };
|
|
69
|
-
if (!stat.isFile() || stat.isSymbolicLink())
|
|
70
|
-
return { kind: "invalid", path };
|
|
71
|
-
const contract = appointedContract(await readFile(path, "utf8"));
|
|
72
|
-
return contract === undefined ? { kind: "invalid", path } : { kind: "appointed", path, contract };
|
|
73
|
-
}
|
|
74
|
-
export async function withContractWorktreeAppointment(repository, action) {
|
|
75
|
-
const root = await worktreeRoot(repository);
|
|
76
|
-
const lock = await acquireSqliteTransactionLock({
|
|
77
|
-
path: join(await worktreeGitDirectory(repository, root), "keiyaku", "contract-worktree.sqlite"),
|
|
78
|
-
mode: "immediate",
|
|
79
|
-
});
|
|
80
|
-
try {
|
|
81
|
-
return await action();
|
|
82
|
-
}
|
|
83
|
-
finally {
|
|
84
|
-
lock.close();
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
export async function releaseContractWorktree(repository, contract) {
|
|
88
|
-
const appointment = await readContractAppointment(repository);
|
|
89
|
-
if (appointment.kind !== "appointed" || appointment.contract !== contract)
|
|
90
|
-
return;
|
|
91
|
-
if ((await readFile(appointment.path, "utf8")) !== renderContractAppointment(contract))
|
|
92
|
-
return;
|
|
93
|
-
try {
|
|
94
|
-
await unlink(appointment.path);
|
|
95
|
-
}
|
|
96
|
-
catch {
|
|
97
|
-
/* reservation cleanup is best effort */
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
48
|
async function repair(repository, worktree, relativePath, bytes) {
|
|
101
49
|
const path = join(worktree, relativePath);
|
|
102
50
|
if (await isTracked(repository, relativePath))
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare function syncDirectory(path: string): void;
|
|
2
2
|
export declare function replaceFileDurably(path: string, bytes: string | Uint8Array): Promise<void>;
|
|
3
|
-
|
|
4
|
-
export declare function createFileDurablyExclusive(path: string, bytes: string | Uint8Array, mode?: number): Promise<boolean>;
|
|
3
|
+
type DerivedFileAction = "created" | "updated" | "unchanged";
|
|
5
4
|
export declare function repairDerivedFile(path: string, bytes: string | Uint8Array): Promise<DerivedFileAction>;
|
|
5
|
+
export {};
|
|
@@ -42,33 +42,6 @@ export async function replaceFileDurably(path, bytes) {
|
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
-
export async function createFileDurablyExclusive(path, bytes, mode = 0o600) {
|
|
46
|
-
const parent = dirname(path);
|
|
47
|
-
await mkdir(parent, { recursive: true });
|
|
48
|
-
let descriptor;
|
|
49
|
-
try {
|
|
50
|
-
descriptor = openSync(path, "wx", mode);
|
|
51
|
-
writeFileSync(descriptor, bytes);
|
|
52
|
-
fsyncSync(descriptor);
|
|
53
|
-
closeSync(descriptor);
|
|
54
|
-
descriptor = undefined;
|
|
55
|
-
syncDirectory(parent);
|
|
56
|
-
return true;
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
if (descriptor !== undefined)
|
|
60
|
-
closeSync(descriptor);
|
|
61
|
-
if (error.code === "EEXIST")
|
|
62
|
-
return false;
|
|
63
|
-
try {
|
|
64
|
-
await unlink(path);
|
|
65
|
-
}
|
|
66
|
-
catch {
|
|
67
|
-
/* absent or best-effort cleanup */
|
|
68
|
-
}
|
|
69
|
-
throw error;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
45
|
export async function repairDerivedFile(path, bytes) {
|
|
73
46
|
const expected = Buffer.from(bytes);
|
|
74
47
|
await mkdir(dirname(path), { recursive: true });
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { JournalEntry } from "./types.js";
|
|
2
2
|
/** Validate one in-memory journal value with the persisted-fact authority. */
|
|
3
3
|
export declare function decodeJournalEntry(value: unknown): JournalEntry;
|
|
4
|
-
export declare function decodeDeliverData(value: unknown): DeliverData;
|
|
5
4
|
export declare function encodeEntry(entry: JournalEntry): string;
|
|
6
5
|
export declare function decodeJournal(journal: string): JournalEntry[];
|
|
@@ -131,7 +131,8 @@ function validateAttestation(value, path) {
|
|
|
131
131
|
}
|
|
132
132
|
function validateArc(value, path) {
|
|
133
133
|
const object = requireRecord(value, path);
|
|
134
|
-
|
|
134
|
+
const freeform = "body" in object;
|
|
135
|
+
requireKeys(object, freeform ? ["seq", "title", "body"] : ["seq", "title", "objective", "brief"], path);
|
|
135
136
|
const seq = object.seq;
|
|
136
137
|
if (typeof seq !== "number" || !Number.isSafeInteger(seq) || seq < 1) {
|
|
137
138
|
fail(`${path}.seq`, "expected a positive safe integer");
|
|
@@ -139,8 +140,9 @@ function validateArc(value, path) {
|
|
|
139
140
|
return {
|
|
140
141
|
seq,
|
|
141
142
|
title: stringValue(object.title, `${path}.title`),
|
|
142
|
-
|
|
143
|
-
|
|
143
|
+
body: freeform
|
|
144
|
+
? stringValue(object.body, `${path}.body`, false)
|
|
145
|
+
: `${stringValue(object.objective, `${path}.objective`)}\n\n${stringValue(object.brief, `${path}.brief`)}`,
|
|
144
146
|
};
|
|
145
147
|
}
|
|
146
148
|
function validateData(kind, value) {
|
|
@@ -239,9 +241,6 @@ function validateEntry(value) {
|
|
|
239
241
|
export function decodeJournalEntry(value) {
|
|
240
242
|
return validateEntry(value);
|
|
241
243
|
}
|
|
242
|
-
export function decodeDeliverData(value) {
|
|
243
|
-
return validateData("deliver", value);
|
|
244
|
-
}
|
|
245
244
|
function canonicalValue(value) {
|
|
246
245
|
if (value === null)
|
|
247
246
|
return "null";
|
|
@@ -281,7 +280,7 @@ function decodeEntry(line) {
|
|
|
281
280
|
throw new AuthorityCorruptionError("journal entry is not valid JSON", { cause: error });
|
|
282
281
|
}
|
|
283
282
|
const entry = validateEntry(value);
|
|
284
|
-
if (canonicalJson(
|
|
283
|
+
if (canonicalJson(value) !== body)
|
|
285
284
|
throw new AuthorityCorruptionError("journal entry is not canonical");
|
|
286
285
|
return entry;
|
|
287
286
|
}
|
|
@@ -1,86 +1,4 @@
|
|
|
1
1
|
import { dependencyKeys, currentSubjectPredicate } from "../subject.js";
|
|
2
|
-
import { gate } from "./types.js";
|
|
3
|
-
function fail() {
|
|
4
|
-
throw new Error("malformed gate report");
|
|
5
|
-
}
|
|
6
|
-
function object(value) {
|
|
7
|
-
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
8
|
-
fail();
|
|
9
|
-
return value;
|
|
10
|
-
}
|
|
11
|
-
function decodeAttestedGateCurrent(current) {
|
|
12
|
-
for (const key of Object.keys(current)) {
|
|
13
|
-
if (key !== "kind" && key !== "verdict" && key !== "at" && key !== "summary")
|
|
14
|
-
fail();
|
|
15
|
-
}
|
|
16
|
-
if (current.kind !== "attested")
|
|
17
|
-
fail();
|
|
18
|
-
if (current.verdict !== "satisfied" && current.verdict !== "unsatisfied")
|
|
19
|
-
fail();
|
|
20
|
-
if (typeof current.at !== "string")
|
|
21
|
-
fail();
|
|
22
|
-
return {
|
|
23
|
-
kind: "attested",
|
|
24
|
-
verdict: current.verdict,
|
|
25
|
-
at: current.at,
|
|
26
|
-
...(current.summary === undefined
|
|
27
|
-
? {}
|
|
28
|
-
: { summary: typeof current.summary === "string" ? current.summary : fail() }),
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
function decodeStaleReason(value) {
|
|
32
|
-
const reasonObject = object(value);
|
|
33
|
-
for (const key of Object.keys(reasonObject)) {
|
|
34
|
-
if (key !== "kind" && key !== "target" && key !== "previousChange" && key !== "currentChange")
|
|
35
|
-
fail();
|
|
36
|
-
}
|
|
37
|
-
if (reasonObject.kind !== "candidate-content-changed" ||
|
|
38
|
-
(reasonObject.target !== undefined && typeof reasonObject.target !== "string") ||
|
|
39
|
-
typeof reasonObject.previousChange !== "string" ||
|
|
40
|
-
typeof reasonObject.currentChange !== "string")
|
|
41
|
-
fail();
|
|
42
|
-
return {
|
|
43
|
-
kind: "candidate-content-changed",
|
|
44
|
-
...(reasonObject.target === undefined ? {} : { target: reasonObject.target }),
|
|
45
|
-
previousChange: reasonObject.previousChange,
|
|
46
|
-
currentChange: reasonObject.currentChange,
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
function decodeGateCurrent(value) {
|
|
50
|
-
const current = object(value);
|
|
51
|
-
if (current.kind === "missing") {
|
|
52
|
-
if (Object.keys(current).length !== 1)
|
|
53
|
-
fail();
|
|
54
|
-
return { kind: "missing" };
|
|
55
|
-
}
|
|
56
|
-
if (current.kind === "stale") {
|
|
57
|
-
if (current.priorVerdict !== "satisfied" && current.priorVerdict !== "unsatisfied")
|
|
58
|
-
fail();
|
|
59
|
-
const reason = current.reason === undefined ? undefined : decodeStaleReason(current.reason);
|
|
60
|
-
if (Object.keys(current).length !== (reason === undefined ? 2 : 3))
|
|
61
|
-
fail();
|
|
62
|
-
return { kind: "stale", priorVerdict: current.priorVerdict, ...(reason === undefined ? {} : { reason }) };
|
|
63
|
-
}
|
|
64
|
-
return decodeAttestedGateCurrent(current);
|
|
65
|
-
}
|
|
66
|
-
export function decodeGateReport(value) {
|
|
67
|
-
const record = object(value);
|
|
68
|
-
if (!("gate" in record) || !("current" in record))
|
|
69
|
-
fail();
|
|
70
|
-
for (const key of Object.keys(record))
|
|
71
|
-
if (key !== "gate" && key !== "current")
|
|
72
|
-
fail();
|
|
73
|
-
let decodedGate;
|
|
74
|
-
try {
|
|
75
|
-
if (typeof record.gate !== "string")
|
|
76
|
-
fail();
|
|
77
|
-
decodedGate = gate(record.gate);
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
fail();
|
|
81
|
-
}
|
|
82
|
-
return { gate: decodedGate, current: decodeGateCurrent(record.current) };
|
|
83
|
-
}
|
|
84
2
|
function staleReason(state, previous) {
|
|
85
3
|
const target = state.coordinates.target;
|
|
86
4
|
const currentChange = state.currentIntegration?.changeId ?? state.delivery?.data.integration.changeId;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { DecideInput, OfferDecision } from "../decide.js";
|
|
2
|
+
import { type ActiveContractRefusal } from "../facts/observation.js";
|
|
2
3
|
import { type ActorId, type ContractId } from "../facts/types.js";
|
|
3
4
|
export type AbandonInput = Readonly<{
|
|
4
5
|
contractId: ContractId;
|
|
@@ -6,9 +7,4 @@ export type AbandonInput = Readonly<{
|
|
|
6
7
|
at: string;
|
|
7
8
|
note?: string;
|
|
8
9
|
}>;
|
|
9
|
-
export
|
|
10
|
-
kind: "contract-missing" | "terminal";
|
|
11
|
-
contractId: ContractId;
|
|
12
|
-
}>;
|
|
13
|
-
export declare function decodeAbandonRefusal(value: unknown): AbandonRefusal;
|
|
14
|
-
export declare function decideAbandon({ input, attempt, observation, }: DecideInput<AbandonInput>): OfferDecision<AbandonRefusal>;
|
|
10
|
+
export declare function decideAbandon({ input, attempt, observation, }: DecideInput<AbandonInput>): OfferDecision<ActiveContractRefusal>;
|
|
@@ -1,20 +1,4 @@
|
|
|
1
1
|
import { activeContract } from "../facts/observation.js";
|
|
2
|
-
import { contractId } from "../facts/types.js";
|
|
3
|
-
export function decodeAbandonRefusal(value) {
|
|
4
|
-
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
5
|
-
throw new Error("malformed abandon refusal");
|
|
6
|
-
const object = value;
|
|
7
|
-
if (object.kind !== "contract-missing" && object.kind !== "terminal")
|
|
8
|
-
throw new Error("malformed abandon refusal");
|
|
9
|
-
if (Object.keys(object).some((key) => key !== "kind" && key !== "contractId"))
|
|
10
|
-
throw new Error("malformed abandon refusal");
|
|
11
|
-
try {
|
|
12
|
-
return { kind: object.kind, contractId: contractId(String(object.contractId)) };
|
|
13
|
-
}
|
|
14
|
-
catch {
|
|
15
|
-
throw new Error("malformed abandon refusal");
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
2
|
export function decideAbandon({ input, attempt, observation, }) {
|
|
19
3
|
const id = input.contractId;
|
|
20
4
|
const current = activeContract(observation, id);
|
|
@@ -11,5 +11,4 @@ export type AmendRefusal = Readonly<{
|
|
|
11
11
|
kind: "contract-missing" | "terminal" | "terms-moved" | "unknown-prerequisite" | "cyclic-prerequisite";
|
|
12
12
|
contractId: ContractId;
|
|
13
13
|
}>;
|
|
14
|
-
export declare function decodeAmendRefusal(value: unknown): AmendRefusal;
|
|
15
14
|
export declare function decideAmend<Failure>({ input, attempt, observation, }: DecideInput<AmendInput<Failure>>): OfferDecision<AmendRefusal | Failure>;
|
|
@@ -1,25 +1,5 @@
|
|
|
1
1
|
import { prerequisitesReach, samePrerequisites } from "../facts/eligibility.js";
|
|
2
2
|
import { activeContract, prerequisiteStatus } from "../facts/observation.js";
|
|
3
|
-
import { contractId, } from "../facts/types.js";
|
|
4
|
-
export function decodeAmendRefusal(value) {
|
|
5
|
-
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
6
|
-
throw new Error("malformed amend refusal");
|
|
7
|
-
const object = value;
|
|
8
|
-
if (object.kind !== "contract-missing" &&
|
|
9
|
-
object.kind !== "terminal" &&
|
|
10
|
-
object.kind !== "terms-moved" &&
|
|
11
|
-
object.kind !== "unknown-prerequisite" &&
|
|
12
|
-
object.kind !== "cyclic-prerequisite")
|
|
13
|
-
throw new Error("malformed amend refusal");
|
|
14
|
-
if (Object.keys(object).some((key) => key !== "kind" && key !== "contractId"))
|
|
15
|
-
throw new Error("malformed amend refusal");
|
|
16
|
-
try {
|
|
17
|
-
return { kind: object.kind, contractId: contractId(String(object.contractId)) };
|
|
18
|
-
}
|
|
19
|
-
catch {
|
|
20
|
-
throw new Error("malformed amend refusal");
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
3
|
export function decideAmend({ input, attempt, observation, }) {
|
|
24
4
|
const id = input.contractId;
|
|
25
5
|
const current = activeContract(observation, id);
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import type { DecideInput, OfferDecision } from "../decide.js";
|
|
2
|
-
import { type
|
|
2
|
+
import { type ActiveContractRefusal } from "../facts/observation.js";
|
|
3
|
+
import { type ActorId, type ContractId } from "../facts/types.js";
|
|
3
4
|
export type ArcInput = Readonly<{
|
|
4
5
|
contractId: ContractId;
|
|
5
6
|
actor?: ActorId;
|
|
6
7
|
at: string;
|
|
7
|
-
data: Readonly<
|
|
8
|
+
data: Readonly<{
|
|
9
|
+
title: string;
|
|
10
|
+
body: string;
|
|
11
|
+
}>;
|
|
8
12
|
}>;
|
|
9
|
-
export
|
|
10
|
-
kind: "contract-missing" | "terminal";
|
|
11
|
-
contractId: ContractId;
|
|
12
|
-
}>;
|
|
13
|
-
export declare function decodeArcRefusal(value: unknown): ArcRefusal;
|
|
14
|
-
export declare function decideArc({ input, attempt, observation }: DecideInput<ArcInput>): OfferDecision<ArcRefusal>;
|
|
13
|
+
export declare function decideArc({ input, attempt, observation, }: DecideInput<ArcInput>): OfferDecision<ActiveContractRefusal>;
|
|
@@ -1,21 +1,5 @@
|
|
|
1
1
|
import { activeContract } from "../facts/observation.js";
|
|
2
|
-
|
|
3
|
-
export function decodeArcRefusal(value) {
|
|
4
|
-
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
5
|
-
throw new Error("malformed arc refusal");
|
|
6
|
-
const object = value;
|
|
7
|
-
if (object.kind !== "contract-missing" && object.kind !== "terminal")
|
|
8
|
-
throw new Error("malformed arc refusal");
|
|
9
|
-
if (Object.keys(object).some((key) => key !== "kind" && key !== "contractId"))
|
|
10
|
-
throw new Error("malformed arc refusal");
|
|
11
|
-
try {
|
|
12
|
-
return { kind: object.kind, contractId: contractId(String(object.contractId)) };
|
|
13
|
-
}
|
|
14
|
-
catch {
|
|
15
|
-
throw new Error("malformed arc refusal");
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
export function decideArc({ input, attempt, observation }) {
|
|
2
|
+
export function decideArc({ input, attempt, observation, }) {
|
|
19
3
|
const id = input.contractId;
|
|
20
4
|
const current = activeContract(observation, id);
|
|
21
5
|
if ("kind" in current)
|
|
@@ -30,8 +14,7 @@ export function decideArc({ input, attempt, observation }) {
|
|
|
30
14
|
data: {
|
|
31
15
|
seq: (current.currentArc?.data.seq ?? 0) + 1,
|
|
32
16
|
title: input.data.title,
|
|
33
|
-
|
|
34
|
-
brief: input.data.brief,
|
|
17
|
+
body: input.data.body,
|
|
35
18
|
},
|
|
36
19
|
};
|
|
37
20
|
return {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { DecideInput, OfferDecision, Preparation } from "../decide.js";
|
|
2
|
+
import { type ActiveContractRefusal } from "../facts/observation.js";
|
|
2
3
|
import { type ActorId, type AttestationData, type ContractId } from "../facts/types.js";
|
|
3
4
|
export type AttestationInput<Failure = never> = Readonly<{
|
|
4
5
|
contractId: ContractId;
|
|
@@ -6,9 +7,4 @@ export type AttestationInput<Failure = never> = Readonly<{
|
|
|
6
7
|
at: string;
|
|
7
8
|
preparation?: Preparation<AttestationData, Failure>;
|
|
8
9
|
}>;
|
|
9
|
-
export
|
|
10
|
-
kind: "contract-missing" | "terminal";
|
|
11
|
-
contractId: ContractId;
|
|
12
|
-
}>;
|
|
13
|
-
export declare function decodeAttestationRefusal(value: unknown): AttestationRefusal;
|
|
14
|
-
export declare function decideAttestation<Failure>({ input, attempt, observation, }: DecideInput<AttestationInput<Failure>>): OfferDecision<AttestationRefusal | Failure>;
|
|
10
|
+
export declare function decideAttestation<Failure>({ input, attempt, observation, }: DecideInput<AttestationInput<Failure>>): OfferDecision<ActiveContractRefusal | Failure>;
|
|
@@ -1,20 +1,4 @@
|
|
|
1
1
|
import { activeContract } from "../facts/observation.js";
|
|
2
|
-
import { contractId } from "../facts/types.js";
|
|
3
|
-
export function decodeAttestationRefusal(value) {
|
|
4
|
-
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
5
|
-
throw new Error("malformed attestation refusal");
|
|
6
|
-
const object = value;
|
|
7
|
-
if (object.kind !== "contract-missing" && object.kind !== "terminal")
|
|
8
|
-
throw new Error("malformed attestation refusal");
|
|
9
|
-
if (Object.keys(object).some((key) => key !== "kind" && key !== "contractId"))
|
|
10
|
-
throw new Error("malformed attestation refusal");
|
|
11
|
-
try {
|
|
12
|
-
return { kind: object.kind, contractId: contractId(String(object.contractId)) };
|
|
13
|
-
}
|
|
14
|
-
catch {
|
|
15
|
-
throw new Error("malformed attestation refusal");
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
2
|
export function decideAttestation({ input, attempt, observation, }) {
|
|
19
3
|
const state = activeContract(observation, input.contractId);
|
|
20
4
|
if ("kind" in state)
|
|
@@ -10,5 +10,4 @@ export type BindRefusal = Readonly<{
|
|
|
10
10
|
kind: "contract-exists" | "invalid-after" | "unknown-prerequisite";
|
|
11
11
|
contractId: ContractId;
|
|
12
12
|
}>;
|
|
13
|
-
export declare function decodeBindRefusal(value: unknown): BindRefusal;
|
|
14
13
|
export declare function decideBind<Failure>({ input, attempt, observation, }: DecideInput<BindInput<Failure>>): OfferDecision<BindRefusal | Failure>;
|
|
@@ -1,20 +1,4 @@
|
|
|
1
1
|
import { contractState, prerequisiteStatus } from "../facts/observation.js";
|
|
2
|
-
import { contractId } from "../facts/types.js";
|
|
3
|
-
export function decodeBindRefusal(value) {
|
|
4
|
-
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
5
|
-
throw new Error("malformed bind refusal");
|
|
6
|
-
const object = value;
|
|
7
|
-
if (object.kind !== "contract-exists" && object.kind !== "invalid-after" && object.kind !== "unknown-prerequisite")
|
|
8
|
-
throw new Error("malformed bind refusal");
|
|
9
|
-
if (Object.keys(object).some((key) => key !== "kind" && key !== "contractId"))
|
|
10
|
-
throw new Error("malformed bind refusal");
|
|
11
|
-
try {
|
|
12
|
-
return { kind: object.kind, contractId: contractId(String(object.contractId)) };
|
|
13
|
-
}
|
|
14
|
-
catch {
|
|
15
|
-
throw new Error("malformed bind refusal");
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
2
|
export function decideBind({ input, attempt, observation, }) {
|
|
19
3
|
const id = input.contractId;
|
|
20
4
|
const current = contractState(observation, id);
|
|
@@ -10,5 +10,4 @@ export type DeliverRefusal = Readonly<{
|
|
|
10
10
|
kind: "contract-missing" | "terminal" | "document-moved";
|
|
11
11
|
contractId: ContractId;
|
|
12
12
|
}>;
|
|
13
|
-
export declare function decodeDeliverRefusal(value: unknown): DeliverRefusal;
|
|
14
13
|
export declare function decideDeliver<Failure>({ input, attempt, observation, }: DecideInput<DeliverInput<Failure>>): OfferDecision<DeliverRefusal | Failure>;
|
|
@@ -1,20 +1,4 @@
|
|
|
1
1
|
import { activeContract, documentIsCurrent } from "../facts/observation.js";
|
|
2
|
-
import { contractId } from "../facts/types.js";
|
|
3
|
-
export function decodeDeliverRefusal(value) {
|
|
4
|
-
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
5
|
-
throw new Error("malformed deliver refusal");
|
|
6
|
-
const object = value;
|
|
7
|
-
if (object.kind !== "contract-missing" && object.kind !== "terminal" && object.kind !== "document-moved")
|
|
8
|
-
throw new Error("malformed deliver refusal");
|
|
9
|
-
if (Object.keys(object).some((key) => key !== "kind" && key !== "contractId"))
|
|
10
|
-
throw new Error("malformed deliver refusal");
|
|
11
|
-
try {
|
|
12
|
-
return { kind: object.kind, contractId: contractId(String(object.contractId)) };
|
|
13
|
-
}
|
|
14
|
-
catch {
|
|
15
|
-
throw new Error("malformed deliver refusal");
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
2
|
export function decideDeliver({ input, attempt, observation, }) {
|
|
19
3
|
const state = activeContract(observation, input.contractId);
|
|
20
4
|
if ("kind" in state)
|
|
@@ -17,11 +17,12 @@ export type PlacementRefusal = Readonly<{
|
|
|
17
17
|
kind: "gates-unsatisfied";
|
|
18
18
|
contractId: ContractId;
|
|
19
19
|
unmet: readonly GateReport[];
|
|
20
|
+
/** The reference the refused placement attempted to advance, when the Contract has one. */
|
|
21
|
+
target?: string;
|
|
20
22
|
}> | Readonly<{
|
|
21
23
|
kind: "prerequisites-unsatisfied";
|
|
22
24
|
contractId: ContractId;
|
|
23
25
|
unmet: readonly UnmetPrerequisite[];
|
|
24
26
|
}>;
|
|
25
|
-
export declare function decodePlacementRefusal(value: unknown): PlacementRefusal;
|
|
26
27
|
export declare function decidePlacement({ input, attempt, observation, }: DecideInput<PlacementInput>): OfferDecision<PlacementRefusal>;
|
|
27
28
|
export {};
|
|
@@ -1,62 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { gateReports } from "../facts/gate.js";
|
|
2
2
|
import { activeContract, contractState } from "../facts/observation.js";
|
|
3
|
-
import { contractId } from "../facts/types.js";
|
|
4
|
-
export function decodePlacementRefusal(value) {
|
|
5
|
-
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
6
|
-
throw new Error("malformed placement refusal");
|
|
7
|
-
const object = value;
|
|
8
|
-
if (object.kind === "contract-missing" || object.kind === "delivery-missing" || object.kind === "terminal") {
|
|
9
|
-
if (Object.keys(object).some((key) => key !== "kind" && key !== "contractId"))
|
|
10
|
-
throw new Error("malformed placement refusal");
|
|
11
|
-
try {
|
|
12
|
-
return { kind: object.kind, contractId: contractId(String(object.contractId)) };
|
|
13
|
-
}
|
|
14
|
-
catch {
|
|
15
|
-
throw new Error("malformed placement refusal");
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
if (object.kind === "gates-unsatisfied") {
|
|
19
|
-
if (Object.keys(object).some((key) => key !== "kind" && key !== "contractId" && key !== "unmet"))
|
|
20
|
-
throw new Error("malformed placement refusal");
|
|
21
|
-
if (!Array.isArray(object.unmet))
|
|
22
|
-
throw new Error("malformed placement refusal");
|
|
23
|
-
try {
|
|
24
|
-
return {
|
|
25
|
-
kind: "gates-unsatisfied",
|
|
26
|
-
contractId: contractId(String(object.contractId)),
|
|
27
|
-
unmet: object.unmet.map(decodeGateReport),
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
throw new Error("malformed placement refusal");
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
if (object.kind !== "prerequisites-unsatisfied")
|
|
35
|
-
throw new Error("malformed placement refusal");
|
|
36
|
-
if (Object.keys(object).some((key) => key !== "kind" && key !== "contractId" && key !== "unmet"))
|
|
37
|
-
throw new Error("malformed placement refusal");
|
|
38
|
-
if (!Array.isArray(object.unmet))
|
|
39
|
-
throw new Error("malformed placement refusal");
|
|
40
|
-
try {
|
|
41
|
-
return {
|
|
42
|
-
kind: "prerequisites-unsatisfied",
|
|
43
|
-
contractId: contractId(String(object.contractId)),
|
|
44
|
-
unmet: object.unmet.map((item) => {
|
|
45
|
-
if (item === null || typeof item !== "object" || Array.isArray(item))
|
|
46
|
-
throw new Error("malformed placement refusal");
|
|
47
|
-
const unmet = item;
|
|
48
|
-
if (Object.keys(unmet).some((key) => key !== "contractId" && key !== "state"))
|
|
49
|
-
throw new Error("malformed placement refusal");
|
|
50
|
-
if (unmet.state !== "missing" && unmet.state !== "active" && unmet.state !== "abandoned")
|
|
51
|
-
throw new Error("malformed placement refusal");
|
|
52
|
-
return { contractId: contractId(String(unmet.contractId)), state: unmet.state };
|
|
53
|
-
}),
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
catch {
|
|
57
|
-
throw new Error("malformed placement refusal");
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
3
|
function unmetPrerequisites(prerequisites, observation) {
|
|
61
4
|
const unmet = [];
|
|
62
5
|
for (const contractId of prerequisites) {
|
|
@@ -90,7 +33,15 @@ export function decidePlacement({ input, attempt, observation, }) {
|
|
|
90
33
|
const gates = gateReports(current);
|
|
91
34
|
if (!gates.satisfied) {
|
|
92
35
|
const unmetGates = gates.reports.filter((report) => report.current.kind !== "attested" || report.current.verdict !== "satisfied");
|
|
93
|
-
return {
|
|
36
|
+
return {
|
|
37
|
+
kind: "refused",
|
|
38
|
+
refusal: {
|
|
39
|
+
kind: "gates-unsatisfied",
|
|
40
|
+
contractId: id,
|
|
41
|
+
unmet: unmetGates,
|
|
42
|
+
...(current.coordinates.target === undefined ? {} : { target: current.coordinates.target }),
|
|
43
|
+
},
|
|
44
|
+
};
|
|
94
45
|
}
|
|
95
46
|
const claimed = {
|
|
96
47
|
v: 1,
|