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
package/src/delegate.ts
DELETED
|
@@ -1,348 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Governed delegation planning. Owning the spawn makes the grant an argument; each child receives its own
|
|
3
|
-
* environment, and `tool:delegate` determines whether it is a delegator or a leaf.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { planSpawn } from "./spawn.ts";
|
|
7
|
-
import { ceilingForDefinition, digestDefinition, type DefinitionDigest, type SkillDefinition } from "./definitions.ts";
|
|
8
|
-
import { assertNarrowing, type Capability, type ResolveResult } from "./resolve.ts";
|
|
9
|
-
import { checkRoutingAuthority, checkWorkspaceWildcardRequest } from "./routing-authority.ts";
|
|
10
|
-
import {
|
|
11
|
-
DELEGATE_CAPABILITY,
|
|
12
|
-
agentCapability,
|
|
13
|
-
maySpawnDefinition,
|
|
14
|
-
normaliseCapability,
|
|
15
|
-
} from "./capabilities.ts";
|
|
16
|
-
|
|
17
|
-
// Re-exported so the split stays internal: `delegate.ts` has been the import site for these since 0.6.0 and
|
|
18
|
-
// four modules plus the test suite name it. Moving the definitions without moving the door would be churn
|
|
19
|
-
// charged to every caller for a line count they did not cause.
|
|
20
|
-
export { DELEGATE_CAPABILITY, agentCapability, maySpawnDefinition, normaliseCapability } from "./capabilities.ts";
|
|
21
|
-
import {
|
|
22
|
-
ENV_APPROVED, ENV_DEPTH, ENV_EXECUTION_ID, ENV_FANOUT, ENV_GATED, ENV_GRANT, ENV_LEDGER, ENV_MAX_DEPTH,
|
|
23
|
-
ENV_PARENT_ID, inheritableGrant,
|
|
24
|
-
} from "./propagation.ts";
|
|
25
|
-
import { inheritApprovals, type InheritableApproval } from "./approval.ts";
|
|
26
|
-
import { suggestForUnknown, unknownCapabilities, type Catalog } from "./catalog.ts";
|
|
27
|
-
import { GovernanceRefusal, refusal, type RefusalCode, type StructuredRefusal } from "./refusals.ts";
|
|
28
|
-
import {
|
|
29
|
-
digestTask,
|
|
30
|
-
normaliseCorrelation,
|
|
31
|
-
type ApprovalBinding,
|
|
32
|
-
type CorrelationMetadata,
|
|
33
|
-
} from "./correlation.ts";
|
|
34
|
-
import { resolveDelegationApproval } from "./delegation-approval.ts";
|
|
35
|
-
import type { Delegation, DelegationContext, DelegationRequest } from "./delegate-types.ts";
|
|
36
|
-
import { assertCapabilitiesArePropagatable } from "./capabilities.ts";
|
|
37
|
-
import { ENV_ACTIVITY_PARENT_TASK, ENV_ACTIVITY_PATH, ENV_ACTIVITY_ROOT, ENV_ACTIVITY_TASK } from "./activity-timeline.ts";
|
|
38
|
-
export type { Delegation, DelegationContext, DelegationRequest } from "./delegate-types.ts";
|
|
39
|
-
|
|
40
|
-
export function planDelegation(request: DelegationRequest, ctx: DelegationContext): Delegation {
|
|
41
|
-
const childDepth = ctx.depth + 1;
|
|
42
|
-
const denied = (plan: Delegation, code: RefusalCode): Delegation =>
|
|
43
|
-
plan.reason ? { ...plan, refusal: refusal(code, plan.reason) } : plan;
|
|
44
|
-
// G6 / B-I3: every refusal carries a result, including the four below that return before `resolve()`
|
|
45
|
-
// is ever called. The extension guarded its ledger write with `if (ledgerPath && plan.result)`, so
|
|
46
|
-
// those four governance decisions — disabled, too deep, no task, unknown capability — were never
|
|
47
|
-
// audited at all. An empty result is the honest record: nothing was resolved, and that is the fact.
|
|
48
|
-
// Bounded/whitelisted correlation is a REFUSAL, not an exception escaping the planner. It is reachable
|
|
49
|
-
// from a model-facing tool parameter on all three delegation tools, and throwing from here produced a
|
|
50
|
-
// governed refusal with no code and no ledger line at all — the ledger file was never even created
|
|
51
|
-
// (R-112). Caught here so it becomes an ordinary recorded decision.
|
|
52
|
-
let correlation: CorrelationMetadata | undefined;
|
|
53
|
-
let correlationRefused: StructuredRefusal | undefined;
|
|
54
|
-
try {
|
|
55
|
-
correlation = normaliseCorrelation(request.correlation);
|
|
56
|
-
} catch (error) {
|
|
57
|
-
correlationRefused = error instanceof GovernanceRefusal
|
|
58
|
-
? { code: error.code, message: error.message, ...(error.details ? { details: error.details } : {}) }
|
|
59
|
-
: refusal("CORRELATION_INVALID", String(error instanceof Error ? error.message : error));
|
|
60
|
-
}
|
|
61
|
-
const taskDigest = digestTask(request.task ?? "");
|
|
62
|
-
const empty: Delegation = {
|
|
63
|
-
ok: false,
|
|
64
|
-
args: [],
|
|
65
|
-
env: {},
|
|
66
|
-
effective: [],
|
|
67
|
-
childDepth,
|
|
68
|
-
requested: [],
|
|
69
|
-
taskDigest,
|
|
70
|
-
...(correlation ? { correlation } : {}),
|
|
71
|
-
result: { effective: [], denied: [], clipped: [], gatedBlocked: [], universal: [], subsumedBy: [] },
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
if (correlationRefused) {
|
|
75
|
-
return { ...empty, reason: correlationRefused.message, refusal: correlationRefused };
|
|
76
|
-
}
|
|
77
|
-
if (ctx.maxDepth <= 0) {
|
|
78
|
-
return denied({ ...empty, reason: "delegation is disabled (maxDepth 0)" }, "DEPTH_EXCEEDED");
|
|
79
|
-
}
|
|
80
|
-
if (childDepth > ctx.maxDepth) {
|
|
81
|
-
return denied({ ...empty, reason: `delegation depth limit reached (${ctx.maxDepth})` }, "DEPTH_EXCEEDED");
|
|
82
|
-
}
|
|
83
|
-
if (!request.task?.trim()) return denied({ ...empty, reason: "a delegation needs a task" }, "TASK_MISSING");
|
|
84
|
-
|
|
85
|
-
// ADR-0035's routing guards live in `routing-authority.ts` with their rationale; both are checked here,
|
|
86
|
-
// before anything is said about the target, because they are governance questions about the SESSION.
|
|
87
|
-
const routing = checkRoutingAuthority(request.boundWorkspaceId, ctx.ownGrant);
|
|
88
|
-
if (routing) {
|
|
89
|
-
return denied({
|
|
90
|
-
...empty,
|
|
91
|
-
...(routing.denied ? { requested: routing.denied, result: { ...empty.result, denied: routing.denied } } : {}),
|
|
92
|
-
reason: routing.reason,
|
|
93
|
-
}, routing.code);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// ADR-0016. A named definition replaces the model's tool list with an operator-authored ceiling.
|
|
97
|
-
let requested: Capability[];
|
|
98
|
-
let systemPrompt: string | undefined;
|
|
99
|
-
let definitionDigest: DefinitionDigest | undefined;
|
|
100
|
-
/** The definition being spawned, hoisted so the gate below can name its authorising id (ADR-0024). */
|
|
101
|
-
let spawned: SkillDefinition | undefined;
|
|
102
|
-
|
|
103
|
-
if (request.agent) {
|
|
104
|
-
const definition = ctx.definitions?.get(request.agent);
|
|
105
|
-
spawned = definition;
|
|
106
|
-
// No fallback, deliberately. pi-subagents resolves an unknown type to `general-purpose`, whose
|
|
107
|
-
// omitted tool list means EVERY tool — so a typo there granted the full surface. An unknown name
|
|
108
|
-
// here is simply an error.
|
|
109
|
-
if (!definition) {
|
|
110
|
-
const known = [...(ctx.definitions?.keys() ?? [])].sort();
|
|
111
|
-
return denied({
|
|
112
|
-
...empty,
|
|
113
|
-
reason:
|
|
114
|
-
`unknown agent "${request.agent}"` +
|
|
115
|
-
(known.length > 0 ? ` — known definitions: ${known.join(", ")}` : " — no definitions were found"),
|
|
116
|
-
}, "UNKNOWN_DEFINITION");
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// ADR-0017: authorisation comes BEFORE anything is said about the file. Which definitions this
|
|
120
|
-
// session may spawn is a governance question about the SESSION; whether the file declares its tools
|
|
121
|
-
// properly is a diagnostic about the DEFINITION, and answering the second one first would report a
|
|
122
|
-
// malformed-file error to a caller who was never allowed to spawn it either way.
|
|
123
|
-
//
|
|
124
|
-
// Recorded as a denial rather than a bare refusal, deliberately: `denied` is the escalation signal
|
|
125
|
-
// ADR-0008 designates, and asking to run a definition this session was not granted IS an attempt to
|
|
126
|
-
// exceed the grant. A refusal that left `denied` empty would keep it out of every audit query.
|
|
127
|
-
if (!maySpawnDefinition(ctx.ownGrant, definition.name)) {
|
|
128
|
-
const authorising = agentCapability(definition.name);
|
|
129
|
-
const held = ctx.ownGrant.filter((c) => c.startsWith("agent:")).sort();
|
|
130
|
-
return denied({
|
|
131
|
-
...empty,
|
|
132
|
-
requested: [authorising],
|
|
133
|
-
result: { ...empty.result, denied: [authorising] },
|
|
134
|
-
reason:
|
|
135
|
-
`cannot spawn "${definition.name}" — this session does not hold ${authorising} ` +
|
|
136
|
-
`(the definition lives at ${definition.source}). ` +
|
|
137
|
-
(held.length > 0
|
|
138
|
-
? `It may spawn: ${held.join(", ")}.`
|
|
139
|
-
: `It may spawn no definitions at all; add ${authorising} to its grant to allow this one.`),
|
|
140
|
-
}, "DEFINITION_NOT_AUTHORIZED");
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// ADR-0018. Recorded from here on — after authorisation, because the digest is a fact about a file
|
|
144
|
-
// this caller was allowed to read, and before every remaining outcome, because a spawn refused for a
|
|
145
|
-
// malformed declaration is still a spawn of THIS version of the definition.
|
|
146
|
-
//
|
|
147
|
-
// Assigned into `empty`, which every subsequent refusal spreads. That is the R-28 discipline applied
|
|
148
|
-
// to a record field rather than an argument: instead of eight `definitionDigest` spellings that a
|
|
149
|
-
// ninth return could forget, there is one, and forgetting it is not expressible. The success return
|
|
150
|
-
// does not spread `empty`, so it names the field explicitly.
|
|
151
|
-
definitionDigest = digestDefinition(definition);
|
|
152
|
-
Object.assign(empty, { definitionDigest });
|
|
153
|
-
|
|
154
|
-
const ceiling = ceilingForDefinition(definition);
|
|
155
|
-
if (ceiling.undeclared) {
|
|
156
|
-
return denied({
|
|
157
|
-
...empty,
|
|
158
|
-
reason:
|
|
159
|
-
`agent "${definition.name}" declares no \`allowed-tools\`, so it cannot be spawned — add one ` +
|
|
160
|
-
`to ${definition.source}. An undeclared capability set is treated as NONE, never as everything.`,
|
|
161
|
-
}, "UNDECLARED_TOOLS");
|
|
162
|
-
}
|
|
163
|
-
if (ceiling.patterns.length > 0) {
|
|
164
|
-
return denied({
|
|
165
|
-
...empty,
|
|
166
|
-
reason:
|
|
167
|
-
`agent "${definition.name}" restricts a tool with a pattern (${ceiling.patterns.join(", ")}), ` +
|
|
168
|
-
`which pi's --tools cannot express — it matches whole tool names only. Granting the bare tool ` +
|
|
169
|
-
`would widen the declaration and dropping it would silently narrow, so neither is done.`,
|
|
170
|
-
}, "CEILING_PATTERNS_UNRESOLVED");
|
|
171
|
-
}
|
|
172
|
-
requested = ceiling.capabilities;
|
|
173
|
-
systemPrompt = definition.body;
|
|
174
|
-
} else {
|
|
175
|
-
requested = (request.tools ?? []).map(normaliseCapability);
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
// Unknown is reported before denied, and separately: "does not exist here" and "you lack authority"
|
|
179
|
-
// have different causes and different fixes. Collapsing them hides typos and stale grants.
|
|
180
|
-
if (ctx.catalog) {
|
|
181
|
-
const unknown = unknownCapabilities(requested, ctx.catalog);
|
|
182
|
-
if (unknown.length > 0) {
|
|
183
|
-
// Name the likely intent where there is one. `ceilingForDefinition` refuses to TRANSLATE names
|
|
184
|
-
// (lowercasing and no more), so an author who wrote Claude Code's `Glob` gets `tool:glob` and a
|
|
185
|
-
// refusal — correct, and previously unhelpful, because pi's equivalent is `find` and no amount of
|
|
186
|
-
// staring at "not present in this session's catalog" says so. The hint changes nothing about the
|
|
187
|
-
// refusal; it just stops the author having to guess which of nine built-ins was meant.
|
|
188
|
-
const hints = unknown
|
|
189
|
-
.map((c) => {
|
|
190
|
-
const s = suggestForUnknown(c, ctx.catalog!);
|
|
191
|
-
return s === null ? null : `${c} → did you mean ${s}?`;
|
|
192
|
-
})
|
|
193
|
-
.filter((h): h is string => h !== null);
|
|
194
|
-
return denied({
|
|
195
|
-
...empty,
|
|
196
|
-
requested,
|
|
197
|
-
reason:
|
|
198
|
-
`unknown capabilit${unknown.length === 1 ? "y" : "ies"}: ${unknown.join(", ")} — not present in ` +
|
|
199
|
-
`this session's catalog (typo, or an uninstalled package?)` +
|
|
200
|
-
(hints.length > 0 ? ` — ${hints.join("; ")}` : ""),
|
|
201
|
-
}, "UNKNOWN_TOOL");
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
// See `checkWorkspaceWildcardRequest`: refused for a HOLDER (the ledger must not record authority the
|
|
206
|
-
// child will not receive), and left to `resolve()` for anyone else, so the probe lands in `denied`.
|
|
207
|
-
const wildcardRequest = checkWorkspaceWildcardRequest(requested, ctx.ownGrant);
|
|
208
|
-
if (wildcardRequest) {
|
|
209
|
-
return denied({ ...empty, requested, reason: wildcardRequest.reason }, wildcardRequest.code);
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
const { result, approvalBinding, bindingMismatch } = resolveDelegationApproval({
|
|
213
|
-
task: request.task,
|
|
214
|
-
agent: request.agent,
|
|
215
|
-
boundWorkspaceId: request.boundWorkspaceId,
|
|
216
|
-
boundContextId: request.boundContextId,
|
|
217
|
-
requested,
|
|
218
|
-
parentGrant: ctx.ownGrant,
|
|
219
|
-
gated: ctx.gated,
|
|
220
|
-
approved: ctx.approved,
|
|
221
|
-
spawned,
|
|
222
|
-
definitionDigest,
|
|
223
|
-
correlation,
|
|
224
|
-
parentId: ctx.spawnId ?? `d${ctx.depth}`,
|
|
225
|
-
});
|
|
226
|
-
if (approvalBinding) Object.assign(empty, { approvalBinding });
|
|
227
|
-
|
|
228
|
-
if (result.denied.length > 0) {
|
|
229
|
-
return denied({
|
|
230
|
-
...empty,
|
|
231
|
-
requested,
|
|
232
|
-
result,
|
|
233
|
-
reason: `cannot grant ${result.denied.join(", ")} — this session does not hold it (capability escalation blocked)`,
|
|
234
|
-
}, "CAPABILITY_ESCALATION");
|
|
235
|
-
}
|
|
236
|
-
// ADR-0011: narrowing is checked BEFORE the gate, and the order is load-bearing rather than
|
|
237
|
-
// stylistic. `assertNarrowing` refuses regardless of approval, so with the old order this returned
|
|
238
|
-
// "requires explicit approval" for a delegation that could never be approved — telling the operator
|
|
239
|
-
// to go and find a human who cannot help. `shouldSeekApproval` now also refuses to prompt in this
|
|
240
|
-
// case; this reordering makes the reported *reason* agree with what actually blocks the spawn.
|
|
241
|
-
try {
|
|
242
|
-
assertNarrowing(result);
|
|
243
|
-
} catch (error) {
|
|
244
|
-
// ADR-0011's narrowing invariant is the hardest rule this package enforces, and it was the one
|
|
245
|
-
// refusal an external controller could not identify by code (R-109).
|
|
246
|
-
return denied(
|
|
247
|
-
{ ...empty, requested, result, reason: String(error instanceof Error ? error.message : error) },
|
|
248
|
-
"NARROWING_VIOLATED",
|
|
249
|
-
);
|
|
250
|
-
}
|
|
251
|
-
if (result.gatedBlocked.length > 0) {
|
|
252
|
-
const code = bindingMismatch ? "APPROVAL_SCOPE_MISMATCH" : "GATED_UNAPPROVED";
|
|
253
|
-
const suffix = bindingMismatch ? " (an approval exists, but its task/workspace/context scope does not match)" : "";
|
|
254
|
-
return denied(
|
|
255
|
-
{ ...empty, requested, result, reason: `${result.gatedBlocked.join(", ")} requires explicit approval${suffix}` },
|
|
256
|
-
code,
|
|
257
|
-
);
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
const canSubDelegate = result.effective.includes(DELEGATE_CAPABILITY);
|
|
261
|
-
const plan = planSpawn({
|
|
262
|
-
effective: result.effective,
|
|
263
|
-
prompt: request.task,
|
|
264
|
-
model: request.model,
|
|
265
|
-
provider: request.provider,
|
|
266
|
-
thinking: request.thinking,
|
|
267
|
-
skillPaths: ctx.skillPaths,
|
|
268
|
-
contextFiles: ctx.contextFiles,
|
|
269
|
-
systemPrompt,
|
|
270
|
-
sessionFile: ctx.sessionFile,
|
|
271
|
-
print: ctx.interactive ? false : undefined,
|
|
272
|
-
});
|
|
273
|
-
|
|
274
|
-
// R-32. A `skill:` capability the catalog cannot place is refused rather than dropped. Dropping it
|
|
275
|
-
// would hand back a child whose grant claims a skill it does not have — the ledger would record a
|
|
276
|
-
// capability that never reached the process, which is precisely the kind of lie an audit trail must
|
|
277
|
-
// not contain. `unknownCapabilities` above catches names absent from the catalog entirely; this
|
|
278
|
-
// catches one that is known but whose path we could not resolve, which is a different fault.
|
|
279
|
-
if (plan.unresolvedSkills.length > 0) {
|
|
280
|
-
return denied({
|
|
281
|
-
...empty,
|
|
282
|
-
requested,
|
|
283
|
-
result,
|
|
284
|
-
reason:
|
|
285
|
-
`cannot locate ${plan.unresolvedSkills.join(", ")} on disk — granted but unresolvable, so the ` +
|
|
286
|
-
`child would silently lack it`,
|
|
287
|
-
}, "DEFINITION_UNREADABLE");
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
// `-e` loads even under `--no-extensions`. A delegate-capable child loads the governance extension;
|
|
291
|
-
// a leaf gets only the no-tool observer. Neither path alters --tools or the computed grant.
|
|
292
|
-
const args = [...plan.args];
|
|
293
|
-
const observer = canSubDelegate ? ctx.extensionPath : ctx.observerExtensionPath;
|
|
294
|
-
if (observer) args.splice(args.length - 1, 0, "-e", observer);
|
|
295
|
-
|
|
296
|
-
// `inheritableGrant`, not `result.effective` directly: this is the path a DELEGATED child's grant
|
|
297
|
-
// actually travels, and the "held but never inherited" rule for `tool:*` and `workspace:*` was enforced
|
|
298
|
-
// only in `childEnv`. A parent holding `workspace:*` could request it for its child and this line handed
|
|
299
|
-
// it over, so the rule ADR-0035 advertises held by accident — masked downstream rather than enforced
|
|
300
|
-
// here. One spelling of the rule, called from both paths.
|
|
301
|
-
const inheritable = inheritableGrant(result.effective);
|
|
302
|
-
const env: Record<string, string> = {
|
|
303
|
-
[ENV_GRANT]: (assertCapabilitiesArePropagatable(inheritable), inheritable.join(",")),
|
|
304
|
-
[ENV_DEPTH]: String(childDepth),
|
|
305
|
-
[ENV_MAX_DEPTH]: String(ctx.maxDepth),
|
|
306
|
-
};
|
|
307
|
-
// The child's own share of the subtree budget, and its identity. Both attenuate downward like depth: a
|
|
308
|
-
// child can never be handed more budget than its parent had left, so the total bound holds across
|
|
309
|
-
// process boundaries with no shared state.
|
|
310
|
-
if (ctx.fanoutBudget !== undefined) env[ENV_FANOUT] = String(ctx.fanoutBudget);
|
|
311
|
-
if (ctx.childSpawnId) env[ENV_PARENT_ID] = ctx.childSpawnId;
|
|
312
|
-
if (ctx.childExecutionId) env[ENV_EXECUTION_ID] = ctx.childExecutionId;
|
|
313
|
-
if (ctx.gated.length > 0) env[ENV_GATED] = ctx.gated.join(",");
|
|
314
|
-
// Approvals ride down with the grant, but only ever for what this child actually received — so
|
|
315
|
-
// `approved ⊆ grant` holds at every level (ADR-0010). Written even when empty, so this object states
|
|
316
|
-
// the child's approval set outright rather than leaving it to whatever the caller merges over; see
|
|
317
|
-
// `mergeChildEnv`, which is what actually stops the parent's value leaking through.
|
|
318
|
-
// Clamped to what the child actually INHERITS, not to what it was granted. The two differ only for a
|
|
319
|
-
// non-inheritable wildcard, and passing down an approval for a capability the child does not hold would
|
|
320
|
-
// leave banked authority with nothing to spend it on — `childEnv` clamps to `inheritable` for the same
|
|
321
|
-
// reason on the other path.
|
|
322
|
-
env[ENV_APPROVED] = inheritApprovals(ctx.approved ?? [], inheritable).join(",");
|
|
323
|
-
if (ctx.ledgerPath) env[ENV_LEDGER] = ctx.ledgerPath;
|
|
324
|
-
// These local observation values are per-child argv environment, never process-global grant state.
|
|
325
|
-
// A child cannot acquire a tool or a larger grant by receiving them.
|
|
326
|
-
if (ctx.activity?.taskId && ctx.childExecutionId) {
|
|
327
|
-
env[ENV_ACTIVITY_PATH] = ctx.activity.path;
|
|
328
|
-
env[ENV_ACTIVITY_ROOT] = ctx.activity.rootId;
|
|
329
|
-
env[ENV_ACTIVITY_TASK] = ctx.childExecutionId;
|
|
330
|
-
env[ENV_ACTIVITY_PARENT_TASK] = ctx.activity.taskId;
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
return {
|
|
334
|
-
ok: true,
|
|
335
|
-
args,
|
|
336
|
-
env,
|
|
337
|
-
effective: result.effective,
|
|
338
|
-
result,
|
|
339
|
-
childDepth,
|
|
340
|
-
requested,
|
|
341
|
-
childId: ctx.childSpawnId,
|
|
342
|
-
executionId: ctx.childExecutionId,
|
|
343
|
-
taskDigest,
|
|
344
|
-
...(correlation ? { correlation } : {}),
|
|
345
|
-
...(approvalBinding ? { approvalBinding } : {}),
|
|
346
|
-
...(definitionDigest ? { definitionDigest } : {}),
|
|
347
|
-
};
|
|
348
|
-
}
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import { DELEGATE_SUBJECT, type InheritableApproval } from "./approval.ts";
|
|
2
|
-
import { agentCapability, workspaceCapability } from "./capabilities.ts";
|
|
3
|
-
import {
|
|
4
|
-
approvalBindingsEqual,
|
|
5
|
-
buildApprovalBinding,
|
|
6
|
-
type ApprovalBinding,
|
|
7
|
-
type CorrelationMetadata,
|
|
8
|
-
} from "./correlation.ts";
|
|
9
|
-
import type { DefinitionDigest, SkillDefinition } from "./definitions.ts";
|
|
10
|
-
import { AGENT_WILDCARD, WORKSPACE_WILDCARD, resolve, type Capability, type ResolveResult } from "./resolve.ts";
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Resolve the approval half of one delegation after its requested capability set is known.
|
|
14
|
-
*
|
|
15
|
-
* Kept as one function because the ordering is security-relevant: compute the unapproved and potential
|
|
16
|
-
* effective sets first, derive the exact binding from those trusted values, then decide which approvals
|
|
17
|
-
* match. An approval must never define the scope against which it is checked.
|
|
18
|
-
*/
|
|
19
|
-
export function resolveDelegationApproval(input: {
|
|
20
|
-
task: string;
|
|
21
|
-
agent?: string;
|
|
22
|
-
requested: Capability[];
|
|
23
|
-
parentGrant: Capability[];
|
|
24
|
-
gated: Capability[];
|
|
25
|
-
approved?: InheritableApproval[];
|
|
26
|
-
spawned?: SkillDefinition;
|
|
27
|
-
definitionDigest?: DefinitionDigest;
|
|
28
|
-
/**
|
|
29
|
-
* Present iff this call is task-bound. Most values remain labels; optional tree_sha/last_change_seq enter
|
|
30
|
-
* the binding only to narrow a supplied approval to the upstream tree state that was reviewed.
|
|
31
|
-
*/
|
|
32
|
-
correlation?: CorrelationMetadata;
|
|
33
|
-
/** Trusted: an id that was resolved against the operator registry and leased. Never a caller claim. */
|
|
34
|
-
boundWorkspaceId?: string;
|
|
35
|
-
/** Caller-declared label. Narrows the binding only; asserts nothing about enforcement. */
|
|
36
|
-
boundContextId?: string;
|
|
37
|
-
parentId: string;
|
|
38
|
-
}): { result: ResolveResult; approvalBinding?: ApprovalBinding; bindingMismatch: boolean } {
|
|
39
|
-
const subject = input.agent ?? DELEGATE_SUBJECT;
|
|
40
|
-
const unapproved = resolve({
|
|
41
|
-
requested: input.requested,
|
|
42
|
-
parentGrant: input.parentGrant,
|
|
43
|
-
gated: input.gated,
|
|
44
|
-
approved: [],
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Authorities the PARENT is spending on this one delegation, gated as such.
|
|
49
|
-
*
|
|
50
|
-
* ADR-0024 established the shape for `agent:<name>`: the id is gated as the parent's authority to run
|
|
51
|
-
* that definition *now*, and never joins requested/effective, because that would hand the child authority
|
|
52
|
-
* to recursively spawn itself. ADR-0035 added a second member of the category — `workspace:<id>`, the
|
|
53
|
-
* authority to route this child somewhere — and shipped without it, so `PI_GRANTS_GATED=workspace:prod`
|
|
54
|
-
* was accepted, recorded, and silently inert: no human was ever asked. The ADR claimed the opposite in
|
|
55
|
-
* three places.
|
|
56
|
-
*
|
|
57
|
-
* A LIST rather than two variables on purpose. This is the third namespace whose authorising id is gated
|
|
58
|
-
* per-delegation rather than granted downward, and the first two were written as one special case each;
|
|
59
|
-
* a fourth should extend an array, not add a third `if` and a third field to thread through.
|
|
60
|
-
*/
|
|
61
|
-
const authorisingCapabilities: Capability[] = [];
|
|
62
|
-
const gateAuthority = (authorising: Capability, wildcard: Capability) => {
|
|
63
|
-
if (input.gated.includes(authorising) || input.gated.includes(wildcard)) {
|
|
64
|
-
authorisingCapabilities.push(authorising);
|
|
65
|
-
unapproved.gatedBlocked = [...unapproved.gatedBlocked, authorising];
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
if (input.spawned) gateAuthority(agentCapability(input.spawned.name), AGENT_WILDCARD);
|
|
69
|
-
// Trusted: `boundWorkspaceId` is set only from a routing spec resolved against the operator registry,
|
|
70
|
-
// never from a model-supplied `correlation` claim (R-110).
|
|
71
|
-
if (input.boundWorkspaceId) {
|
|
72
|
-
gateAuthority(workspaceCapability(input.boundWorkspaceId), WORKSPACE_WILDCARD);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
const potential = resolve({
|
|
76
|
-
requested: input.requested,
|
|
77
|
-
parentGrant: input.parentGrant,
|
|
78
|
-
gated: input.gated,
|
|
79
|
-
// If the definition also declares its own authorising `agent:<name>`, the same approval unblocks
|
|
80
|
-
// that requested child capability too; excluding it here would bind a smaller set than we provision.
|
|
81
|
-
approved: unapproved.gatedBlocked,
|
|
82
|
-
});
|
|
83
|
-
const approvalBinding = input.correlation
|
|
84
|
-
? buildApprovalBinding({
|
|
85
|
-
task: input.task,
|
|
86
|
-
requested: input.requested,
|
|
87
|
-
effective: potential.effective,
|
|
88
|
-
definitionSha256: input.definitionDigest?.sha256,
|
|
89
|
-
parentId: input.parentId,
|
|
90
|
-
workspaceId: input.boundWorkspaceId,
|
|
91
|
-
contextId: input.boundContextId,
|
|
92
|
-
treeSha: input.correlation?.tree_sha,
|
|
93
|
-
lastChangeSeq: input.correlation?.last_change_seq,
|
|
94
|
-
})
|
|
95
|
-
: undefined;
|
|
96
|
-
|
|
97
|
-
const forSubject = (input.approved ?? []).filter((approval) => approval.subject === subject);
|
|
98
|
-
const approvedCapabilities = forSubject
|
|
99
|
-
.filter((approval) =>
|
|
100
|
-
approvalBinding
|
|
101
|
-
? approvalBindingsEqual(approval.binding, approvalBinding)
|
|
102
|
-
: approval.binding === undefined,
|
|
103
|
-
)
|
|
104
|
-
.map((approval) => approval.capability);
|
|
105
|
-
const bindingMismatch = approvalBinding !== undefined && forSubject.some(
|
|
106
|
-
(approval) => approval.binding !== undefined && !approvalBindingsEqual(approval.binding, approvalBinding),
|
|
107
|
-
);
|
|
108
|
-
const result = resolve({
|
|
109
|
-
requested: input.requested,
|
|
110
|
-
parentGrant: input.parentGrant,
|
|
111
|
-
gated: input.gated,
|
|
112
|
-
approved: approvedCapabilities,
|
|
113
|
-
});
|
|
114
|
-
// Filtered against what `resolve()` already listed, not just against approvals. In the ORDINARY chained
|
|
115
|
-
// configuration — route the child to `prod` AND grant it `workspace:prod` so it can route onward — the
|
|
116
|
-
// authorising id and the requested id are spelled identically, so appending unconditionally produced
|
|
117
|
-
// `gatedBlocked: ["workspace:prod","workspace:prod"]`, which reached the refusal text a model reads
|
|
118
|
-
// (*"workspace:prod, workspace:prod requires explicit approval"*) and the append-only ledger, whose schema
|
|
119
|
-
// has no `uniqueItems`. The old `agent:`-only code had the same shape and never hit it, because a
|
|
120
|
-
// self-recursive `agent:X` ceiling is not a thing anybody writes.
|
|
121
|
-
const stillGated = authorisingCapabilities.filter(
|
|
122
|
-
(c) => !approvedCapabilities.includes(c) && !result.gatedBlocked.includes(c),
|
|
123
|
-
);
|
|
124
|
-
if (stillGated.length > 0) result.gatedBlocked = [...result.gatedBlocked, ...stillGated];
|
|
125
|
-
return { result, ...(approvalBinding ? { approvalBinding } : {}), bindingMismatch };
|
|
126
|
-
}
|
package/src/dispatch-control.ts
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { createHash } from "node:crypto";
|
|
2
|
-
import { canonicalWorkJson, copyWorkJson, parseWorkJson } from "./work-ledger-json.ts";
|
|
3
|
-
|
|
4
|
-
export interface DispatchRequest {
|
|
5
|
-
version: "1.0"; requestId: string; bindingDigest: string; expectedRevision: number;
|
|
6
|
-
action: "pause-dispatch" | "resume-dispatch" | "cancel-execution" | "revise-scope" | "reprioritize" | "select-alternative";
|
|
7
|
-
targetExecutionId: string | null;
|
|
8
|
-
}
|
|
9
|
-
/** Independent trusted host declarations, NOT a wire request field or a file loaded by the controller. */
|
|
10
|
-
export interface DispatchAuthority { authorityDigest: string; requestDigests: readonly string[] }
|
|
11
|
-
export interface DispatchRecord {
|
|
12
|
-
request: Readonly<DispatchRequest>; digest: string;
|
|
13
|
-
decision: "approved" | "authority-unavailable" | "unsupported" | "stale" | "busy";
|
|
14
|
-
application: "pending" | "applied" | "not-applied";
|
|
15
|
-
outcome: "boundary-pending" | "paused" | "enabled" | "refused";
|
|
16
|
-
}
|
|
17
|
-
export interface DispatchState { revision: number; paused: boolean; records: DispatchRecord[] }
|
|
18
|
-
export interface DispatchSnapshot {
|
|
19
|
-
version: "dispatch-control-snapshot-v1"; bindingDigest: string; freshness: "snapshot-unknown"; revision: number; paused: boolean;
|
|
20
|
-
admission: "blocked-pending" | "paused" | "enabled"; acceptance: "not-assessed";
|
|
21
|
-
records: readonly Readonly<DispatchRecord>[];
|
|
22
|
-
}
|
|
23
|
-
const hex = (x: unknown): x is string => typeof x === "string" && /^[a-f0-9]{64}$/.test(x);
|
|
24
|
-
const id = (x: unknown): x is string => typeof x === "string" && /^[a-zA-Z0-9:_-]{1,128}$/.test(x);
|
|
25
|
-
export function controlShape(value: unknown, keys: string[]): asserts value is Record<string, unknown> {
|
|
26
|
-
if (!value || typeof value !== "object" || ![Object.prototype, null].includes(Object.getPrototypeOf(value)) ||
|
|
27
|
-
Reflect.ownKeys(value).length !== keys.length || keys.some(k => { const d = Object.getOwnPropertyDescriptor(value, k); return !d?.enumerable || !Object.hasOwn(d, "value"); })) throw new TypeError("closed dispatch control data required");
|
|
28
|
-
}
|
|
29
|
-
export function dispatchRequest(input: DispatchRequest): Readonly<DispatchRequest> {
|
|
30
|
-
controlShape(input, ["version", "requestId", "bindingDigest", "expectedRevision", "action", "targetExecutionId"]);
|
|
31
|
-
if (input.version !== "1.0" || !id(input.requestId) || !hex(input.bindingDigest) || !Number.isSafeInteger(input.expectedRevision) || input.expectedRevision < 0 || input.expectedRevision > 128 ||
|
|
32
|
-
!["pause-dispatch", "resume-dispatch", "cancel-execution", "revise-scope", "reprioritize", "select-alternative"].includes(input.action) ||
|
|
33
|
-
!(input.targetExecutionId === null || id(input.targetExecutionId)) || (input.action === "cancel-execution" ? input.targetExecutionId === null : input.targetExecutionId !== null)) throw new TypeError("invalid dispatch request");
|
|
34
|
-
return Object.freeze({ version: input.version, requestId: input.requestId, bindingDigest: input.bindingDigest,
|
|
35
|
-
expectedRevision: input.expectedRevision, action: input.action, targetExecutionId: input.targetExecutionId });
|
|
36
|
-
}
|
|
37
|
-
export function parseDispatchRequest(text: string): Readonly<DispatchRequest> {
|
|
38
|
-
if (typeof text !== "string" || Buffer.byteLength(text) > 4096) throw new TypeError("bounded dispatch JSON required");
|
|
39
|
-
return dispatchRequest(parseWorkJson(text) as unknown as DispatchRequest);
|
|
40
|
-
}
|
|
41
|
-
export function dispatchRequestDigest(input: DispatchRequest): string {
|
|
42
|
-
return createHash("sha256").update(canonicalWorkJson(copyWorkJson(dispatchRequest(input)))).digest("hex");
|
|
43
|
-
}
|
|
44
|
-
export function dispatchAuthority(input: DispatchAuthority | null): Readonly<DispatchAuthority> | null {
|
|
45
|
-
if (input === null) return null;
|
|
46
|
-
controlShape(input, ["authorityDigest", "requestDigests"]);
|
|
47
|
-
const copy = copyWorkJson(input.requestDigests);
|
|
48
|
-
if (!hex(input.authorityDigest) || !Array.isArray(copy) || copy.length > 128 || !copy.every(hex) || new Set(copy).size !== copy.length) throw new TypeError("invalid independent dispatch authority");
|
|
49
|
-
return Object.freeze({ authorityDigest: input.authorityDigest, requestDigests: Object.freeze([...copy] as string[]) });
|
|
50
|
-
}
|
|
51
|
-
export function dispatchDecision(state: DispatchState, request: DispatchRequest, authorized: boolean, otherPending = false): DispatchRecord["decision"] {
|
|
52
|
-
if (!authorized) return "authority-unavailable";
|
|
53
|
-
if (!["pause-dispatch", "resume-dispatch"].includes(request.action)) return "unsupported";
|
|
54
|
-
if (request.expectedRevision !== state.revision) return "stale";
|
|
55
|
-
if (otherPending || state.records.some(r => r.application === "pending")) return "busy";
|
|
56
|
-
return "approved";
|
|
57
|
-
}
|
|
58
|
-
/** Replay operational controls only; no work-intent or acceptance projection is maintained here. */
|
|
59
|
-
export function replayDispatch(state: DispatchState, event: Record<string, unknown>, bindingDigest: string, active: number, otherPending = false): void {
|
|
60
|
-
if (event.type === "control-request") {
|
|
61
|
-
controlShape(event, ["type", "request", "decision"]);
|
|
62
|
-
const request = dispatchRequest(event.request as DispatchRequest), decision = event.decision as DispatchRecord["decision"];
|
|
63
|
-
if (state.records.length >= 128 || request.bindingDigest !== bindingDigest || state.records.some(r => r.request.requestId === request.requestId) ||
|
|
64
|
-
!["approved", "authority-unavailable", "unsupported", "stale", "busy"].includes(decision) ||
|
|
65
|
-
dispatchDecision(state, request, decision !== "authority-unavailable", otherPending) !== decision) throw new Error("invalid dispatch decision sequence");
|
|
66
|
-
state.records.push({ request, digest: dispatchRequestDigest(request), decision,
|
|
67
|
-
application: decision === "approved" ? "pending" : "not-applied", outcome: decision === "approved" ? "boundary-pending" : "refused" });
|
|
68
|
-
if (decision === "approved") state.revision++;
|
|
69
|
-
} else {
|
|
70
|
-
controlShape(event, ["type", "requestId"]);
|
|
71
|
-
const record = state.records.find(r => r.request.requestId === event.requestId);
|
|
72
|
-
if (event.type !== "control-apply" || !record || record.application !== "pending" || active !== 0) throw new Error("unverified dispatch application boundary");
|
|
73
|
-
state.paused = record.request.action === "pause-dispatch";
|
|
74
|
-
record.application = "applied"; record.outcome = state.paused ? "paused" : "enabled";
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
export function freezeDispatch(state: DispatchState, bindingDigest: string, otherPending = false): Readonly<DispatchSnapshot> {
|
|
78
|
-
return Object.freeze({ version: "dispatch-control-snapshot-v1", bindingDigest, freshness: "snapshot-unknown", revision: state.revision, paused: state.paused,
|
|
79
|
-
admission: otherPending || state.records.some(r => r.application === "pending") ? "blocked-pending" : state.paused ? "paused" : "enabled",
|
|
80
|
-
acceptance: "not-assessed", records: Object.freeze(state.records.map(r => Object.freeze({ ...r }))) });
|
|
81
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { createHash } from "node:crypto";
|
|
2
|
-
import { lstat, readFile, realpath } from "node:fs/promises";
|
|
3
|
-
|
|
4
|
-
export const DIGEST_PROFILE = "linux-bwrap-digest-v1" as const;
|
|
5
|
-
export const DIGEST_WORKER = `const b=Buffer.from(process.argv[1],'base64');if(b.length>16384)process.exit(90);process.stdout.write(JSON.stringify({bytes:b.length,sha256:require('node:crypto').createHash('sha256').update(b).digest('hex')})+'\\n');`;
|
|
6
|
-
export interface DigestRuntime { node: string; fingerprints: Readonly<Record<string, string>> }
|
|
7
|
-
function executableDetails(path: string, st: { isFile(): boolean; mode: number; size: number }) {
|
|
8
|
-
return { path, regular: st.isFile(), mode: (st.mode & 0o7777).toString(8), size: st.size,
|
|
9
|
-
predicates: { notRegular: !st.isFile(), writable: (st.mode & 0o022) !== 0, oversize: st.size > 256 * 1024 * 1024 } };
|
|
10
|
-
}
|
|
11
|
-
/** Read-only independent observations; no installation, admission or namespace qualification. */
|
|
12
|
-
export async function inspectDigestPrerequisites() {
|
|
13
|
-
const observations = [];
|
|
14
|
-
for (const requested of [process.execPath, "/usr/bin/bwrap", "/usr/bin/prlimit"]) {
|
|
15
|
-
try { const path = requested === process.execPath ? await realpath(requested) : requested;
|
|
16
|
-
const details = executableDetails(path, await lstat(path)); observations.push({ requested, ...details, conforms: !Object.values(details.predicates).some(Boolean) });
|
|
17
|
-
} catch (error) { observations.push({ requested, conforms: false, error: { code: (error as NodeJS.ErrnoException).code ?? null, message: String(error) } }); }
|
|
18
|
-
}
|
|
19
|
-
return { version: "digest-prerequisites-v1", platform: process.platform, nodeVersion: process.version, execPath: process.execPath,
|
|
20
|
-
conforms: process.platform === "linux" && observations.every(o => o.conforms), observations, qualification: "not-assessed" };
|
|
21
|
-
}
|
|
22
|
-
export async function digestRuntime(): Promise<DigestRuntime> {
|
|
23
|
-
if (process.platform !== "linux") throw new Error("Linux user/mount/PID/network namespaces required");
|
|
24
|
-
const node = await realpath(process.execPath), fingerprints: Record<string, string> = {};
|
|
25
|
-
for (const path of [node, "/usr/bin/bwrap", "/usr/bin/prlimit"]) {
|
|
26
|
-
const st = await lstat(path);
|
|
27
|
-
if (!st.isFile() || (st.mode & 0o022) !== 0 || st.size > 256 * 1024 * 1024) {
|
|
28
|
-
const details = executableDetails(path, st), code = details.predicates.notRegular ? "RUNTIME_NOT_REGULAR" : details.predicates.writable ? "RUNTIME_WRITABLE" : "RUNTIME_TOO_LARGE";
|
|
29
|
-
throw Object.assign(new Error("unsupported mutable runtime executable"), { code, path, details });
|
|
30
|
-
}
|
|
31
|
-
fingerprints[path] = createHash("sha256").update(await readFile(path)).digest("hex");
|
|
32
|
-
}
|
|
33
|
-
return Object.freeze({ node, fingerprints: Object.freeze(fingerprints) });
|
|
34
|
-
}
|
|
35
|
-
/** Internal fixed boundary builder. No user command/environment/workspace/destination interface. */
|
|
36
|
-
export function digestNamespaceArgs(runtime: DigestRuntime, code: string, args: string[], fixture?: string): string[] {
|
|
37
|
-
return ["--unshare-all", "--die-with-parent", "--new-session", "--cap-drop", "ALL",
|
|
38
|
-
"--ro-bind", "/usr", "/usr", "--ro-bind", "/lib", "/lib", "--ro-bind", "/lib64", "/lib64",
|
|
39
|
-
"--dir", "/runtime", "--ro-bind", runtime.node, "/runtime/node",
|
|
40
|
-
...(fixture ? ["--ro-bind", fixture, "/input"] : []),
|
|
41
|
-
"--proc", "/proc", "--dev", "/dev", "--clearenv", "--chdir", "/", "--",
|
|
42
|
-
"/usr/bin/prlimit", "--cpu=2:2", "--nofile=64:64", "--", "/runtime/node",
|
|
43
|
-
// No arbitrary code enters the production worker. Permission flags are additional tripwires,
|
|
44
|
-
// not a claim that Node's permission model is a hostile-JavaScript sandbox.
|
|
45
|
-
...(fixture ? [] : ["--permission"]), "--max-old-space-size=32", "-e", code, ...args];
|
|
46
|
-
}
|