pi-daddy 0.28.0 → 0.32.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +108 -124
- package/README.md +18 -896
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/contracts/ledger-record/v1/README.md +44 -0
- package/contracts/ledger-record/v1/fixtures/child-lifecycle.json +45 -0
- package/contracts/ledger-record/v1/fixtures/ledger-record.jsonl +3 -0
- package/contracts/ledger-record/v1/governance-event.schema.json +747 -0
- package/contracts/ledger-record/v1/record.schema.json +91 -0
- package/dist/cli.d.ts +10 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +120 -106
- package/dist/cli.js.map +1 -1
- package/dist/executors/activity-session.d.ts +12 -0
- package/dist/executors/activity-session.d.ts.map +1 -0
- package/dist/executors/activity-session.js +43 -0
- package/dist/executors/activity-session.js.map +1 -0
- package/dist/executors/executor.d.ts +39 -0
- package/dist/executors/executor.d.ts.map +1 -0
- package/dist/executors/executor.js +95 -0
- package/dist/executors/executor.js.map +1 -0
- package/dist/executors/herdr-cli.d.ts +78 -0
- package/dist/executors/herdr-cli.d.ts.map +1 -0
- package/dist/executors/herdr-cli.js +114 -0
- package/dist/executors/herdr-cli.js.map +1 -0
- package/dist/executors/herdr-name.d.ts.map +1 -0
- package/dist/executors/herdr-name.js.map +1 -0
- package/dist/executors/herdr-pi-lifecycle.d.ts.map +1 -0
- package/dist/executors/herdr-pi-lifecycle.js +22 -0
- package/dist/executors/herdr-pi-lifecycle.js.map +1 -0
- package/dist/executors/herdr-poll.d.ts +140 -0
- package/dist/executors/herdr-poll.d.ts.map +1 -0
- package/dist/executors/herdr-poll.js +252 -0
- package/dist/executors/herdr-poll.js.map +1 -0
- package/dist/executors/herdr-stage.d.ts +40 -0
- package/dist/executors/herdr-stage.d.ts.map +1 -0
- package/dist/executors/herdr-stage.js +54 -0
- package/dist/executors/herdr-stage.js.map +1 -0
- package/dist/executors/herdr-start.d.ts.map +1 -0
- package/dist/executors/herdr-start.js.map +1 -0
- package/dist/executors/native-session-target.d.ts +9 -0
- package/dist/executors/native-session-target.d.ts.map +1 -0
- package/dist/executors/native-session-target.js +30 -0
- package/dist/executors/native-session-target.js.map +1 -0
- package/dist/executors/pane-reaper.d.ts +111 -0
- package/dist/executors/pane-reaper.d.ts.map +1 -0
- package/dist/executors/pane-reaper.js +242 -0
- package/dist/executors/pane-reaper.js.map +1 -0
- package/dist/executors/process-activity.d.ts +3 -0
- package/dist/executors/process-activity.d.ts.map +1 -0
- package/dist/executors/process-activity.js +59 -0
- package/dist/executors/process-activity.js.map +1 -0
- package/dist/executors/run-herdr.d.ts +122 -0
- package/dist/executors/run-herdr.d.ts.map +1 -0
- package/dist/executors/run-herdr.js +341 -0
- package/dist/executors/run-herdr.js.map +1 -0
- package/dist/executors/vendor/herdr-pi-lifecycle.d.ts.map +1 -0
- package/dist/executors/vendor/herdr-pi-lifecycle.js.map +1 -0
- package/dist/governance/approval-prompt.d.ts +119 -0
- package/dist/governance/approval-prompt.d.ts.map +1 -0
- package/dist/governance/approval-prompt.js +133 -0
- package/dist/governance/approval-prompt.js.map +1 -0
- package/dist/governance/approval-store.d.ts +149 -0
- package/dist/governance/approval-store.d.ts.map +1 -0
- package/dist/governance/approval-store.js +309 -0
- package/dist/governance/approval-store.js.map +1 -0
- package/dist/governance/execution-retention.d.ts +90 -0
- package/dist/governance/execution-retention.d.ts.map +1 -0
- package/dist/governance/execution-retention.js +317 -0
- package/dist/governance/execution-retention.js.map +1 -0
- package/dist/governance/file-lock.d.ts.map +1 -0
- package/dist/governance/file-lock.js +205 -0
- package/dist/governance/file-lock.js.map +1 -0
- package/dist/governance/finalization.d.ts.map +1 -0
- package/dist/governance/finalization.js.map +1 -0
- package/dist/governance/grant-store.d.ts +96 -0
- package/dist/governance/grant-store.d.ts.map +1 -0
- package/dist/governance/grant-store.js +186 -0
- package/dist/governance/grant-store.js.map +1 -0
- package/dist/governance/init.d.ts +129 -0
- package/dist/governance/init.d.ts.map +1 -0
- package/dist/governance/init.js +360 -0
- package/dist/governance/init.js.map +1 -0
- package/dist/governance/lease-helper.d.ts.map +1 -0
- package/dist/governance/lease-helper.js +121 -0
- package/dist/governance/lease-helper.js.map +1 -0
- package/dist/governance/lease-record.d.ts +90 -0
- package/dist/governance/lease-record.d.ts.map +1 -0
- package/dist/governance/lease-record.js.map +1 -0
- package/dist/governance/ledger-events.d.ts +111 -0
- package/dist/governance/ledger-events.d.ts.map +1 -0
- package/dist/governance/ledger-events.js +129 -0
- package/dist/governance/ledger-events.js.map +1 -0
- package/dist/governance/ledger-report.d.ts +134 -0
- package/dist/governance/ledger-report.d.ts.map +1 -0
- package/dist/governance/ledger-report.js +294 -0
- package/dist/governance/ledger-report.js.map +1 -0
- package/dist/governance/ledger-v3-validation.d.ts +21 -0
- package/dist/governance/ledger-v3-validation.d.ts.map +1 -0
- package/dist/governance/ledger-v3-validation.js +353 -0
- package/dist/governance/ledger-v3-validation.js.map +1 -0
- package/dist/governance/ledger.d.ts +258 -0
- package/dist/governance/ledger.d.ts.map +1 -0
- package/dist/governance/ledger.js +201 -0
- package/dist/governance/ledger.js.map +1 -0
- package/dist/governance/native-session.d.ts +59 -0
- package/dist/governance/native-session.d.ts.map +1 -0
- package/dist/governance/native-session.js +208 -0
- package/dist/governance/native-session.js.map +1 -0
- package/dist/governance/record.d.ts +65 -0
- package/dist/governance/record.d.ts.map +1 -0
- package/dist/governance/record.js +259 -0
- package/dist/governance/record.js.map +1 -0
- package/dist/governance/retention-contract.d.ts.map +1 -0
- package/dist/governance/retention-contract.js +187 -0
- package/dist/governance/retention-contract.js.map +1 -0
- package/dist/governance/retention-json.d.ts.map +1 -0
- package/dist/governance/retention-json.js.map +1 -0
- package/dist/governance/workspace-lease.d.ts +40 -0
- package/dist/governance/workspace-lease.d.ts.map +1 -0
- package/dist/governance/workspace-lease.js +357 -0
- package/dist/governance/workspace-lease.js.map +1 -0
- package/dist/index.d.ts +59 -42
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +61 -42
- package/dist/index.js.map +1 -1
- package/dist/kernel/approval.d.ts +241 -0
- package/dist/kernel/approval.d.ts.map +1 -0
- package/dist/kernel/approval.js +270 -0
- package/dist/kernel/approval.js.map +1 -0
- package/dist/kernel/capabilities.d.ts +136 -0
- package/dist/kernel/capabilities.d.ts.map +1 -0
- package/dist/kernel/capabilities.js +199 -0
- package/dist/kernel/capabilities.js.map +1 -0
- package/dist/kernel/catalog.d.ts +125 -0
- package/dist/kernel/catalog.d.ts.map +1 -0
- package/dist/kernel/catalog.js +338 -0
- package/dist/kernel/catalog.js.map +1 -0
- package/dist/kernel/chain.d.ts.map +1 -0
- package/dist/kernel/chain.js.map +1 -0
- package/dist/kernel/correlation.d.ts.map +1 -0
- package/dist/kernel/correlation.js +267 -0
- package/dist/kernel/correlation.js.map +1 -0
- package/dist/kernel/definitions.d.ts.map +1 -0
- package/dist/kernel/definitions.js +164 -0
- package/dist/kernel/definitions.js.map +1 -0
- package/dist/kernel/delegate-types.d.ts +160 -0
- package/dist/kernel/delegate-types.d.ts.map +1 -0
- package/dist/kernel/delegate-types.js +9 -0
- package/dist/kernel/delegate-types.js.map +1 -0
- package/dist/kernel/delegate.d.ts.map +1 -0
- package/dist/kernel/delegate.js +320 -0
- package/dist/kernel/delegate.js.map +1 -0
- package/dist/kernel/delegation-approval.d.ts.map +1 -0
- package/dist/kernel/delegation-approval.js +93 -0
- package/dist/kernel/delegation-approval.js.map +1 -0
- package/dist/kernel/env-names.d.ts +51 -0
- package/dist/kernel/env-names.d.ts.map +1 -0
- package/dist/kernel/env-names.js +112 -0
- package/dist/kernel/env-names.js.map +1 -0
- package/dist/kernel/execution-id.d.ts.map +1 -0
- package/dist/kernel/execution-id.js.map +1 -0
- package/dist/kernel/fanout.d.ts.map +1 -0
- package/dist/kernel/fanout.js +93 -0
- package/dist/kernel/fanout.js.map +1 -0
- package/dist/kernel/grant-env.d.ts +118 -0
- package/dist/kernel/grant-env.d.ts.map +1 -0
- package/dist/kernel/grant-env.js +104 -0
- package/dist/kernel/grant-env.js.map +1 -0
- package/dist/kernel/ledger-identifiers.d.ts.map +1 -0
- package/dist/kernel/ledger-identifiers.js.map +1 -0
- package/dist/kernel/model-preflight.d.ts +13 -0
- package/dist/kernel/model-preflight.d.ts.map +1 -0
- package/dist/kernel/model-preflight.js +30 -0
- package/dist/kernel/model-preflight.js.map +1 -0
- package/dist/kernel/pi-tools.d.ts.map +1 -0
- package/dist/kernel/pi-tools.js +29 -0
- package/dist/kernel/pi-tools.js.map +1 -0
- package/dist/kernel/progress.d.ts.map +1 -0
- package/dist/kernel/progress.js.map +1 -0
- package/dist/kernel/project-paths.d.ts +43 -0
- package/dist/kernel/project-paths.d.ts.map +1 -0
- package/dist/kernel/project-paths.js +81 -0
- package/dist/kernel/project-paths.js.map +1 -0
- package/dist/kernel/propagation.d.ts +195 -0
- package/dist/kernel/propagation.d.ts.map +1 -0
- package/dist/kernel/propagation.js +275 -0
- package/dist/kernel/propagation.js.map +1 -0
- package/dist/kernel/refusals.d.ts +16 -0
- package/dist/kernel/refusals.d.ts.map +1 -0
- package/dist/kernel/refusals.js +53 -0
- package/dist/kernel/refusals.js.map +1 -0
- package/dist/kernel/resolve.d.ts +120 -0
- package/dist/kernel/resolve.d.ts.map +1 -0
- package/dist/kernel/resolve.js +201 -0
- package/dist/kernel/resolve.js.map +1 -0
- package/dist/kernel/routing-authority.d.ts +71 -0
- package/dist/kernel/routing-authority.d.ts.map +1 -0
- package/dist/kernel/routing-authority.js +100 -0
- package/dist/kernel/routing-authority.js.map +1 -0
- package/dist/kernel/run-child.d.ts +111 -0
- package/dist/kernel/run-child.d.ts.map +1 -0
- package/dist/kernel/run-child.js +324 -0
- package/dist/kernel/run-child.js.map +1 -0
- package/dist/kernel/skill-packages.d.ts +116 -0
- package/dist/kernel/skill-packages.d.ts.map +1 -0
- package/dist/kernel/skill-packages.js +300 -0
- package/dist/kernel/skill-packages.js.map +1 -0
- package/dist/kernel/skill-resources.d.ts.map +1 -0
- package/dist/kernel/skill-resources.js +56 -0
- package/dist/kernel/skill-resources.js.map +1 -0
- package/dist/kernel/spawn.d.ts +60 -0
- package/dist/kernel/spawn.d.ts.map +1 -0
- package/dist/kernel/spawn.js +116 -0
- package/dist/kernel/spawn.js.map +1 -0
- package/dist/kernel/workspace.d.ts +51 -0
- package/dist/kernel/workspace.d.ts.map +1 -0
- package/dist/kernel/workspace.js +223 -0
- package/dist/kernel/workspace.js.map +1 -0
- package/dist/products/activity-timeline.d.ts +126 -0
- package/dist/products/activity-timeline.d.ts.map +1 -0
- package/dist/products/activity-timeline.js +542 -0
- package/dist/products/activity-timeline.js.map +1 -0
- package/dist/products/dashboard-cli.d.ts +26 -0
- package/dist/products/dashboard-cli.d.ts.map +1 -0
- package/dist/products/dashboard-cli.js +224 -0
- package/dist/products/dashboard-cli.js.map +1 -0
- package/dist/products/dashboard-display-controls.d.ts +17 -0
- package/dist/products/dashboard-display-controls.d.ts.map +1 -0
- package/dist/products/dashboard-display-controls.js +38 -0
- package/dist/products/dashboard-display-controls.js.map +1 -0
- package/dist/products/dashboard-handshake.d.ts +42 -0
- package/dist/products/dashboard-handshake.d.ts.map +1 -0
- package/dist/products/dashboard-handshake.js +158 -0
- package/dist/products/dashboard-handshake.js.map +1 -0
- package/dist/products/dashboard-herdr.d.ts +55 -0
- package/dist/products/dashboard-herdr.d.ts.map +1 -0
- package/dist/products/dashboard-herdr.js +324 -0
- package/dist/products/dashboard-herdr.js.map +1 -0
- package/dist/products/dashboard-projection.d.ts +62 -0
- package/dist/products/dashboard-projection.d.ts.map +1 -0
- package/dist/products/dashboard-projection.js +305 -0
- package/dist/products/dashboard-projection.js.map +1 -0
- package/dist/products/dashboard-render.d.ts.map +1 -0
- package/dist/products/dashboard-render.js +208 -0
- package/dist/products/dashboard-render.js.map +1 -0
- package/extensions/activity-timeline.ts +134 -28
- package/extensions/approval-banking.ts +3 -3
- package/extensions/approvals.ts +18 -12
- package/extensions/chain-approval-facts.ts +9 -6
- package/extensions/chain-ledger.ts +4 -4
- package/extensions/chain-plan.ts +6 -6
- package/extensions/correlation-shape.ts +42 -33
- package/extensions/delegate-chain.ts +93 -45
- package/extensions/delegation-authority.ts +7 -3
- package/extensions/delegation-ledger.ts +2 -2
- package/extensions/delegation-native.ts +24 -7
- package/extensions/delegation.ts +91 -80
- package/extensions/execute-child.ts +440 -293
- package/extensions/execution-occurrence.ts +2 -2
- package/extensions/executor-session.ts +5 -5
- package/extensions/fanout-outcome.ts +8 -6
- package/extensions/grant-store-refusal.ts +24 -12
- package/extensions/grants-command.ts +42 -34
- package/extensions/grants-connected-command.ts +29 -15
- package/extensions/grants.ts +73 -73
- package/extensions/init-command.ts +18 -12
- package/extensions/reload-environment.ts +12 -5
- package/extensions/run-delegation.ts +29 -19
- package/extensions/session-environment.ts +25 -11
- package/extensions/session-report.ts +61 -12
- package/extensions/session.ts +58 -34
- package/extensions/spawn-summary.ts +5 -5
- package/extensions/stored-grant-session.ts +5 -5
- package/extensions/tripwire.ts +1 -1
- package/extensions/workspace-runtime.ts +26 -24
- package/herdr-plugin/herdr-plugin.toml +1 -1
- package/package.json +4 -211
- package/src/cli.ts +149 -92
- package/src/executors/activity-session.ts +54 -0
- package/src/executors/executor.ts +123 -0
- package/src/executors/herdr-cli.ts +132 -0
- package/src/executors/herdr-pi-lifecycle.ts +21 -0
- package/src/executors/herdr-poll.ts +305 -0
- package/src/executors/herdr-stage.ts +55 -0
- package/src/executors/native-session-target.ts +31 -0
- package/src/executors/pane-reaper.ts +270 -0
- package/src/executors/process-activity.ts +54 -0
- package/src/executors/run-herdr.ts +426 -0
- package/src/governance/approval-prompt.ts +225 -0
- package/src/governance/approval-store.ts +385 -0
- package/src/governance/execution-retention.ts +372 -0
- package/src/governance/file-lock.ts +210 -0
- package/src/governance/finalization.ts +82 -0
- package/src/governance/grant-store.ts +235 -0
- package/src/governance/init.ts +447 -0
- package/src/governance/lease-helper.ts +124 -0
- package/src/governance/lease-record.ts +131 -0
- package/src/governance/ledger-events.ts +222 -0
- package/src/governance/ledger-report.ts +396 -0
- package/src/governance/ledger-v3-validation.ts +384 -0
- package/src/governance/ledger.ts +419 -0
- package/src/governance/native-session.ts +264 -0
- package/src/governance/record.ts +294 -0
- package/src/governance/retention-contract.ts +201 -0
- package/src/governance/retention-json.ts +24 -0
- package/src/governance/workspace-lease.ts +429 -0
- package/src/index.ts +82 -92
- package/src/kernel/approval.ts +406 -0
- package/src/kernel/capabilities.ts +216 -0
- package/src/kernel/catalog.ts +373 -0
- package/src/kernel/correlation.ts +351 -0
- package/src/kernel/definitions.ts +215 -0
- package/src/kernel/delegate-types.ts +162 -0
- package/src/kernel/delegate.ts +375 -0
- package/src/kernel/delegation-approval.ts +126 -0
- package/src/kernel/env-names.ts +119 -0
- package/src/kernel/fanout.ts +106 -0
- package/src/kernel/grant-env.ts +174 -0
- package/src/kernel/model-preflight.ts +44 -0
- package/src/kernel/pi-tools.ts +32 -0
- package/src/kernel/project-paths.ts +97 -0
- package/src/kernel/propagation.ts +341 -0
- package/src/kernel/refusals.ts +64 -0
- package/src/kernel/resolve.ts +258 -0
- package/src/kernel/routing-authority.ts +121 -0
- package/src/kernel/run-child.ts +418 -0
- package/src/kernel/skill-packages.ts +329 -0
- package/src/kernel/skill-resources.ts +64 -0
- package/src/kernel/spawn.ts +156 -0
- package/src/kernel/workspace.ts +336 -0
- package/src/products/activity-timeline.ts +679 -0
- package/src/products/dashboard-cli.ts +250 -0
- package/src/products/dashboard-display-controls.ts +44 -0
- package/src/products/dashboard-handshake.ts +222 -0
- package/src/products/dashboard-herdr.ts +427 -0
- package/src/products/dashboard-projection.ts +389 -0
- package/src/products/dashboard-render.ts +260 -0
- package/PRODUCT-GUIDE.md +0 -155
- package/REQUIREMENTS.md +0 -41
- package/contracts/daily-view/v1/README.md +0 -114
- package/contracts/daily-view/v1/fixtures/view.json +0 -525
- package/contracts/daily-view/v1/fixtures/view.txt +0 -75
- package/contracts/daily-view/v1/fixtures/work.jsonl +0 -17
- package/contracts/daily-view/v1/p03/README.md +0 -26
- package/contracts/daily-view/v1/p03/fixtures/retained-executions.json +0 -241
- package/contracts/daily-view/v1/p03/projection.schema.json +0 -194
- package/contracts/daily-view/v1/p03/provenance.json +0 -21
- package/contracts/dashboard-host/v1/README.md +0 -176
- package/contracts/debrief/v1/README.md +0 -146
- package/contracts/debrief/v1/intervention/README.md +0 -32
- package/contracts/debrief/v1/intervention/fixtures/artifact-3ee11136beb864f518252e5024dae9197421fbf97b6e981d3243c782b5c44bd0.txt +0 -1
- package/contracts/debrief/v1/intervention/fixtures/artifact-58905d872dd3c54a9705f67b05fa82edbad7af6476ae8993faf1a7b9fadfb905.txt +0 -1
- package/contracts/debrief/v1/intervention/fixtures/assessment.json +0 -29
- package/contracts/debrief/v1/intervention/fixtures/blind-view.json +0 -20
- package/contracts/debrief/v1/intervention/fixtures/choice.json +0 -7
- package/contracts/debrief/v1/intervention/fixtures/manifest.json +0 -57
- package/contracts/debrief/v1/intervention/fixtures/reveal.json +0 -39
- package/contracts/debrief/v1/provenance.json +0 -89
- package/contracts/debrief/v1/work-capture/README.md +0 -38
- package/contracts/debrief/v1/work-capture/fixtures/batch.json +0 -17
- package/contracts/debrief/v1/work-capture/fixtures/cases.json +0 -184
- package/contracts/debrief/v1/work-capture/fixtures/review.json +0 -184
- package/contracts/debrief/v1/work-capture/review-request.schema.json +0 -41
- package/contracts/debrief/v1/work-capture/work-case.schema.json +0 -190
- package/contracts/debrief/v2/README.md +0 -71
- package/contracts/debrief/v2/input-pin.json +0 -66
- package/contracts/debrief/v2/intervention-upstream.md +0 -40
- package/contracts/debrief/v2/work-signals-upstream.md +0 -22
- package/contracts/dispatch-control/v1/README.md +0 -109
- package/contracts/dispatch-control/v1/request.schema.json +0 -19
- package/contracts/effect-profile/v1/README.md +0 -124
- package/contracts/execution-retention/v1/README.md +0 -109
- package/contracts/execution-retention/v2/README.md +0 -148
- package/contracts/execution-retention/v2/fixtures/interrupted-native-bytes.json +0 -91
- package/contracts/execution-retention/v2/fixtures/missing-native-session.json +0 -91
- package/contracts/execution-retention/v2/fixtures/native-file-unknown-branch.json +0 -91
- package/contracts/execution-retention/v2/fixtures/native-id-without-bytes.json +0 -91
- package/contracts/execution-retention/v2/fixtures/native-live-branch.json +0 -90
- package/contracts/execution-retention/v2/fixtures/replaced-native-session.json +0 -92
- package/contracts/execution-retention/v2/fixtures/result-82c620cdfeb8ca6b858cf653d7f5e2eedca5315d6244216d60e8b36f03223d6a.bin +0 -1
- package/contracts/execution-retention/v2/fixtures/session-2ec1f134bc739984434f7fca689e1c3d1c39fce2dcadae709e9b6faedfcc4ac7.bin +0 -3
- package/contracts/execution-retention/v2/fixtures/session-9bdb4bd16a901da31580acf056bda525225259e15ec409e0410480109011772f.bin +0 -3
- package/contracts/execution-retention/v2/manifest.schema.json +0 -858
- package/contracts/experiment/v1/README.md +0 -164
- package/contracts/factory-order/v1/README.md +0 -151
- package/contracts/factory-order/v1/adoption-pin.json +0 -8
- package/contracts/intent-control/v1/README.md +0 -135
- package/contracts/intent-control/v1/request.schema.json +0 -1096
- package/contracts/intent-control/v2/README.md +0 -34
- package/contracts/intent-control/v2/request.schema.json +0 -1070
- package/contracts/ledger/v2/README.md +0 -59
- package/contracts/ledger/v2/fixtures/capability-decision.json +0 -95
- package/contracts/ledger/v2/fixtures/check-receipt.json +0 -40
- package/contracts/ledger/v2/fixtures/child-lifecycle.json +0 -42
- package/contracts/ledger/v2/fixtures/workspace-lease.json +0 -41
- package/contracts/ledger/v2/ledger-event.schema.json +0 -633
- package/contracts/ledger/v3/README.md +0 -36
- package/contracts/ledger/v3/fixtures/check-receipt.json +0 -41
- package/contracts/ledger/v3/fixtures/child-lifecycle.json +0 -44
- package/contracts/ledger/v3/fixtures/workflow-fact.json +0 -40
- package/contracts/ledger/v3/ledger-event.schema.json +0 -955
- package/contracts/ledger/v4/README.md +0 -241
- package/contracts/ledger/v4/fixtures/layout-options.json +0 -428
- package/contracts/ledger/v4/fixtures/work-acceptance.json +0 -57
- package/contracts/ledger/v4/fixtures/work-occurrence.json +0 -44
- package/contracts/ledger/v4/fixtures/work-revision.json +0 -26
- package/contracts/ledger/v4/fixtures/work-snapshot.json +0 -73
- package/contracts/ledger/v4/ledger-event.schema.json +0 -162
- package/contracts/ordinary-control/v1/README.md +0 -59
- package/contracts/producer-ipc/v1/README.md +0 -137
- package/dist/activity-timeline.d.ts +0 -109
- package/dist/activity-timeline.d.ts.map +0 -1
- package/dist/activity-timeline.js +0 -208
- package/dist/activity-timeline.js.map +0 -1
- package/dist/approval-prompt.d.ts +0 -119
- package/dist/approval-prompt.d.ts.map +0 -1
- package/dist/approval-prompt.js +0 -133
- package/dist/approval-prompt.js.map +0 -1
- package/dist/approval-store.d.ts +0 -149
- package/dist/approval-store.d.ts.map +0 -1
- package/dist/approval-store.js +0 -314
- package/dist/approval-store.js.map +0 -1
- package/dist/approval.d.ts +0 -241
- package/dist/approval.d.ts.map +0 -1
- package/dist/approval.js +0 -268
- package/dist/approval.js.map +0 -1
- package/dist/capabilities.d.ts +0 -136
- package/dist/capabilities.d.ts.map +0 -1
- package/dist/capabilities.js +0 -203
- package/dist/capabilities.js.map +0 -1
- package/dist/catalog.d.ts +0 -98
- package/dist/catalog.d.ts.map +0 -1
- package/dist/catalog.js +0 -273
- package/dist/catalog.js.map +0 -1
- package/dist/chain.d.ts.map +0 -1
- package/dist/chain.js.map +0 -1
- package/dist/check-runner.d.ts +0 -66
- package/dist/check-runner.d.ts.map +0 -1
- package/dist/check-runner.js +0 -275
- package/dist/check-runner.js.map +0 -1
- package/dist/control-journal.d.ts +0 -20
- package/dist/control-journal.d.ts.map +0 -1
- package/dist/control-journal.js +0 -73
- package/dist/control-journal.js.map +0 -1
- package/dist/correlation.d.ts.map +0 -1
- package/dist/correlation.js +0 -231
- package/dist/correlation.js.map +0 -1
- package/dist/daily-dashboard-host.d.ts +0 -136
- package/dist/daily-dashboard-host.d.ts.map +0 -1
- package/dist/daily-dashboard-host.js +0 -164
- package/dist/daily-dashboard-host.js.map +0 -1
- package/dist/daily-panel.d.ts +0 -36
- package/dist/daily-panel.d.ts.map +0 -1
- package/dist/daily-panel.js +0 -84
- package/dist/daily-panel.js.map +0 -1
- package/dist/daily-view-input.d.ts +0 -44
- package/dist/daily-view-input.d.ts.map +0 -1
- package/dist/daily-view-input.js +0 -68
- package/dist/daily-view-input.js.map +0 -1
- package/dist/daily-view-render.d.ts +0 -5
- package/dist/daily-view-render.d.ts.map +0 -1
- package/dist/daily-view-render.js +0 -42
- package/dist/daily-view-render.js.map +0 -1
- package/dist/daily-view.d.ts +0 -77
- package/dist/daily-view.d.ts.map +0 -1
- package/dist/daily-view.js +0 -176
- package/dist/daily-view.js.map +0 -1
- package/dist/dashboard-cli.d.ts +0 -54
- package/dist/dashboard-cli.d.ts.map +0 -1
- package/dist/dashboard-cli.js +0 -367
- package/dist/dashboard-cli.js.map +0 -1
- package/dist/dashboard-display-controls.d.ts +0 -15
- package/dist/dashboard-display-controls.d.ts.map +0 -1
- package/dist/dashboard-display-controls.js +0 -34
- package/dist/dashboard-display-controls.js.map +0 -1
- package/dist/dashboard-handshake.d.ts +0 -42
- package/dist/dashboard-handshake.d.ts.map +0 -1
- package/dist/dashboard-handshake.js +0 -147
- package/dist/dashboard-handshake.js.map +0 -1
- package/dist/dashboard-harness.d.ts +0 -22
- package/dist/dashboard-harness.d.ts.map +0 -1
- package/dist/dashboard-harness.js +0 -89
- package/dist/dashboard-harness.js.map +0 -1
- package/dist/dashboard-herdr.d.ts +0 -55
- package/dist/dashboard-herdr.d.ts.map +0 -1
- package/dist/dashboard-herdr.js +0 -293
- package/dist/dashboard-herdr.js.map +0 -1
- package/dist/dashboard-host-contract.d.ts +0 -127
- package/dist/dashboard-host-contract.d.ts.map +0 -1
- package/dist/dashboard-host-contract.js +0 -14
- package/dist/dashboard-host-contract.js.map +0 -1
- package/dist/dashboard-host-transport.d.ts +0 -16
- package/dist/dashboard-host-transport.d.ts.map +0 -1
- package/dist/dashboard-host-transport.js +0 -127
- package/dist/dashboard-host-transport.js.map +0 -1
- package/dist/dashboard-host.d.ts +0 -239
- package/dist/dashboard-host.d.ts.map +0 -1
- package/dist/dashboard-host.js +0 -474
- package/dist/dashboard-host.js.map +0 -1
- package/dist/dashboard-menu.d.ts +0 -16
- package/dist/dashboard-menu.d.ts.map +0 -1
- package/dist/dashboard-menu.js +0 -33
- package/dist/dashboard-menu.js.map +0 -1
- package/dist/dashboard-observation.d.ts +0 -28
- package/dist/dashboard-observation.d.ts.map +0 -1
- package/dist/dashboard-observation.js +0 -87
- package/dist/dashboard-observation.js.map +0 -1
- package/dist/dashboard-projection.d.ts +0 -73
- package/dist/dashboard-projection.d.ts.map +0 -1
- package/dist/dashboard-projection.js +0 -294
- package/dist/dashboard-projection.js.map +0 -1
- package/dist/dashboard-render.d.ts.map +0 -1
- package/dist/dashboard-render.js +0 -212
- package/dist/dashboard-render.js.map +0 -1
- package/dist/debrief-contract.d.ts +0 -65
- package/dist/debrief-contract.d.ts.map +0 -1
- package/dist/debrief-contract.js +0 -151
- package/dist/debrief-contract.js.map +0 -1
- package/dist/debrief-fixture.d.ts +0 -16
- package/dist/debrief-fixture.d.ts.map +0 -1
- package/dist/debrief-fixture.js +0 -41
- package/dist/debrief-fixture.js.map +0 -1
- package/dist/debrief-host.d.ts +0 -59
- package/dist/debrief-host.d.ts.map +0 -1
- package/dist/debrief-host.js +0 -49
- package/dist/debrief-host.js.map +0 -1
- package/dist/debrief-render.d.ts +0 -5
- package/dist/debrief-render.d.ts.map +0 -1
- package/dist/debrief-render.js +0 -65
- package/dist/debrief-render.js.map +0 -1
- package/dist/debrief.d.ts +0 -90
- package/dist/debrief.d.ts.map +0 -1
- package/dist/debrief.js +0 -263
- package/dist/debrief.js.map +0 -1
- package/dist/definitions.d.ts.map +0 -1
- package/dist/definitions.js +0 -164
- package/dist/definitions.js.map +0 -1
- package/dist/delegate-types.d.ts +0 -154
- package/dist/delegate-types.d.ts.map +0 -1
- package/dist/delegate-types.js +0 -8
- package/dist/delegate-types.js.map +0 -1
- package/dist/delegate.d.ts.map +0 -1
- package/dist/delegate.js +0 -313
- package/dist/delegate.js.map +0 -1
- package/dist/delegation-approval.d.ts.map +0 -1
- package/dist/delegation-approval.js +0 -94
- package/dist/delegation-approval.js.map +0 -1
- package/dist/dispatch-control.d.ts +0 -45
- package/dist/dispatch-control.d.ts.map +0 -1
- package/dist/dispatch-control.js +0 -76
- package/dist/dispatch-control.js.map +0 -1
- package/dist/effect-profile-runtime.d.ts +0 -40
- package/dist/effect-profile-runtime.d.ts.map +0 -1
- package/dist/effect-profile-runtime.js +0 -51
- package/dist/effect-profile-runtime.js.map +0 -1
- package/dist/effect-profile.d.ts +0 -40
- package/dist/effect-profile.d.ts.map +0 -1
- package/dist/effect-profile.js +0 -152
- package/dist/effect-profile.js.map +0 -1
- package/dist/execution-id.d.ts.map +0 -1
- package/dist/execution-id.js.map +0 -1
- package/dist/execution-retention.d.ts +0 -90
- package/dist/execution-retention.d.ts.map +0 -1
- package/dist/execution-retention.js +0 -247
- package/dist/execution-retention.js.map +0 -1
- package/dist/executor.d.ts +0 -39
- package/dist/executor.d.ts.map +0 -1
- package/dist/executor.js +0 -94
- package/dist/executor.js.map +0 -1
- package/dist/experiment-contract.d.ts +0 -56
- package/dist/experiment-contract.d.ts.map +0 -1
- package/dist/experiment-contract.js +0 -80
- package/dist/experiment-contract.js.map +0 -1
- package/dist/experiment-state.d.ts +0 -22
- package/dist/experiment-state.d.ts.map +0 -1
- package/dist/experiment-state.js +0 -79
- package/dist/experiment-state.js.map +0 -1
- package/dist/experiment-store.d.ts +0 -30
- package/dist/experiment-store.d.ts.map +0 -1
- package/dist/experiment-store.js +0 -147
- package/dist/experiment-store.js.map +0 -1
- package/dist/experiment.d.ts +0 -65
- package/dist/experiment.d.ts.map +0 -1
- package/dist/experiment.js +0 -362
- package/dist/experiment.js.map +0 -1
- package/dist/factory-contract.d.ts +0 -79
- package/dist/factory-contract.d.ts.map +0 -1
- package/dist/factory-contract.js +0 -89
- package/dist/factory-contract.js.map +0 -1
- package/dist/factory-migration.d.ts +0 -20
- package/dist/factory-migration.d.ts.map +0 -1
- package/dist/factory-migration.js +0 -55
- package/dist/factory-migration.js.map +0 -1
- package/dist/factory-order.d.ts +0 -848
- package/dist/factory-order.d.ts.map +0 -1
- package/dist/factory-order.js +0 -83
- package/dist/factory-order.js.map +0 -1
- package/dist/factory-registry.d.ts +0 -121
- package/dist/factory-registry.d.ts.map +0 -1
- package/dist/factory-registry.js +0 -133
- package/dist/factory-registry.js.map +0 -1
- package/dist/fanout.d.ts.map +0 -1
- package/dist/fanout.js +0 -93
- package/dist/fanout.js.map +0 -1
- package/dist/file-lock.d.ts.map +0 -1
- package/dist/file-lock.js +0 -201
- package/dist/file-lock.js.map +0 -1
- package/dist/finalization.d.ts.map +0 -1
- package/dist/finalization.js.map +0 -1
- package/dist/git-identity.d.ts +0 -13
- package/dist/git-identity.d.ts.map +0 -1
- package/dist/git-identity.js +0 -47
- package/dist/git-identity.js.map +0 -1
- package/dist/grant-env.d.ts +0 -75
- package/dist/grant-env.d.ts.map +0 -1
- package/dist/grant-env.js +0 -154
- package/dist/grant-env.js.map +0 -1
- package/dist/grant-store.d.ts +0 -96
- package/dist/grant-store.d.ts.map +0 -1
- package/dist/grant-store.js +0 -188
- package/dist/grant-store.js.map +0 -1
- package/dist/herdr-cli.d.ts +0 -78
- package/dist/herdr-cli.d.ts.map +0 -1
- package/dist/herdr-cli.js +0 -113
- package/dist/herdr-cli.js.map +0 -1
- package/dist/herdr-name.d.ts.map +0 -1
- package/dist/herdr-name.js.map +0 -1
- package/dist/herdr-pi-lifecycle.d.ts.map +0 -1
- package/dist/herdr-pi-lifecycle.js +0 -22
- package/dist/herdr-pi-lifecycle.js.map +0 -1
- package/dist/herdr-poll.d.ts +0 -133
- package/dist/herdr-poll.d.ts.map +0 -1
- package/dist/herdr-poll.js +0 -222
- package/dist/herdr-poll.js.map +0 -1
- package/dist/herdr-stage.d.ts +0 -40
- package/dist/herdr-stage.d.ts.map +0 -1
- package/dist/herdr-stage.js +0 -54
- package/dist/herdr-stage.js.map +0 -1
- package/dist/herdr-start.d.ts.map +0 -1
- package/dist/herdr-start.js.map +0 -1
- package/dist/init.d.ts +0 -117
- package/dist/init.d.ts.map +0 -1
- package/dist/init.js +0 -323
- package/dist/init.js.map +0 -1
- package/dist/intent-application.d.ts +0 -17
- package/dist/intent-application.d.ts.map +0 -1
- package/dist/intent-application.js +0 -114
- package/dist/intent-application.js.map +0 -1
- package/dist/intent-control.d.ts +0 -201
- package/dist/intent-control.d.ts.map +0 -1
- package/dist/intent-control.js +0 -110
- package/dist/intent-control.js.map +0 -1
- package/dist/intent-scheduling.d.ts +0 -9
- package/dist/intent-scheduling.d.ts.map +0 -1
- package/dist/intent-scheduling.js +0 -15
- package/dist/intent-scheduling.js.map +0 -1
- package/dist/learning-connection.d.ts +0 -127
- package/dist/learning-connection.d.ts.map +0 -1
- package/dist/learning-connection.js +0 -54
- package/dist/learning-connection.js.map +0 -1
- package/dist/lease-helper.d.ts.map +0 -1
- package/dist/lease-helper.js +0 -94
- package/dist/lease-helper.js.map +0 -1
- package/dist/lease-record.d.ts +0 -90
- package/dist/lease-record.d.ts.map +0 -1
- package/dist/lease-record.js.map +0 -1
- package/dist/ledger-append.d.ts +0 -15
- package/dist/ledger-append.d.ts.map +0 -1
- package/dist/ledger-append.js +0 -94
- package/dist/ledger-append.js.map +0 -1
- package/dist/ledger-events.d.ts +0 -131
- package/dist/ledger-events.d.ts.map +0 -1
- package/dist/ledger-events.js +0 -107
- package/dist/ledger-events.js.map +0 -1
- package/dist/ledger-identifiers.d.ts.map +0 -1
- package/dist/ledger-identifiers.js.map +0 -1
- package/dist/ledger-report.d.ts +0 -134
- package/dist/ledger-report.d.ts.map +0 -1
- package/dist/ledger-report.js +0 -271
- package/dist/ledger-report.js.map +0 -1
- package/dist/ledger-v3-validation.d.ts +0 -11
- package/dist/ledger-v3-validation.d.ts.map +0 -1
- package/dist/ledger-v3-validation.js +0 -265
- package/dist/ledger-v3-validation.js.map +0 -1
- package/dist/ledger.d.ts +0 -242
- package/dist/ledger.d.ts.map +0 -1
- package/dist/ledger.js +0 -142
- package/dist/ledger.js.map +0 -1
- package/dist/measured-order.d.ts +0 -249
- package/dist/measured-order.d.ts.map +0 -1
- package/dist/measured-order.js +0 -309
- package/dist/measured-order.js.map +0 -1
- package/dist/measured-session.d.ts +0 -97
- package/dist/measured-session.d.ts.map +0 -1
- package/dist/measured-session.js +0 -134
- package/dist/measured-session.js.map +0 -1
- package/dist/model-preflight.d.ts +0 -13
- package/dist/model-preflight.d.ts.map +0 -1
- package/dist/model-preflight.js +0 -29
- package/dist/model-preflight.js.map +0 -1
- package/dist/native-session-target.d.ts +0 -9
- package/dist/native-session-target.d.ts.map +0 -1
- package/dist/native-session-target.js +0 -29
- package/dist/native-session-target.js.map +0 -1
- package/dist/native-session.d.ts +0 -59
- package/dist/native-session.d.ts.map +0 -1
- package/dist/native-session.js +0 -154
- package/dist/native-session.js.map +0 -1
- package/dist/order-schedule.d.ts +0 -37
- package/dist/order-schedule.d.ts.map +0 -1
- package/dist/order-schedule.js +0 -81
- package/dist/order-schedule.js.map +0 -1
- package/dist/ordinary-children.d.ts +0 -52
- package/dist/ordinary-children.d.ts.map +0 -1
- package/dist/ordinary-children.js +0 -93
- package/dist/ordinary-children.js.map +0 -1
- package/dist/pane-reaper.d.ts +0 -111
- package/dist/pane-reaper.d.ts.map +0 -1
- package/dist/pane-reaper.js +0 -242
- package/dist/pane-reaper.js.map +0 -1
- package/dist/pi-tools.d.ts.map +0 -1
- package/dist/pi-tools.js +0 -21
- package/dist/pi-tools.js.map +0 -1
- package/dist/producer-ipc-contract.d.ts +0 -29
- package/dist/producer-ipc-contract.d.ts.map +0 -1
- package/dist/producer-ipc-contract.js +0 -29
- package/dist/producer-ipc-contract.js.map +0 -1
- package/dist/producer-ipc.d.ts +0 -55
- package/dist/producer-ipc.d.ts.map +0 -1
- package/dist/producer-ipc.js +0 -143
- package/dist/producer-ipc.js.map +0 -1
- package/dist/product-files.d.ts +0 -6
- package/dist/product-files.d.ts.map +0 -1
- package/dist/product-files.js +0 -55
- package/dist/product-files.js.map +0 -1
- package/dist/progress.d.ts.map +0 -1
- package/dist/progress.js.map +0 -1
- package/dist/propagation.d.ts +0 -203
- package/dist/propagation.d.ts.map +0 -1
- package/dist/propagation.js +0 -279
- package/dist/propagation.js.map +0 -1
- package/dist/refusals.d.ts +0 -16
- package/dist/refusals.d.ts.map +0 -1
- package/dist/refusals.js +0 -55
- package/dist/refusals.js.map +0 -1
- package/dist/resolve.d.ts +0 -120
- package/dist/resolve.d.ts.map +0 -1
- package/dist/resolve.js +0 -211
- package/dist/resolve.js.map +0 -1
- package/dist/resource-budget.d.ts +0 -334
- package/dist/resource-budget.d.ts.map +0 -1
- package/dist/resource-budget.js +0 -415
- package/dist/resource-budget.js.map +0 -1
- package/dist/retention-contract.d.ts.map +0 -1
- package/dist/retention-contract.js +0 -104
- package/dist/retention-contract.js.map +0 -1
- package/dist/retention-json.d.ts.map +0 -1
- package/dist/retention-json.js.map +0 -1
- package/dist/routing-authority.d.ts +0 -71
- package/dist/routing-authority.d.ts.map +0 -1
- package/dist/routing-authority.js +0 -100
- package/dist/routing-authority.js.map +0 -1
- package/dist/run-child.d.ts +0 -87
- package/dist/run-child.d.ts.map +0 -1
- package/dist/run-child.js +0 -248
- package/dist/run-child.js.map +0 -1
- package/dist/run-herdr.d.ts +0 -119
- package/dist/run-herdr.d.ts.map +0 -1
- package/dist/run-herdr.js +0 -335
- package/dist/run-herdr.js.map +0 -1
- package/dist/skill-packages.d.ts +0 -116
- package/dist/skill-packages.d.ts.map +0 -1
- package/dist/skill-packages.js +0 -295
- package/dist/skill-packages.js.map +0 -1
- package/dist/skill-resources.d.ts.map +0 -1
- package/dist/skill-resources.js +0 -52
- package/dist/skill-resources.js.map +0 -1
- package/dist/spawn.d.ts +0 -60
- package/dist/spawn.d.ts.map +0 -1
- package/dist/spawn.js +0 -116
- package/dist/spawn.js.map +0 -1
- package/dist/vendor/adoption.d.ts +0 -129
- package/dist/vendor/adoption.d.ts.map +0 -1
- package/dist/vendor/adoption.js +0 -102
- package/dist/vendor/adoption.js.map +0 -1
- package/dist/vendor/herdr-pi-lifecycle.d.ts.map +0 -1
- package/dist/vendor/herdr-pi-lifecycle.js.map +0 -1
- package/dist/work-command.d.ts +0 -32
- package/dist/work-command.d.ts.map +0 -1
- package/dist/work-command.js +0 -179
- package/dist/work-command.js.map +0 -1
- package/dist/work-ledger-destination.d.ts +0 -20
- package/dist/work-ledger-destination.d.ts.map +0 -1
- package/dist/work-ledger-destination.js +0 -131
- package/dist/work-ledger-destination.js.map +0 -1
- package/dist/work-ledger-json.d.ts +0 -25
- package/dist/work-ledger-json.d.ts.map +0 -1
- package/dist/work-ledger-json.js +0 -267
- package/dist/work-ledger-json.js.map +0 -1
- package/dist/work-ledger-occurrences.d.ts +0 -227
- package/dist/work-ledger-occurrences.d.ts.map +0 -1
- package/dist/work-ledger-occurrences.js +0 -115
- package/dist/work-ledger-occurrences.js.map +0 -1
- package/dist/work-ledger-projection.d.ts +0 -295
- package/dist/work-ledger-projection.d.ts.map +0 -1
- package/dist/work-ledger-projection.js +0 -237
- package/dist/work-ledger-projection.js.map +0 -1
- package/dist/work-ledger-snapshot.d.ts +0 -29
- package/dist/work-ledger-snapshot.d.ts.map +0 -1
- package/dist/work-ledger-snapshot.js +0 -267
- package/dist/work-ledger-snapshot.js.map +0 -1
- package/dist/work-ledger-types.d.ts +0 -261
- package/dist/work-ledger-types.d.ts.map +0 -1
- package/dist/work-ledger-types.js +0 -13
- package/dist/work-ledger-types.js.map +0 -1
- package/dist/work-ledger-validation.d.ts +0 -14
- package/dist/work-ledger-validation.d.ts.map +0 -1
- package/dist/work-ledger-validation.js +0 -226
- package/dist/work-ledger-validation.js.map +0 -1
- package/dist/work-ledger.d.ts +0 -43
- package/dist/work-ledger.d.ts.map +0 -1
- package/dist/work-ledger.js +0 -225
- package/dist/work-ledger.js.map +0 -1
- package/dist/work-policy-registry.d.ts +0 -133
- package/dist/work-policy-registry.d.ts.map +0 -1
- package/dist/work-policy-registry.js +0 -128
- package/dist/work-policy-registry.js.map +0 -1
- package/dist/work-run.d.ts +0 -56
- package/dist/work-run.d.ts.map +0 -1
- package/dist/work-run.js +0 -102
- package/dist/work-run.js.map +0 -1
- package/dist/work-setup.d.ts +0 -40
- package/dist/work-setup.d.ts.map +0 -1
- package/dist/work-setup.js +0 -174
- package/dist/work-setup.js.map +0 -1
- package/dist/workflow-fact-id.d.ts +0 -4
- package/dist/workflow-fact-id.d.ts.map +0 -1
- package/dist/workflow-fact-id.js +0 -14
- package/dist/workflow-fact-id.js.map +0 -1
- package/dist/workflow-facts.d.ts +0 -34
- package/dist/workflow-facts.d.ts.map +0 -1
- package/dist/workflow-facts.js +0 -43
- package/dist/workflow-facts.js.map +0 -1
- package/dist/workspace-lease.d.ts +0 -40
- package/dist/workspace-lease.d.ts.map +0 -1
- package/dist/workspace-lease.js +0 -333
- package/dist/workspace-lease.js.map +0 -1
- package/dist/workspace.d.ts +0 -57
- package/dist/workspace.d.ts.map +0 -1
- package/dist/workspace.js +0 -216
- package/dist/workspace.js.map +0 -1
- package/extensions/daily-dashboard-session.ts +0 -48
- package/extensions/daily-work-session.ts +0 -20
- package/extensions/learning-outcome-session.ts +0 -38
- package/extensions/learning-session.ts +0 -59
- package/extensions/ordinary-runtime.ts +0 -14
- package/extensions/primary-shadow.ts +0 -11
- package/extensions/work-policy-session.ts +0 -139
- package/extensions/work-run-session.ts +0 -75
- package/extensions/work-runtime.ts +0 -44
- package/extensions/work-session.ts +0 -132
- package/src/activity-timeline.ts +0 -133
- package/src/approval-prompt.ts +0 -225
- package/src/approval-store.ts +0 -386
- package/src/approval.ts +0 -399
- package/src/capabilities.ts +0 -220
- package/src/catalog.ts +0 -306
- package/src/check-runner.ts +0 -387
- package/src/control-journal.ts +0 -26
- package/src/correlation.ts +0 -320
- package/src/daily-dashboard-host.ts +0 -105
- package/src/daily-panel.ts +0 -80
- package/src/daily-view-input.ts +0 -59
- package/src/daily-view-render.ts +0 -45
- package/src/daily-view.ts +0 -160
- package/src/dashboard-cli.ts +0 -340
- package/src/dashboard-display-controls.ts +0 -21
- package/src/dashboard-handshake.ts +0 -199
- package/src/dashboard-harness.ts +0 -37
- package/src/dashboard-herdr.ts +0 -363
- package/src/dashboard-host-contract.ts +0 -50
- package/src/dashboard-host-transport.ts +0 -43
- package/src/dashboard-host.ts +0 -244
- package/src/dashboard-menu.ts +0 -28
- package/src/dashboard-observation.ts +0 -46
- package/src/dashboard-projection.ts +0 -390
- package/src/dashboard-render.ts +0 -259
- package/src/debrief-contract.ts +0 -127
- package/src/debrief-fixture.ts +0 -29
- package/src/debrief-host.ts +0 -53
- package/src/debrief-render.ts +0 -49
- package/src/debrief.ts +0 -198
- package/src/definitions.ts +0 -211
- package/src/delegate-types.ts +0 -154
- package/src/delegate.ts +0 -348
- package/src/delegation-approval.ts +0 -126
- package/src/dispatch-control.ts +0 -81
- package/src/effect-profile-runtime.ts +0 -46
- package/src/effect-profile.ts +0 -129
- package/src/execution-retention.ts +0 -230
- package/src/executor.ts +0 -123
- package/src/experiment-contract.ts +0 -66
- package/src/experiment-state.ts +0 -44
- package/src/experiment-store.ts +0 -98
- package/src/experiment.ts +0 -236
- package/src/factory-contract.ts +0 -47
- package/src/factory-migration.ts +0 -29
- package/src/factory-order.ts +0 -56
- package/src/factory-registry.ts +0 -60
- package/src/fanout.ts +0 -106
- package/src/file-lock.ts +0 -178
- package/src/finalization.ts +0 -79
- package/src/git-identity.ts +0 -56
- package/src/grant-env.ts +0 -221
- package/src/grant-store.ts +0 -235
- package/src/herdr-cli.ts +0 -125
- package/src/herdr-pi-lifecycle.ts +0 -21
- package/src/herdr-poll.ts +0 -253
- package/src/herdr-stage.ts +0 -55
- package/src/init.ts +0 -389
- package/src/intent-application.ts +0 -91
- package/src/intent-control.ts +0 -107
- package/src/intent-scheduling.ts +0 -14
- package/src/learning-connection.ts +0 -70
- package/src/lease-helper.ts +0 -97
- package/src/lease-record.ts +0 -131
- package/src/ledger-append.ts +0 -72
- package/src/ledger-events.ts +0 -226
- package/src/ledger-report.ts +0 -357
- package/src/ledger-v3-validation.ts +0 -266
- package/src/ledger.ts +0 -369
- package/src/measured-order.ts +0 -72
- package/src/measured-session.ts +0 -70
- package/src/model-preflight.ts +0 -41
- package/src/native-session-target.ts +0 -23
- package/src/native-session.ts +0 -139
- package/src/order-schedule.ts +0 -42
- package/src/ordinary-children.ts +0 -59
- package/src/pane-reaper.ts +0 -270
- package/src/pi-tools.ts +0 -25
- package/src/producer-ipc-contract.ts +0 -26
- package/src/producer-ipc.ts +0 -107
- package/src/product-files.ts +0 -34
- package/src/propagation.ts +0 -333
- package/src/refusals.ts +0 -70
- package/src/resolve.ts +0 -267
- package/src/resource-budget.ts +0 -349
- package/src/retention-contract.ts +0 -84
- package/src/retention-json.ts +0 -20
- package/src/routing-authority.ts +0 -121
- package/src/run-child.ts +0 -303
- package/src/run-herdr.ts +0 -386
- package/src/skill-packages.ts +0 -314
- package/src/skill-resources.ts +0 -48
- package/src/spawn.ts +0 -156
- package/src/vendor/adoption.ts +0 -109
- package/src/work-command.ts +0 -197
- package/src/work-ledger-destination.ts +0 -113
- package/src/work-ledger-json.ts +0 -228
- package/src/work-ledger-occurrences.ts +0 -99
- package/src/work-ledger-projection.ts +0 -262
- package/src/work-ledger-snapshot.ts +0 -246
- package/src/work-ledger-types.ts +0 -229
- package/src/work-ledger-validation.ts +0 -174
- package/src/work-ledger.ts +0 -186
- package/src/work-policy-registry.ts +0 -81
- package/src/work-run.ts +0 -79
- package/src/work-setup.ts +0 -141
- package/src/workflow-fact-id.ts +0 -16
- package/src/workflow-facts.ts +0 -65
- package/src/workspace-lease.ts +0 -363
- package/src/workspace.ts +0 -308
- /package/contracts/{ledger/v3 → ledger-record/v1}/fixtures/capability-decision.json +0 -0
- /package/contracts/{ledger/v3 → ledger-record/v1}/fixtures/workspace-lease.json +0 -0
- /package/dist/{herdr-name.d.ts → executors/herdr-name.d.ts} +0 -0
- /package/dist/{herdr-name.js → executors/herdr-name.js} +0 -0
- /package/dist/{herdr-pi-lifecycle.d.ts → executors/herdr-pi-lifecycle.d.ts} +0 -0
- /package/dist/{herdr-start.d.ts → executors/herdr-start.d.ts} +0 -0
- /package/dist/{herdr-start.js → executors/herdr-start.js} +0 -0
- /package/dist/{vendor → executors/vendor}/herdr-pi-lifecycle.d.ts +0 -0
- /package/dist/{vendor → executors/vendor}/herdr-pi-lifecycle.js +0 -0
- /package/dist/{file-lock.d.ts → governance/file-lock.d.ts} +0 -0
- /package/dist/{finalization.d.ts → governance/finalization.d.ts} +0 -0
- /package/dist/{finalization.js → governance/finalization.js} +0 -0
- /package/dist/{lease-helper.d.ts → governance/lease-helper.d.ts} +0 -0
- /package/dist/{lease-record.js → governance/lease-record.js} +0 -0
- /package/dist/{retention-contract.d.ts → governance/retention-contract.d.ts} +0 -0
- /package/dist/{retention-json.d.ts → governance/retention-json.d.ts} +0 -0
- /package/dist/{retention-json.js → governance/retention-json.js} +0 -0
- /package/dist/{chain.d.ts → kernel/chain.d.ts} +0 -0
- /package/dist/{chain.js → kernel/chain.js} +0 -0
- /package/dist/{correlation.d.ts → kernel/correlation.d.ts} +0 -0
- /package/dist/{definitions.d.ts → kernel/definitions.d.ts} +0 -0
- /package/dist/{delegate.d.ts → kernel/delegate.d.ts} +0 -0
- /package/dist/{delegation-approval.d.ts → kernel/delegation-approval.d.ts} +0 -0
- /package/dist/{execution-id.d.ts → kernel/execution-id.d.ts} +0 -0
- /package/dist/{execution-id.js → kernel/execution-id.js} +0 -0
- /package/dist/{fanout.d.ts → kernel/fanout.d.ts} +0 -0
- /package/dist/{ledger-identifiers.d.ts → kernel/ledger-identifiers.d.ts} +0 -0
- /package/dist/{ledger-identifiers.js → kernel/ledger-identifiers.js} +0 -0
- /package/dist/{pi-tools.d.ts → kernel/pi-tools.d.ts} +0 -0
- /package/dist/{progress.d.ts → kernel/progress.d.ts} +0 -0
- /package/dist/{progress.js → kernel/progress.js} +0 -0
- /package/dist/{skill-resources.d.ts → kernel/skill-resources.d.ts} +0 -0
- /package/dist/{dashboard-render.d.ts → products/dashboard-render.d.ts} +0 -0
- /package/src/{herdr-name.ts → executors/herdr-name.ts} +0 -0
- /package/src/{herdr-start.ts → executors/herdr-start.ts} +0 -0
- /package/src/{vendor → executors/vendor}/herdr-pi-lifecycle.ts +0 -0
- /package/src/{chain.ts → kernel/chain.ts} +0 -0
- /package/src/{execution-id.ts → kernel/execution-id.ts} +0 -0
- /package/src/{ledger-identifiers.ts → kernel/ledger-identifiers.ts} +0 -0
- /package/src/{progress.ts → kernel/progress.ts} +0 -0
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import type { DefinitionDigest } from "./definitions.ts";
|
|
3
|
+
import type { Capability } from "./resolve.ts";
|
|
4
|
+
import { GovernanceRefusal, refusal } from "./refusals.ts";
|
|
5
|
+
import { isLedgerCorrelationIdentifier } from "./ledger-identifiers.ts";
|
|
6
|
+
|
|
7
|
+
export type JsonPrimitive = string | number | boolean | null;
|
|
8
|
+
export type JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue };
|
|
9
|
+
|
|
10
|
+
export interface AssuranceScope {
|
|
11
|
+
type: "entire-run" | "selectors";
|
|
12
|
+
selectors: string[];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Non-authoritative workflow metadata copied onto runtime and ledger events.
|
|
17
|
+
*
|
|
18
|
+
* pi-daddy interprets only the pinned correlation wire contract: schema version 1.0 and the closed
|
|
19
|
+
* assurance-scope shape. Labels, selector meanings, timestamps and sequence floors remain non-authoritative.
|
|
20
|
+
* In particular, a digest-looking value here never substitutes for a digest computed by the planner. The
|
|
21
|
+
* snake_case names are the wire vocabulary used by external controllers.
|
|
22
|
+
*/
|
|
23
|
+
export interface CorrelationMetadata {
|
|
24
|
+
schema_version?: string;
|
|
25
|
+
run_id?: string;
|
|
26
|
+
task_id?: string;
|
|
27
|
+
workspace_id?: string;
|
|
28
|
+
context_id?: string;
|
|
29
|
+
phase?: string;
|
|
30
|
+
assurance?: string;
|
|
31
|
+
assurance_effective?: string;
|
|
32
|
+
policy_label?: string;
|
|
33
|
+
assurance_source?: string;
|
|
34
|
+
assurance_scope?: AssuranceScope;
|
|
35
|
+
activated_at?: string;
|
|
36
|
+
plan_digest?: string;
|
|
37
|
+
definition_digest?: string;
|
|
38
|
+
task_digest?: string;
|
|
39
|
+
base_sha?: string;
|
|
40
|
+
head_sha?: string;
|
|
41
|
+
tree_sha?: string;
|
|
42
|
+
event_seq?: number;
|
|
43
|
+
last_change_seq?: number;
|
|
44
|
+
last_authority_seq?: number;
|
|
45
|
+
check_receipt_id?: string;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const MAX_CORRELATION_BYTES = 32 * 1024;
|
|
49
|
+
/**
|
|
50
|
+
* Per-field bound on the STRING fields — most are an id, a digest, a label or a timestamp. It does not
|
|
51
|
+
* apply to the three sequence numbers or to `assurance_scope`, which are checked separately; an earlier
|
|
52
|
+
* version of this comment claimed it covered every declared field.
|
|
53
|
+
*/
|
|
54
|
+
const MAX_CORRELATION_FIELD_CHARS = 512;
|
|
55
|
+
/** `assurance_scope` is the one structured field, so it gets its own, larger bound. */
|
|
56
|
+
const MAX_CORRELATION_SCOPE_BYTES = 4 * 1024;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* The exact field set of the pinned schema 1.0 contract. Anything else is refused by name.
|
|
60
|
+
*
|
|
61
|
+
* This is a whitelist rather than a size cap because `correlation` is a MODEL-FACING tool parameter that
|
|
62
|
+
* is copied verbatim onto every append-only ledger event. `src/governance/ledger.ts` states the invariant — capability
|
|
63
|
+
* ids, counts and identifiers only, never prompts, tool arguments or results — and ADR-0034 repeats that the
|
|
64
|
+
* ledger must never carry task text. A 32 KB "bounded JSON object" with no key whitelist and no per-field
|
|
65
|
+
* length bound satisfied neither: `assurance_scope` was declared `Type.Any()`, undeclared keys survived the
|
|
66
|
+
* round trip, and every string was unbounded, so a model could write 32 KB of arbitrary text into the
|
|
67
|
+
* ledger through it (R-111). Refusing an unknown key is also the loud option: if upstream adds a field, the
|
|
68
|
+
* refusal names it, which is an actionable break rather than a silent secrets sink.
|
|
69
|
+
*/
|
|
70
|
+
const CORRELATION_FIELDS = new Set<keyof CorrelationMetadata>([
|
|
71
|
+
"schema_version",
|
|
72
|
+
"run_id",
|
|
73
|
+
"task_id",
|
|
74
|
+
"workspace_id",
|
|
75
|
+
"context_id",
|
|
76
|
+
"phase",
|
|
77
|
+
"assurance",
|
|
78
|
+
"assurance_effective",
|
|
79
|
+
"policy_label",
|
|
80
|
+
"assurance_source",
|
|
81
|
+
"assurance_scope",
|
|
82
|
+
"activated_at",
|
|
83
|
+
"plan_digest",
|
|
84
|
+
"definition_digest",
|
|
85
|
+
"task_digest",
|
|
86
|
+
"base_sha",
|
|
87
|
+
"head_sha",
|
|
88
|
+
"tree_sha",
|
|
89
|
+
"event_seq",
|
|
90
|
+
"last_change_seq",
|
|
91
|
+
"last_authority_seq",
|
|
92
|
+
"check_receipt_id",
|
|
93
|
+
]);
|
|
94
|
+
|
|
95
|
+
const CORRELATION_NUMERIC = new Set<keyof CorrelationMetadata>(["event_seq", "last_change_seq", "last_authority_seq"]);
|
|
96
|
+
|
|
97
|
+
// These fields are rendered as labels/identities. Treating arbitrary prose as an "id" let a model copy
|
|
98
|
+
// task or output text into the ledger and dashboard through correlation while staying schema-valid.
|
|
99
|
+
const CORRELATION_IDENTIFIERS = new Set<keyof CorrelationMetadata>([
|
|
100
|
+
"schema_version",
|
|
101
|
+
"run_id",
|
|
102
|
+
"task_id",
|
|
103
|
+
"workspace_id",
|
|
104
|
+
"context_id",
|
|
105
|
+
"phase",
|
|
106
|
+
"assurance",
|
|
107
|
+
"assurance_effective",
|
|
108
|
+
"policy_label",
|
|
109
|
+
"assurance_source",
|
|
110
|
+
]);
|
|
111
|
+
|
|
112
|
+
function correlationRefusal(message: string, details?: Record<string, string | number>): GovernanceRefusal {
|
|
113
|
+
return new GovernanceRefusal(refusal("CORRELATION_INVALID", `correlation metadata: ${message}`, details));
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Size refusals get their own code, because they call for a different response: "you sent too much" is
|
|
118
|
+
* retryable by truncating, "you sent a field we do not recognise" is not. `CORRELATION_TOO_LARGE` was
|
|
119
|
+
* declared in the taxonomy and constructed nowhere, so the union advertised a distinction the code did not
|
|
120
|
+
* make — and the enumeration test kept the dead member green.
|
|
121
|
+
*/
|
|
122
|
+
function correlationTooLarge(message: string, details?: Record<string, string | number>): GovernanceRefusal {
|
|
123
|
+
return new GovernanceRefusal(refusal("CORRELATION_TOO_LARGE", `correlation metadata: ${message}`, details));
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
function normaliseAssuranceScope(value: unknown): AssuranceScope {
|
|
127
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
128
|
+
throw correlationRefusal("assurance_scope must be an object with type and selectors");
|
|
129
|
+
}
|
|
130
|
+
const scope = value as Record<string, unknown>;
|
|
131
|
+
const keys = Object.keys(scope).sort();
|
|
132
|
+
if (keys.length !== 2 || keys[0] !== "selectors" || keys[1] !== "type") {
|
|
133
|
+
throw correlationRefusal("assurance_scope must contain only type and selectors");
|
|
134
|
+
}
|
|
135
|
+
if (
|
|
136
|
+
!Array.isArray(scope.selectors) ||
|
|
137
|
+
!scope.selectors.every((selector) => typeof selector === "string" && selector.length > 0)
|
|
138
|
+
) {
|
|
139
|
+
throw correlationRefusal("assurance_scope selectors must be non-empty strings");
|
|
140
|
+
}
|
|
141
|
+
if (scope.type === "entire-run") {
|
|
142
|
+
if (scope.selectors.length !== 0) throw correlationRefusal("entire-run assurance_scope requires empty selectors");
|
|
143
|
+
return { type: "entire-run", selectors: [] };
|
|
144
|
+
}
|
|
145
|
+
if (scope.type === "selectors") {
|
|
146
|
+
if (scope.selectors.length === 0) throw correlationRefusal("selectors scope requires at least one selector");
|
|
147
|
+
return { type: "selectors", selectors: [...scope.selectors] };
|
|
148
|
+
}
|
|
149
|
+
throw correlationRefusal("assurance_scope type must be entire-run or selectors");
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Snapshot bounded JSON metadata so a caller cannot mutate a record after planning, and so nothing
|
|
154
|
+
* unbounded or undeclared can reach the ledger through it.
|
|
155
|
+
*
|
|
156
|
+
* Refuses with a stable code rather than a bare `Error`: this is reachable from a model-facing tool
|
|
157
|
+
* parameter on all three delegation tools, and it used to throw outside every try, producing a governed
|
|
158
|
+
* refusal with no code and no ledger line at all (R-112).
|
|
159
|
+
*/
|
|
160
|
+
export function normaliseCorrelation(input: CorrelationMetadata | undefined): CorrelationMetadata | undefined {
|
|
161
|
+
if (input === undefined) return undefined;
|
|
162
|
+
let encoded: string;
|
|
163
|
+
try {
|
|
164
|
+
encoded = JSON.stringify(input);
|
|
165
|
+
} catch (error) {
|
|
166
|
+
throw correlationRefusal(`must be JSON serializable (${String(error)})`);
|
|
167
|
+
}
|
|
168
|
+
if (encoded === undefined) throw correlationRefusal("must be a JSON object");
|
|
169
|
+
if (Buffer.byteLength(encoded) > MAX_CORRELATION_BYTES) {
|
|
170
|
+
throw correlationTooLarge(`exceeds ${MAX_CORRELATION_BYTES} bytes`, { limit: MAX_CORRELATION_BYTES });
|
|
171
|
+
}
|
|
172
|
+
const parsed = JSON.parse(encoded) as unknown;
|
|
173
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
174
|
+
throw correlationRefusal("must be a JSON object");
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
const source = parsed as Record<string, unknown>;
|
|
178
|
+
const undeclared = Object.keys(source).filter((key) => !CORRELATION_FIELDS.has(key as keyof CorrelationMetadata));
|
|
179
|
+
if (undeclared.length > 0) {
|
|
180
|
+
throw correlationRefusal(`carries fields outside the pinned schema 1.0 contract: ${undeclared.sort().join(", ")}`, {
|
|
181
|
+
undeclared: undeclared.sort().join(","),
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const output: Record<string, unknown> = {};
|
|
186
|
+
for (const [key, value] of Object.entries(source)) {
|
|
187
|
+
if (value === undefined || value === null) continue;
|
|
188
|
+
if (key === "assurance_scope") {
|
|
189
|
+
const size = Buffer.byteLength(JSON.stringify(value) ?? "");
|
|
190
|
+
if (size > MAX_CORRELATION_SCOPE_BYTES) {
|
|
191
|
+
throw correlationTooLarge(`assurance_scope exceeds ${MAX_CORRELATION_SCOPE_BYTES} bytes`, {
|
|
192
|
+
limit: MAX_CORRELATION_SCOPE_BYTES,
|
|
193
|
+
actual: size,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
output[key] = normaliseAssuranceScope(value);
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
if (CORRELATION_NUMERIC.has(key as keyof CorrelationMetadata)) {
|
|
200
|
+
if (typeof value !== "number" || !Number.isFinite(value)) {
|
|
201
|
+
throw correlationRefusal(`${key} must be a finite number`, { field: key });
|
|
202
|
+
}
|
|
203
|
+
output[key] = value;
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
if (typeof value !== "string") throw correlationRefusal(`${key} must be a string`, { field: key });
|
|
207
|
+
if (key === "schema_version" && value !== "1.0") {
|
|
208
|
+
throw correlationRefusal(`unsupported schema_version ${value}; supported version is 1.0`, {
|
|
209
|
+
field: key,
|
|
210
|
+
supported: "1.0",
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
if (value.length > MAX_CORRELATION_FIELD_CHARS) {
|
|
214
|
+
throw correlationTooLarge(`${key} exceeds ${MAX_CORRELATION_FIELD_CHARS} characters`, {
|
|
215
|
+
field: key,
|
|
216
|
+
limit: MAX_CORRELATION_FIELD_CHARS,
|
|
217
|
+
actual: value.length,
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
if (CORRELATION_IDENTIFIERS.has(key as keyof CorrelationMetadata) && !isLedgerCorrelationIdentifier(value)) {
|
|
221
|
+
throw correlationRefusal(`${key} must be an ASCII identifier, not free-form text`, { field: key });
|
|
222
|
+
}
|
|
223
|
+
output[key] = value;
|
|
224
|
+
}
|
|
225
|
+
return output as CorrelationMetadata;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
export function digestTask(task: string): string {
|
|
229
|
+
return createHash("sha256").update(task, "utf8").digest("hex");
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
export function digestCapabilities(capabilities: readonly Capability[]): string {
|
|
233
|
+
const canonical = [...new Set(capabilities)].sort();
|
|
234
|
+
return createHash("sha256").update(JSON.stringify(canonical), "utf8").digest("hex");
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/** Trusted, internally-computed scope of one gated approval. */
|
|
238
|
+
export interface ApprovalBinding {
|
|
239
|
+
version: "1";
|
|
240
|
+
task_sha256: string;
|
|
241
|
+
requested_sha256: string;
|
|
242
|
+
effective_sha256: string;
|
|
243
|
+
requested: Capability[];
|
|
244
|
+
effective: Capability[];
|
|
245
|
+
definition_sha256?: string;
|
|
246
|
+
workspace_id?: string;
|
|
247
|
+
context_id?: string;
|
|
248
|
+
tree_sha?: string;
|
|
249
|
+
last_change_seq?: number;
|
|
250
|
+
parent_id: string;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Builds the binding from TRUSTED values only. It deliberately does not take a `CorrelationMetadata`.
|
|
255
|
+
*
|
|
256
|
+
* It used to read `workspace_id` and `context_id` straight out of caller-supplied correlation into what
|
|
257
|
+
* the comment above calls the trusted scope, and a bound approval could then be spent outside the
|
|
258
|
+
* workspace it named (R-110): approve a delegation carrying a real, registry-validated `workspace` spec,
|
|
259
|
+
* then re-issue the identical task with `correlation.workspace_id` set and NO `workspace` field — no
|
|
260
|
+
* registry lookup, no lease, the parent's own cwd, and every digest still matching. The guard that would
|
|
261
|
+
* have caught it can only fire when there is a spec to disagree with.
|
|
262
|
+
*
|
|
263
|
+
* `workspaceId` must therefore be the id of a workspace that was actually resolved and leased.
|
|
264
|
+
* `contextId` is a caller-declared label that nothing validates; it is included because it can only
|
|
265
|
+
* ever NARROW a binding, and a mismatch fails closed.
|
|
266
|
+
*/
|
|
267
|
+
export function buildApprovalBinding(input: {
|
|
268
|
+
task: string;
|
|
269
|
+
requested: readonly Capability[];
|
|
270
|
+
effective: readonly Capability[];
|
|
271
|
+
definitionSha256?: DefinitionDigest["sha256"] | string;
|
|
272
|
+
parentId: string;
|
|
273
|
+
/** Id of a workspace this delegation was actually routed to and holds a lease for. */
|
|
274
|
+
workspaceId?: string;
|
|
275
|
+
/** Caller-declared label. Narrows only; never a claim that anything was enforced. */
|
|
276
|
+
contextId?: string;
|
|
277
|
+
/** Optional upstream tree identity. When supplied, later approval use must match it exactly. */
|
|
278
|
+
treeSha?: string;
|
|
279
|
+
/** Optional upstream change floor. When supplied, later approval use must match it exactly. */
|
|
280
|
+
lastChangeSeq?: number;
|
|
281
|
+
}): ApprovalBinding {
|
|
282
|
+
const requested = [...new Set(input.requested)].sort();
|
|
283
|
+
const effective = [...new Set(input.effective)].sort();
|
|
284
|
+
return {
|
|
285
|
+
version: "1",
|
|
286
|
+
task_sha256: digestTask(input.task),
|
|
287
|
+
requested_sha256: digestCapabilities(requested),
|
|
288
|
+
effective_sha256: digestCapabilities(effective),
|
|
289
|
+
requested,
|
|
290
|
+
effective,
|
|
291
|
+
...(input.definitionSha256 ? { definition_sha256: input.definitionSha256 } : {}),
|
|
292
|
+
...(input.workspaceId ? { workspace_id: input.workspaceId } : {}),
|
|
293
|
+
...(input.contextId ? { context_id: input.contextId } : {}),
|
|
294
|
+
...(input.treeSha !== undefined ? { tree_sha: input.treeSha } : {}),
|
|
295
|
+
...(input.lastChangeSeq !== undefined ? { last_change_seq: input.lastChangeSeq } : {}),
|
|
296
|
+
parent_id: input.parentId,
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
export function approvalBindingDigest(binding: ApprovalBinding): string {
|
|
301
|
+
const ordered = {
|
|
302
|
+
version: binding.version,
|
|
303
|
+
task_sha256: binding.task_sha256,
|
|
304
|
+
requested_sha256: binding.requested_sha256,
|
|
305
|
+
effective_sha256: binding.effective_sha256,
|
|
306
|
+
requested: binding.requested,
|
|
307
|
+
effective: binding.effective,
|
|
308
|
+
definition_sha256: binding.definition_sha256 ?? null,
|
|
309
|
+
workspace_id: binding.workspace_id ?? null,
|
|
310
|
+
context_id: binding.context_id ?? null,
|
|
311
|
+
// Keep the exact pre-ADR-0039 serialization when both additions are absent: persisted approvals store
|
|
312
|
+
// this digest, so unconditional null placeholders would invalidate every existing bound approval.
|
|
313
|
+
...(binding.tree_sha !== undefined ? { tree_sha: binding.tree_sha } : {}),
|
|
314
|
+
...(binding.last_change_seq !== undefined ? { last_change_seq: binding.last_change_seq } : {}),
|
|
315
|
+
parent_id: binding.parent_id,
|
|
316
|
+
};
|
|
317
|
+
return createHash("sha256").update(JSON.stringify(ordered), "utf8").digest("hex");
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
export function isApprovalBinding(value: unknown): value is ApprovalBinding {
|
|
321
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return false;
|
|
322
|
+
const binding = value as Partial<ApprovalBinding>;
|
|
323
|
+
return (
|
|
324
|
+
binding.version === "1" &&
|
|
325
|
+
[binding.task_sha256, binding.requested_sha256, binding.effective_sha256].every(
|
|
326
|
+
(digest) => typeof digest === "string" && /^[a-f0-9]{64}$/i.test(digest),
|
|
327
|
+
) &&
|
|
328
|
+
Array.isArray(binding.requested) &&
|
|
329
|
+
binding.requested.every((item) => typeof item === "string") &&
|
|
330
|
+
Array.isArray(binding.effective) &&
|
|
331
|
+
binding.effective.every((item) => typeof item === "string") &&
|
|
332
|
+
typeof binding.parent_id === "string" &&
|
|
333
|
+
["definition_sha256", "workspace_id", "context_id", "tree_sha"].every((key) => {
|
|
334
|
+
const value = (binding as Record<string, unknown>)[key];
|
|
335
|
+
return value === undefined || typeof value === "string";
|
|
336
|
+
}) &&
|
|
337
|
+
(binding.last_change_seq === undefined ||
|
|
338
|
+
(typeof binding.last_change_seq === "number" && Number.isFinite(binding.last_change_seq))) &&
|
|
339
|
+
// Self-consistency. This guard's only trust boundary is a binding parsed off DISK
|
|
340
|
+
// (`approval-store.ts`), so an internally contradictory record — digests that do not match the
|
|
341
|
+
// capability arrays sitting beside them — must be unrepresentable rather than merely unlikely.
|
|
342
|
+
binding.requested_sha256 === digestCapabilities(binding.requested as Capability[]) &&
|
|
343
|
+
binding.effective_sha256 === digestCapabilities(binding.effective as Capability[])
|
|
344
|
+
);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
export function approvalBindingsEqual(a: ApprovalBinding | undefined, b: ApprovalBinding | undefined): boolean {
|
|
348
|
+
if (a === undefined || b === undefined) return a === b;
|
|
349
|
+
if (!isApprovalBinding(a) || !isApprovalBinding(b)) return false;
|
|
350
|
+
return approvalBindingDigest(a) === approvalBindingDigest(b);
|
|
351
|
+
}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Skills (`SKILL.md`) as this package's definition format — ADR-0016.
|
|
3
|
+
*
|
|
4
|
+
* A subagent is a skill you spawn: the `SKILL.md` body becomes the child's system prompt
|
|
5
|
+
* (`--append-system-prompt`) and `allowed-tools` becomes its capability ceiling, enforced through
|
|
6
|
+
* `--tools`. That collapses a duplication `principal-pi-skills` already strains against, where
|
|
7
|
+
* `plan`/`review`/`debug` exist twice — once as a skill and once as a subagent prompt — and are
|
|
8
|
+
* generated from one contract precisely so the two cannot drift.
|
|
9
|
+
*
|
|
10
|
+
* **The spec's own words about `allowed-tools`:** *"a space-separated string of tools that are
|
|
11
|
+
* pre-approved to run"*, marked **experimental**. Pre-approved, not enforced — the field declares intent
|
|
12
|
+
* and blocks nothing, and implementations differ on whether they honour it at all. Turning that
|
|
13
|
+
* declaration into something structural is this package's entire value here.
|
|
14
|
+
*
|
|
15
|
+
* **One inversion is deliberate and load-bearing.** In pi-subagents' frontmatter an absent `tools:` key
|
|
16
|
+
* means *pi's full default toolset*, so an undeclared definition was the most powerful kind and any
|
|
17
|
+
* parse failure produced a wildcard — the direction that caused R-28 and review finding F18. Here an
|
|
18
|
+
* absent `allowed-tools` means **undeclared, therefore not spawnable**. A typo or an unreadable YAML
|
|
19
|
+
* form now costs a refusal instead of a grant.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import { createHash } from "node:crypto";
|
|
23
|
+
import { readFile } from "node:fs/promises";
|
|
24
|
+
import { resolveSkillResources, skillResourceName } from "./skill-resources.ts";
|
|
25
|
+
import { CAPABILITY_NAMESPACE_PREFIXES } from "./capabilities.ts";
|
|
26
|
+
import type { Capability } from "./resolve.ts";
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Identifies WHICH instructions a child was given, without reproducing them (ADR-0018).
|
|
30
|
+
*
|
|
31
|
+
* The ledger's standing rule is *capability ids, counts and identifiers only — never prompts, tool
|
|
32
|
+
* arguments or results*. A hash is an identifier: it names a version of an operator-authored file. The
|
|
33
|
+
* **task** is model-assembled from the parent's context and is never recorded anywhere, by decision.
|
|
34
|
+
*/
|
|
35
|
+
export interface DefinitionDigest {
|
|
36
|
+
name: string;
|
|
37
|
+
/** Where the definition was read from, so a reader can go and rehash it. */
|
|
38
|
+
source: string;
|
|
39
|
+
/** SHA-256 of the body — the exact text passed as `--append-system-prompt`. */
|
|
40
|
+
sha256: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Digest a definition's body.
|
|
45
|
+
*
|
|
46
|
+
* Over the **body alone**, deliberately: that is precisely the text the child receives, so a digest that
|
|
47
|
+
* also covered the frontmatter would change when `description` was reworded and report an instruction
|
|
48
|
+
* change that never happened. `allowed-tools` is already recorded in full on every record.
|
|
49
|
+
*/
|
|
50
|
+
export function digestDefinition(definition: SkillDefinition): DefinitionDigest {
|
|
51
|
+
return {
|
|
52
|
+
name: definition.name,
|
|
53
|
+
source: definition.source,
|
|
54
|
+
sha256: createHash("sha256").update(definition.body, "utf8").digest("hex"),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface SkillDefinition {
|
|
59
|
+
/** From the path, never the frontmatter — see `parseSkillDefinition`. */
|
|
60
|
+
name: string;
|
|
61
|
+
description: string;
|
|
62
|
+
/** Raw `allowed-tools` value. `undefined` means the key was absent; `""` means it declared none. */
|
|
63
|
+
allowedTools?: string;
|
|
64
|
+
/** The spec's sanctioned extension point: a map of string keys to string values. */
|
|
65
|
+
metadata?: Record<string, string>;
|
|
66
|
+
/** Everything after the frontmatter — the child's system prompt. */
|
|
67
|
+
body: string;
|
|
68
|
+
source: string;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export interface DefinitionCeiling {
|
|
72
|
+
/** The declared capabilities, as this package's ids. */
|
|
73
|
+
capabilities: Capability[];
|
|
74
|
+
/**
|
|
75
|
+
* Entries carrying a sub-tool pattern, e.g. `Bash(git:*)`.
|
|
76
|
+
*
|
|
77
|
+
* ADR-0016 refuses these rather than reinterpreting them, because every reinterpretation is wrong:
|
|
78
|
+
* granting bare `bash` **widens** a deliberately narrow declaration, dropping the tool silently
|
|
79
|
+
* **narrows** and yields a child that mysteriously cannot work, and matching patterns inside a wrapper
|
|
80
|
+
* would be a security control implemented by string-matching a shell command. Non-empty means the
|
|
81
|
+
* caller must refuse and say so.
|
|
82
|
+
*/
|
|
83
|
+
patterns: string[];
|
|
84
|
+
/** The `allowed-tools` key was absent entirely: the definition is not spawnable. */
|
|
85
|
+
undeclared: boolean;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Read a `SKILL.md`.
|
|
90
|
+
*
|
|
91
|
+
* The frontmatter reader handles the subset these files use — `key: value`, block scalars (`>` / `|`),
|
|
92
|
+
* and a one-level `metadata:` map. Anything it cannot read leaves the key **absent**, which for
|
|
93
|
+
* `allowed-tools` means *undeclared* and therefore refused. That is the whole reason this parser can be
|
|
94
|
+
* hand-rolled without the hazard its sibling in `agent-types.ts` carries.
|
|
95
|
+
*/
|
|
96
|
+
export function parseSkillDefinition(source: string, text: string): SkillDefinition | null {
|
|
97
|
+
const match = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?/.exec(text);
|
|
98
|
+
if (!match) return null;
|
|
99
|
+
|
|
100
|
+
const fields = new Map<string, string>();
|
|
101
|
+
const metadata: Record<string, string> = {};
|
|
102
|
+
const lines = match[1].split(/\r?\n/);
|
|
103
|
+
|
|
104
|
+
for (let i = 0; i < lines.length; i++) {
|
|
105
|
+
const kv = /^([A-Za-z_][A-Za-z0-9_-]*)\s*:\s*(.*)$/.exec(lines[i]);
|
|
106
|
+
if (!kv) continue;
|
|
107
|
+
const [, key, rawValue] = kv;
|
|
108
|
+
const value = rawValue.trim();
|
|
109
|
+
|
|
110
|
+
// A folded/literal scalar: fold the indented continuation into one line. `principal-pi-skills`
|
|
111
|
+
// writes every description this way, and the sibling parser SKIPS these — which is safe there only
|
|
112
|
+
// because it never needs the value. Here a skipped `description` would be a missing required field.
|
|
113
|
+
if (value === ">" || value === "|") {
|
|
114
|
+
const parts: string[] = [];
|
|
115
|
+
for (let j = i + 1; j < lines.length; j++) {
|
|
116
|
+
if (!/^\s+\S/.test(lines[j])) break;
|
|
117
|
+
parts.push(lines[j].trim());
|
|
118
|
+
i = j;
|
|
119
|
+
}
|
|
120
|
+
fields.set(key, parts.join(" "));
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// `metadata:` introduces a one-level map of string keys to string values (the spec's shape).
|
|
125
|
+
if (key === "metadata" && value === "") {
|
|
126
|
+
for (let j = i + 1; j < lines.length; j++) {
|
|
127
|
+
const item = /^\s+([A-Za-z_][A-Za-z0-9_-]*)\s*:\s*(.*)$/.exec(lines[j]);
|
|
128
|
+
if (!item) break;
|
|
129
|
+
metadata[item[1]] = item[2].trim().replace(/^["']|["']$/g, "");
|
|
130
|
+
i = j;
|
|
131
|
+
}
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// A YAML collection/block we cannot parse is not an explicit empty ceiling.
|
|
136
|
+
if (key === "allowed-tools" && value === "") {
|
|
137
|
+
const nextValue = lines.slice(i + 1).find((line) => line.trim() !== "" && !/^\s*#/.test(line));
|
|
138
|
+
if (/^\s+\S/.test(nextValue ?? "")) continue;
|
|
139
|
+
}
|
|
140
|
+
fields.set(key, value);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const description = fields.get("description");
|
|
144
|
+
if (description === undefined) return null;
|
|
145
|
+
|
|
146
|
+
return {
|
|
147
|
+
// Identity comes from the PATH. ADR-0013 learned this the hard way on the other format: pi keys
|
|
148
|
+
// skills by their directory, so trusting a frontmatter `name` lets our view and the loader's
|
|
149
|
+
// disagree about which file a name refers to. The spec requires `name` to match the parent
|
|
150
|
+
// directory anyway, so a mismatch is the file's defect and not something to honour.
|
|
151
|
+
name: skillResourceName(source),
|
|
152
|
+
description,
|
|
153
|
+
allowedTools: fields.get("allowed-tools"),
|
|
154
|
+
metadata: Object.keys(metadata).length > 0 ? metadata : undefined,
|
|
155
|
+
body: text.slice(match[0].length).trim(),
|
|
156
|
+
source,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Turn a definition's `allowed-tools` into a capability ceiling.
|
|
162
|
+
*
|
|
163
|
+
* Name mapping is **lowercasing and nothing else**, deliberately. A translation table from Claude
|
|
164
|
+
* Code's names to pi's would have to decide what `Glob` means, and pi has no glob tool — so the table
|
|
165
|
+
* would either invent a grant or quietly drop one. Lowercasing leaves `Glob` as `tool:glob`, which the
|
|
166
|
+
* catalog then refuses as unknown, naming the actual problem to whoever wrote the file.
|
|
167
|
+
*/
|
|
168
|
+
export function ceilingForDefinition(definition: SkillDefinition): DefinitionCeiling {
|
|
169
|
+
const raw = definition.allowedTools;
|
|
170
|
+
if (raw === undefined) return { capabilities: [], patterns: [], undeclared: true };
|
|
171
|
+
|
|
172
|
+
const capabilities = new Set<Capability>();
|
|
173
|
+
const patterns: string[] = [];
|
|
174
|
+
|
|
175
|
+
// The spec says space-separated. Commas are tolerated because `Read, Grep` is what people type, and
|
|
176
|
+
// accepting them grants nothing extra — it only avoids a comma becoming part of a capability name.
|
|
177
|
+
for (const entry of raw.split(/[\s,]+/).filter((e) => e.length > 0)) {
|
|
178
|
+
if (entry.includes("(")) {
|
|
179
|
+
patterns.push(entry);
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
// Every namespaced id passes through untouched; only a BARE tool name gets the `tool:` prefix and the
|
|
183
|
+
// lowercasing. `workspace:` was missing here after ADR-0035 taught `normaliseCapability` about it, so a
|
|
184
|
+
// definition declaring `allowed-tools: workspace:prod` produced `tool:workspace:prod` — a capability
|
|
185
|
+
// that names nothing, refused as unknown, and dropped by `init` as "probably a typo or an attack". Two
|
|
186
|
+
// spellings of one grammar with this one wrong is R-28's shape; the list is now shared.
|
|
187
|
+
if (CAPABILITY_NAMESPACE_PREFIXES.some((prefix) => entry.startsWith(prefix))) {
|
|
188
|
+
capabilities.add(entry);
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
capabilities.add(`tool:${entry.toLowerCase()}`);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
return { capabilities: [...capabilities].sort(), patterns, undeclared: false };
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Read definitions from Pi's enabled resources, including installed packages and local overrides.
|
|
199
|
+
* Resolver precedence and filters are shared with the capability catalog; unregistered npm packages
|
|
200
|
+
* are not runtime resources until legacy init explicitly scaffolds them.
|
|
201
|
+
*/
|
|
202
|
+
export async function loadDefinitions(cwd: string): Promise<Map<string, SkillDefinition>> {
|
|
203
|
+
const definitions = new Map<string, SkillDefinition>();
|
|
204
|
+
for (const { path } of (await resolveSkillResources(cwd)).skills) {
|
|
205
|
+
let text: string;
|
|
206
|
+
try {
|
|
207
|
+
text = await readFile(path, "utf8");
|
|
208
|
+
} catch {
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
const parsed = parseSkillDefinition(path, text);
|
|
212
|
+
if (parsed && !definitions.has(parsed.name)) definitions.set(parsed.name, parsed);
|
|
213
|
+
}
|
|
214
|
+
return definitions;
|
|
215
|
+
}
|