pi-daddy 0.28.0 → 0.32.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +108 -124
- package/README.md +18 -896
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/contracts/ledger-record/v1/README.md +44 -0
- package/contracts/ledger-record/v1/fixtures/child-lifecycle.json +45 -0
- package/contracts/ledger-record/v1/fixtures/ledger-record.jsonl +3 -0
- package/contracts/ledger-record/v1/governance-event.schema.json +747 -0
- package/contracts/ledger-record/v1/record.schema.json +91 -0
- package/dist/cli.d.ts +10 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +120 -106
- package/dist/cli.js.map +1 -1
- package/dist/executors/activity-session.d.ts +12 -0
- package/dist/executors/activity-session.d.ts.map +1 -0
- package/dist/executors/activity-session.js +43 -0
- package/dist/executors/activity-session.js.map +1 -0
- package/dist/executors/executor.d.ts +39 -0
- package/dist/executors/executor.d.ts.map +1 -0
- package/dist/executors/executor.js +95 -0
- package/dist/executors/executor.js.map +1 -0
- package/dist/executors/herdr-cli.d.ts +78 -0
- package/dist/executors/herdr-cli.d.ts.map +1 -0
- package/dist/executors/herdr-cli.js +114 -0
- package/dist/executors/herdr-cli.js.map +1 -0
- package/dist/executors/herdr-name.d.ts.map +1 -0
- package/dist/executors/herdr-name.js.map +1 -0
- package/dist/executors/herdr-pi-lifecycle.d.ts.map +1 -0
- package/dist/executors/herdr-pi-lifecycle.js +22 -0
- package/dist/executors/herdr-pi-lifecycle.js.map +1 -0
- package/dist/executors/herdr-poll.d.ts +140 -0
- package/dist/executors/herdr-poll.d.ts.map +1 -0
- package/dist/executors/herdr-poll.js +252 -0
- package/dist/executors/herdr-poll.js.map +1 -0
- package/dist/executors/herdr-stage.d.ts +40 -0
- package/dist/executors/herdr-stage.d.ts.map +1 -0
- package/dist/executors/herdr-stage.js +54 -0
- package/dist/executors/herdr-stage.js.map +1 -0
- package/dist/executors/herdr-start.d.ts.map +1 -0
- package/dist/executors/herdr-start.js.map +1 -0
- package/dist/executors/native-session-target.d.ts +9 -0
- package/dist/executors/native-session-target.d.ts.map +1 -0
- package/dist/executors/native-session-target.js +30 -0
- package/dist/executors/native-session-target.js.map +1 -0
- package/dist/executors/pane-reaper.d.ts +111 -0
- package/dist/executors/pane-reaper.d.ts.map +1 -0
- package/dist/executors/pane-reaper.js +242 -0
- package/dist/executors/pane-reaper.js.map +1 -0
- package/dist/executors/process-activity.d.ts +3 -0
- package/dist/executors/process-activity.d.ts.map +1 -0
- package/dist/executors/process-activity.js +59 -0
- package/dist/executors/process-activity.js.map +1 -0
- package/dist/executors/run-herdr.d.ts +122 -0
- package/dist/executors/run-herdr.d.ts.map +1 -0
- package/dist/executors/run-herdr.js +341 -0
- package/dist/executors/run-herdr.js.map +1 -0
- package/dist/executors/vendor/herdr-pi-lifecycle.d.ts.map +1 -0
- package/dist/executors/vendor/herdr-pi-lifecycle.js.map +1 -0
- package/dist/governance/approval-prompt.d.ts +119 -0
- package/dist/governance/approval-prompt.d.ts.map +1 -0
- package/dist/governance/approval-prompt.js +133 -0
- package/dist/governance/approval-prompt.js.map +1 -0
- package/dist/governance/approval-store.d.ts +149 -0
- package/dist/governance/approval-store.d.ts.map +1 -0
- package/dist/governance/approval-store.js +309 -0
- package/dist/governance/approval-store.js.map +1 -0
- package/dist/governance/execution-retention.d.ts +90 -0
- package/dist/governance/execution-retention.d.ts.map +1 -0
- package/dist/governance/execution-retention.js +317 -0
- package/dist/governance/execution-retention.js.map +1 -0
- package/dist/governance/file-lock.d.ts.map +1 -0
- package/dist/governance/file-lock.js +205 -0
- package/dist/governance/file-lock.js.map +1 -0
- package/dist/governance/finalization.d.ts.map +1 -0
- package/dist/governance/finalization.js.map +1 -0
- package/dist/governance/grant-store.d.ts +96 -0
- package/dist/governance/grant-store.d.ts.map +1 -0
- package/dist/governance/grant-store.js +186 -0
- package/dist/governance/grant-store.js.map +1 -0
- package/dist/governance/init.d.ts +129 -0
- package/dist/governance/init.d.ts.map +1 -0
- package/dist/governance/init.js +360 -0
- package/dist/governance/init.js.map +1 -0
- package/dist/governance/lease-helper.d.ts.map +1 -0
- package/dist/governance/lease-helper.js +121 -0
- package/dist/governance/lease-helper.js.map +1 -0
- package/dist/governance/lease-record.d.ts +90 -0
- package/dist/governance/lease-record.d.ts.map +1 -0
- package/dist/governance/lease-record.js.map +1 -0
- package/dist/governance/ledger-events.d.ts +111 -0
- package/dist/governance/ledger-events.d.ts.map +1 -0
- package/dist/governance/ledger-events.js +129 -0
- package/dist/governance/ledger-events.js.map +1 -0
- package/dist/governance/ledger-report.d.ts +134 -0
- package/dist/governance/ledger-report.d.ts.map +1 -0
- package/dist/governance/ledger-report.js +294 -0
- package/dist/governance/ledger-report.js.map +1 -0
- package/dist/governance/ledger-v3-validation.d.ts +21 -0
- package/dist/governance/ledger-v3-validation.d.ts.map +1 -0
- package/dist/governance/ledger-v3-validation.js +353 -0
- package/dist/governance/ledger-v3-validation.js.map +1 -0
- package/dist/governance/ledger.d.ts +258 -0
- package/dist/governance/ledger.d.ts.map +1 -0
- package/dist/governance/ledger.js +201 -0
- package/dist/governance/ledger.js.map +1 -0
- package/dist/governance/native-session.d.ts +59 -0
- package/dist/governance/native-session.d.ts.map +1 -0
- package/dist/governance/native-session.js +208 -0
- package/dist/governance/native-session.js.map +1 -0
- package/dist/governance/record.d.ts +65 -0
- package/dist/governance/record.d.ts.map +1 -0
- package/dist/governance/record.js +259 -0
- package/dist/governance/record.js.map +1 -0
- package/dist/governance/retention-contract.d.ts.map +1 -0
- package/dist/governance/retention-contract.js +187 -0
- package/dist/governance/retention-contract.js.map +1 -0
- package/dist/governance/retention-json.d.ts.map +1 -0
- package/dist/governance/retention-json.js.map +1 -0
- package/dist/governance/workspace-lease.d.ts +40 -0
- package/dist/governance/workspace-lease.d.ts.map +1 -0
- package/dist/governance/workspace-lease.js +357 -0
- package/dist/governance/workspace-lease.js.map +1 -0
- package/dist/index.d.ts +59 -42
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +61 -42
- package/dist/index.js.map +1 -1
- package/dist/kernel/approval.d.ts +241 -0
- package/dist/kernel/approval.d.ts.map +1 -0
- package/dist/kernel/approval.js +270 -0
- package/dist/kernel/approval.js.map +1 -0
- package/dist/kernel/capabilities.d.ts +136 -0
- package/dist/kernel/capabilities.d.ts.map +1 -0
- package/dist/kernel/capabilities.js +199 -0
- package/dist/kernel/capabilities.js.map +1 -0
- package/dist/kernel/catalog.d.ts +125 -0
- package/dist/kernel/catalog.d.ts.map +1 -0
- package/dist/kernel/catalog.js +338 -0
- package/dist/kernel/catalog.js.map +1 -0
- package/dist/kernel/chain.d.ts.map +1 -0
- package/dist/kernel/chain.js.map +1 -0
- package/dist/kernel/correlation.d.ts.map +1 -0
- package/dist/kernel/correlation.js +267 -0
- package/dist/kernel/correlation.js.map +1 -0
- package/dist/kernel/definitions.d.ts.map +1 -0
- package/dist/kernel/definitions.js +164 -0
- package/dist/kernel/definitions.js.map +1 -0
- package/dist/kernel/delegate-types.d.ts +160 -0
- package/dist/kernel/delegate-types.d.ts.map +1 -0
- package/dist/kernel/delegate-types.js +9 -0
- package/dist/kernel/delegate-types.js.map +1 -0
- package/dist/kernel/delegate.d.ts.map +1 -0
- package/dist/kernel/delegate.js +320 -0
- package/dist/kernel/delegate.js.map +1 -0
- package/dist/kernel/delegation-approval.d.ts.map +1 -0
- package/dist/kernel/delegation-approval.js +93 -0
- package/dist/kernel/delegation-approval.js.map +1 -0
- package/dist/kernel/env-names.d.ts +51 -0
- package/dist/kernel/env-names.d.ts.map +1 -0
- package/dist/kernel/env-names.js +112 -0
- package/dist/kernel/env-names.js.map +1 -0
- package/dist/kernel/execution-id.d.ts.map +1 -0
- package/dist/kernel/execution-id.js.map +1 -0
- package/dist/kernel/fanout.d.ts.map +1 -0
- package/dist/kernel/fanout.js +93 -0
- package/dist/kernel/fanout.js.map +1 -0
- package/dist/kernel/grant-env.d.ts +118 -0
- package/dist/kernel/grant-env.d.ts.map +1 -0
- package/dist/kernel/grant-env.js +104 -0
- package/dist/kernel/grant-env.js.map +1 -0
- package/dist/kernel/ledger-identifiers.d.ts.map +1 -0
- package/dist/kernel/ledger-identifiers.js.map +1 -0
- package/dist/kernel/model-preflight.d.ts +13 -0
- package/dist/kernel/model-preflight.d.ts.map +1 -0
- package/dist/kernel/model-preflight.js +30 -0
- package/dist/kernel/model-preflight.js.map +1 -0
- package/dist/kernel/pi-tools.d.ts.map +1 -0
- package/dist/kernel/pi-tools.js +29 -0
- package/dist/kernel/pi-tools.js.map +1 -0
- package/dist/kernel/progress.d.ts.map +1 -0
- package/dist/kernel/progress.js.map +1 -0
- package/dist/kernel/project-paths.d.ts +43 -0
- package/dist/kernel/project-paths.d.ts.map +1 -0
- package/dist/kernel/project-paths.js +81 -0
- package/dist/kernel/project-paths.js.map +1 -0
- package/dist/kernel/propagation.d.ts +195 -0
- package/dist/kernel/propagation.d.ts.map +1 -0
- package/dist/kernel/propagation.js +275 -0
- package/dist/kernel/propagation.js.map +1 -0
- package/dist/kernel/refusals.d.ts +16 -0
- package/dist/kernel/refusals.d.ts.map +1 -0
- package/dist/kernel/refusals.js +53 -0
- package/dist/kernel/refusals.js.map +1 -0
- package/dist/kernel/resolve.d.ts +120 -0
- package/dist/kernel/resolve.d.ts.map +1 -0
- package/dist/kernel/resolve.js +201 -0
- package/dist/kernel/resolve.js.map +1 -0
- package/dist/kernel/routing-authority.d.ts +71 -0
- package/dist/kernel/routing-authority.d.ts.map +1 -0
- package/dist/kernel/routing-authority.js +100 -0
- package/dist/kernel/routing-authority.js.map +1 -0
- package/dist/kernel/run-child.d.ts +111 -0
- package/dist/kernel/run-child.d.ts.map +1 -0
- package/dist/kernel/run-child.js +324 -0
- package/dist/kernel/run-child.js.map +1 -0
- package/dist/kernel/skill-packages.d.ts +116 -0
- package/dist/kernel/skill-packages.d.ts.map +1 -0
- package/dist/kernel/skill-packages.js +300 -0
- package/dist/kernel/skill-packages.js.map +1 -0
- package/dist/kernel/skill-resources.d.ts.map +1 -0
- package/dist/kernel/skill-resources.js +56 -0
- package/dist/kernel/skill-resources.js.map +1 -0
- package/dist/kernel/spawn.d.ts +60 -0
- package/dist/kernel/spawn.d.ts.map +1 -0
- package/dist/kernel/spawn.js +116 -0
- package/dist/kernel/spawn.js.map +1 -0
- package/dist/kernel/workspace.d.ts +51 -0
- package/dist/kernel/workspace.d.ts.map +1 -0
- package/dist/kernel/workspace.js +223 -0
- package/dist/kernel/workspace.js.map +1 -0
- package/dist/products/activity-timeline.d.ts +126 -0
- package/dist/products/activity-timeline.d.ts.map +1 -0
- package/dist/products/activity-timeline.js +542 -0
- package/dist/products/activity-timeline.js.map +1 -0
- package/dist/products/dashboard-cli.d.ts +26 -0
- package/dist/products/dashboard-cli.d.ts.map +1 -0
- package/dist/products/dashboard-cli.js +224 -0
- package/dist/products/dashboard-cli.js.map +1 -0
- package/dist/products/dashboard-display-controls.d.ts +17 -0
- package/dist/products/dashboard-display-controls.d.ts.map +1 -0
- package/dist/products/dashboard-display-controls.js +38 -0
- package/dist/products/dashboard-display-controls.js.map +1 -0
- package/dist/products/dashboard-handshake.d.ts +42 -0
- package/dist/products/dashboard-handshake.d.ts.map +1 -0
- package/dist/products/dashboard-handshake.js +158 -0
- package/dist/products/dashboard-handshake.js.map +1 -0
- package/dist/products/dashboard-herdr.d.ts +55 -0
- package/dist/products/dashboard-herdr.d.ts.map +1 -0
- package/dist/products/dashboard-herdr.js +324 -0
- package/dist/products/dashboard-herdr.js.map +1 -0
- package/dist/products/dashboard-projection.d.ts +62 -0
- package/dist/products/dashboard-projection.d.ts.map +1 -0
- package/dist/products/dashboard-projection.js +305 -0
- package/dist/products/dashboard-projection.js.map +1 -0
- package/dist/products/dashboard-render.d.ts.map +1 -0
- package/dist/products/dashboard-render.js +208 -0
- package/dist/products/dashboard-render.js.map +1 -0
- package/extensions/activity-timeline.ts +134 -28
- package/extensions/approval-banking.ts +3 -3
- package/extensions/approvals.ts +18 -12
- package/extensions/chain-approval-facts.ts +9 -6
- package/extensions/chain-ledger.ts +4 -4
- package/extensions/chain-plan.ts +6 -6
- package/extensions/correlation-shape.ts +42 -33
- package/extensions/delegate-chain.ts +93 -45
- package/extensions/delegation-authority.ts +7 -3
- package/extensions/delegation-ledger.ts +2 -2
- package/extensions/delegation-native.ts +24 -7
- package/extensions/delegation.ts +91 -80
- package/extensions/execute-child.ts +440 -293
- package/extensions/execution-occurrence.ts +2 -2
- package/extensions/executor-session.ts +5 -5
- package/extensions/fanout-outcome.ts +8 -6
- package/extensions/grant-store-refusal.ts +24 -12
- package/extensions/grants-command.ts +42 -34
- package/extensions/grants-connected-command.ts +29 -15
- package/extensions/grants.ts +73 -73
- package/extensions/init-command.ts +18 -12
- package/extensions/reload-environment.ts +12 -5
- package/extensions/run-delegation.ts +29 -19
- package/extensions/session-environment.ts +25 -11
- package/extensions/session-report.ts +61 -12
- package/extensions/session.ts +58 -34
- package/extensions/spawn-summary.ts +5 -5
- package/extensions/stored-grant-session.ts +5 -5
- package/extensions/tripwire.ts +1 -1
- package/extensions/workspace-runtime.ts +26 -24
- package/herdr-plugin/herdr-plugin.toml +1 -1
- package/package.json +4 -211
- package/src/cli.ts +149 -92
- package/src/executors/activity-session.ts +54 -0
- package/src/executors/executor.ts +123 -0
- package/src/executors/herdr-cli.ts +132 -0
- package/src/executors/herdr-pi-lifecycle.ts +21 -0
- package/src/executors/herdr-poll.ts +305 -0
- package/src/executors/herdr-stage.ts +55 -0
- package/src/executors/native-session-target.ts +31 -0
- package/src/executors/pane-reaper.ts +270 -0
- package/src/executors/process-activity.ts +54 -0
- package/src/executors/run-herdr.ts +426 -0
- package/src/governance/approval-prompt.ts +225 -0
- package/src/governance/approval-store.ts +385 -0
- package/src/governance/execution-retention.ts +372 -0
- package/src/governance/file-lock.ts +210 -0
- package/src/governance/finalization.ts +82 -0
- package/src/governance/grant-store.ts +235 -0
- package/src/governance/init.ts +447 -0
- package/src/governance/lease-helper.ts +124 -0
- package/src/governance/lease-record.ts +131 -0
- package/src/governance/ledger-events.ts +222 -0
- package/src/governance/ledger-report.ts +396 -0
- package/src/governance/ledger-v3-validation.ts +384 -0
- package/src/governance/ledger.ts +419 -0
- package/src/governance/native-session.ts +264 -0
- package/src/governance/record.ts +294 -0
- package/src/governance/retention-contract.ts +201 -0
- package/src/governance/retention-json.ts +24 -0
- package/src/governance/workspace-lease.ts +429 -0
- package/src/index.ts +82 -92
- package/src/kernel/approval.ts +406 -0
- package/src/kernel/capabilities.ts +216 -0
- package/src/kernel/catalog.ts +373 -0
- package/src/kernel/correlation.ts +351 -0
- package/src/kernel/definitions.ts +215 -0
- package/src/kernel/delegate-types.ts +162 -0
- package/src/kernel/delegate.ts +375 -0
- package/src/kernel/delegation-approval.ts +126 -0
- package/src/kernel/env-names.ts +119 -0
- package/src/kernel/fanout.ts +106 -0
- package/src/kernel/grant-env.ts +174 -0
- package/src/kernel/model-preflight.ts +44 -0
- package/src/kernel/pi-tools.ts +32 -0
- package/src/kernel/project-paths.ts +97 -0
- package/src/kernel/propagation.ts +341 -0
- package/src/kernel/refusals.ts +64 -0
- package/src/kernel/resolve.ts +258 -0
- package/src/kernel/routing-authority.ts +121 -0
- package/src/kernel/run-child.ts +418 -0
- package/src/kernel/skill-packages.ts +329 -0
- package/src/kernel/skill-resources.ts +64 -0
- package/src/kernel/spawn.ts +156 -0
- package/src/kernel/workspace.ts +336 -0
- package/src/products/activity-timeline.ts +679 -0
- package/src/products/dashboard-cli.ts +250 -0
- package/src/products/dashboard-display-controls.ts +44 -0
- package/src/products/dashboard-handshake.ts +222 -0
- package/src/products/dashboard-herdr.ts +427 -0
- package/src/products/dashboard-projection.ts +389 -0
- package/src/products/dashboard-render.ts +260 -0
- package/PRODUCT-GUIDE.md +0 -155
- package/REQUIREMENTS.md +0 -41
- package/contracts/daily-view/v1/README.md +0 -114
- package/contracts/daily-view/v1/fixtures/view.json +0 -525
- package/contracts/daily-view/v1/fixtures/view.txt +0 -75
- package/contracts/daily-view/v1/fixtures/work.jsonl +0 -17
- package/contracts/daily-view/v1/p03/README.md +0 -26
- package/contracts/daily-view/v1/p03/fixtures/retained-executions.json +0 -241
- package/contracts/daily-view/v1/p03/projection.schema.json +0 -194
- package/contracts/daily-view/v1/p03/provenance.json +0 -21
- package/contracts/dashboard-host/v1/README.md +0 -176
- package/contracts/debrief/v1/README.md +0 -146
- package/contracts/debrief/v1/intervention/README.md +0 -32
- package/contracts/debrief/v1/intervention/fixtures/artifact-3ee11136beb864f518252e5024dae9197421fbf97b6e981d3243c782b5c44bd0.txt +0 -1
- package/contracts/debrief/v1/intervention/fixtures/artifact-58905d872dd3c54a9705f67b05fa82edbad7af6476ae8993faf1a7b9fadfb905.txt +0 -1
- package/contracts/debrief/v1/intervention/fixtures/assessment.json +0 -29
- package/contracts/debrief/v1/intervention/fixtures/blind-view.json +0 -20
- package/contracts/debrief/v1/intervention/fixtures/choice.json +0 -7
- package/contracts/debrief/v1/intervention/fixtures/manifest.json +0 -57
- package/contracts/debrief/v1/intervention/fixtures/reveal.json +0 -39
- package/contracts/debrief/v1/provenance.json +0 -89
- package/contracts/debrief/v1/work-capture/README.md +0 -38
- package/contracts/debrief/v1/work-capture/fixtures/batch.json +0 -17
- package/contracts/debrief/v1/work-capture/fixtures/cases.json +0 -184
- package/contracts/debrief/v1/work-capture/fixtures/review.json +0 -184
- package/contracts/debrief/v1/work-capture/review-request.schema.json +0 -41
- package/contracts/debrief/v1/work-capture/work-case.schema.json +0 -190
- package/contracts/debrief/v2/README.md +0 -71
- package/contracts/debrief/v2/input-pin.json +0 -66
- package/contracts/debrief/v2/intervention-upstream.md +0 -40
- package/contracts/debrief/v2/work-signals-upstream.md +0 -22
- package/contracts/dispatch-control/v1/README.md +0 -109
- package/contracts/dispatch-control/v1/request.schema.json +0 -19
- package/contracts/effect-profile/v1/README.md +0 -124
- package/contracts/execution-retention/v1/README.md +0 -109
- package/contracts/execution-retention/v2/README.md +0 -148
- package/contracts/execution-retention/v2/fixtures/interrupted-native-bytes.json +0 -91
- package/contracts/execution-retention/v2/fixtures/missing-native-session.json +0 -91
- package/contracts/execution-retention/v2/fixtures/native-file-unknown-branch.json +0 -91
- package/contracts/execution-retention/v2/fixtures/native-id-without-bytes.json +0 -91
- package/contracts/execution-retention/v2/fixtures/native-live-branch.json +0 -90
- package/contracts/execution-retention/v2/fixtures/replaced-native-session.json +0 -92
- package/contracts/execution-retention/v2/fixtures/result-82c620cdfeb8ca6b858cf653d7f5e2eedca5315d6244216d60e8b36f03223d6a.bin +0 -1
- package/contracts/execution-retention/v2/fixtures/session-2ec1f134bc739984434f7fca689e1c3d1c39fce2dcadae709e9b6faedfcc4ac7.bin +0 -3
- package/contracts/execution-retention/v2/fixtures/session-9bdb4bd16a901da31580acf056bda525225259e15ec409e0410480109011772f.bin +0 -3
- package/contracts/execution-retention/v2/manifest.schema.json +0 -858
- package/contracts/experiment/v1/README.md +0 -164
- package/contracts/factory-order/v1/README.md +0 -151
- package/contracts/factory-order/v1/adoption-pin.json +0 -8
- package/contracts/intent-control/v1/README.md +0 -135
- package/contracts/intent-control/v1/request.schema.json +0 -1096
- package/contracts/intent-control/v2/README.md +0 -34
- package/contracts/intent-control/v2/request.schema.json +0 -1070
- package/contracts/ledger/v2/README.md +0 -59
- package/contracts/ledger/v2/fixtures/capability-decision.json +0 -95
- package/contracts/ledger/v2/fixtures/check-receipt.json +0 -40
- package/contracts/ledger/v2/fixtures/child-lifecycle.json +0 -42
- package/contracts/ledger/v2/fixtures/workspace-lease.json +0 -41
- package/contracts/ledger/v2/ledger-event.schema.json +0 -633
- package/contracts/ledger/v3/README.md +0 -36
- package/contracts/ledger/v3/fixtures/check-receipt.json +0 -41
- package/contracts/ledger/v3/fixtures/child-lifecycle.json +0 -44
- package/contracts/ledger/v3/fixtures/workflow-fact.json +0 -40
- package/contracts/ledger/v3/ledger-event.schema.json +0 -955
- package/contracts/ledger/v4/README.md +0 -241
- package/contracts/ledger/v4/fixtures/layout-options.json +0 -428
- package/contracts/ledger/v4/fixtures/work-acceptance.json +0 -57
- package/contracts/ledger/v4/fixtures/work-occurrence.json +0 -44
- package/contracts/ledger/v4/fixtures/work-revision.json +0 -26
- package/contracts/ledger/v4/fixtures/work-snapshot.json +0 -73
- package/contracts/ledger/v4/ledger-event.schema.json +0 -162
- package/contracts/ordinary-control/v1/README.md +0 -59
- package/contracts/producer-ipc/v1/README.md +0 -137
- package/dist/activity-timeline.d.ts +0 -109
- package/dist/activity-timeline.d.ts.map +0 -1
- package/dist/activity-timeline.js +0 -208
- package/dist/activity-timeline.js.map +0 -1
- package/dist/approval-prompt.d.ts +0 -119
- package/dist/approval-prompt.d.ts.map +0 -1
- package/dist/approval-prompt.js +0 -133
- package/dist/approval-prompt.js.map +0 -1
- package/dist/approval-store.d.ts +0 -149
- package/dist/approval-store.d.ts.map +0 -1
- package/dist/approval-store.js +0 -314
- package/dist/approval-store.js.map +0 -1
- package/dist/approval.d.ts +0 -241
- package/dist/approval.d.ts.map +0 -1
- package/dist/approval.js +0 -268
- package/dist/approval.js.map +0 -1
- package/dist/capabilities.d.ts +0 -136
- package/dist/capabilities.d.ts.map +0 -1
- package/dist/capabilities.js +0 -203
- package/dist/capabilities.js.map +0 -1
- package/dist/catalog.d.ts +0 -98
- package/dist/catalog.d.ts.map +0 -1
- package/dist/catalog.js +0 -273
- package/dist/catalog.js.map +0 -1
- package/dist/chain.d.ts.map +0 -1
- package/dist/chain.js.map +0 -1
- package/dist/check-runner.d.ts +0 -66
- package/dist/check-runner.d.ts.map +0 -1
- package/dist/check-runner.js +0 -275
- package/dist/check-runner.js.map +0 -1
- package/dist/control-journal.d.ts +0 -20
- package/dist/control-journal.d.ts.map +0 -1
- package/dist/control-journal.js +0 -73
- package/dist/control-journal.js.map +0 -1
- package/dist/correlation.d.ts.map +0 -1
- package/dist/correlation.js +0 -231
- package/dist/correlation.js.map +0 -1
- package/dist/daily-dashboard-host.d.ts +0 -136
- package/dist/daily-dashboard-host.d.ts.map +0 -1
- package/dist/daily-dashboard-host.js +0 -164
- package/dist/daily-dashboard-host.js.map +0 -1
- package/dist/daily-panel.d.ts +0 -36
- package/dist/daily-panel.d.ts.map +0 -1
- package/dist/daily-panel.js +0 -84
- package/dist/daily-panel.js.map +0 -1
- package/dist/daily-view-input.d.ts +0 -44
- package/dist/daily-view-input.d.ts.map +0 -1
- package/dist/daily-view-input.js +0 -68
- package/dist/daily-view-input.js.map +0 -1
- package/dist/daily-view-render.d.ts +0 -5
- package/dist/daily-view-render.d.ts.map +0 -1
- package/dist/daily-view-render.js +0 -42
- package/dist/daily-view-render.js.map +0 -1
- package/dist/daily-view.d.ts +0 -77
- package/dist/daily-view.d.ts.map +0 -1
- package/dist/daily-view.js +0 -176
- package/dist/daily-view.js.map +0 -1
- package/dist/dashboard-cli.d.ts +0 -54
- package/dist/dashboard-cli.d.ts.map +0 -1
- package/dist/dashboard-cli.js +0 -367
- package/dist/dashboard-cli.js.map +0 -1
- package/dist/dashboard-display-controls.d.ts +0 -15
- package/dist/dashboard-display-controls.d.ts.map +0 -1
- package/dist/dashboard-display-controls.js +0 -34
- package/dist/dashboard-display-controls.js.map +0 -1
- package/dist/dashboard-handshake.d.ts +0 -42
- package/dist/dashboard-handshake.d.ts.map +0 -1
- package/dist/dashboard-handshake.js +0 -147
- package/dist/dashboard-handshake.js.map +0 -1
- package/dist/dashboard-harness.d.ts +0 -22
- package/dist/dashboard-harness.d.ts.map +0 -1
- package/dist/dashboard-harness.js +0 -89
- package/dist/dashboard-harness.js.map +0 -1
- package/dist/dashboard-herdr.d.ts +0 -55
- package/dist/dashboard-herdr.d.ts.map +0 -1
- package/dist/dashboard-herdr.js +0 -293
- package/dist/dashboard-herdr.js.map +0 -1
- package/dist/dashboard-host-contract.d.ts +0 -127
- package/dist/dashboard-host-contract.d.ts.map +0 -1
- package/dist/dashboard-host-contract.js +0 -14
- package/dist/dashboard-host-contract.js.map +0 -1
- package/dist/dashboard-host-transport.d.ts +0 -16
- package/dist/dashboard-host-transport.d.ts.map +0 -1
- package/dist/dashboard-host-transport.js +0 -127
- package/dist/dashboard-host-transport.js.map +0 -1
- package/dist/dashboard-host.d.ts +0 -239
- package/dist/dashboard-host.d.ts.map +0 -1
- package/dist/dashboard-host.js +0 -474
- package/dist/dashboard-host.js.map +0 -1
- package/dist/dashboard-menu.d.ts +0 -16
- package/dist/dashboard-menu.d.ts.map +0 -1
- package/dist/dashboard-menu.js +0 -33
- package/dist/dashboard-menu.js.map +0 -1
- package/dist/dashboard-observation.d.ts +0 -28
- package/dist/dashboard-observation.d.ts.map +0 -1
- package/dist/dashboard-observation.js +0 -87
- package/dist/dashboard-observation.js.map +0 -1
- package/dist/dashboard-projection.d.ts +0 -73
- package/dist/dashboard-projection.d.ts.map +0 -1
- package/dist/dashboard-projection.js +0 -294
- package/dist/dashboard-projection.js.map +0 -1
- package/dist/dashboard-render.d.ts.map +0 -1
- package/dist/dashboard-render.js +0 -212
- package/dist/dashboard-render.js.map +0 -1
- package/dist/debrief-contract.d.ts +0 -65
- package/dist/debrief-contract.d.ts.map +0 -1
- package/dist/debrief-contract.js +0 -151
- package/dist/debrief-contract.js.map +0 -1
- package/dist/debrief-fixture.d.ts +0 -16
- package/dist/debrief-fixture.d.ts.map +0 -1
- package/dist/debrief-fixture.js +0 -41
- package/dist/debrief-fixture.js.map +0 -1
- package/dist/debrief-host.d.ts +0 -59
- package/dist/debrief-host.d.ts.map +0 -1
- package/dist/debrief-host.js +0 -49
- package/dist/debrief-host.js.map +0 -1
- package/dist/debrief-render.d.ts +0 -5
- package/dist/debrief-render.d.ts.map +0 -1
- package/dist/debrief-render.js +0 -65
- package/dist/debrief-render.js.map +0 -1
- package/dist/debrief.d.ts +0 -90
- package/dist/debrief.d.ts.map +0 -1
- package/dist/debrief.js +0 -263
- package/dist/debrief.js.map +0 -1
- package/dist/definitions.d.ts.map +0 -1
- package/dist/definitions.js +0 -164
- package/dist/definitions.js.map +0 -1
- package/dist/delegate-types.d.ts +0 -154
- package/dist/delegate-types.d.ts.map +0 -1
- package/dist/delegate-types.js +0 -8
- package/dist/delegate-types.js.map +0 -1
- package/dist/delegate.d.ts.map +0 -1
- package/dist/delegate.js +0 -313
- package/dist/delegate.js.map +0 -1
- package/dist/delegation-approval.d.ts.map +0 -1
- package/dist/delegation-approval.js +0 -94
- package/dist/delegation-approval.js.map +0 -1
- package/dist/dispatch-control.d.ts +0 -45
- package/dist/dispatch-control.d.ts.map +0 -1
- package/dist/dispatch-control.js +0 -76
- package/dist/dispatch-control.js.map +0 -1
- package/dist/effect-profile-runtime.d.ts +0 -40
- package/dist/effect-profile-runtime.d.ts.map +0 -1
- package/dist/effect-profile-runtime.js +0 -51
- package/dist/effect-profile-runtime.js.map +0 -1
- package/dist/effect-profile.d.ts +0 -40
- package/dist/effect-profile.d.ts.map +0 -1
- package/dist/effect-profile.js +0 -152
- package/dist/effect-profile.js.map +0 -1
- package/dist/execution-id.d.ts.map +0 -1
- package/dist/execution-id.js.map +0 -1
- package/dist/execution-retention.d.ts +0 -90
- package/dist/execution-retention.d.ts.map +0 -1
- package/dist/execution-retention.js +0 -247
- package/dist/execution-retention.js.map +0 -1
- package/dist/executor.d.ts +0 -39
- package/dist/executor.d.ts.map +0 -1
- package/dist/executor.js +0 -94
- package/dist/executor.js.map +0 -1
- package/dist/experiment-contract.d.ts +0 -56
- package/dist/experiment-contract.d.ts.map +0 -1
- package/dist/experiment-contract.js +0 -80
- package/dist/experiment-contract.js.map +0 -1
- package/dist/experiment-state.d.ts +0 -22
- package/dist/experiment-state.d.ts.map +0 -1
- package/dist/experiment-state.js +0 -79
- package/dist/experiment-state.js.map +0 -1
- package/dist/experiment-store.d.ts +0 -30
- package/dist/experiment-store.d.ts.map +0 -1
- package/dist/experiment-store.js +0 -147
- package/dist/experiment-store.js.map +0 -1
- package/dist/experiment.d.ts +0 -65
- package/dist/experiment.d.ts.map +0 -1
- package/dist/experiment.js +0 -362
- package/dist/experiment.js.map +0 -1
- package/dist/factory-contract.d.ts +0 -79
- package/dist/factory-contract.d.ts.map +0 -1
- package/dist/factory-contract.js +0 -89
- package/dist/factory-contract.js.map +0 -1
- package/dist/factory-migration.d.ts +0 -20
- package/dist/factory-migration.d.ts.map +0 -1
- package/dist/factory-migration.js +0 -55
- package/dist/factory-migration.js.map +0 -1
- package/dist/factory-order.d.ts +0 -848
- package/dist/factory-order.d.ts.map +0 -1
- package/dist/factory-order.js +0 -83
- package/dist/factory-order.js.map +0 -1
- package/dist/factory-registry.d.ts +0 -121
- package/dist/factory-registry.d.ts.map +0 -1
- package/dist/factory-registry.js +0 -133
- package/dist/factory-registry.js.map +0 -1
- package/dist/fanout.d.ts.map +0 -1
- package/dist/fanout.js +0 -93
- package/dist/fanout.js.map +0 -1
- package/dist/file-lock.d.ts.map +0 -1
- package/dist/file-lock.js +0 -201
- package/dist/file-lock.js.map +0 -1
- package/dist/finalization.d.ts.map +0 -1
- package/dist/finalization.js.map +0 -1
- package/dist/git-identity.d.ts +0 -13
- package/dist/git-identity.d.ts.map +0 -1
- package/dist/git-identity.js +0 -47
- package/dist/git-identity.js.map +0 -1
- package/dist/grant-env.d.ts +0 -75
- package/dist/grant-env.d.ts.map +0 -1
- package/dist/grant-env.js +0 -154
- package/dist/grant-env.js.map +0 -1
- package/dist/grant-store.d.ts +0 -96
- package/dist/grant-store.d.ts.map +0 -1
- package/dist/grant-store.js +0 -188
- package/dist/grant-store.js.map +0 -1
- package/dist/herdr-cli.d.ts +0 -78
- package/dist/herdr-cli.d.ts.map +0 -1
- package/dist/herdr-cli.js +0 -113
- package/dist/herdr-cli.js.map +0 -1
- package/dist/herdr-name.d.ts.map +0 -1
- package/dist/herdr-name.js.map +0 -1
- package/dist/herdr-pi-lifecycle.d.ts.map +0 -1
- package/dist/herdr-pi-lifecycle.js +0 -22
- package/dist/herdr-pi-lifecycle.js.map +0 -1
- package/dist/herdr-poll.d.ts +0 -133
- package/dist/herdr-poll.d.ts.map +0 -1
- package/dist/herdr-poll.js +0 -222
- package/dist/herdr-poll.js.map +0 -1
- package/dist/herdr-stage.d.ts +0 -40
- package/dist/herdr-stage.d.ts.map +0 -1
- package/dist/herdr-stage.js +0 -54
- package/dist/herdr-stage.js.map +0 -1
- package/dist/herdr-start.d.ts.map +0 -1
- package/dist/herdr-start.js.map +0 -1
- package/dist/init.d.ts +0 -117
- package/dist/init.d.ts.map +0 -1
- package/dist/init.js +0 -323
- package/dist/init.js.map +0 -1
- package/dist/intent-application.d.ts +0 -17
- package/dist/intent-application.d.ts.map +0 -1
- package/dist/intent-application.js +0 -114
- package/dist/intent-application.js.map +0 -1
- package/dist/intent-control.d.ts +0 -201
- package/dist/intent-control.d.ts.map +0 -1
- package/dist/intent-control.js +0 -110
- package/dist/intent-control.js.map +0 -1
- package/dist/intent-scheduling.d.ts +0 -9
- package/dist/intent-scheduling.d.ts.map +0 -1
- package/dist/intent-scheduling.js +0 -15
- package/dist/intent-scheduling.js.map +0 -1
- package/dist/learning-connection.d.ts +0 -127
- package/dist/learning-connection.d.ts.map +0 -1
- package/dist/learning-connection.js +0 -54
- package/dist/learning-connection.js.map +0 -1
- package/dist/lease-helper.d.ts.map +0 -1
- package/dist/lease-helper.js +0 -94
- package/dist/lease-helper.js.map +0 -1
- package/dist/lease-record.d.ts +0 -90
- package/dist/lease-record.d.ts.map +0 -1
- package/dist/lease-record.js.map +0 -1
- package/dist/ledger-append.d.ts +0 -15
- package/dist/ledger-append.d.ts.map +0 -1
- package/dist/ledger-append.js +0 -94
- package/dist/ledger-append.js.map +0 -1
- package/dist/ledger-events.d.ts +0 -131
- package/dist/ledger-events.d.ts.map +0 -1
- package/dist/ledger-events.js +0 -107
- package/dist/ledger-events.js.map +0 -1
- package/dist/ledger-identifiers.d.ts.map +0 -1
- package/dist/ledger-identifiers.js.map +0 -1
- package/dist/ledger-report.d.ts +0 -134
- package/dist/ledger-report.d.ts.map +0 -1
- package/dist/ledger-report.js +0 -271
- package/dist/ledger-report.js.map +0 -1
- package/dist/ledger-v3-validation.d.ts +0 -11
- package/dist/ledger-v3-validation.d.ts.map +0 -1
- package/dist/ledger-v3-validation.js +0 -265
- package/dist/ledger-v3-validation.js.map +0 -1
- package/dist/ledger.d.ts +0 -242
- package/dist/ledger.d.ts.map +0 -1
- package/dist/ledger.js +0 -142
- package/dist/ledger.js.map +0 -1
- package/dist/measured-order.d.ts +0 -249
- package/dist/measured-order.d.ts.map +0 -1
- package/dist/measured-order.js +0 -309
- package/dist/measured-order.js.map +0 -1
- package/dist/measured-session.d.ts +0 -97
- package/dist/measured-session.d.ts.map +0 -1
- package/dist/measured-session.js +0 -134
- package/dist/measured-session.js.map +0 -1
- package/dist/model-preflight.d.ts +0 -13
- package/dist/model-preflight.d.ts.map +0 -1
- package/dist/model-preflight.js +0 -29
- package/dist/model-preflight.js.map +0 -1
- package/dist/native-session-target.d.ts +0 -9
- package/dist/native-session-target.d.ts.map +0 -1
- package/dist/native-session-target.js +0 -29
- package/dist/native-session-target.js.map +0 -1
- package/dist/native-session.d.ts +0 -59
- package/dist/native-session.d.ts.map +0 -1
- package/dist/native-session.js +0 -154
- package/dist/native-session.js.map +0 -1
- package/dist/order-schedule.d.ts +0 -37
- package/dist/order-schedule.d.ts.map +0 -1
- package/dist/order-schedule.js +0 -81
- package/dist/order-schedule.js.map +0 -1
- package/dist/ordinary-children.d.ts +0 -52
- package/dist/ordinary-children.d.ts.map +0 -1
- package/dist/ordinary-children.js +0 -93
- package/dist/ordinary-children.js.map +0 -1
- package/dist/pane-reaper.d.ts +0 -111
- package/dist/pane-reaper.d.ts.map +0 -1
- package/dist/pane-reaper.js +0 -242
- package/dist/pane-reaper.js.map +0 -1
- package/dist/pi-tools.d.ts.map +0 -1
- package/dist/pi-tools.js +0 -21
- package/dist/pi-tools.js.map +0 -1
- package/dist/producer-ipc-contract.d.ts +0 -29
- package/dist/producer-ipc-contract.d.ts.map +0 -1
- package/dist/producer-ipc-contract.js +0 -29
- package/dist/producer-ipc-contract.js.map +0 -1
- package/dist/producer-ipc.d.ts +0 -55
- package/dist/producer-ipc.d.ts.map +0 -1
- package/dist/producer-ipc.js +0 -143
- package/dist/producer-ipc.js.map +0 -1
- package/dist/product-files.d.ts +0 -6
- package/dist/product-files.d.ts.map +0 -1
- package/dist/product-files.js +0 -55
- package/dist/product-files.js.map +0 -1
- package/dist/progress.d.ts.map +0 -1
- package/dist/progress.js.map +0 -1
- package/dist/propagation.d.ts +0 -203
- package/dist/propagation.d.ts.map +0 -1
- package/dist/propagation.js +0 -279
- package/dist/propagation.js.map +0 -1
- package/dist/refusals.d.ts +0 -16
- package/dist/refusals.d.ts.map +0 -1
- package/dist/refusals.js +0 -55
- package/dist/refusals.js.map +0 -1
- package/dist/resolve.d.ts +0 -120
- package/dist/resolve.d.ts.map +0 -1
- package/dist/resolve.js +0 -211
- package/dist/resolve.js.map +0 -1
- package/dist/resource-budget.d.ts +0 -334
- package/dist/resource-budget.d.ts.map +0 -1
- package/dist/resource-budget.js +0 -415
- package/dist/resource-budget.js.map +0 -1
- package/dist/retention-contract.d.ts.map +0 -1
- package/dist/retention-contract.js +0 -104
- package/dist/retention-contract.js.map +0 -1
- package/dist/retention-json.d.ts.map +0 -1
- package/dist/retention-json.js.map +0 -1
- package/dist/routing-authority.d.ts +0 -71
- package/dist/routing-authority.d.ts.map +0 -1
- package/dist/routing-authority.js +0 -100
- package/dist/routing-authority.js.map +0 -1
- package/dist/run-child.d.ts +0 -87
- package/dist/run-child.d.ts.map +0 -1
- package/dist/run-child.js +0 -248
- package/dist/run-child.js.map +0 -1
- package/dist/run-herdr.d.ts +0 -119
- package/dist/run-herdr.d.ts.map +0 -1
- package/dist/run-herdr.js +0 -335
- package/dist/run-herdr.js.map +0 -1
- package/dist/skill-packages.d.ts +0 -116
- package/dist/skill-packages.d.ts.map +0 -1
- package/dist/skill-packages.js +0 -295
- package/dist/skill-packages.js.map +0 -1
- package/dist/skill-resources.d.ts.map +0 -1
- package/dist/skill-resources.js +0 -52
- package/dist/skill-resources.js.map +0 -1
- package/dist/spawn.d.ts +0 -60
- package/dist/spawn.d.ts.map +0 -1
- package/dist/spawn.js +0 -116
- package/dist/spawn.js.map +0 -1
- package/dist/vendor/adoption.d.ts +0 -129
- package/dist/vendor/adoption.d.ts.map +0 -1
- package/dist/vendor/adoption.js +0 -102
- package/dist/vendor/adoption.js.map +0 -1
- package/dist/vendor/herdr-pi-lifecycle.d.ts.map +0 -1
- package/dist/vendor/herdr-pi-lifecycle.js.map +0 -1
- package/dist/work-command.d.ts +0 -32
- package/dist/work-command.d.ts.map +0 -1
- package/dist/work-command.js +0 -179
- package/dist/work-command.js.map +0 -1
- package/dist/work-ledger-destination.d.ts +0 -20
- package/dist/work-ledger-destination.d.ts.map +0 -1
- package/dist/work-ledger-destination.js +0 -131
- package/dist/work-ledger-destination.js.map +0 -1
- package/dist/work-ledger-json.d.ts +0 -25
- package/dist/work-ledger-json.d.ts.map +0 -1
- package/dist/work-ledger-json.js +0 -267
- package/dist/work-ledger-json.js.map +0 -1
- package/dist/work-ledger-occurrences.d.ts +0 -227
- package/dist/work-ledger-occurrences.d.ts.map +0 -1
- package/dist/work-ledger-occurrences.js +0 -115
- package/dist/work-ledger-occurrences.js.map +0 -1
- package/dist/work-ledger-projection.d.ts +0 -295
- package/dist/work-ledger-projection.d.ts.map +0 -1
- package/dist/work-ledger-projection.js +0 -237
- package/dist/work-ledger-projection.js.map +0 -1
- package/dist/work-ledger-snapshot.d.ts +0 -29
- package/dist/work-ledger-snapshot.d.ts.map +0 -1
- package/dist/work-ledger-snapshot.js +0 -267
- package/dist/work-ledger-snapshot.js.map +0 -1
- package/dist/work-ledger-types.d.ts +0 -261
- package/dist/work-ledger-types.d.ts.map +0 -1
- package/dist/work-ledger-types.js +0 -13
- package/dist/work-ledger-types.js.map +0 -1
- package/dist/work-ledger-validation.d.ts +0 -14
- package/dist/work-ledger-validation.d.ts.map +0 -1
- package/dist/work-ledger-validation.js +0 -226
- package/dist/work-ledger-validation.js.map +0 -1
- package/dist/work-ledger.d.ts +0 -43
- package/dist/work-ledger.d.ts.map +0 -1
- package/dist/work-ledger.js +0 -225
- package/dist/work-ledger.js.map +0 -1
- package/dist/work-policy-registry.d.ts +0 -133
- package/dist/work-policy-registry.d.ts.map +0 -1
- package/dist/work-policy-registry.js +0 -128
- package/dist/work-policy-registry.js.map +0 -1
- package/dist/work-run.d.ts +0 -56
- package/dist/work-run.d.ts.map +0 -1
- package/dist/work-run.js +0 -102
- package/dist/work-run.js.map +0 -1
- package/dist/work-setup.d.ts +0 -40
- package/dist/work-setup.d.ts.map +0 -1
- package/dist/work-setup.js +0 -174
- package/dist/work-setup.js.map +0 -1
- package/dist/workflow-fact-id.d.ts +0 -4
- package/dist/workflow-fact-id.d.ts.map +0 -1
- package/dist/workflow-fact-id.js +0 -14
- package/dist/workflow-fact-id.js.map +0 -1
- package/dist/workflow-facts.d.ts +0 -34
- package/dist/workflow-facts.d.ts.map +0 -1
- package/dist/workflow-facts.js +0 -43
- package/dist/workflow-facts.js.map +0 -1
- package/dist/workspace-lease.d.ts +0 -40
- package/dist/workspace-lease.d.ts.map +0 -1
- package/dist/workspace-lease.js +0 -333
- package/dist/workspace-lease.js.map +0 -1
- package/dist/workspace.d.ts +0 -57
- package/dist/workspace.d.ts.map +0 -1
- package/dist/workspace.js +0 -216
- package/dist/workspace.js.map +0 -1
- package/extensions/daily-dashboard-session.ts +0 -48
- package/extensions/daily-work-session.ts +0 -20
- package/extensions/learning-outcome-session.ts +0 -38
- package/extensions/learning-session.ts +0 -59
- package/extensions/ordinary-runtime.ts +0 -14
- package/extensions/primary-shadow.ts +0 -11
- package/extensions/work-policy-session.ts +0 -139
- package/extensions/work-run-session.ts +0 -75
- package/extensions/work-runtime.ts +0 -44
- package/extensions/work-session.ts +0 -132
- package/src/activity-timeline.ts +0 -133
- package/src/approval-prompt.ts +0 -225
- package/src/approval-store.ts +0 -386
- package/src/approval.ts +0 -399
- package/src/capabilities.ts +0 -220
- package/src/catalog.ts +0 -306
- package/src/check-runner.ts +0 -387
- package/src/control-journal.ts +0 -26
- package/src/correlation.ts +0 -320
- package/src/daily-dashboard-host.ts +0 -105
- package/src/daily-panel.ts +0 -80
- package/src/daily-view-input.ts +0 -59
- package/src/daily-view-render.ts +0 -45
- package/src/daily-view.ts +0 -160
- package/src/dashboard-cli.ts +0 -340
- package/src/dashboard-display-controls.ts +0 -21
- package/src/dashboard-handshake.ts +0 -199
- package/src/dashboard-harness.ts +0 -37
- package/src/dashboard-herdr.ts +0 -363
- package/src/dashboard-host-contract.ts +0 -50
- package/src/dashboard-host-transport.ts +0 -43
- package/src/dashboard-host.ts +0 -244
- package/src/dashboard-menu.ts +0 -28
- package/src/dashboard-observation.ts +0 -46
- package/src/dashboard-projection.ts +0 -390
- package/src/dashboard-render.ts +0 -259
- package/src/debrief-contract.ts +0 -127
- package/src/debrief-fixture.ts +0 -29
- package/src/debrief-host.ts +0 -53
- package/src/debrief-render.ts +0 -49
- package/src/debrief.ts +0 -198
- package/src/definitions.ts +0 -211
- package/src/delegate-types.ts +0 -154
- package/src/delegate.ts +0 -348
- package/src/delegation-approval.ts +0 -126
- package/src/dispatch-control.ts +0 -81
- package/src/effect-profile-runtime.ts +0 -46
- package/src/effect-profile.ts +0 -129
- package/src/execution-retention.ts +0 -230
- package/src/executor.ts +0 -123
- package/src/experiment-contract.ts +0 -66
- package/src/experiment-state.ts +0 -44
- package/src/experiment-store.ts +0 -98
- package/src/experiment.ts +0 -236
- package/src/factory-contract.ts +0 -47
- package/src/factory-migration.ts +0 -29
- package/src/factory-order.ts +0 -56
- package/src/factory-registry.ts +0 -60
- package/src/fanout.ts +0 -106
- package/src/file-lock.ts +0 -178
- package/src/finalization.ts +0 -79
- package/src/git-identity.ts +0 -56
- package/src/grant-env.ts +0 -221
- package/src/grant-store.ts +0 -235
- package/src/herdr-cli.ts +0 -125
- package/src/herdr-pi-lifecycle.ts +0 -21
- package/src/herdr-poll.ts +0 -253
- package/src/herdr-stage.ts +0 -55
- package/src/init.ts +0 -389
- package/src/intent-application.ts +0 -91
- package/src/intent-control.ts +0 -107
- package/src/intent-scheduling.ts +0 -14
- package/src/learning-connection.ts +0 -70
- package/src/lease-helper.ts +0 -97
- package/src/lease-record.ts +0 -131
- package/src/ledger-append.ts +0 -72
- package/src/ledger-events.ts +0 -226
- package/src/ledger-report.ts +0 -357
- package/src/ledger-v3-validation.ts +0 -266
- package/src/ledger.ts +0 -369
- package/src/measured-order.ts +0 -72
- package/src/measured-session.ts +0 -70
- package/src/model-preflight.ts +0 -41
- package/src/native-session-target.ts +0 -23
- package/src/native-session.ts +0 -139
- package/src/order-schedule.ts +0 -42
- package/src/ordinary-children.ts +0 -59
- package/src/pane-reaper.ts +0 -270
- package/src/pi-tools.ts +0 -25
- package/src/producer-ipc-contract.ts +0 -26
- package/src/producer-ipc.ts +0 -107
- package/src/product-files.ts +0 -34
- package/src/propagation.ts +0 -333
- package/src/refusals.ts +0 -70
- package/src/resolve.ts +0 -267
- package/src/resource-budget.ts +0 -349
- package/src/retention-contract.ts +0 -84
- package/src/retention-json.ts +0 -20
- package/src/routing-authority.ts +0 -121
- package/src/run-child.ts +0 -303
- package/src/run-herdr.ts +0 -386
- package/src/skill-packages.ts +0 -314
- package/src/skill-resources.ts +0 -48
- package/src/spawn.ts +0 -156
- package/src/vendor/adoption.ts +0 -109
- package/src/work-command.ts +0 -197
- package/src/work-ledger-destination.ts +0 -113
- package/src/work-ledger-json.ts +0 -228
- package/src/work-ledger-occurrences.ts +0 -99
- package/src/work-ledger-projection.ts +0 -262
- package/src/work-ledger-snapshot.ts +0 -246
- package/src/work-ledger-types.ts +0 -229
- package/src/work-ledger-validation.ts +0 -174
- package/src/work-ledger.ts +0 -186
- package/src/work-policy-registry.ts +0 -81
- package/src/work-run.ts +0 -79
- package/src/work-setup.ts +0 -141
- package/src/workflow-fact-id.ts +0 -16
- package/src/workflow-facts.ts +0 -65
- package/src/workspace-lease.ts +0 -363
- package/src/workspace.ts +0 -308
- /package/contracts/{ledger/v3 → ledger-record/v1}/fixtures/capability-decision.json +0 -0
- /package/contracts/{ledger/v3 → ledger-record/v1}/fixtures/workspace-lease.json +0 -0
- /package/dist/{herdr-name.d.ts → executors/herdr-name.d.ts} +0 -0
- /package/dist/{herdr-name.js → executors/herdr-name.js} +0 -0
- /package/dist/{herdr-pi-lifecycle.d.ts → executors/herdr-pi-lifecycle.d.ts} +0 -0
- /package/dist/{herdr-start.d.ts → executors/herdr-start.d.ts} +0 -0
- /package/dist/{herdr-start.js → executors/herdr-start.js} +0 -0
- /package/dist/{vendor → executors/vendor}/herdr-pi-lifecycle.d.ts +0 -0
- /package/dist/{vendor → executors/vendor}/herdr-pi-lifecycle.js +0 -0
- /package/dist/{file-lock.d.ts → governance/file-lock.d.ts} +0 -0
- /package/dist/{finalization.d.ts → governance/finalization.d.ts} +0 -0
- /package/dist/{finalization.js → governance/finalization.js} +0 -0
- /package/dist/{lease-helper.d.ts → governance/lease-helper.d.ts} +0 -0
- /package/dist/{lease-record.js → governance/lease-record.js} +0 -0
- /package/dist/{retention-contract.d.ts → governance/retention-contract.d.ts} +0 -0
- /package/dist/{retention-json.d.ts → governance/retention-json.d.ts} +0 -0
- /package/dist/{retention-json.js → governance/retention-json.js} +0 -0
- /package/dist/{chain.d.ts → kernel/chain.d.ts} +0 -0
- /package/dist/{chain.js → kernel/chain.js} +0 -0
- /package/dist/{correlation.d.ts → kernel/correlation.d.ts} +0 -0
- /package/dist/{definitions.d.ts → kernel/definitions.d.ts} +0 -0
- /package/dist/{delegate.d.ts → kernel/delegate.d.ts} +0 -0
- /package/dist/{delegation-approval.d.ts → kernel/delegation-approval.d.ts} +0 -0
- /package/dist/{execution-id.d.ts → kernel/execution-id.d.ts} +0 -0
- /package/dist/{execution-id.js → kernel/execution-id.js} +0 -0
- /package/dist/{fanout.d.ts → kernel/fanout.d.ts} +0 -0
- /package/dist/{ledger-identifiers.d.ts → kernel/ledger-identifiers.d.ts} +0 -0
- /package/dist/{ledger-identifiers.js → kernel/ledger-identifiers.js} +0 -0
- /package/dist/{pi-tools.d.ts → kernel/pi-tools.d.ts} +0 -0
- /package/dist/{progress.d.ts → kernel/progress.d.ts} +0 -0
- /package/dist/{progress.js → kernel/progress.js} +0 -0
- /package/dist/{skill-resources.d.ts → kernel/skill-resources.d.ts} +0 -0
- /package/dist/{dashboard-render.d.ts → products/dashboard-render.d.ts} +0 -0
- /package/src/{herdr-name.ts → executors/herdr-name.ts} +0 -0
- /package/src/{herdr-start.ts → executors/herdr-start.ts} +0 -0
- /package/src/{vendor → executors/vendor}/herdr-pi-lifecycle.ts +0 -0
- /package/src/{chain.ts → kernel/chain.ts} +0 -0
- /package/src/{execution-id.ts → kernel/execution-id.ts} +0 -0
- /package/src/{ledger-identifiers.ts → kernel/ledger-identifiers.ts} +0 -0
- /package/src/{progress.ts → kernel/progress.ts} +0 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The shapes `planDelegation` consumes and produces. Split out of `./delegate.ts` only to stay under the
|
|
3
|
+
* 400-line module ceiling this project enforces mechanically; `./delegate.ts` re-exports all three, so
|
|
4
|
+
* "the delegate module" remains one import for every caller.
|
|
5
|
+
*/
|
|
6
|
+
import type { Capability, ResolveResult } from "./resolve.ts";
|
|
7
|
+
import type { DefinitionDigest, SkillDefinition } from "./definitions.ts";
|
|
8
|
+
import type { InheritableApproval } from "./approval.ts";
|
|
9
|
+
import type { Catalog } from "./catalog.ts";
|
|
10
|
+
import type { ApprovalBinding, CorrelationMetadata } from "./correlation.ts";
|
|
11
|
+
import type { StructuredRefusal } from "./refusals.ts";
|
|
12
|
+
|
|
13
|
+
/** The two ways a child can be started. Defined here, below the executors, so the ledger and the planner can name it without importing an executor (ADR-0076 layering). */
|
|
14
|
+
export const EXECUTOR_KINDS = ["process", "herdr"] as const;
|
|
15
|
+
export type ExecutorKind = (typeof EXECUTOR_KINDS)[number];
|
|
16
|
+
|
|
17
|
+
export interface DelegationRequest {
|
|
18
|
+
task: string;
|
|
19
|
+
/**
|
|
20
|
+
* Capabilities the delegator wants the child to hold.
|
|
21
|
+
*
|
|
22
|
+
* Optional since ADR-0016: prefer `agent`, which names an operator-authored definition. This form
|
|
23
|
+
* lets the MODEL choose the capability set, which is the weaker arrangement — it is still bounded by
|
|
24
|
+
* the session grant (ADR-0008), so it cannot escalate, but nothing about it was reviewed by a human.
|
|
25
|
+
*/
|
|
26
|
+
tools?: string[];
|
|
27
|
+
/**
|
|
28
|
+
* Name of a `SKILL.md` definition to spawn (ADR-0016).
|
|
29
|
+
*
|
|
30
|
+
* When given, the definition's `allowed-tools` is the ceiling and its body is the child's system
|
|
31
|
+
* prompt. The model chooses only *which* definition and *what* task; the capability set is the
|
|
32
|
+
* operator's, written down in a file.
|
|
33
|
+
*/
|
|
34
|
+
agent?: string;
|
|
35
|
+
model?: string;
|
|
36
|
+
provider?: string;
|
|
37
|
+
thinking?: string;
|
|
38
|
+
/** Optional external join metadata. It never participates in capability authority. */
|
|
39
|
+
correlation?: CorrelationMetadata;
|
|
40
|
+
/**
|
|
41
|
+
* Trusted binding scope, supplied by the caller that actually resolved and leased the
|
|
42
|
+
* workspace. Deliberately separate from `correlation`, whose values are a model-supplied
|
|
43
|
+
* claim: reading the workspace id out of correlation let a bound approval be spent outside
|
|
44
|
+
* the workspace it named (R-110).
|
|
45
|
+
*/
|
|
46
|
+
boundWorkspaceId?: string;
|
|
47
|
+
boundContextId?: string;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface DelegationContext {
|
|
51
|
+
ownGrant: Capability[];
|
|
52
|
+
depth: number;
|
|
53
|
+
maxDepth: number;
|
|
54
|
+
gated: Capability[];
|
|
55
|
+
/**
|
|
56
|
+
* Approvals in force for this delegation, with subject and scope (ADR-0014).
|
|
57
|
+
*
|
|
58
|
+
* One source of truth for two different questions. The **gate check here** honours every entry,
|
|
59
|
+
* including `once` — that approval applies to *this* spawn, which is exactly what the human said yes
|
|
60
|
+
* to. What crosses to the CHILD is `inheritApprovals`, which drops `once` and keeps the subject, so
|
|
61
|
+
* the same list cannot silently authorise a subtree.
|
|
62
|
+
*/
|
|
63
|
+
approved?: InheritableApproval[];
|
|
64
|
+
ledgerPath?: string;
|
|
65
|
+
/** Path to this extension, so a child granted `tool:delegate` can delegate in turn. */
|
|
66
|
+
extensionPath?: string;
|
|
67
|
+
/** No-tool activity observer injected only for governed leaf children. */
|
|
68
|
+
observerExtensionPath?: string;
|
|
69
|
+
/**
|
|
70
|
+
* Extra per-child environment supplied by the composition layer (today: the activity timeline's local
|
|
71
|
+
* observation identity). Evaluated once the child's execution id is known. The kernel refuses any key in
|
|
72
|
+
* the `PI_DADDY_` namespace, so nothing supplied here can widen a grant, a depth or an approval
|
|
73
|
+
* (ADR-0076: the kernel imports no product; products contribute through this hook).
|
|
74
|
+
*/
|
|
75
|
+
childEnv?: (child: { childExecutionId?: string }) => Readonly<Record<string, string>>;
|
|
76
|
+
/** Live capability catalog. When supplied, capabilities absent from it are refused as unknown. */
|
|
77
|
+
catalog?: Catalog;
|
|
78
|
+
/**
|
|
79
|
+
* Absolute path per skill NAME, from the catalog's `source` field (R-32).
|
|
80
|
+
*
|
|
81
|
+
* Without it every granted `skill:` capability is unresolvable and the delegation is refused, which
|
|
82
|
+
* is the correct direction: a caller that cannot say where a skill lives cannot honestly grant it.
|
|
83
|
+
*/
|
|
84
|
+
skillPaths?: Record<string, string>;
|
|
85
|
+
/** Let the child load `AGENTS.md` / `CLAUDE.md`. Default false — see `planSpawn`. */
|
|
86
|
+
contextFiles?: boolean;
|
|
87
|
+
/** Known `SKILL.md` definitions by name, for `DelegationRequest.agent` (ADR-0016). */
|
|
88
|
+
definitions?: Map<string, SkillDefinition>;
|
|
89
|
+
/**
|
|
90
|
+
* Build an INTERACTIVE plan — no `--print` — for an executor that drives the child after starting it.
|
|
91
|
+
*
|
|
92
|
+
* `runHerdrPane` requires this: `--print` makes pi process the prompt and exit, so it never reaches the
|
|
93
|
+
* interactive readiness `herdr agent start` waits for and the agent is never detected. Default is the
|
|
94
|
+
* non-interactive plan, because a governed child should not sit waiting for a human by accident.
|
|
95
|
+
*/
|
|
96
|
+
interactive?: boolean;
|
|
97
|
+
/** Explicit host-owned pi persistence target; never model-facing and never enabled by archive observation. */
|
|
98
|
+
sessionFile?: string;
|
|
99
|
+
/**
|
|
100
|
+
* Total descendants this session may still create (`src/kernel/fanout.ts`). Split among children by the caller.
|
|
101
|
+
*
|
|
102
|
+
* Omitted means unbounded, which is the pre-fan-out behaviour and correct for a single blocking
|
|
103
|
+
* delegation — the accident that used to bound cardinality to one.
|
|
104
|
+
*/
|
|
105
|
+
fanoutBudget?: number;
|
|
106
|
+
/** This session's ledger id, so a child's `parentId` names its real parent (F8). */
|
|
107
|
+
spawnId?: string;
|
|
108
|
+
/** Ledger id assigned to THIS child, distinguishing logical siblings (F8). */
|
|
109
|
+
childSpawnId?: string;
|
|
110
|
+
/** Unique identity assigned to THIS execution occurrence; never derive joins from childSpawnId. */
|
|
111
|
+
childExecutionId?: string;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export interface Delegation {
|
|
115
|
+
ok: boolean;
|
|
116
|
+
reason?: string;
|
|
117
|
+
/** Stable machine-readable refusal accompanying the unchanged human diagnostic. */
|
|
118
|
+
refusal?: StructuredRefusal;
|
|
119
|
+
args: string[];
|
|
120
|
+
/** Per-child environment — never merged into the parent's process.env. */
|
|
121
|
+
env: Record<string, string>;
|
|
122
|
+
effective: Capability[];
|
|
123
|
+
/**
|
|
124
|
+
* The result this plan was made from. **Required** (B-I3): while it was optional the extension
|
|
125
|
+
* guarded its ledger write with `if (ledgerPath && plan.result)`, silently dropping every refusal
|
|
126
|
+
* that returned before `resolve()` ran. The type is what keeps a new early exit auditable.
|
|
127
|
+
*/
|
|
128
|
+
result: ResolveResult;
|
|
129
|
+
childDepth: number;
|
|
130
|
+
/**
|
|
131
|
+
* The capabilities this delegation asked for, whatever route named them.
|
|
132
|
+
*
|
|
133
|
+
* Carried on the plan rather than re-derived by the caller (the B-I3 lesson): with `agent`, the
|
|
134
|
+
* request names a DEFINITION and the capabilities come from its `allowed-tools`, so a ledger that
|
|
135
|
+
* read the tool parameters would record an empty request for every definition spawn.
|
|
136
|
+
*/
|
|
137
|
+
requested: Capability[];
|
|
138
|
+
/** Ledger id for this child's readable logical position, if the caller assigned one (F8). */
|
|
139
|
+
childId?: string;
|
|
140
|
+
/** Unique identity for this occurrence, if the caller assigned one. */
|
|
141
|
+
executionId?: string;
|
|
142
|
+
/**
|
|
143
|
+
* Which operator-authored instructions this spawn used (ADR-0018).
|
|
144
|
+
*
|
|
145
|
+
* Absent for a `tools:`-style delegation, which has no definition and therefore no instructions to
|
|
146
|
+
* identify — and absent on an ADR-0017 authorisation refusal, which is decided before the file is read.
|
|
147
|
+
*/
|
|
148
|
+
definitionDigest?: DefinitionDigest;
|
|
149
|
+
/** Trusted SHA-256 of the exact model-authored task. The task text itself is never stored. */
|
|
150
|
+
taskDigest: string;
|
|
151
|
+
/** Non-authoritative external join metadata, snapshotted at planning time. */
|
|
152
|
+
correlation?: CorrelationMetadata;
|
|
153
|
+
/** Exact approval scope, present when correlation/workspace context requested task-bound approval. */
|
|
154
|
+
approvalBinding?: ApprovalBinding;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Plan a governed delegation. Pure: returns argv and env, spawns nothing.
|
|
159
|
+
*
|
|
160
|
+
* Fails closed on depth, on any requested capability the delegator does not hold, on gated capabilities
|
|
161
|
+
* without approval, and on a grant that cannot narrow (a universal capability slipping through).
|
|
162
|
+
*/
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Governed delegation planning. Owning the spawn makes the grant an argument; each child receives its own
|
|
3
|
+
* environment, and `tool:delegate` determines whether it is a delegator or a leaf.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { planSpawn } from "./spawn.ts";
|
|
7
|
+
import { ceilingForDefinition, digestDefinition, type DefinitionDigest, type SkillDefinition } from "./definitions.ts";
|
|
8
|
+
import { assertNarrowing, type Capability, type ResolveResult } from "./resolve.ts";
|
|
9
|
+
import { checkRoutingAuthority, checkWorkspaceWildcardRequest } from "./routing-authority.ts";
|
|
10
|
+
import { DELEGATE_CAPABILITY, agentCapability, maySpawnDefinition, normaliseCapability } from "./capabilities.ts";
|
|
11
|
+
|
|
12
|
+
// Re-exported so the split stays internal: `delegate.ts` has been the import site for these since 0.6.0 and
|
|
13
|
+
// four modules plus the test suite name it. Moving the definitions without moving the door would be churn
|
|
14
|
+
// charged to every caller for a line count they did not cause.
|
|
15
|
+
export { DELEGATE_CAPABILITY, agentCapability, maySpawnDefinition, normaliseCapability } from "./capabilities.ts";
|
|
16
|
+
import {
|
|
17
|
+
ENV_APPROVED,
|
|
18
|
+
ENV_DEPTH,
|
|
19
|
+
ENV_EXECUTION_ID,
|
|
20
|
+
ENV_FANOUT,
|
|
21
|
+
ENV_GATED,
|
|
22
|
+
ENV_GRANT,
|
|
23
|
+
ENV_LEDGER,
|
|
24
|
+
ENV_MAX_DEPTH,
|
|
25
|
+
ENV_PARENT_ID,
|
|
26
|
+
inheritableGrant,
|
|
27
|
+
} from "./propagation.ts";
|
|
28
|
+
import { inheritApprovals, type InheritableApproval } from "./approval.ts";
|
|
29
|
+
import { explainDoubledNamespace, suggestForUnknown, unknownCapabilities, type Catalog } from "./catalog.ts";
|
|
30
|
+
import { GovernanceRefusal, refusal, type RefusalCode, type StructuredRefusal } from "./refusals.ts";
|
|
31
|
+
import { digestTask, normaliseCorrelation, type ApprovalBinding, type CorrelationMetadata } from "./correlation.ts";
|
|
32
|
+
import { resolveDelegationApproval } from "./delegation-approval.ts";
|
|
33
|
+
import type { Delegation, DelegationContext, DelegationRequest } from "./delegate-types.ts";
|
|
34
|
+
import { assertCapabilitiesArePropagatable } from "./capabilities.ts";
|
|
35
|
+
export type { Delegation, DelegationContext, DelegationRequest } from "./delegate-types.ts";
|
|
36
|
+
import { GOVERNANCE_ENV_KEYS } from "./env-names.ts";
|
|
37
|
+
|
|
38
|
+
export function planDelegation(request: DelegationRequest, ctx: DelegationContext): Delegation {
|
|
39
|
+
const childDepth = ctx.depth + 1;
|
|
40
|
+
const denied = (plan: Delegation, code: RefusalCode): Delegation =>
|
|
41
|
+
plan.reason ? { ...plan, refusal: refusal(code, plan.reason) } : plan;
|
|
42
|
+
// G6 / B-I3: every refusal carries a result, including the four below that return before `resolve()`
|
|
43
|
+
// is ever called. The extension guarded its ledger write with `if (ledgerPath && plan.result)`, so
|
|
44
|
+
// those four governance decisions — disabled, too deep, no task, unknown capability — were never
|
|
45
|
+
// audited at all. An empty result is the honest record: nothing was resolved, and that is the fact.
|
|
46
|
+
// Bounded/whitelisted correlation is a REFUSAL, not an exception escaping the planner. It is reachable
|
|
47
|
+
// from a model-facing tool parameter on all three delegation tools, and throwing from here produced a
|
|
48
|
+
// governed refusal with no code and no ledger line at all — the ledger file was never even created
|
|
49
|
+
// (R-112). Caught here so it becomes an ordinary recorded decision.
|
|
50
|
+
let correlation: CorrelationMetadata | undefined;
|
|
51
|
+
let correlationRefused: StructuredRefusal | undefined;
|
|
52
|
+
try {
|
|
53
|
+
correlation = normaliseCorrelation(request.correlation);
|
|
54
|
+
} catch (error) {
|
|
55
|
+
correlationRefused =
|
|
56
|
+
error instanceof GovernanceRefusal
|
|
57
|
+
? { code: error.code, message: error.message, ...(error.details ? { details: error.details } : {}) }
|
|
58
|
+
: refusal("CORRELATION_INVALID", String(error instanceof Error ? error.message : error));
|
|
59
|
+
}
|
|
60
|
+
const taskDigest = digestTask(request.task ?? "");
|
|
61
|
+
const empty: Delegation = {
|
|
62
|
+
ok: false,
|
|
63
|
+
args: [],
|
|
64
|
+
env: {},
|
|
65
|
+
effective: [],
|
|
66
|
+
childDepth,
|
|
67
|
+
requested: [],
|
|
68
|
+
taskDigest,
|
|
69
|
+
...(correlation ? { correlation } : {}),
|
|
70
|
+
result: { effective: [], denied: [], clipped: [], gatedBlocked: [], universal: [], subsumedBy: [] },
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
if (correlationRefused) {
|
|
74
|
+
return { ...empty, reason: correlationRefused.message, refusal: correlationRefused };
|
|
75
|
+
}
|
|
76
|
+
if (ctx.maxDepth <= 0) {
|
|
77
|
+
return denied({ ...empty, reason: "delegation is disabled (maxDepth 0)" }, "DEPTH_EXCEEDED");
|
|
78
|
+
}
|
|
79
|
+
if (childDepth > ctx.maxDepth) {
|
|
80
|
+
return denied({ ...empty, reason: `delegation depth limit reached (${ctx.maxDepth})` }, "DEPTH_EXCEEDED");
|
|
81
|
+
}
|
|
82
|
+
if (!request.task?.trim()) return denied({ ...empty, reason: "a delegation needs a task" }, "TASK_MISSING");
|
|
83
|
+
|
|
84
|
+
// ADR-0035's routing guards live in `routing-authority.ts` with their rationale; both are checked here,
|
|
85
|
+
// before anything is said about the target, because they are governance questions about the SESSION.
|
|
86
|
+
const routing = checkRoutingAuthority(request.boundWorkspaceId, ctx.ownGrant);
|
|
87
|
+
if (routing) {
|
|
88
|
+
return denied(
|
|
89
|
+
{
|
|
90
|
+
...empty,
|
|
91
|
+
...(routing.denied ? { requested: routing.denied, result: { ...empty.result, denied: routing.denied } } : {}),
|
|
92
|
+
reason: routing.reason,
|
|
93
|
+
},
|
|
94
|
+
routing.code,
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// ADR-0016. A named definition replaces the model's tool list with an operator-authored ceiling.
|
|
99
|
+
let requested: Capability[];
|
|
100
|
+
let systemPrompt: string | undefined;
|
|
101
|
+
let definitionDigest: DefinitionDigest | undefined;
|
|
102
|
+
/** The definition being spawned, hoisted so the gate below can name its authorising id (ADR-0024). */
|
|
103
|
+
let spawned: SkillDefinition | undefined;
|
|
104
|
+
|
|
105
|
+
if (request.agent) {
|
|
106
|
+
const definition = ctx.definitions?.get(request.agent);
|
|
107
|
+
spawned = definition;
|
|
108
|
+
// No fallback, deliberately. pi-subagents resolves an unknown type to `general-purpose`, whose
|
|
109
|
+
// omitted tool list means EVERY tool — so a typo there granted the full surface. An unknown name
|
|
110
|
+
// here is simply an error.
|
|
111
|
+
if (!definition) {
|
|
112
|
+
const known = [...(ctx.definitions?.keys() ?? [])].sort();
|
|
113
|
+
return denied(
|
|
114
|
+
{
|
|
115
|
+
...empty,
|
|
116
|
+
reason:
|
|
117
|
+
`unknown agent "${request.agent}"` +
|
|
118
|
+
(known.length > 0 ? ` — known definitions: ${known.join(", ")}` : " — no definitions were found"),
|
|
119
|
+
},
|
|
120
|
+
"UNKNOWN_DEFINITION",
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// ADR-0017: authorisation comes BEFORE anything is said about the file. Which definitions this
|
|
125
|
+
// session may spawn is a governance question about the SESSION; whether the file declares its tools
|
|
126
|
+
// properly is a diagnostic about the DEFINITION, and answering the second one first would report a
|
|
127
|
+
// malformed-file error to a caller who was never allowed to spawn it either way.
|
|
128
|
+
//
|
|
129
|
+
// Recorded as a denial rather than a bare refusal, deliberately: `denied` is the escalation signal
|
|
130
|
+
// ADR-0008 designates, and asking to run a definition this session was not granted IS an attempt to
|
|
131
|
+
// exceed the grant. A refusal that left `denied` empty would keep it out of every audit query.
|
|
132
|
+
if (!maySpawnDefinition(ctx.ownGrant, definition.name)) {
|
|
133
|
+
const authorising = agentCapability(definition.name);
|
|
134
|
+
const held = ctx.ownGrant.filter((c) => c.startsWith("agent:")).sort();
|
|
135
|
+
return denied(
|
|
136
|
+
{
|
|
137
|
+
...empty,
|
|
138
|
+
requested: [authorising],
|
|
139
|
+
result: { ...empty.result, denied: [authorising] },
|
|
140
|
+
reason:
|
|
141
|
+
`cannot spawn "${definition.name}" — this session does not hold ${authorising} ` +
|
|
142
|
+
`(the definition lives at ${definition.source}). ` +
|
|
143
|
+
(held.length > 0
|
|
144
|
+
? `It may spawn: ${held.join(", ")}.`
|
|
145
|
+
: `It may spawn no definitions at all; add ${authorising} to its grant to allow this one.`),
|
|
146
|
+
},
|
|
147
|
+
"DEFINITION_NOT_AUTHORIZED",
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// ADR-0018. Recorded from here on — after authorisation, because the digest is a fact about a file
|
|
152
|
+
// this caller was allowed to read, and before every remaining outcome, because a spawn refused for a
|
|
153
|
+
// malformed declaration is still a spawn of THIS version of the definition.
|
|
154
|
+
//
|
|
155
|
+
// Assigned into `empty`, which every subsequent refusal spreads. That is the R-28 discipline applied
|
|
156
|
+
// to a record field rather than an argument: instead of eight `definitionDigest` spellings that a
|
|
157
|
+
// ninth return could forget, there is one, and forgetting it is not expressible. The success return
|
|
158
|
+
// does not spread `empty`, so it names the field explicitly.
|
|
159
|
+
definitionDigest = digestDefinition(definition);
|
|
160
|
+
Object.assign(empty, { definitionDigest });
|
|
161
|
+
|
|
162
|
+
const ceiling = ceilingForDefinition(definition);
|
|
163
|
+
if (ceiling.undeclared) {
|
|
164
|
+
return denied(
|
|
165
|
+
{
|
|
166
|
+
...empty,
|
|
167
|
+
reason:
|
|
168
|
+
`agent "${definition.name}" declares no \`allowed-tools\`, so it cannot be spawned — add one ` +
|
|
169
|
+
`to ${definition.source}. An undeclared capability set is treated as NONE, never as everything.`,
|
|
170
|
+
},
|
|
171
|
+
"UNDECLARED_TOOLS",
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
if (ceiling.patterns.length > 0) {
|
|
175
|
+
return denied(
|
|
176
|
+
{
|
|
177
|
+
...empty,
|
|
178
|
+
reason:
|
|
179
|
+
`agent "${definition.name}" restricts a tool with a pattern (${ceiling.patterns.join(", ")}), ` +
|
|
180
|
+
`which pi's --tools cannot express — it matches whole tool names only. Granting the bare tool ` +
|
|
181
|
+
`would widen the declaration and dropping it would silently narrow, so neither is done.`,
|
|
182
|
+
},
|
|
183
|
+
"CEILING_PATTERNS_UNRESOLVED",
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
requested = ceiling.capabilities;
|
|
187
|
+
systemPrompt = definition.body;
|
|
188
|
+
} else {
|
|
189
|
+
requested = (request.tools ?? []).map(normaliseCapability);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Unknown is reported before denied, and separately: "does not exist here" and "you lack authority"
|
|
193
|
+
// have different causes and different fixes. Collapsing them hides typos and stale grants.
|
|
194
|
+
if (ctx.catalog) {
|
|
195
|
+
const unknown = unknownCapabilities(requested, ctx.catalog);
|
|
196
|
+
if (unknown.length > 0) {
|
|
197
|
+
// Name the likely intent where there is one. `ceilingForDefinition` refuses to TRANSLATE names
|
|
198
|
+
// (lowercasing and no more), so an author who wrote Claude Code's `Glob` gets `tool:glob` and a
|
|
199
|
+
// refusal — correct, and previously unhelpful, because pi's equivalent is `find` and no amount of
|
|
200
|
+
// staring at "not present in this session's catalog" says so. The hint changes nothing about the
|
|
201
|
+
// refusal; it just stops the author having to guess which of nine built-ins was meant.
|
|
202
|
+
// A doubled namespace is answered first and instead: it is not a guess about what the author meant
|
|
203
|
+
// but a statement of what the field did, and "did you mean tool:read?" beside `tool:tool:read` shows
|
|
204
|
+
// the author a correction without ever saying that `allowed-tools` supplies the `tool:` itself.
|
|
205
|
+
const hints = unknown
|
|
206
|
+
.map((c) => {
|
|
207
|
+
const doubled = explainDoubledNamespace(c);
|
|
208
|
+
if (doubled !== null) return doubled;
|
|
209
|
+
const s = suggestForUnknown(c, ctx.catalog!);
|
|
210
|
+
return s === null ? null : `${c} → did you mean ${s}?`;
|
|
211
|
+
})
|
|
212
|
+
.filter((h): h is string => h !== null);
|
|
213
|
+
return denied(
|
|
214
|
+
{
|
|
215
|
+
...empty,
|
|
216
|
+
requested,
|
|
217
|
+
reason:
|
|
218
|
+
`unknown capabilit${unknown.length === 1 ? "y" : "ies"}: ${unknown.join(", ")} — not present in ` +
|
|
219
|
+
`this session's catalog (typo, or an uninstalled package?)` +
|
|
220
|
+
(hints.length > 0 ? ` — ${hints.join("; ")}` : ""),
|
|
221
|
+
},
|
|
222
|
+
"UNKNOWN_TOOL",
|
|
223
|
+
);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// See `checkWorkspaceWildcardRequest`: refused for a HOLDER (the ledger must not record authority the
|
|
228
|
+
// child will not receive), and left to `resolve()` for anyone else, so the probe lands in `denied`.
|
|
229
|
+
const wildcardRequest = checkWorkspaceWildcardRequest(requested, ctx.ownGrant);
|
|
230
|
+
if (wildcardRequest) {
|
|
231
|
+
return denied({ ...empty, requested, reason: wildcardRequest.reason }, wildcardRequest.code);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
const { result, approvalBinding, bindingMismatch } = resolveDelegationApproval({
|
|
235
|
+
task: request.task,
|
|
236
|
+
agent: request.agent,
|
|
237
|
+
boundWorkspaceId: request.boundWorkspaceId,
|
|
238
|
+
boundContextId: request.boundContextId,
|
|
239
|
+
requested,
|
|
240
|
+
parentGrant: ctx.ownGrant,
|
|
241
|
+
gated: ctx.gated,
|
|
242
|
+
approved: ctx.approved,
|
|
243
|
+
spawned,
|
|
244
|
+
definitionDigest,
|
|
245
|
+
correlation,
|
|
246
|
+
parentId: ctx.spawnId ?? `d${ctx.depth}`,
|
|
247
|
+
});
|
|
248
|
+
if (approvalBinding) Object.assign(empty, { approvalBinding });
|
|
249
|
+
|
|
250
|
+
if (result.denied.length > 0) {
|
|
251
|
+
return denied(
|
|
252
|
+
{
|
|
253
|
+
...empty,
|
|
254
|
+
requested,
|
|
255
|
+
result,
|
|
256
|
+
reason: `cannot grant ${result.denied.join(", ")} — this session does not hold it (capability escalation blocked)`,
|
|
257
|
+
},
|
|
258
|
+
"CAPABILITY_ESCALATION",
|
|
259
|
+
);
|
|
260
|
+
}
|
|
261
|
+
// ADR-0011: narrowing is checked BEFORE the gate, and the order is load-bearing rather than
|
|
262
|
+
// stylistic. `assertNarrowing` refuses regardless of approval, so with the old order this returned
|
|
263
|
+
// "requires explicit approval" for a delegation that could never be approved — telling the operator
|
|
264
|
+
// to go and find a human who cannot help. `shouldSeekApproval` now also refuses to prompt in this
|
|
265
|
+
// case; this reordering makes the reported *reason* agree with what actually blocks the spawn.
|
|
266
|
+
try {
|
|
267
|
+
assertNarrowing(result);
|
|
268
|
+
} catch (error) {
|
|
269
|
+
// ADR-0011's narrowing invariant is the hardest rule this package enforces, and it was the one
|
|
270
|
+
// refusal an external controller could not identify by code (R-109).
|
|
271
|
+
return denied(
|
|
272
|
+
{ ...empty, requested, result, reason: String(error instanceof Error ? error.message : error) },
|
|
273
|
+
"NARROWING_VIOLATED",
|
|
274
|
+
);
|
|
275
|
+
}
|
|
276
|
+
if (result.gatedBlocked.length > 0) {
|
|
277
|
+
const code = bindingMismatch ? "APPROVAL_SCOPE_MISMATCH" : "GATED_UNAPPROVED";
|
|
278
|
+
const suffix = bindingMismatch ? " (an approval exists, but its task/workspace/context scope does not match)" : "";
|
|
279
|
+
return denied(
|
|
280
|
+
{ ...empty, requested, result, reason: `${result.gatedBlocked.join(", ")} requires explicit approval${suffix}` },
|
|
281
|
+
code,
|
|
282
|
+
);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
const canSubDelegate = result.effective.includes(DELEGATE_CAPABILITY);
|
|
286
|
+
const plan = planSpawn({
|
|
287
|
+
effective: result.effective,
|
|
288
|
+
prompt: request.task,
|
|
289
|
+
model: request.model,
|
|
290
|
+
provider: request.provider,
|
|
291
|
+
thinking: request.thinking,
|
|
292
|
+
skillPaths: ctx.skillPaths,
|
|
293
|
+
contextFiles: ctx.contextFiles,
|
|
294
|
+
systemPrompt,
|
|
295
|
+
sessionFile: ctx.sessionFile,
|
|
296
|
+
print: ctx.interactive ? false : undefined,
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
// R-32. A `skill:` capability the catalog cannot place is refused rather than dropped. Dropping it
|
|
300
|
+
// would hand back a child whose grant claims a skill it does not have — the ledger would record a
|
|
301
|
+
// capability that never reached the process, which is precisely the kind of lie an audit trail must
|
|
302
|
+
// not contain. `unknownCapabilities` above catches names absent from the catalog entirely; this
|
|
303
|
+
// catches one that is known but whose path we could not resolve, which is a different fault.
|
|
304
|
+
if (plan.unresolvedSkills.length > 0) {
|
|
305
|
+
return denied(
|
|
306
|
+
{
|
|
307
|
+
...empty,
|
|
308
|
+
requested,
|
|
309
|
+
result,
|
|
310
|
+
reason:
|
|
311
|
+
`cannot locate ${plan.unresolvedSkills.join(", ")} on disk — granted but unresolvable, so the ` +
|
|
312
|
+
`child would silently lack it`,
|
|
313
|
+
},
|
|
314
|
+
"DEFINITION_UNREADABLE",
|
|
315
|
+
);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// `-e` loads even under `--no-extensions`. A delegate-capable child loads the governance extension;
|
|
319
|
+
// a leaf gets only the no-tool observer. Neither path alters --tools or the computed grant.
|
|
320
|
+
const args = [...plan.args];
|
|
321
|
+
const observer = canSubDelegate ? ctx.extensionPath : ctx.observerExtensionPath;
|
|
322
|
+
if (observer) args.splice(args.length - 1, 0, "-e", observer);
|
|
323
|
+
|
|
324
|
+
// `inheritableGrant`, not `result.effective` directly: this is the path a DELEGATED child's grant
|
|
325
|
+
// actually travels, and the "held but never inherited" rule for `tool:*` and `workspace:*` was enforced
|
|
326
|
+
// only in `childEnv`. A parent holding `workspace:*` could request it for its child and this line handed
|
|
327
|
+
// it over, so the rule ADR-0035 advertises held by accident — masked downstream rather than enforced
|
|
328
|
+
// here. One spelling of the rule, called from both paths.
|
|
329
|
+
const inheritable = inheritableGrant(result.effective);
|
|
330
|
+
const env: Record<string, string> = {
|
|
331
|
+
[ENV_GRANT]: (assertCapabilitiesArePropagatable(inheritable), inheritable.join(",")),
|
|
332
|
+
[ENV_DEPTH]: String(childDepth),
|
|
333
|
+
[ENV_MAX_DEPTH]: String(ctx.maxDepth),
|
|
334
|
+
};
|
|
335
|
+
// The child's own share of the subtree budget, and its identity. Both attenuate downward like depth: a
|
|
336
|
+
// child can never be handed more budget than its parent had left, so the total bound holds across
|
|
337
|
+
// process boundaries with no shared state.
|
|
338
|
+
if (ctx.fanoutBudget !== undefined) env[ENV_FANOUT] = String(ctx.fanoutBudget);
|
|
339
|
+
if (ctx.childSpawnId) env[ENV_PARENT_ID] = ctx.childSpawnId;
|
|
340
|
+
if (ctx.childExecutionId) env[ENV_EXECUTION_ID] = ctx.childExecutionId;
|
|
341
|
+
if (ctx.gated.length > 0) env[ENV_GATED] = ctx.gated.join(",");
|
|
342
|
+
// Approvals ride down with the grant, but only ever for what this child actually received — so
|
|
343
|
+
// `approved ⊆ grant` holds at every level (ADR-0010). Written even when empty, so this object states
|
|
344
|
+
// the child's approval set outright rather than leaving it to whatever the caller merges over; see
|
|
345
|
+
// `mergeChildEnv`, which is what actually stops the parent's value leaking through.
|
|
346
|
+
// Clamped to what the child actually INHERITS, not to what it was granted. The two differ only for a
|
|
347
|
+
// non-inheritable wildcard, and passing down an approval for a capability the child does not hold would
|
|
348
|
+
// leave banked authority with nothing to spend it on — `childEnv` clamps to `inheritable` for the same
|
|
349
|
+
// reason on the other path.
|
|
350
|
+
env[ENV_APPROVED] = inheritApprovals(ctx.approved ?? [], inheritable).join(",");
|
|
351
|
+
if (ctx.ledgerPath) env[ENV_LEDGER] = ctx.ledgerPath;
|
|
352
|
+
// Composition-supplied per-child environment (the activity timeline's observation identity today).
|
|
353
|
+
// Never process-global grant state: a key in the governance namespace is a programming error in the
|
|
354
|
+
// caller, refused loudly rather than letting a product widen what the child inherits.
|
|
355
|
+
for (const [key, value] of Object.entries(ctx.childEnv?.({ childExecutionId: ctx.childExecutionId }) ?? {})) {
|
|
356
|
+
if (GOVERNANCE_ENV_KEYS.includes(key) || key in env) throw new Error(`childEnv may not set governance key ${key}`);
|
|
357
|
+
env[key] = value;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
return {
|
|
361
|
+
ok: true,
|
|
362
|
+
args,
|
|
363
|
+
env,
|
|
364
|
+
effective: result.effective,
|
|
365
|
+
result,
|
|
366
|
+
childDepth,
|
|
367
|
+
requested,
|
|
368
|
+
childId: ctx.childSpawnId,
|
|
369
|
+
executionId: ctx.childExecutionId,
|
|
370
|
+
taskDigest,
|
|
371
|
+
...(correlation ? { correlation } : {}),
|
|
372
|
+
...(approvalBinding ? { approvalBinding } : {}),
|
|
373
|
+
...(definitionDigest ? { definitionDigest } : {}),
|
|
374
|
+
};
|
|
375
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { DELEGATE_SUBJECT, type InheritableApproval } from "./approval.ts";
|
|
2
|
+
import { agentCapability, workspaceCapability } from "./capabilities.ts";
|
|
3
|
+
import {
|
|
4
|
+
approvalBindingsEqual,
|
|
5
|
+
buildApprovalBinding,
|
|
6
|
+
type ApprovalBinding,
|
|
7
|
+
type CorrelationMetadata,
|
|
8
|
+
} from "./correlation.ts";
|
|
9
|
+
import type { DefinitionDigest, SkillDefinition } from "./definitions.ts";
|
|
10
|
+
import { AGENT_WILDCARD, WORKSPACE_WILDCARD, resolve, type Capability, type ResolveResult } from "./resolve.ts";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Resolve the approval half of one delegation after its requested capability set is known.
|
|
14
|
+
*
|
|
15
|
+
* Kept as one function because the ordering is security-relevant: compute the unapproved and potential
|
|
16
|
+
* effective sets first, derive the exact binding from those trusted values, then decide which approvals
|
|
17
|
+
* match. An approval must never define the scope against which it is checked.
|
|
18
|
+
*/
|
|
19
|
+
export function resolveDelegationApproval(input: {
|
|
20
|
+
task: string;
|
|
21
|
+
agent?: string;
|
|
22
|
+
requested: Capability[];
|
|
23
|
+
parentGrant: Capability[];
|
|
24
|
+
gated: Capability[];
|
|
25
|
+
approved?: InheritableApproval[];
|
|
26
|
+
spawned?: SkillDefinition;
|
|
27
|
+
definitionDigest?: DefinitionDigest;
|
|
28
|
+
/**
|
|
29
|
+
* Present iff this call is task-bound. Most values remain labels; optional tree_sha/last_change_seq enter
|
|
30
|
+
* the binding only to narrow a supplied approval to the upstream tree state that was reviewed.
|
|
31
|
+
*/
|
|
32
|
+
correlation?: CorrelationMetadata;
|
|
33
|
+
/** Trusted: an id that was resolved against the operator registry and leased. Never a caller claim. */
|
|
34
|
+
boundWorkspaceId?: string;
|
|
35
|
+
/** Caller-declared label. Narrows the binding only; asserts nothing about enforcement. */
|
|
36
|
+
boundContextId?: string;
|
|
37
|
+
parentId: string;
|
|
38
|
+
}): { result: ResolveResult; approvalBinding?: ApprovalBinding; bindingMismatch: boolean } {
|
|
39
|
+
const subject = input.agent ?? DELEGATE_SUBJECT;
|
|
40
|
+
const unapproved = resolve({
|
|
41
|
+
requested: input.requested,
|
|
42
|
+
parentGrant: input.parentGrant,
|
|
43
|
+
gated: input.gated,
|
|
44
|
+
approved: [],
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Authorities the PARENT is spending on this one delegation, gated as such.
|
|
49
|
+
*
|
|
50
|
+
* ADR-0024 established the shape for `agent:<name>`: the id is gated as the parent's authority to run
|
|
51
|
+
* that definition *now*, and never joins requested/effective, because that would hand the child authority
|
|
52
|
+
* to recursively spawn itself. ADR-0035 added a second member of the category — `workspace:<id>`, the
|
|
53
|
+
* authority to route this child somewhere — and shipped without it, so `PI_DADDY_GATED=workspace:prod`
|
|
54
|
+
* was accepted, recorded, and silently inert: no human was ever asked. The ADR claimed the opposite in
|
|
55
|
+
* three places.
|
|
56
|
+
*
|
|
57
|
+
* A LIST rather than two variables on purpose. This is the third namespace whose authorising id is gated
|
|
58
|
+
* per-delegation rather than granted downward, and the first two were written as one special case each;
|
|
59
|
+
* a fourth should extend an array, not add a third `if` and a third field to thread through.
|
|
60
|
+
*/
|
|
61
|
+
const authorisingCapabilities: Capability[] = [];
|
|
62
|
+
const gateAuthority = (authorising: Capability, wildcard: Capability) => {
|
|
63
|
+
if (input.gated.includes(authorising) || input.gated.includes(wildcard)) {
|
|
64
|
+
authorisingCapabilities.push(authorising);
|
|
65
|
+
unapproved.gatedBlocked = [...unapproved.gatedBlocked, authorising];
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
if (input.spawned) gateAuthority(agentCapability(input.spawned.name), AGENT_WILDCARD);
|
|
69
|
+
// Trusted: `boundWorkspaceId` is set only from a routing spec resolved against the operator registry,
|
|
70
|
+
// never from a model-supplied `correlation` claim (R-110).
|
|
71
|
+
if (input.boundWorkspaceId) {
|
|
72
|
+
gateAuthority(workspaceCapability(input.boundWorkspaceId), WORKSPACE_WILDCARD);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const potential = resolve({
|
|
76
|
+
requested: input.requested,
|
|
77
|
+
parentGrant: input.parentGrant,
|
|
78
|
+
gated: input.gated,
|
|
79
|
+
// If the definition also declares its own authorising `agent:<name>`, the same approval unblocks
|
|
80
|
+
// that requested child capability too; excluding it here would bind a smaller set than we provision.
|
|
81
|
+
approved: unapproved.gatedBlocked,
|
|
82
|
+
});
|
|
83
|
+
const approvalBinding = input.correlation
|
|
84
|
+
? buildApprovalBinding({
|
|
85
|
+
task: input.task,
|
|
86
|
+
requested: input.requested,
|
|
87
|
+
effective: potential.effective,
|
|
88
|
+
definitionSha256: input.definitionDigest?.sha256,
|
|
89
|
+
parentId: input.parentId,
|
|
90
|
+
workspaceId: input.boundWorkspaceId,
|
|
91
|
+
contextId: input.boundContextId,
|
|
92
|
+
treeSha: input.correlation?.tree_sha,
|
|
93
|
+
lastChangeSeq: input.correlation?.last_change_seq,
|
|
94
|
+
})
|
|
95
|
+
: undefined;
|
|
96
|
+
|
|
97
|
+
const forSubject = (input.approved ?? []).filter((approval) => approval.subject === subject);
|
|
98
|
+
const approvedCapabilities = forSubject
|
|
99
|
+
.filter((approval) =>
|
|
100
|
+
approvalBinding ? approvalBindingsEqual(approval.binding, approvalBinding) : approval.binding === undefined,
|
|
101
|
+
)
|
|
102
|
+
.map((approval) => approval.capability);
|
|
103
|
+
const bindingMismatch =
|
|
104
|
+
approvalBinding !== undefined &&
|
|
105
|
+
forSubject.some(
|
|
106
|
+
(approval) => approval.binding !== undefined && !approvalBindingsEqual(approval.binding, approvalBinding),
|
|
107
|
+
);
|
|
108
|
+
const result = resolve({
|
|
109
|
+
requested: input.requested,
|
|
110
|
+
parentGrant: input.parentGrant,
|
|
111
|
+
gated: input.gated,
|
|
112
|
+
approved: approvedCapabilities,
|
|
113
|
+
});
|
|
114
|
+
// Filtered against what `resolve()` already listed, not just against approvals. In the ORDINARY chained
|
|
115
|
+
// configuration — route the child to `prod` AND grant it `workspace:prod` so it can route onward — the
|
|
116
|
+
// authorising id and the requested id are spelled identically, so appending unconditionally produced
|
|
117
|
+
// `gatedBlocked: ["workspace:prod","workspace:prod"]`, which reached the refusal text a model reads
|
|
118
|
+
// (*"workspace:prod, workspace:prod requires explicit approval"*) and the append-only ledger, whose schema
|
|
119
|
+
// has no `uniqueItems`. The old `agent:`-only code had the same shape and never hit it, because a
|
|
120
|
+
// self-recursive `agent:X` ceiling is not a thing anybody writes.
|
|
121
|
+
const stillGated = authorisingCapabilities.filter(
|
|
122
|
+
(c) => !approvedCapabilities.includes(c) && !result.gatedBlocked.includes(c),
|
|
123
|
+
);
|
|
124
|
+
if (stillGated.length > 0) result.gatedBlocked = [...result.gatedBlocked, ...stillGated];
|
|
125
|
+
return { result, ...(approvalBinding ? { approvalBinding } : {}), bindingMismatch };
|
|
126
|
+
}
|