pi-daddy 0.28.0 → 0.32.0
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 +99 -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 +6 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +108 -103
- 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 +98 -0
- package/dist/kernel/catalog.d.ts.map +1 -0
- package/dist/kernel/catalog.js +280 -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 +314 -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.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.map +1 -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.map +1 -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 +41 -33
- 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 +60 -11
- 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 +136 -89
- 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 +313 -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 +370 -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/run-child.ts +418 -0
- package/src/kernel/skill-packages.ts +329 -0
- package/src/kernel/skill-resources.ts +64 -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.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.map +0 -1
- 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.map +0 -1
- 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/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/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/{resolve.d.ts → kernel/resolve.d.ts} +0 -0
- /package/dist/{routing-authority.d.ts → kernel/routing-authority.d.ts} +0 -0
- /package/dist/{routing-authority.js → kernel/routing-authority.js} +0 -0
- /package/dist/{skill-resources.d.ts → kernel/skill-resources.d.ts} +0 -0
- /package/dist/{spawn.d.ts → kernel/spawn.d.ts} +0 -0
- /package/dist/{spawn.js → kernel/spawn.js} +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
- /package/src/{routing-authority.ts → kernel/routing-authority.ts} +0 -0
- /package/src/{spawn.ts → kernel/spawn.ts} +0 -0
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Approval model for gated capabilities — pure, so it is exhaustively testable without pi.
|
|
3
|
+
*
|
|
4
|
+
* `resolve()` computes `gatedBlocked`: capabilities a session legitimately holds but which may not enter
|
|
5
|
+
* a child's grant without a human saying so. This module decides WHAT a yes means — how far it reaches,
|
|
6
|
+
* how long it lasts, and what it is keyed to. It never performs I/O and never prompts; see
|
|
7
|
+
* `approval-store.ts` and `approval-prompt.ts` for those.
|
|
8
|
+
*
|
|
9
|
+
* ADR-0010 records the four decisions encoded here.
|
|
10
|
+
*/
|
|
11
|
+
import { WILDCARD } from "./pi-tools.js";
|
|
12
|
+
import { approvalBindingsEqual } from "./correlation.js";
|
|
13
|
+
/** How far a single yes reaches in time. */
|
|
14
|
+
export const APPROVAL_SCOPES = ["once", "session", "always"];
|
|
15
|
+
/** Where a yes came from, for the ledger. These call for different follow-ups, so they stay distinct. */
|
|
16
|
+
export const APPROVAL_SOURCES = ["prompt", "session", "persisted", "inherited"];
|
|
17
|
+
/**
|
|
18
|
+
* Subject used for delegate-path approvals.
|
|
19
|
+
*
|
|
20
|
+
* The delegate tool has no human-authored subject: the only things naming a child are the task string and
|
|
21
|
+
* the tool list, both chosen by the model. A key the model controls is not a key, so delegate approvals
|
|
22
|
+
* use this fixed literal — "allow write for delegations this session" — and are never persisted.
|
|
23
|
+
* Angle brackets cannot appear in an agent-type name (`parseAgentType` reads an identifier), so this can
|
|
24
|
+
* never collide with a real type.
|
|
25
|
+
*/
|
|
26
|
+
export const DELEGATE_SUBJECT = "<delegate>";
|
|
27
|
+
/**
|
|
28
|
+
* Lifetime of a persisted approval.
|
|
29
|
+
*
|
|
30
|
+
* Deliberately a constant rather than an environment variable: a knob that silently extends every gate is
|
|
31
|
+
* the first thing an impatient operator would reach for.
|
|
32
|
+
*/
|
|
33
|
+
export const APPROVAL_TTL_DAYS = 30;
|
|
34
|
+
const DAY_MS = 86_400_000;
|
|
35
|
+
/** `tool:write` + `docs-writer` -> `tool:write@docs-writer`. */
|
|
36
|
+
export function approvalKey(capability, subject) {
|
|
37
|
+
return `${capability}@${subject}`;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* May this resolution raise an approval dialog?
|
|
41
|
+
*
|
|
42
|
+
* `resolve()` computes `denied` and `gatedBlocked` INDEPENDENTLY (deliberately — each rejection reason is
|
|
43
|
+
* reported rather than masked by whichever filter ran first), and both `decideSpawn` and `planDelegation`
|
|
44
|
+
* refuse outright on `denied` while still attaching the full result. So a request mixing a gated capability
|
|
45
|
+
* with one the session does not hold at all would otherwise prompt a human about the gated one and then be
|
|
46
|
+
* refused anyway for the other.
|
|
47
|
+
*
|
|
48
|
+
* That is not merely noise. A *session* yes is recorded and republished to children, and an *always* yes is
|
|
49
|
+
* written to disk for 30 days — both banked against a spawn that never happened, and both reachable by a
|
|
50
|
+
* model that appends one unheld capability to an otherwise ordinary request. A person is therefore only
|
|
51
|
+
* asked about a spawn that would actually proceed if they said yes.
|
|
52
|
+
*
|
|
53
|
+
* `clipped` is deliberately NOT a bar: it does not refuse a spawn, it just drops those capabilities from
|
|
54
|
+
* the child's grant, so the spawn does proceed and the question is real.
|
|
55
|
+
*/
|
|
56
|
+
export function shouldSeekApproval(result) {
|
|
57
|
+
if (!result)
|
|
58
|
+
return false;
|
|
59
|
+
if (result.denied.length > 0)
|
|
60
|
+
return false;
|
|
61
|
+
// ADR-0011. A grant retaining a universal capability is refused by `assertNarrowing` no matter what
|
|
62
|
+
// a human says, so asking is worse than useless: the dialog cannot change the outcome, and a
|
|
63
|
+
// `session`- or `always`-scoped yes given there is banked and reused for later spawns that DO
|
|
64
|
+
// proceed. Same harm the `denied` guard above exists to prevent.
|
|
65
|
+
if (result.universal.length > 0)
|
|
66
|
+
return false;
|
|
67
|
+
return result.gatedBlocked.length > 0;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Scopes a given call site may offer. `always` requires a **human-authored subject**.
|
|
71
|
+
*
|
|
72
|
+
* ADR-0019. The rule is unchanged; which paths satisfy it is not. `"interceptor"` used to be the only one
|
|
73
|
+
* and ADR-0016 deleted it, leaving `always` offerable from nowhere — 220 lines of persistence no live path
|
|
74
|
+
* could write to. `"definition"` is `delegate({agent})`, where ADR-0017 makes the subject an
|
|
75
|
+
* operator-authored file the session must hold `agent:<name>` to name at all. `"delegate"` is the `tools:`
|
|
76
|
+
* form, where the original reasoning stands untouched: the only things naming that child are the task and
|
|
77
|
+
* the tool list, both model-chosen, and a key the model controls is not a key.
|
|
78
|
+
*/
|
|
79
|
+
export function offeredScopes(path) {
|
|
80
|
+
return path === "definition" ? ["once", "session", "always"] : ["once", "session"];
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* What a child may inherit, as `capability@subject` keys.
|
|
84
|
+
*
|
|
85
|
+
* ADR-0014 changed this in two ways, and both were cases of a human's explicit choice being discarded
|
|
86
|
+
* one hop down:
|
|
87
|
+
*
|
|
88
|
+
* - **`once` is dropped** (A-S1). The scope chosen was not carried, so a `once` approval was written
|
|
89
|
+
* into the child's `PI_DADDY_APPROVED` and republished onward — the most conservative answer a human
|
|
90
|
+
* can give produced the least conservative outcome, across an entire descendant subtree.
|
|
91
|
+
* - **The subject is kept** (A-S6). Bare capabilities were published, so a `<delegate>`-subject approval
|
|
92
|
+
* matched *any* subject below. `approvalKey`'s own doc argues at length that a model-controlled name
|
|
93
|
+
* is not a key; erasing the subject made that argument moot exactly where it mattered.
|
|
94
|
+
*
|
|
95
|
+
* The clamp to `grant` is unchanged and still load-bearing: **approval cannot conjure a capability**, so
|
|
96
|
+
* an inherited yes is only ever honoured for something the child independently holds.
|
|
97
|
+
*/
|
|
98
|
+
export function inheritApprovals(approved, grant) {
|
|
99
|
+
const held = new Set(grant);
|
|
100
|
+
return [
|
|
101
|
+
...new Set(approved
|
|
102
|
+
.filter((a) => a.scope !== "once" && a.binding === undefined && a.capability !== WILDCARD && held.has(a.capability))
|
|
103
|
+
// A definition subject MUST carry a pin to cross a boundary (ADR-0022, hardened after F1).
|
|
104
|
+
//
|
|
105
|
+
// `verifyInherited` honours an unpinned entry by decision — `<delegate>` names no file and a
|
|
106
|
+
// pre-0.11 parent sends none — so an unpinned entry for a subject that *does* name a file is an
|
|
107
|
+
// approval exempt from the digest check. Enforcing it at the point of PUBLICATION rather than
|
|
108
|
+
// trusting each caller to attach a digest is what makes it structural: two call sites build these
|
|
109
|
+
// entries, one of them forgot, and every fresh approval crossed unpinned as a result. A caller that
|
|
110
|
+
// cannot produce a digest (the definition is not on disk here) now publishes nothing, which is the
|
|
111
|
+
// fail-closed direction.
|
|
112
|
+
.filter((a) => a.subject === DELEGATE_SUBJECT || Boolean(a.bodySha256))
|
|
113
|
+
.map((a) => approvalKey(a.capability, a.subject) + (a.bodySha256 ? `#${a.bodySha256}` : ""))),
|
|
114
|
+
].sort();
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Read the inherited set back on the child side.
|
|
118
|
+
*
|
|
119
|
+
* Anything that is not a well-formed `capability@subject` pair is dropped rather than guessed at. An
|
|
120
|
+
* unparseable entry granting nothing is a missing prompt; an unparseable entry granting *something* is a
|
|
121
|
+
* silent escalation, so the direction of the failure is not a matter of taste.
|
|
122
|
+
*/
|
|
123
|
+
export function parseInherited(raw) {
|
|
124
|
+
const out = new Map();
|
|
125
|
+
for (const item of (raw ?? "").split(",")) {
|
|
126
|
+
const trimmed = item.trim();
|
|
127
|
+
// ADR-0022 appends `#<sha256>`. Split it off FIRST: a `#` cannot appear in a capability id or in a
|
|
128
|
+
// definition name (identity comes from a path component), so this is unambiguous.
|
|
129
|
+
const hash = trimmed.indexOf("#");
|
|
130
|
+
const key = hash === -1 ? trimmed : trimmed.slice(0, hash);
|
|
131
|
+
const digest = hash === -1 ? undefined : trimmed.slice(hash + 1);
|
|
132
|
+
const at = key.indexOf("@");
|
|
133
|
+
if (at <= 0 || at === key.length - 1)
|
|
134
|
+
continue;
|
|
135
|
+
if (hash !== -1 && !digest)
|
|
136
|
+
continue; // `key#` promises a pin and carries none — drop it, do not guess
|
|
137
|
+
out.set(key, digest);
|
|
138
|
+
}
|
|
139
|
+
return out;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Drop inherited approvals that were given for different instructions (ADR-0022).
|
|
143
|
+
*
|
|
144
|
+
* The hole this closes: `resolveApprovals` checks `inherited` FIRST and none of it had ever been through
|
|
145
|
+
* `entryVerdict`, so ADR-0019's headline property — an approval is void once the instructions change — held
|
|
146
|
+
* on the one path that persists and neither of the two that do not. A child is a fresh process: it re-reads
|
|
147
|
+
* the definition from disk, so a `git pull` between the parent's approval and the child's spawn meant the
|
|
148
|
+
* child ran a rewritten body under a yes given about the old one, recording `approvalSource: "inherited"`.
|
|
149
|
+
*
|
|
150
|
+
* An entry with **no** digest is honoured, and that is not a hole: `<delegate>` legitimately has none, and
|
|
151
|
+
* neither does a pre-0.11 parent. It is the same trade `entryVerdict` refuses to make for a *persisted*
|
|
152
|
+
* entry — but that entry is 30 days old and read off disk, whereas this one was handed over by a live parent
|
|
153
|
+
* process in the same tree, which is a much shorter chain to trust.
|
|
154
|
+
*/
|
|
155
|
+
export function verifyInherited(parsed, snapshotOf) {
|
|
156
|
+
const out = new Set();
|
|
157
|
+
for (const [key, digest] of parsed) {
|
|
158
|
+
if (digest === undefined) {
|
|
159
|
+
out.add(key);
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
const current = snapshotOf(key.slice(key.indexOf("@") + 1));
|
|
163
|
+
if (current && current.bodySha256 === digest)
|
|
164
|
+
out.add(key);
|
|
165
|
+
}
|
|
166
|
+
return out;
|
|
167
|
+
}
|
|
168
|
+
/** When an approval granted now stops being valid. Computed once at write time and stored, so an entry's
|
|
169
|
+
* lifetime is visible in the file rather than implied by whichever version of the code reads it. */
|
|
170
|
+
export function expiryFor(approvedAt) {
|
|
171
|
+
return new Date(approvedAt.getTime() + APPROVAL_TTL_DAYS * DAY_MS).toISOString();
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Decide whether a persisted approval still means what the human meant.
|
|
175
|
+
*
|
|
176
|
+
* Four ways it can stop meaning that, and each is reported distinctly so `/grants approvals` can explain
|
|
177
|
+
* itself rather than silently showing fewer rows:
|
|
178
|
+
*
|
|
179
|
+
* - `foreign-cwd` — the file was copied or committed and opened somewhere else. Nobody in THIS checkout
|
|
180
|
+
* was asked, so it authorises nothing here (R-27).
|
|
181
|
+
* - `expired` — a gate opened during one project must not still be open next quarter.
|
|
182
|
+
* - `type-changed` — the confused deputy. The key names a file whose contents can change after approval:
|
|
183
|
+
* approve `tool:write@docs-writer` when it declares `read, write`, and later that file
|
|
184
|
+
* gains `bash`. The entry would still match the key while describing something the
|
|
185
|
+
* human never saw.
|
|
186
|
+
* - `instructions-changed` — the same confused deputy, one level deeper. The tools are untouched but the
|
|
187
|
+
* BODY was rewritten, so the child would now be told to do something the human never
|
|
188
|
+
* saw. Only checkable since ADR-0018 gave the body a digest; an entry carrying no body
|
|
189
|
+
* pin lands here too, because unverifiable is not the same as unchanged.
|
|
190
|
+
* - `type-missing` — the type was deleted or renamed; a new file could later claim the same name.
|
|
191
|
+
*/
|
|
192
|
+
export function entryVerdict(input) {
|
|
193
|
+
if (input.entry.cwd !== input.cwd)
|
|
194
|
+
return "foreign-cwd";
|
|
195
|
+
const expiresAt = new Date(input.entry.expiresAt).getTime();
|
|
196
|
+
// NaN <= x is false in JS, so an unparseable date would otherwise fail OPEN. A cache we cannot
|
|
197
|
+
// read the expiry of is a cache we do not trust — treat it as expired, per the spec's rule that a
|
|
198
|
+
// broken cache grants nothing.
|
|
199
|
+
if (!Number.isFinite(expiresAt) || expiresAt <= input.now.getTime())
|
|
200
|
+
return "expired";
|
|
201
|
+
if (input.current === null)
|
|
202
|
+
return "type-missing";
|
|
203
|
+
// Compare as sorted lists: reformatting or reordering a `tools:` line is not a change; adding,
|
|
204
|
+
// removing, or renaming a capability is.
|
|
205
|
+
const approved = [...input.entry.grantAtApproval].sort().join(",");
|
|
206
|
+
const current = [...input.current.ceiling].sort().join(",");
|
|
207
|
+
if (approved !== current)
|
|
208
|
+
return "type-changed";
|
|
209
|
+
// Fail closed on an unpinned entry: it was written before bodies were digested, so "unchanged" is not
|
|
210
|
+
// something this code can assert about it. One re-approval is the honest cost.
|
|
211
|
+
if (input.entry.bodyAtApproval !== input.current.bodySha256)
|
|
212
|
+
return "instructions-changed";
|
|
213
|
+
return "valid";
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Satisfy as much of `gated` as possible without asking anyone.
|
|
217
|
+
*
|
|
218
|
+
* Precedence is inherited -> session -> persisted -> prompt. Order matters only for what gets REPORTED
|
|
219
|
+
* (the ledger's `approvalSource`); any hit satisfies equally. Checking all three before prompting is what
|
|
220
|
+
* stops an orchestrator's tenth delegation from raising a tenth identical dialog.
|
|
221
|
+
*/
|
|
222
|
+
export function resolveApprovals(input) {
|
|
223
|
+
// ADR-0014: these are `capability@subject` keys now, not bare capabilities, so an approval given for
|
|
224
|
+
// one subject can no longer satisfy another.
|
|
225
|
+
const inherited = input.inherited ?? new Set();
|
|
226
|
+
const approved = [];
|
|
227
|
+
const needsPrompt = [];
|
|
228
|
+
const scopeMismatched = [];
|
|
229
|
+
const expired = [];
|
|
230
|
+
const sources = {}, scopes = {};
|
|
231
|
+
const expiresAt = {};
|
|
232
|
+
for (const capability of [...new Set(input.gated)].sort()) {
|
|
233
|
+
const key = approvalKey(capability, input.subject);
|
|
234
|
+
const expected = input.expectedBinding;
|
|
235
|
+
const sessionBinding = input.sessionApprovalBindings?.get(key);
|
|
236
|
+
const persisted = input.persisted.get(key);
|
|
237
|
+
const inheritedApplies = expected === undefined && inherited.has(key);
|
|
238
|
+
const legacySessionApplies = expected === undefined && input.sessionApprovals.has(key);
|
|
239
|
+
const boundSessionApplies = expected !== undefined && approvalBindingsEqual(sessionBinding, expected);
|
|
240
|
+
const persistedApplies = persisted !== undefined &&
|
|
241
|
+
(expected === undefined ? persisted.binding === undefined : approvalBindingsEqual(persisted.binding, expected));
|
|
242
|
+
if (inheritedApplies) {
|
|
243
|
+
approved.push(capability);
|
|
244
|
+
sources[capability] = "inherited";
|
|
245
|
+
scopes[capability] = "session";
|
|
246
|
+
}
|
|
247
|
+
else if (legacySessionApplies || boundSessionApplies) {
|
|
248
|
+
approved.push(capability);
|
|
249
|
+
sources[capability] = "session";
|
|
250
|
+
scopes[capability] = "session";
|
|
251
|
+
}
|
|
252
|
+
else if (persistedApplies) {
|
|
253
|
+
approved.push(capability);
|
|
254
|
+
sources[capability] = "persisted";
|
|
255
|
+
scopes[capability] = "always";
|
|
256
|
+
expiresAt[capability] = persisted.expiresAt;
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
needsPrompt.push(capability);
|
|
260
|
+
if (input.expiredKeys?.has(key))
|
|
261
|
+
expired.push(capability);
|
|
262
|
+
else if (expected !== undefined &&
|
|
263
|
+
(sessionBinding !== undefined || persisted !== undefined || input.sessionApprovals.has(key))) {
|
|
264
|
+
scopeMismatched.push(capability);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return { approved, needsPrompt, scopeMismatched, expired, sources, scopes, expiresAt };
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=approval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../../src/kernel/approval.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability ids: their grammar, and the two authority predicates over them.
|
|
3
|
+
*
|
|
4
|
+
* Split out of `delegate.ts` when ADR-0024 pushed that file past the 400-line ceiling and
|
|
5
|
+
* `test/file-size.test.ts` refused it — for the second time, and answered the same way as the first: split
|
|
6
|
+
* the file the way the failure message says rather than raise the cap on the guard.
|
|
7
|
+
*
|
|
8
|
+
* The seam is not arbitrary. Three modules outside `delegate.ts` already imported these
|
|
9
|
+
* (`extensions/session.ts` for `DELEGATE_CAPABILITY`, `extensions/delegation.ts` and
|
|
10
|
+
* `extensions/run-delegation.ts` for `maySpawnDefinition`), which is the evidence that they were a separate
|
|
11
|
+
* concern living in the wrong file: *what an id means and who may use it* is a different question from
|
|
12
|
+
* *what one delegation does*.
|
|
13
|
+
*/
|
|
14
|
+
import { type Capability } from "./resolve.ts";
|
|
15
|
+
/** The capability that authorises spawning a definition (ADR-0017). `tool:*` satisfies any of them. */
|
|
16
|
+
export declare const agentCapability: (name: string) => Capability;
|
|
17
|
+
/**
|
|
18
|
+
* May this grant spawn that definition? (ADR-0017.)
|
|
19
|
+
*
|
|
20
|
+
* `resolve()` is exact-match plus subsumption and has no wildcard rule — a wildcard session works only
|
|
21
|
+
* because `deriveOwnGrant` *enumerates* its observed tools alongside `tool:*`. Definitions are not tools,
|
|
22
|
+
* so nothing enumerates them, and the wildcard has to be honoured here explicitly. Without that an
|
|
23
|
+
* UNGOVERNED session would stop being able to spawn, and "governance is opt-in" is the one rule this
|
|
24
|
+
* package must never break by accident.
|
|
25
|
+
*/
|
|
26
|
+
export declare function maySpawnDefinition(ownGrant: Capability[], name: string): boolean;
|
|
27
|
+
/** The tool name that confers the ability to delegate further. */
|
|
28
|
+
export declare const DELEGATE_CAPABILITY: Capability;
|
|
29
|
+
/**
|
|
30
|
+
* Every namespace a capability id may carry, as its literal prefix.
|
|
31
|
+
*
|
|
32
|
+
* **One list, because there were three and adding a namespace only updated some of them.** ADR-0035 taught
|
|
33
|
+
* `normaliseCapability` about `workspace:` and left `ceilingForDefinition` (which mangled it into
|
|
34
|
+
* `tool:workspace:<id>`) and `isSafeCapability` (which called it malformed) behind. The two places that parse
|
|
35
|
+
* an id's namespace read this, so a fifth namespace is one entry rather than a third divergence.
|
|
36
|
+
*
|
|
37
|
+
* **Not every prefix decision in the package.** Inline `startsWith("` tests on a capability namespace are
|
|
38
|
+
* scattered across `src/` and `extensions/`; this list is read by two of them. **No number is written here,
|
|
39
|
+
* and the history is why:** SPEC first claimed the list was "what every site reads"; a correction said "six"
|
|
40
|
+
* while its own enumeration listed seven; this docstring then said "nine" in the sentence claiming it gave no
|
|
41
|
+
* number; and the correction to *that* said "fourteen", which counted every file containing any
|
|
42
|
+
* `startsWith("` — CLI flags, `git worktree list` parsing, an assurance sentinel and node_modules entries
|
|
43
|
+
* among them. Four numbers, four wrong. The command, so nobody has to quote a predecessor:
|
|
44
|
+
*
|
|
45
|
+
* grep -rl 'startsWith("\(tool:\|ext:\|agent:\|skill:\|workspace:\)' src extensions
|
|
46
|
+
*
|
|
47
|
+
* Consolidating the sites is a separate change, and a count nobody re-derives is the defect this list exists
|
|
48
|
+
* to prevent.
|
|
49
|
+
*
|
|
50
|
+
* `docs/SPEC.md`'s grammar section is the prose statement of the same list and is kept in step with it.
|
|
51
|
+
*/
|
|
52
|
+
export declare const CAPABILITY_NAMESPACE_PREFIXES: readonly ["tool:", "ext:", "skill:", "agent:", "workspace:"];
|
|
53
|
+
/** Accept `read` or `tool:read` or `ext:pkg/tool` and normalise to a capability id. */
|
|
54
|
+
export declare function normaliseCapability(raw: string): Capability;
|
|
55
|
+
/** The capability that authorises routing a child to one registered workspace (ADR-0035). */
|
|
56
|
+
export declare function workspaceCapability(workspaceId: string): Capability;
|
|
57
|
+
/**
|
|
58
|
+
* May this session route a child to workspace `id`?
|
|
59
|
+
*
|
|
60
|
+
* Mirrors `maySpawnDefinition` deliberately — same shape, same wildcard handling, same reason. Routing was
|
|
61
|
+
* the one governance dimension that did not attenuate (R-131, measured in
|
|
62
|
+
* `docs/probes/g36-workspace-attenuation`): the registry inherited into every child and nothing checked the
|
|
63
|
+
* caller's authority, so a child routed to `staging` could route its grandchild to `prod`.
|
|
64
|
+
*
|
|
65
|
+
* `tool:*` satisfies it because governance is opt-in — an ungoverned session holds the wildcard and must
|
|
66
|
+
* keep working exactly as before.
|
|
67
|
+
*/
|
|
68
|
+
export declare function mayRouteToWorkspace(ownGrant: readonly Capability[], workspaceId: string): boolean;
|
|
69
|
+
/** False when an id would be read as more than one capability by any channel that carries it. */
|
|
70
|
+
export declare function isWellFormedCapability(id: string): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* The STRICT grammar: a whitelist of what a capability id may look like, not a blocklist of what it may not.
|
|
73
|
+
*
|
|
74
|
+
* **Two consumers, and they are two different reasons for the same rule.** It lives here rather than in
|
|
75
|
+
* either of them because it shipped in one and was needed by both:
|
|
76
|
+
*
|
|
77
|
+
* 1. `skill-packages.ts` — the boundary that GENERATES a grant. R-77/R-78: a package declaring
|
|
78
|
+
* `allowed-tools: Read,ext:x";touch /tmp/pwned;PI_DADDY_GRANT="` produced a `.pi/grants.env` that ran
|
|
79
|
+
* arbitrary code the moment an operator sourced the line `init` prints.
|
|
80
|
+
* 2. `workspace.ts` — the operator registry, since ADR-0035 made a registry id the tail of a capability id
|
|
81
|
+
* (`workspace:<id>`). That made the registry an input to this grammar, and it got the LOOSE
|
|
82
|
+
* `isWellFormedCapability` blocklist instead, which review showed costs three things:
|
|
83
|
+
* an id of literally `*` loaded and minted `WORKSPACE_WILDCARD`, so an operator naming ONE worktree held
|
|
84
|
+
* routing authority over every id in the registry including ones added later;
|
|
85
|
+
* an id containing a space became TWO capabilities, because `ceilingForDefinition` splits `allowed-tools`
|
|
86
|
+
* on `[\s,]+` — `allowed-tools: read, workspace:prod bash` measured as
|
|
87
|
+
* `['tool:bash','tool:read','workspace:prod']`, i.e. routing over production plus a shell, neither typed
|
|
88
|
+
* by anyone (0.18.1's comma, one namespace over);
|
|
89
|
+
* and quote/`$()`/backtick ids reached the `ROUTABLE WORKSPACES` block of the generated file, whose own
|
|
90
|
+
* instructions tell the operator to paste them into `PI_DADDY_GRANT`.
|
|
91
|
+
*
|
|
92
|
+
* **A blocklist was the wrong shape for this and the comment on `isWellFormedCapability` says why it is the
|
|
93
|
+
* right shape THERE**: that one guards the enforcement path, which must keep accepting whatever ids operators
|
|
94
|
+
* already have. A registry is a file the operator writes and can rename, so refusing a hostile id costs
|
|
95
|
+
* nothing — and `grant-env.ts`'s standing warning applies to it exactly: *"the third channel — whatever it
|
|
96
|
+
* turns out to be — should cost a refusal rather than an injection."* The registry was the third channel.
|
|
97
|
+
*/
|
|
98
|
+
/**
|
|
99
|
+
* A workspace registry id, which is NOT a tool name and needed its own rule.
|
|
100
|
+
*
|
|
101
|
+
* `isSafeCapability` was reused here first, and that was the error: it is the grammar for a *tool* name, and
|
|
102
|
+
* it refused ids that published 0.18.1 accepted — `feature/x` above all. Git worktrees are routinely named
|
|
103
|
+
* after their branch, so a slash is the ordinary case, and a slash splits nothing: not the comma-separated
|
|
104
|
+
* grant, not `allowed-tools`' `[\s,]+`. Refusing it bought no safety and broke the common setup.
|
|
105
|
+
*
|
|
106
|
+
* What is refused, and why each one earns it:
|
|
107
|
+
* - **whitespace** — `ceilingForDefinition` splits `allowed-tools` on `[\s,]+`, so `workspace:prod bash`
|
|
108
|
+
* measured as `['tool:bash','tool:read','workspace:prod']`: routing over production plus a shell, neither
|
|
109
|
+
* typed by anyone. 0.18.1's comma, one namespace over.
|
|
110
|
+
* - **comma, CR, LF, NUL** — split a grant.
|
|
111
|
+
* - **`*`** — collides with `WORKSPACE_WILDCARD`, so registering a worktree as `*` and granting
|
|
112
|
+
* `workspace:*` believing it named that one root minted routing authority over the whole registry.
|
|
113
|
+
* - **quotes, `$`, backticks, `;`, `&`, `|`, `<`, `>`, `(`, `)`, `\`, `#`** — reach the ROUTABLE WORKSPACES
|
|
114
|
+
* block of a generated `.pi/grants.env`, whose own instructions tell the operator to paste the id into
|
|
115
|
+
* `PI_DADDY_GRANT`. Sourcing the file was safe; following its instructions executed. R-77/R-78.
|
|
116
|
+
* - **control characters and non-ASCII** — the generated file is reviewed in an editor and `/grants` prints
|
|
117
|
+
* these; backspace and ANSI escapes let one id render as another. This is the one refusal that costs a
|
|
118
|
+
* legitimate user something (a non-English worktree name), and it is a deliberate trade recorded as
|
|
119
|
+
* breaking rather than asserted to cost nothing.
|
|
120
|
+
*/
|
|
121
|
+
export declare function isSafeWorkspaceId(id: string): boolean;
|
|
122
|
+
export declare function isSafeCapability(id: Capability): boolean;
|
|
123
|
+
/**
|
|
124
|
+
* The write-side backstop, for every channel that joins capabilities into one string.
|
|
125
|
+
*
|
|
126
|
+
* `covered()` already refuses to GRANT a malformed id, so this should be unreachable — which is exactly
|
|
127
|
+
* why it exists. `grant-env.ts` says it better than I can: "the third channel — whatever it turns out to
|
|
128
|
+
* be — should cost a refusal rather than an injection. A guard that depends on my enumeration being
|
|
129
|
+
* complete is not a guard." The propagation channel turned out to be that third channel, and it had no
|
|
130
|
+
* backstop while the file-writing channel did.
|
|
131
|
+
*
|
|
132
|
+
* Loud rather than silently filtered: a malformed id here means something upstream admitted one, and
|
|
133
|
+
* dropping it quietly would hide the defect that produced it.
|
|
134
|
+
*/
|
|
135
|
+
export declare function assertCapabilitiesArePropagatable(grant: readonly Capability[]): void;
|
|
136
|
+
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/kernel/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAsC,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAInF,uGAAuG;AACvG,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,KAAG,UAA6B,CAAC;AAE7E;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAKhF;AAED,kEAAkE;AAClE,eAAO,MAAM,mBAAmB,EAAE,UAA4B,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,6BAA6B,8DAA+D,CAAC;AAE1G,uFAAuF;AACvF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAI3D;AAED,6FAA6F;AAC7F,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAEnE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,SAAS,UAAU,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAGjG;AAwBD,iGAAiG;AACjG,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO,CAcxD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,IAAI,CAapF"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability ids: their grammar, and the two authority predicates over them.
|
|
3
|
+
*
|
|
4
|
+
* Split out of `delegate.ts` when ADR-0024 pushed that file past the 400-line ceiling and
|
|
5
|
+
* `test/file-size.test.ts` refused it — for the second time, and answered the same way as the first: split
|
|
6
|
+
* the file the way the failure message says rather than raise the cap on the guard.
|
|
7
|
+
*
|
|
8
|
+
* The seam is not arbitrary. Three modules outside `delegate.ts` already imported these
|
|
9
|
+
* (`extensions/session.ts` for `DELEGATE_CAPABILITY`, `extensions/delegation.ts` and
|
|
10
|
+
* `extensions/run-delegation.ts` for `maySpawnDefinition`), which is the evidence that they were a separate
|
|
11
|
+
* concern living in the wrong file: *what an id means and who may use it* is a different question from
|
|
12
|
+
* *what one delegation does*.
|
|
13
|
+
*/
|
|
14
|
+
import { AGENT_WILDCARD, WORKSPACE_WILDCARD } from "./resolve.js";
|
|
15
|
+
import { WILDCARD } from "./pi-tools.js";
|
|
16
|
+
import { GovernanceRefusal, refusal } from "./refusals.js";
|
|
17
|
+
/** The capability that authorises spawning a definition (ADR-0017). `tool:*` satisfies any of them. */
|
|
18
|
+
export const agentCapability = (name) => `agent:${name}`;
|
|
19
|
+
/**
|
|
20
|
+
* May this grant spawn that definition? (ADR-0017.)
|
|
21
|
+
*
|
|
22
|
+
* `resolve()` is exact-match plus subsumption and has no wildcard rule — a wildcard session works only
|
|
23
|
+
* because `deriveOwnGrant` *enumerates* its observed tools alongside `tool:*`. Definitions are not tools,
|
|
24
|
+
* so nothing enumerates them, and the wildcard has to be honoured here explicitly. Without that an
|
|
25
|
+
* UNGOVERNED session would stop being able to spawn, and "governance is opt-in" is the one rule this
|
|
26
|
+
* package must never break by accident.
|
|
27
|
+
*/
|
|
28
|
+
export function maySpawnDefinition(ownGrant, name) {
|
|
29
|
+
// ADR-0023 adds the middle case. `tool:*` is authority to grant every tool and satisfies this too;
|
|
30
|
+
// `agent:*` is authority to spawn any definition and grants no tools at all, which is the configuration
|
|
31
|
+
// an operator wanting "any of our definitions, narrow tools" previously had to fake with `tool:*`.
|
|
32
|
+
return ownGrant.includes(WILDCARD) || ownGrant.includes(AGENT_WILDCARD) || ownGrant.includes(agentCapability(name));
|
|
33
|
+
}
|
|
34
|
+
/** The tool name that confers the ability to delegate further. */
|
|
35
|
+
export const DELEGATE_CAPABILITY = "tool:delegate";
|
|
36
|
+
/**
|
|
37
|
+
* Every namespace a capability id may carry, as its literal prefix.
|
|
38
|
+
*
|
|
39
|
+
* **One list, because there were three and adding a namespace only updated some of them.** ADR-0035 taught
|
|
40
|
+
* `normaliseCapability` about `workspace:` and left `ceilingForDefinition` (which mangled it into
|
|
41
|
+
* `tool:workspace:<id>`) and `isSafeCapability` (which called it malformed) behind. The two places that parse
|
|
42
|
+
* an id's namespace read this, so a fifth namespace is one entry rather than a third divergence.
|
|
43
|
+
*
|
|
44
|
+
* **Not every prefix decision in the package.** Inline `startsWith("` tests on a capability namespace are
|
|
45
|
+
* scattered across `src/` and `extensions/`; this list is read by two of them. **No number is written here,
|
|
46
|
+
* and the history is why:** SPEC first claimed the list was "what every site reads"; a correction said "six"
|
|
47
|
+
* while its own enumeration listed seven; this docstring then said "nine" in the sentence claiming it gave no
|
|
48
|
+
* number; and the correction to *that* said "fourteen", which counted every file containing any
|
|
49
|
+
* `startsWith("` — CLI flags, `git worktree list` parsing, an assurance sentinel and node_modules entries
|
|
50
|
+
* among them. Four numbers, four wrong. The command, so nobody has to quote a predecessor:
|
|
51
|
+
*
|
|
52
|
+
* grep -rl 'startsWith("\(tool:\|ext:\|agent:\|skill:\|workspace:\)' src extensions
|
|
53
|
+
*
|
|
54
|
+
* Consolidating the sites is a separate change, and a count nobody re-derives is the defect this list exists
|
|
55
|
+
* to prevent.
|
|
56
|
+
*
|
|
57
|
+
* `docs/SPEC.md`'s grammar section is the prose statement of the same list and is kept in step with it.
|
|
58
|
+
*/
|
|
59
|
+
export const CAPABILITY_NAMESPACE_PREFIXES = ["tool:", "ext:", "skill:", "agent:", "workspace:"];
|
|
60
|
+
/** Accept `read` or `tool:read` or `ext:pkg/tool` and normalise to a capability id. */
|
|
61
|
+
export function normaliseCapability(raw) {
|
|
62
|
+
const value = raw.trim();
|
|
63
|
+
if (CAPABILITY_NAMESPACE_PREFIXES.some((prefix) => value.startsWith(prefix)))
|
|
64
|
+
return value;
|
|
65
|
+
return `tool:${value}`;
|
|
66
|
+
}
|
|
67
|
+
/** The capability that authorises routing a child to one registered workspace (ADR-0035). */
|
|
68
|
+
export function workspaceCapability(workspaceId) {
|
|
69
|
+
return `workspace:${workspaceId}`;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* May this session route a child to workspace `id`?
|
|
73
|
+
*
|
|
74
|
+
* Mirrors `maySpawnDefinition` deliberately — same shape, same wildcard handling, same reason. Routing was
|
|
75
|
+
* the one governance dimension that did not attenuate (R-131, measured in
|
|
76
|
+
* `docs/probes/g36-workspace-attenuation`): the registry inherited into every child and nothing checked the
|
|
77
|
+
* caller's authority, so a child routed to `staging` could route its grandchild to `prod`.
|
|
78
|
+
*
|
|
79
|
+
* `tool:*` satisfies it because governance is opt-in — an ungoverned session holds the wildcard and must
|
|
80
|
+
* keep working exactly as before.
|
|
81
|
+
*/
|
|
82
|
+
export function mayRouteToWorkspace(ownGrant, workspaceId) {
|
|
83
|
+
const held = new Set(ownGrant);
|
|
84
|
+
return held.has(WILDCARD) || held.has(WORKSPACE_WILDCARD) || held.has(workspaceCapability(workspaceId));
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Characters that make a capability id mean something OTHER than one capability.
|
|
88
|
+
*
|
|
89
|
+
* A capability id is never a list. `PI_DADDY_GRANT` is comma-separated and `parseList` trims and splits
|
|
90
|
+
* it, so a comma inside a single id means the child reads it as several — including ones nothing granted.
|
|
91
|
+
* Newlines are here for the same reason one level out: the grant travels through an environment variable
|
|
92
|
+
* and, via `assertGrantIsWritable`, a shell-sourced file.
|
|
93
|
+
*
|
|
94
|
+
* **Measured, on the published 0.18.0.** A root holding `agent:*` (or `tool:*`) that requested
|
|
95
|
+
* `agent:x,tool:bash` had it admitted by the wildcard's prefix rule, written verbatim into the child's
|
|
96
|
+
* grant, and split by the child into `agent:x` + `tool:bash` — minting a capability the root never held,
|
|
97
|
+
* with `denied: []` so nothing recorded an escalation and the ledger line looked clean.
|
|
98
|
+
*
|
|
99
|
+
* Deliberately a blocklist of structurally dangerous characters rather than the full grammar whitelist in
|
|
100
|
+
* `isSafeCapability`. That whitelist is right where it lives — the boundary that GENERATES a grant — but
|
|
101
|
+
* this is the enforcement path, which must keep accepting whatever ids operators already have. A security
|
|
102
|
+
* patch to a released version should close the hole without inventing a new way to refuse a legitimate
|
|
103
|
+
* setup. `grant-env.ts` predicted this channel: "the third channel — whatever it turns out to be — should
|
|
104
|
+
* cost a refusal rather than an injection."
|
|
105
|
+
*/
|
|
106
|
+
const CAPABILITY_ID_SEPARATORS = /[,\r\n\0]/;
|
|
107
|
+
/** False when an id would be read as more than one capability by any channel that carries it. */
|
|
108
|
+
export function isWellFormedCapability(id) {
|
|
109
|
+
return id.length > 0 && !CAPABILITY_ID_SEPARATORS.test(id) && id.trim() === id;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* The STRICT grammar: a whitelist of what a capability id may look like, not a blocklist of what it may not.
|
|
113
|
+
*
|
|
114
|
+
* **Two consumers, and they are two different reasons for the same rule.** It lives here rather than in
|
|
115
|
+
* either of them because it shipped in one and was needed by both:
|
|
116
|
+
*
|
|
117
|
+
* 1. `skill-packages.ts` — the boundary that GENERATES a grant. R-77/R-78: a package declaring
|
|
118
|
+
* `allowed-tools: Read,ext:x";touch /tmp/pwned;PI_DADDY_GRANT="` produced a `.pi/grants.env` that ran
|
|
119
|
+
* arbitrary code the moment an operator sourced the line `init` prints.
|
|
120
|
+
* 2. `workspace.ts` — the operator registry, since ADR-0035 made a registry id the tail of a capability id
|
|
121
|
+
* (`workspace:<id>`). That made the registry an input to this grammar, and it got the LOOSE
|
|
122
|
+
* `isWellFormedCapability` blocklist instead, which review showed costs three things:
|
|
123
|
+
* an id of literally `*` loaded and minted `WORKSPACE_WILDCARD`, so an operator naming ONE worktree held
|
|
124
|
+
* routing authority over every id in the registry including ones added later;
|
|
125
|
+
* an id containing a space became TWO capabilities, because `ceilingForDefinition` splits `allowed-tools`
|
|
126
|
+
* on `[\s,]+` — `allowed-tools: read, workspace:prod bash` measured as
|
|
127
|
+
* `['tool:bash','tool:read','workspace:prod']`, i.e. routing over production plus a shell, neither typed
|
|
128
|
+
* by anyone (0.18.1's comma, one namespace over);
|
|
129
|
+
* and quote/`$()`/backtick ids reached the `ROUTABLE WORKSPACES` block of the generated file, whose own
|
|
130
|
+
* instructions tell the operator to paste them into `PI_DADDY_GRANT`.
|
|
131
|
+
*
|
|
132
|
+
* **A blocklist was the wrong shape for this and the comment on `isWellFormedCapability` says why it is the
|
|
133
|
+
* right shape THERE**: that one guards the enforcement path, which must keep accepting whatever ids operators
|
|
134
|
+
* already have. A registry is a file the operator writes and can rename, so refusing a hostile id costs
|
|
135
|
+
* nothing — and `grant-env.ts`'s standing warning applies to it exactly: *"the third channel — whatever it
|
|
136
|
+
* turns out to be — should cost a refusal rather than an injection."* The registry was the third channel.
|
|
137
|
+
*/
|
|
138
|
+
/**
|
|
139
|
+
* A workspace registry id, which is NOT a tool name and needed its own rule.
|
|
140
|
+
*
|
|
141
|
+
* `isSafeCapability` was reused here first, and that was the error: it is the grammar for a *tool* name, and
|
|
142
|
+
* it refused ids that published 0.18.1 accepted — `feature/x` above all. Git worktrees are routinely named
|
|
143
|
+
* after their branch, so a slash is the ordinary case, and a slash splits nothing: not the comma-separated
|
|
144
|
+
* grant, not `allowed-tools`' `[\s,]+`. Refusing it bought no safety and broke the common setup.
|
|
145
|
+
*
|
|
146
|
+
* What is refused, and why each one earns it:
|
|
147
|
+
* - **whitespace** — `ceilingForDefinition` splits `allowed-tools` on `[\s,]+`, so `workspace:prod bash`
|
|
148
|
+
* measured as `['tool:bash','tool:read','workspace:prod']`: routing over production plus a shell, neither
|
|
149
|
+
* typed by anyone. 0.18.1's comma, one namespace over.
|
|
150
|
+
* - **comma, CR, LF, NUL** — split a grant.
|
|
151
|
+
* - **`*`** — collides with `WORKSPACE_WILDCARD`, so registering a worktree as `*` and granting
|
|
152
|
+
* `workspace:*` believing it named that one root minted routing authority over the whole registry.
|
|
153
|
+
* - **quotes, `$`, backticks, `;`, `&`, `|`, `<`, `>`, `(`, `)`, `\`, `#`** — reach the ROUTABLE WORKSPACES
|
|
154
|
+
* block of a generated `.pi/grants.env`, whose own instructions tell the operator to paste the id into
|
|
155
|
+
* `PI_DADDY_GRANT`. Sourcing the file was safe; following its instructions executed. R-77/R-78.
|
|
156
|
+
* - **control characters and non-ASCII** — the generated file is reviewed in an editor and `/grants` prints
|
|
157
|
+
* these; backspace and ANSI escapes let one id render as another. This is the one refusal that costs a
|
|
158
|
+
* legitimate user something (a non-English worktree name), and it is a deliberate trade recorded as
|
|
159
|
+
* breaking rather than asserted to cost nothing.
|
|
160
|
+
*/
|
|
161
|
+
export function isSafeWorkspaceId(id) {
|
|
162
|
+
return /^[A-Za-z0-9][A-Za-z0-9._/-]*$/.test(id);
|
|
163
|
+
}
|
|
164
|
+
export function isSafeCapability(id) {
|
|
165
|
+
const segment = "[A-Za-z0-9][A-Za-z0-9._-]*";
|
|
166
|
+
// `workspace:` delegates to the WORKSPACE grammar rather than reusing `segment`, and that is the fifth
|
|
167
|
+
// site of the same defect. `isSafeWorkspaceId` allows a slash because a git worktree is routinely named
|
|
168
|
+
// after its branch; `segment` does not, so this function refused `workspace:feature/x` — dropping the whole
|
|
169
|
+
// definition, exiting 1, and telling the operator "a capability id is tool:/skill:/agent:<name> or
|
|
170
|
+
// ext:<pkg>/<tool>", which does not even mention the namespace. Meanwhile the CHANGELOG told them slashes
|
|
171
|
+
// are fine. **The boundary that GENERATES grants could not emit the id shape the release advertises**, so
|
|
172
|
+
// the migration path for a breaking change was closed by the commit that documented it as open.
|
|
173
|
+
if (id.startsWith("workspace:"))
|
|
174
|
+
return isSafeWorkspaceId(id.slice("workspace:".length));
|
|
175
|
+
return (new RegExp(`^(tool|skill|agent):${segment}$`).test(id) ||
|
|
176
|
+
new RegExp(`^ext:(@${segment}/)?${segment}/${segment}$`).test(id));
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* The write-side backstop, for every channel that joins capabilities into one string.
|
|
180
|
+
*
|
|
181
|
+
* `covered()` already refuses to GRANT a malformed id, so this should be unreachable — which is exactly
|
|
182
|
+
* why it exists. `grant-env.ts` says it better than I can: "the third channel — whatever it turns out to
|
|
183
|
+
* be — should cost a refusal rather than an injection. A guard that depends on my enumeration being
|
|
184
|
+
* complete is not a guard." The propagation channel turned out to be that third channel, and it had no
|
|
185
|
+
* backstop while the file-writing channel did.
|
|
186
|
+
*
|
|
187
|
+
* Loud rather than silently filtered: a malformed id here means something upstream admitted one, and
|
|
188
|
+
* dropping it quietly would hide the defect that produced it.
|
|
189
|
+
*/
|
|
190
|
+
export function assertCapabilitiesArePropagatable(grant) {
|
|
191
|
+
const malformed = grant.filter((c) => !isWellFormedCapability(c));
|
|
192
|
+
if (malformed.length === 0)
|
|
193
|
+
return;
|
|
194
|
+
throw new GovernanceRefusal(refusal("GRANT_ID_MALFORMED", `refusing to build a child environment: ${JSON.stringify(malformed)} contain characters that are not ` +
|
|
195
|
+
`part of a capability id. The grant is comma-separated, so a child would read these as several ` +
|
|
196
|
+
`capabilities — including ones nothing granted. Report this: a malformed id reached propagation, ` +
|
|
197
|
+
`which means a guard upstream admitted it.`, { malformed: malformed.join(" ") }));
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/kernel/capabilities.ts"],"names":[],"mappings":"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"}
|