pi-daddy 0.28.0 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +99 -124
- package/README.md +18 -896
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/contracts/ledger-record/v1/README.md +44 -0
- package/contracts/ledger-record/v1/fixtures/child-lifecycle.json +45 -0
- package/contracts/ledger-record/v1/fixtures/ledger-record.jsonl +3 -0
- package/contracts/ledger-record/v1/governance-event.schema.json +747 -0
- package/contracts/ledger-record/v1/record.schema.json +91 -0
- package/dist/cli.d.ts +6 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +108 -103
- package/dist/cli.js.map +1 -1
- package/dist/executors/activity-session.d.ts +12 -0
- package/dist/executors/activity-session.d.ts.map +1 -0
- package/dist/executors/activity-session.js +43 -0
- package/dist/executors/activity-session.js.map +1 -0
- package/dist/executors/executor.d.ts +39 -0
- package/dist/executors/executor.d.ts.map +1 -0
- package/dist/executors/executor.js +95 -0
- package/dist/executors/executor.js.map +1 -0
- package/dist/executors/herdr-cli.d.ts +78 -0
- package/dist/executors/herdr-cli.d.ts.map +1 -0
- package/dist/executors/herdr-cli.js +114 -0
- package/dist/executors/herdr-cli.js.map +1 -0
- package/dist/executors/herdr-name.d.ts.map +1 -0
- package/dist/executors/herdr-name.js.map +1 -0
- package/dist/executors/herdr-pi-lifecycle.d.ts.map +1 -0
- package/dist/executors/herdr-pi-lifecycle.js +22 -0
- package/dist/executors/herdr-pi-lifecycle.js.map +1 -0
- package/dist/executors/herdr-poll.d.ts +140 -0
- package/dist/executors/herdr-poll.d.ts.map +1 -0
- package/dist/executors/herdr-poll.js +252 -0
- package/dist/executors/herdr-poll.js.map +1 -0
- package/dist/executors/herdr-stage.d.ts +40 -0
- package/dist/executors/herdr-stage.d.ts.map +1 -0
- package/dist/executors/herdr-stage.js +54 -0
- package/dist/executors/herdr-stage.js.map +1 -0
- package/dist/executors/herdr-start.d.ts.map +1 -0
- package/dist/executors/herdr-start.js.map +1 -0
- package/dist/executors/native-session-target.d.ts +9 -0
- package/dist/executors/native-session-target.d.ts.map +1 -0
- package/dist/executors/native-session-target.js +30 -0
- package/dist/executors/native-session-target.js.map +1 -0
- package/dist/executors/pane-reaper.d.ts +111 -0
- package/dist/executors/pane-reaper.d.ts.map +1 -0
- package/dist/executors/pane-reaper.js +242 -0
- package/dist/executors/pane-reaper.js.map +1 -0
- package/dist/executors/process-activity.d.ts +3 -0
- package/dist/executors/process-activity.d.ts.map +1 -0
- package/dist/executors/process-activity.js +59 -0
- package/dist/executors/process-activity.js.map +1 -0
- package/dist/executors/run-herdr.d.ts +122 -0
- package/dist/executors/run-herdr.d.ts.map +1 -0
- package/dist/executors/run-herdr.js +341 -0
- package/dist/executors/run-herdr.js.map +1 -0
- package/dist/executors/vendor/herdr-pi-lifecycle.d.ts.map +1 -0
- package/dist/executors/vendor/herdr-pi-lifecycle.js.map +1 -0
- package/dist/governance/approval-prompt.d.ts +119 -0
- package/dist/governance/approval-prompt.d.ts.map +1 -0
- package/dist/governance/approval-prompt.js +133 -0
- package/dist/governance/approval-prompt.js.map +1 -0
- package/dist/governance/approval-store.d.ts +149 -0
- package/dist/governance/approval-store.d.ts.map +1 -0
- package/dist/governance/approval-store.js +309 -0
- package/dist/governance/approval-store.js.map +1 -0
- package/dist/governance/execution-retention.d.ts +90 -0
- package/dist/governance/execution-retention.d.ts.map +1 -0
- package/dist/governance/execution-retention.js +317 -0
- package/dist/governance/execution-retention.js.map +1 -0
- package/dist/governance/file-lock.d.ts.map +1 -0
- package/dist/governance/file-lock.js +205 -0
- package/dist/governance/file-lock.js.map +1 -0
- package/dist/governance/finalization.d.ts.map +1 -0
- package/dist/governance/finalization.js.map +1 -0
- package/dist/governance/grant-store.d.ts +96 -0
- package/dist/governance/grant-store.d.ts.map +1 -0
- package/dist/governance/grant-store.js +186 -0
- package/dist/governance/grant-store.js.map +1 -0
- package/dist/governance/init.d.ts +129 -0
- package/dist/governance/init.d.ts.map +1 -0
- package/dist/governance/init.js +360 -0
- package/dist/governance/init.js.map +1 -0
- package/dist/governance/lease-helper.d.ts.map +1 -0
- package/dist/governance/lease-helper.js +121 -0
- package/dist/governance/lease-helper.js.map +1 -0
- package/dist/governance/lease-record.d.ts +90 -0
- package/dist/governance/lease-record.d.ts.map +1 -0
- package/dist/governance/lease-record.js.map +1 -0
- package/dist/governance/ledger-events.d.ts +111 -0
- package/dist/governance/ledger-events.d.ts.map +1 -0
- package/dist/governance/ledger-events.js +129 -0
- package/dist/governance/ledger-events.js.map +1 -0
- package/dist/governance/ledger-report.d.ts +134 -0
- package/dist/governance/ledger-report.d.ts.map +1 -0
- package/dist/governance/ledger-report.js +294 -0
- package/dist/governance/ledger-report.js.map +1 -0
- package/dist/governance/ledger-v3-validation.d.ts +21 -0
- package/dist/governance/ledger-v3-validation.d.ts.map +1 -0
- package/dist/governance/ledger-v3-validation.js +353 -0
- package/dist/governance/ledger-v3-validation.js.map +1 -0
- package/dist/governance/ledger.d.ts +258 -0
- package/dist/governance/ledger.d.ts.map +1 -0
- package/dist/governance/ledger.js +201 -0
- package/dist/governance/ledger.js.map +1 -0
- package/dist/governance/native-session.d.ts +59 -0
- package/dist/governance/native-session.d.ts.map +1 -0
- package/dist/governance/native-session.js +208 -0
- package/dist/governance/native-session.js.map +1 -0
- package/dist/governance/record.d.ts +65 -0
- package/dist/governance/record.d.ts.map +1 -0
- package/dist/governance/record.js +259 -0
- package/dist/governance/record.js.map +1 -0
- package/dist/governance/retention-contract.d.ts.map +1 -0
- package/dist/governance/retention-contract.js +187 -0
- package/dist/governance/retention-contract.js.map +1 -0
- package/dist/governance/retention-json.d.ts.map +1 -0
- package/dist/governance/retention-json.js.map +1 -0
- package/dist/governance/workspace-lease.d.ts +40 -0
- package/dist/governance/workspace-lease.d.ts.map +1 -0
- package/dist/governance/workspace-lease.js +357 -0
- package/dist/governance/workspace-lease.js.map +1 -0
- package/dist/index.d.ts +59 -42
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +61 -42
- package/dist/index.js.map +1 -1
- package/dist/kernel/approval.d.ts +241 -0
- package/dist/kernel/approval.d.ts.map +1 -0
- package/dist/kernel/approval.js +270 -0
- package/dist/kernel/approval.js.map +1 -0
- package/dist/kernel/capabilities.d.ts +136 -0
- package/dist/kernel/capabilities.d.ts.map +1 -0
- package/dist/kernel/capabilities.js +199 -0
- package/dist/kernel/capabilities.js.map +1 -0
- package/dist/kernel/catalog.d.ts +98 -0
- package/dist/kernel/catalog.d.ts.map +1 -0
- package/dist/kernel/catalog.js +280 -0
- package/dist/kernel/catalog.js.map +1 -0
- package/dist/kernel/chain.d.ts.map +1 -0
- package/dist/kernel/chain.js.map +1 -0
- package/dist/kernel/correlation.d.ts.map +1 -0
- package/dist/kernel/correlation.js +267 -0
- package/dist/kernel/correlation.js.map +1 -0
- package/dist/kernel/definitions.d.ts.map +1 -0
- package/dist/kernel/definitions.js +164 -0
- package/dist/kernel/definitions.js.map +1 -0
- package/dist/kernel/delegate-types.d.ts +160 -0
- package/dist/kernel/delegate-types.d.ts.map +1 -0
- package/dist/kernel/delegate-types.js +9 -0
- package/dist/kernel/delegate-types.js.map +1 -0
- package/dist/kernel/delegate.d.ts.map +1 -0
- package/dist/kernel/delegate.js +314 -0
- package/dist/kernel/delegate.js.map +1 -0
- package/dist/kernel/delegation-approval.d.ts.map +1 -0
- package/dist/kernel/delegation-approval.js +93 -0
- package/dist/kernel/delegation-approval.js.map +1 -0
- package/dist/kernel/env-names.d.ts +51 -0
- package/dist/kernel/env-names.d.ts.map +1 -0
- package/dist/kernel/env-names.js +112 -0
- package/dist/kernel/env-names.js.map +1 -0
- package/dist/kernel/execution-id.d.ts.map +1 -0
- package/dist/kernel/execution-id.js.map +1 -0
- package/dist/kernel/fanout.d.ts.map +1 -0
- package/dist/kernel/fanout.js +93 -0
- package/dist/kernel/fanout.js.map +1 -0
- package/dist/kernel/grant-env.d.ts +118 -0
- package/dist/kernel/grant-env.d.ts.map +1 -0
- package/dist/kernel/grant-env.js +104 -0
- package/dist/kernel/grant-env.js.map +1 -0
- package/dist/kernel/ledger-identifiers.d.ts.map +1 -0
- package/dist/kernel/ledger-identifiers.js.map +1 -0
- package/dist/kernel/model-preflight.d.ts +13 -0
- package/dist/kernel/model-preflight.d.ts.map +1 -0
- package/dist/kernel/model-preflight.js +30 -0
- package/dist/kernel/model-preflight.js.map +1 -0
- package/dist/kernel/pi-tools.d.ts.map +1 -0
- package/dist/kernel/pi-tools.js +29 -0
- package/dist/kernel/pi-tools.js.map +1 -0
- package/dist/kernel/progress.d.ts.map +1 -0
- package/dist/kernel/progress.js.map +1 -0
- package/dist/kernel/project-paths.d.ts +43 -0
- package/dist/kernel/project-paths.d.ts.map +1 -0
- package/dist/kernel/project-paths.js +81 -0
- package/dist/kernel/project-paths.js.map +1 -0
- package/dist/kernel/propagation.d.ts +195 -0
- package/dist/kernel/propagation.d.ts.map +1 -0
- package/dist/kernel/propagation.js +275 -0
- package/dist/kernel/propagation.js.map +1 -0
- package/dist/kernel/refusals.d.ts +16 -0
- package/dist/kernel/refusals.d.ts.map +1 -0
- package/dist/kernel/refusals.js +53 -0
- package/dist/kernel/refusals.js.map +1 -0
- package/dist/kernel/resolve.d.ts.map +1 -0
- package/dist/kernel/resolve.js +201 -0
- package/dist/kernel/resolve.js.map +1 -0
- package/dist/kernel/routing-authority.d.ts.map +1 -0
- package/dist/kernel/routing-authority.js.map +1 -0
- package/dist/kernel/run-child.d.ts +111 -0
- package/dist/kernel/run-child.d.ts.map +1 -0
- package/dist/kernel/run-child.js +324 -0
- package/dist/kernel/run-child.js.map +1 -0
- package/dist/kernel/skill-packages.d.ts +116 -0
- package/dist/kernel/skill-packages.d.ts.map +1 -0
- package/dist/kernel/skill-packages.js +300 -0
- package/dist/kernel/skill-packages.js.map +1 -0
- package/dist/kernel/skill-resources.d.ts.map +1 -0
- package/dist/kernel/skill-resources.js +56 -0
- package/dist/kernel/skill-resources.js.map +1 -0
- package/dist/kernel/spawn.d.ts.map +1 -0
- package/dist/kernel/spawn.js.map +1 -0
- package/dist/kernel/workspace.d.ts +51 -0
- package/dist/kernel/workspace.d.ts.map +1 -0
- package/dist/kernel/workspace.js +223 -0
- package/dist/kernel/workspace.js.map +1 -0
- package/dist/products/activity-timeline.d.ts +126 -0
- package/dist/products/activity-timeline.d.ts.map +1 -0
- package/dist/products/activity-timeline.js +542 -0
- package/dist/products/activity-timeline.js.map +1 -0
- package/dist/products/dashboard-cli.d.ts +26 -0
- package/dist/products/dashboard-cli.d.ts.map +1 -0
- package/dist/products/dashboard-cli.js +224 -0
- package/dist/products/dashboard-cli.js.map +1 -0
- package/dist/products/dashboard-display-controls.d.ts +17 -0
- package/dist/products/dashboard-display-controls.d.ts.map +1 -0
- package/dist/products/dashboard-display-controls.js +38 -0
- package/dist/products/dashboard-display-controls.js.map +1 -0
- package/dist/products/dashboard-handshake.d.ts +42 -0
- package/dist/products/dashboard-handshake.d.ts.map +1 -0
- package/dist/products/dashboard-handshake.js +158 -0
- package/dist/products/dashboard-handshake.js.map +1 -0
- package/dist/products/dashboard-herdr.d.ts +55 -0
- package/dist/products/dashboard-herdr.d.ts.map +1 -0
- package/dist/products/dashboard-herdr.js +324 -0
- package/dist/products/dashboard-herdr.js.map +1 -0
- package/dist/products/dashboard-projection.d.ts +62 -0
- package/dist/products/dashboard-projection.d.ts.map +1 -0
- package/dist/products/dashboard-projection.js +305 -0
- package/dist/products/dashboard-projection.js.map +1 -0
- package/dist/products/dashboard-render.d.ts.map +1 -0
- package/dist/products/dashboard-render.js +208 -0
- package/dist/products/dashboard-render.js.map +1 -0
- package/extensions/activity-timeline.ts +134 -28
- package/extensions/approval-banking.ts +3 -3
- package/extensions/approvals.ts +18 -12
- package/extensions/chain-approval-facts.ts +9 -6
- package/extensions/chain-ledger.ts +4 -4
- package/extensions/chain-plan.ts +6 -6
- package/extensions/correlation-shape.ts +42 -33
- package/extensions/delegate-chain.ts +93 -45
- package/extensions/delegation-authority.ts +7 -3
- package/extensions/delegation-ledger.ts +2 -2
- package/extensions/delegation-native.ts +24 -7
- package/extensions/delegation.ts +91 -80
- package/extensions/execute-child.ts +440 -293
- package/extensions/execution-occurrence.ts +2 -2
- package/extensions/executor-session.ts +5 -5
- package/extensions/fanout-outcome.ts +8 -6
- package/extensions/grant-store-refusal.ts +24 -12
- package/extensions/grants-command.ts +41 -33
- package/extensions/grants-connected-command.ts +29 -15
- package/extensions/grants.ts +73 -73
- package/extensions/init-command.ts +18 -12
- package/extensions/reload-environment.ts +12 -5
- package/extensions/run-delegation.ts +29 -19
- package/extensions/session-environment.ts +25 -11
- package/extensions/session-report.ts +60 -11
- package/extensions/session.ts +58 -34
- package/extensions/spawn-summary.ts +5 -5
- package/extensions/stored-grant-session.ts +5 -5
- package/extensions/tripwire.ts +1 -1
- package/extensions/workspace-runtime.ts +26 -24
- package/herdr-plugin/herdr-plugin.toml +1 -1
- package/package.json +4 -211
- package/src/cli.ts +136 -89
- package/src/executors/activity-session.ts +54 -0
- package/src/executors/executor.ts +123 -0
- package/src/executors/herdr-cli.ts +132 -0
- package/src/executors/herdr-pi-lifecycle.ts +21 -0
- package/src/executors/herdr-poll.ts +305 -0
- package/src/executors/herdr-stage.ts +55 -0
- package/src/executors/native-session-target.ts +31 -0
- package/src/executors/pane-reaper.ts +270 -0
- package/src/executors/process-activity.ts +54 -0
- package/src/executors/run-herdr.ts +426 -0
- package/src/governance/approval-prompt.ts +225 -0
- package/src/governance/approval-store.ts +385 -0
- package/src/governance/execution-retention.ts +372 -0
- package/src/governance/file-lock.ts +210 -0
- package/src/governance/finalization.ts +82 -0
- package/src/governance/grant-store.ts +235 -0
- package/src/governance/init.ts +447 -0
- package/src/governance/lease-helper.ts +124 -0
- package/src/governance/lease-record.ts +131 -0
- package/src/governance/ledger-events.ts +222 -0
- package/src/governance/ledger-report.ts +396 -0
- package/src/governance/ledger-v3-validation.ts +384 -0
- package/src/governance/ledger.ts +419 -0
- package/src/governance/native-session.ts +264 -0
- package/src/governance/record.ts +294 -0
- package/src/governance/retention-contract.ts +201 -0
- package/src/governance/retention-json.ts +24 -0
- package/src/governance/workspace-lease.ts +429 -0
- package/src/index.ts +82 -92
- package/src/kernel/approval.ts +406 -0
- package/src/kernel/capabilities.ts +216 -0
- package/src/kernel/catalog.ts +313 -0
- package/src/kernel/correlation.ts +351 -0
- package/src/kernel/definitions.ts +215 -0
- package/src/kernel/delegate-types.ts +162 -0
- package/src/kernel/delegate.ts +370 -0
- package/src/kernel/delegation-approval.ts +126 -0
- package/src/kernel/env-names.ts +119 -0
- package/src/kernel/fanout.ts +106 -0
- package/src/kernel/grant-env.ts +174 -0
- package/src/kernel/model-preflight.ts +44 -0
- package/src/kernel/pi-tools.ts +32 -0
- package/src/kernel/project-paths.ts +97 -0
- package/src/kernel/propagation.ts +341 -0
- package/src/kernel/refusals.ts +64 -0
- package/src/kernel/resolve.ts +258 -0
- package/src/kernel/run-child.ts +418 -0
- package/src/kernel/skill-packages.ts +329 -0
- package/src/kernel/skill-resources.ts +64 -0
- package/src/kernel/workspace.ts +336 -0
- package/src/products/activity-timeline.ts +679 -0
- package/src/products/dashboard-cli.ts +250 -0
- package/src/products/dashboard-display-controls.ts +44 -0
- package/src/products/dashboard-handshake.ts +222 -0
- package/src/products/dashboard-herdr.ts +427 -0
- package/src/products/dashboard-projection.ts +389 -0
- package/src/products/dashboard-render.ts +260 -0
- package/PRODUCT-GUIDE.md +0 -155
- package/REQUIREMENTS.md +0 -41
- package/contracts/daily-view/v1/README.md +0 -114
- package/contracts/daily-view/v1/fixtures/view.json +0 -525
- package/contracts/daily-view/v1/fixtures/view.txt +0 -75
- package/contracts/daily-view/v1/fixtures/work.jsonl +0 -17
- package/contracts/daily-view/v1/p03/README.md +0 -26
- package/contracts/daily-view/v1/p03/fixtures/retained-executions.json +0 -241
- package/contracts/daily-view/v1/p03/projection.schema.json +0 -194
- package/contracts/daily-view/v1/p03/provenance.json +0 -21
- package/contracts/dashboard-host/v1/README.md +0 -176
- package/contracts/debrief/v1/README.md +0 -146
- package/contracts/debrief/v1/intervention/README.md +0 -32
- package/contracts/debrief/v1/intervention/fixtures/artifact-3ee11136beb864f518252e5024dae9197421fbf97b6e981d3243c782b5c44bd0.txt +0 -1
- package/contracts/debrief/v1/intervention/fixtures/artifact-58905d872dd3c54a9705f67b05fa82edbad7af6476ae8993faf1a7b9fadfb905.txt +0 -1
- package/contracts/debrief/v1/intervention/fixtures/assessment.json +0 -29
- package/contracts/debrief/v1/intervention/fixtures/blind-view.json +0 -20
- package/contracts/debrief/v1/intervention/fixtures/choice.json +0 -7
- package/contracts/debrief/v1/intervention/fixtures/manifest.json +0 -57
- package/contracts/debrief/v1/intervention/fixtures/reveal.json +0 -39
- package/contracts/debrief/v1/provenance.json +0 -89
- package/contracts/debrief/v1/work-capture/README.md +0 -38
- package/contracts/debrief/v1/work-capture/fixtures/batch.json +0 -17
- package/contracts/debrief/v1/work-capture/fixtures/cases.json +0 -184
- package/contracts/debrief/v1/work-capture/fixtures/review.json +0 -184
- package/contracts/debrief/v1/work-capture/review-request.schema.json +0 -41
- package/contracts/debrief/v1/work-capture/work-case.schema.json +0 -190
- package/contracts/debrief/v2/README.md +0 -71
- package/contracts/debrief/v2/input-pin.json +0 -66
- package/contracts/debrief/v2/intervention-upstream.md +0 -40
- package/contracts/debrief/v2/work-signals-upstream.md +0 -22
- package/contracts/dispatch-control/v1/README.md +0 -109
- package/contracts/dispatch-control/v1/request.schema.json +0 -19
- package/contracts/effect-profile/v1/README.md +0 -124
- package/contracts/execution-retention/v1/README.md +0 -109
- package/contracts/execution-retention/v2/README.md +0 -148
- package/contracts/execution-retention/v2/fixtures/interrupted-native-bytes.json +0 -91
- package/contracts/execution-retention/v2/fixtures/missing-native-session.json +0 -91
- package/contracts/execution-retention/v2/fixtures/native-file-unknown-branch.json +0 -91
- package/contracts/execution-retention/v2/fixtures/native-id-without-bytes.json +0 -91
- package/contracts/execution-retention/v2/fixtures/native-live-branch.json +0 -90
- package/contracts/execution-retention/v2/fixtures/replaced-native-session.json +0 -92
- package/contracts/execution-retention/v2/fixtures/result-82c620cdfeb8ca6b858cf653d7f5e2eedca5315d6244216d60e8b36f03223d6a.bin +0 -1
- package/contracts/execution-retention/v2/fixtures/session-2ec1f134bc739984434f7fca689e1c3d1c39fce2dcadae709e9b6faedfcc4ac7.bin +0 -3
- package/contracts/execution-retention/v2/fixtures/session-9bdb4bd16a901da31580acf056bda525225259e15ec409e0410480109011772f.bin +0 -3
- package/contracts/execution-retention/v2/manifest.schema.json +0 -858
- package/contracts/experiment/v1/README.md +0 -164
- package/contracts/factory-order/v1/README.md +0 -151
- package/contracts/factory-order/v1/adoption-pin.json +0 -8
- package/contracts/intent-control/v1/README.md +0 -135
- package/contracts/intent-control/v1/request.schema.json +0 -1096
- package/contracts/intent-control/v2/README.md +0 -34
- package/contracts/intent-control/v2/request.schema.json +0 -1070
- package/contracts/ledger/v2/README.md +0 -59
- package/contracts/ledger/v2/fixtures/capability-decision.json +0 -95
- package/contracts/ledger/v2/fixtures/check-receipt.json +0 -40
- package/contracts/ledger/v2/fixtures/child-lifecycle.json +0 -42
- package/contracts/ledger/v2/fixtures/workspace-lease.json +0 -41
- package/contracts/ledger/v2/ledger-event.schema.json +0 -633
- package/contracts/ledger/v3/README.md +0 -36
- package/contracts/ledger/v3/fixtures/check-receipt.json +0 -41
- package/contracts/ledger/v3/fixtures/child-lifecycle.json +0 -44
- package/contracts/ledger/v3/fixtures/workflow-fact.json +0 -40
- package/contracts/ledger/v3/ledger-event.schema.json +0 -955
- package/contracts/ledger/v4/README.md +0 -241
- package/contracts/ledger/v4/fixtures/layout-options.json +0 -428
- package/contracts/ledger/v4/fixtures/work-acceptance.json +0 -57
- package/contracts/ledger/v4/fixtures/work-occurrence.json +0 -44
- package/contracts/ledger/v4/fixtures/work-revision.json +0 -26
- package/contracts/ledger/v4/fixtures/work-snapshot.json +0 -73
- package/contracts/ledger/v4/ledger-event.schema.json +0 -162
- package/contracts/ordinary-control/v1/README.md +0 -59
- package/contracts/producer-ipc/v1/README.md +0 -137
- package/dist/activity-timeline.d.ts +0 -109
- package/dist/activity-timeline.d.ts.map +0 -1
- package/dist/activity-timeline.js +0 -208
- package/dist/activity-timeline.js.map +0 -1
- package/dist/approval-prompt.d.ts +0 -119
- package/dist/approval-prompt.d.ts.map +0 -1
- package/dist/approval-prompt.js +0 -133
- package/dist/approval-prompt.js.map +0 -1
- package/dist/approval-store.d.ts +0 -149
- package/dist/approval-store.d.ts.map +0 -1
- package/dist/approval-store.js +0 -314
- package/dist/approval-store.js.map +0 -1
- package/dist/approval.d.ts +0 -241
- package/dist/approval.d.ts.map +0 -1
- package/dist/approval.js +0 -268
- package/dist/approval.js.map +0 -1
- package/dist/capabilities.d.ts +0 -136
- package/dist/capabilities.d.ts.map +0 -1
- package/dist/capabilities.js +0 -203
- package/dist/capabilities.js.map +0 -1
- package/dist/catalog.d.ts +0 -98
- package/dist/catalog.d.ts.map +0 -1
- package/dist/catalog.js +0 -273
- package/dist/catalog.js.map +0 -1
- package/dist/chain.d.ts.map +0 -1
- package/dist/chain.js.map +0 -1
- package/dist/check-runner.d.ts +0 -66
- package/dist/check-runner.d.ts.map +0 -1
- package/dist/check-runner.js +0 -275
- package/dist/check-runner.js.map +0 -1
- package/dist/control-journal.d.ts +0 -20
- package/dist/control-journal.d.ts.map +0 -1
- package/dist/control-journal.js +0 -73
- package/dist/control-journal.js.map +0 -1
- package/dist/correlation.d.ts.map +0 -1
- package/dist/correlation.js +0 -231
- package/dist/correlation.js.map +0 -1
- package/dist/daily-dashboard-host.d.ts +0 -136
- package/dist/daily-dashboard-host.d.ts.map +0 -1
- package/dist/daily-dashboard-host.js +0 -164
- package/dist/daily-dashboard-host.js.map +0 -1
- package/dist/daily-panel.d.ts +0 -36
- package/dist/daily-panel.d.ts.map +0 -1
- package/dist/daily-panel.js +0 -84
- package/dist/daily-panel.js.map +0 -1
- package/dist/daily-view-input.d.ts +0 -44
- package/dist/daily-view-input.d.ts.map +0 -1
- package/dist/daily-view-input.js +0 -68
- package/dist/daily-view-input.js.map +0 -1
- package/dist/daily-view-render.d.ts +0 -5
- package/dist/daily-view-render.d.ts.map +0 -1
- package/dist/daily-view-render.js +0 -42
- package/dist/daily-view-render.js.map +0 -1
- package/dist/daily-view.d.ts +0 -77
- package/dist/daily-view.d.ts.map +0 -1
- package/dist/daily-view.js +0 -176
- package/dist/daily-view.js.map +0 -1
- package/dist/dashboard-cli.d.ts +0 -54
- package/dist/dashboard-cli.d.ts.map +0 -1
- package/dist/dashboard-cli.js +0 -367
- package/dist/dashboard-cli.js.map +0 -1
- package/dist/dashboard-display-controls.d.ts +0 -15
- package/dist/dashboard-display-controls.d.ts.map +0 -1
- package/dist/dashboard-display-controls.js +0 -34
- package/dist/dashboard-display-controls.js.map +0 -1
- package/dist/dashboard-handshake.d.ts +0 -42
- package/dist/dashboard-handshake.d.ts.map +0 -1
- package/dist/dashboard-handshake.js +0 -147
- package/dist/dashboard-handshake.js.map +0 -1
- package/dist/dashboard-harness.d.ts +0 -22
- package/dist/dashboard-harness.d.ts.map +0 -1
- package/dist/dashboard-harness.js +0 -89
- package/dist/dashboard-harness.js.map +0 -1
- package/dist/dashboard-herdr.d.ts +0 -55
- package/dist/dashboard-herdr.d.ts.map +0 -1
- package/dist/dashboard-herdr.js +0 -293
- package/dist/dashboard-herdr.js.map +0 -1
- package/dist/dashboard-host-contract.d.ts +0 -127
- package/dist/dashboard-host-contract.d.ts.map +0 -1
- package/dist/dashboard-host-contract.js +0 -14
- package/dist/dashboard-host-contract.js.map +0 -1
- package/dist/dashboard-host-transport.d.ts +0 -16
- package/dist/dashboard-host-transport.d.ts.map +0 -1
- package/dist/dashboard-host-transport.js +0 -127
- package/dist/dashboard-host-transport.js.map +0 -1
- package/dist/dashboard-host.d.ts +0 -239
- package/dist/dashboard-host.d.ts.map +0 -1
- package/dist/dashboard-host.js +0 -474
- package/dist/dashboard-host.js.map +0 -1
- package/dist/dashboard-menu.d.ts +0 -16
- package/dist/dashboard-menu.d.ts.map +0 -1
- package/dist/dashboard-menu.js +0 -33
- package/dist/dashboard-menu.js.map +0 -1
- package/dist/dashboard-observation.d.ts +0 -28
- package/dist/dashboard-observation.d.ts.map +0 -1
- package/dist/dashboard-observation.js +0 -87
- package/dist/dashboard-observation.js.map +0 -1
- package/dist/dashboard-projection.d.ts +0 -73
- package/dist/dashboard-projection.d.ts.map +0 -1
- package/dist/dashboard-projection.js +0 -294
- package/dist/dashboard-projection.js.map +0 -1
- package/dist/dashboard-render.d.ts.map +0 -1
- package/dist/dashboard-render.js +0 -212
- package/dist/dashboard-render.js.map +0 -1
- package/dist/debrief-contract.d.ts +0 -65
- package/dist/debrief-contract.d.ts.map +0 -1
- package/dist/debrief-contract.js +0 -151
- package/dist/debrief-contract.js.map +0 -1
- package/dist/debrief-fixture.d.ts +0 -16
- package/dist/debrief-fixture.d.ts.map +0 -1
- package/dist/debrief-fixture.js +0 -41
- package/dist/debrief-fixture.js.map +0 -1
- package/dist/debrief-host.d.ts +0 -59
- package/dist/debrief-host.d.ts.map +0 -1
- package/dist/debrief-host.js +0 -49
- package/dist/debrief-host.js.map +0 -1
- package/dist/debrief-render.d.ts +0 -5
- package/dist/debrief-render.d.ts.map +0 -1
- package/dist/debrief-render.js +0 -65
- package/dist/debrief-render.js.map +0 -1
- package/dist/debrief.d.ts +0 -90
- package/dist/debrief.d.ts.map +0 -1
- package/dist/debrief.js +0 -263
- package/dist/debrief.js.map +0 -1
- package/dist/definitions.d.ts.map +0 -1
- package/dist/definitions.js +0 -164
- package/dist/definitions.js.map +0 -1
- package/dist/delegate-types.d.ts +0 -154
- package/dist/delegate-types.d.ts.map +0 -1
- package/dist/delegate-types.js +0 -8
- package/dist/delegate-types.js.map +0 -1
- package/dist/delegate.d.ts.map +0 -1
- package/dist/delegate.js +0 -313
- package/dist/delegate.js.map +0 -1
- package/dist/delegation-approval.d.ts.map +0 -1
- package/dist/delegation-approval.js +0 -94
- package/dist/delegation-approval.js.map +0 -1
- package/dist/dispatch-control.d.ts +0 -45
- package/dist/dispatch-control.d.ts.map +0 -1
- package/dist/dispatch-control.js +0 -76
- package/dist/dispatch-control.js.map +0 -1
- package/dist/effect-profile-runtime.d.ts +0 -40
- package/dist/effect-profile-runtime.d.ts.map +0 -1
- package/dist/effect-profile-runtime.js +0 -51
- package/dist/effect-profile-runtime.js.map +0 -1
- package/dist/effect-profile.d.ts +0 -40
- package/dist/effect-profile.d.ts.map +0 -1
- package/dist/effect-profile.js +0 -152
- package/dist/effect-profile.js.map +0 -1
- package/dist/execution-id.d.ts.map +0 -1
- package/dist/execution-id.js.map +0 -1
- package/dist/execution-retention.d.ts +0 -90
- package/dist/execution-retention.d.ts.map +0 -1
- package/dist/execution-retention.js +0 -247
- package/dist/execution-retention.js.map +0 -1
- package/dist/executor.d.ts +0 -39
- package/dist/executor.d.ts.map +0 -1
- package/dist/executor.js +0 -94
- package/dist/executor.js.map +0 -1
- package/dist/experiment-contract.d.ts +0 -56
- package/dist/experiment-contract.d.ts.map +0 -1
- package/dist/experiment-contract.js +0 -80
- package/dist/experiment-contract.js.map +0 -1
- package/dist/experiment-state.d.ts +0 -22
- package/dist/experiment-state.d.ts.map +0 -1
- package/dist/experiment-state.js +0 -79
- package/dist/experiment-state.js.map +0 -1
- package/dist/experiment-store.d.ts +0 -30
- package/dist/experiment-store.d.ts.map +0 -1
- package/dist/experiment-store.js +0 -147
- package/dist/experiment-store.js.map +0 -1
- package/dist/experiment.d.ts +0 -65
- package/dist/experiment.d.ts.map +0 -1
- package/dist/experiment.js +0 -362
- package/dist/experiment.js.map +0 -1
- package/dist/factory-contract.d.ts +0 -79
- package/dist/factory-contract.d.ts.map +0 -1
- package/dist/factory-contract.js +0 -89
- package/dist/factory-contract.js.map +0 -1
- package/dist/factory-migration.d.ts +0 -20
- package/dist/factory-migration.d.ts.map +0 -1
- package/dist/factory-migration.js +0 -55
- package/dist/factory-migration.js.map +0 -1
- package/dist/factory-order.d.ts +0 -848
- package/dist/factory-order.d.ts.map +0 -1
- package/dist/factory-order.js +0 -83
- package/dist/factory-order.js.map +0 -1
- package/dist/factory-registry.d.ts +0 -121
- package/dist/factory-registry.d.ts.map +0 -1
- package/dist/factory-registry.js +0 -133
- package/dist/factory-registry.js.map +0 -1
- package/dist/fanout.d.ts.map +0 -1
- package/dist/fanout.js +0 -93
- package/dist/fanout.js.map +0 -1
- package/dist/file-lock.d.ts.map +0 -1
- package/dist/file-lock.js +0 -201
- package/dist/file-lock.js.map +0 -1
- package/dist/finalization.d.ts.map +0 -1
- package/dist/finalization.js.map +0 -1
- package/dist/git-identity.d.ts +0 -13
- package/dist/git-identity.d.ts.map +0 -1
- package/dist/git-identity.js +0 -47
- package/dist/git-identity.js.map +0 -1
- package/dist/grant-env.d.ts +0 -75
- package/dist/grant-env.d.ts.map +0 -1
- package/dist/grant-env.js +0 -154
- package/dist/grant-env.js.map +0 -1
- package/dist/grant-store.d.ts +0 -96
- package/dist/grant-store.d.ts.map +0 -1
- package/dist/grant-store.js +0 -188
- package/dist/grant-store.js.map +0 -1
- package/dist/herdr-cli.d.ts +0 -78
- package/dist/herdr-cli.d.ts.map +0 -1
- package/dist/herdr-cli.js +0 -113
- package/dist/herdr-cli.js.map +0 -1
- package/dist/herdr-name.d.ts.map +0 -1
- package/dist/herdr-name.js.map +0 -1
- package/dist/herdr-pi-lifecycle.d.ts.map +0 -1
- package/dist/herdr-pi-lifecycle.js +0 -22
- package/dist/herdr-pi-lifecycle.js.map +0 -1
- package/dist/herdr-poll.d.ts +0 -133
- package/dist/herdr-poll.d.ts.map +0 -1
- package/dist/herdr-poll.js +0 -222
- package/dist/herdr-poll.js.map +0 -1
- package/dist/herdr-stage.d.ts +0 -40
- package/dist/herdr-stage.d.ts.map +0 -1
- package/dist/herdr-stage.js +0 -54
- package/dist/herdr-stage.js.map +0 -1
- package/dist/herdr-start.d.ts.map +0 -1
- package/dist/herdr-start.js.map +0 -1
- package/dist/init.d.ts +0 -117
- package/dist/init.d.ts.map +0 -1
- package/dist/init.js +0 -323
- package/dist/init.js.map +0 -1
- package/dist/intent-application.d.ts +0 -17
- package/dist/intent-application.d.ts.map +0 -1
- package/dist/intent-application.js +0 -114
- package/dist/intent-application.js.map +0 -1
- package/dist/intent-control.d.ts +0 -201
- package/dist/intent-control.d.ts.map +0 -1
- package/dist/intent-control.js +0 -110
- package/dist/intent-control.js.map +0 -1
- package/dist/intent-scheduling.d.ts +0 -9
- package/dist/intent-scheduling.d.ts.map +0 -1
- package/dist/intent-scheduling.js +0 -15
- package/dist/intent-scheduling.js.map +0 -1
- package/dist/learning-connection.d.ts +0 -127
- package/dist/learning-connection.d.ts.map +0 -1
- package/dist/learning-connection.js +0 -54
- package/dist/learning-connection.js.map +0 -1
- package/dist/lease-helper.d.ts.map +0 -1
- package/dist/lease-helper.js +0 -94
- package/dist/lease-helper.js.map +0 -1
- package/dist/lease-record.d.ts +0 -90
- package/dist/lease-record.d.ts.map +0 -1
- package/dist/lease-record.js.map +0 -1
- package/dist/ledger-append.d.ts +0 -15
- package/dist/ledger-append.d.ts.map +0 -1
- package/dist/ledger-append.js +0 -94
- package/dist/ledger-append.js.map +0 -1
- package/dist/ledger-events.d.ts +0 -131
- package/dist/ledger-events.d.ts.map +0 -1
- package/dist/ledger-events.js +0 -107
- package/dist/ledger-events.js.map +0 -1
- package/dist/ledger-identifiers.d.ts.map +0 -1
- package/dist/ledger-identifiers.js.map +0 -1
- package/dist/ledger-report.d.ts +0 -134
- package/dist/ledger-report.d.ts.map +0 -1
- package/dist/ledger-report.js +0 -271
- package/dist/ledger-report.js.map +0 -1
- package/dist/ledger-v3-validation.d.ts +0 -11
- package/dist/ledger-v3-validation.d.ts.map +0 -1
- package/dist/ledger-v3-validation.js +0 -265
- package/dist/ledger-v3-validation.js.map +0 -1
- package/dist/ledger.d.ts +0 -242
- package/dist/ledger.d.ts.map +0 -1
- package/dist/ledger.js +0 -142
- package/dist/ledger.js.map +0 -1
- package/dist/measured-order.d.ts +0 -249
- package/dist/measured-order.d.ts.map +0 -1
- package/dist/measured-order.js +0 -309
- package/dist/measured-order.js.map +0 -1
- package/dist/measured-session.d.ts +0 -97
- package/dist/measured-session.d.ts.map +0 -1
- package/dist/measured-session.js +0 -134
- package/dist/measured-session.js.map +0 -1
- package/dist/model-preflight.d.ts +0 -13
- package/dist/model-preflight.d.ts.map +0 -1
- package/dist/model-preflight.js +0 -29
- package/dist/model-preflight.js.map +0 -1
- package/dist/native-session-target.d.ts +0 -9
- package/dist/native-session-target.d.ts.map +0 -1
- package/dist/native-session-target.js +0 -29
- package/dist/native-session-target.js.map +0 -1
- package/dist/native-session.d.ts +0 -59
- package/dist/native-session.d.ts.map +0 -1
- package/dist/native-session.js +0 -154
- package/dist/native-session.js.map +0 -1
- package/dist/order-schedule.d.ts +0 -37
- package/dist/order-schedule.d.ts.map +0 -1
- package/dist/order-schedule.js +0 -81
- package/dist/order-schedule.js.map +0 -1
- package/dist/ordinary-children.d.ts +0 -52
- package/dist/ordinary-children.d.ts.map +0 -1
- package/dist/ordinary-children.js +0 -93
- package/dist/ordinary-children.js.map +0 -1
- package/dist/pane-reaper.d.ts +0 -111
- package/dist/pane-reaper.d.ts.map +0 -1
- package/dist/pane-reaper.js +0 -242
- package/dist/pane-reaper.js.map +0 -1
- package/dist/pi-tools.d.ts.map +0 -1
- package/dist/pi-tools.js +0 -21
- package/dist/pi-tools.js.map +0 -1
- package/dist/producer-ipc-contract.d.ts +0 -29
- package/dist/producer-ipc-contract.d.ts.map +0 -1
- package/dist/producer-ipc-contract.js +0 -29
- package/dist/producer-ipc-contract.js.map +0 -1
- package/dist/producer-ipc.d.ts +0 -55
- package/dist/producer-ipc.d.ts.map +0 -1
- package/dist/producer-ipc.js +0 -143
- package/dist/producer-ipc.js.map +0 -1
- package/dist/product-files.d.ts +0 -6
- package/dist/product-files.d.ts.map +0 -1
- package/dist/product-files.js +0 -55
- package/dist/product-files.js.map +0 -1
- package/dist/progress.d.ts.map +0 -1
- package/dist/progress.js.map +0 -1
- package/dist/propagation.d.ts +0 -203
- package/dist/propagation.d.ts.map +0 -1
- package/dist/propagation.js +0 -279
- package/dist/propagation.js.map +0 -1
- package/dist/refusals.d.ts +0 -16
- package/dist/refusals.d.ts.map +0 -1
- package/dist/refusals.js +0 -55
- package/dist/refusals.js.map +0 -1
- package/dist/resolve.d.ts.map +0 -1
- package/dist/resolve.js +0 -211
- package/dist/resolve.js.map +0 -1
- package/dist/resource-budget.d.ts +0 -334
- package/dist/resource-budget.d.ts.map +0 -1
- package/dist/resource-budget.js +0 -415
- package/dist/resource-budget.js.map +0 -1
- package/dist/retention-contract.d.ts.map +0 -1
- package/dist/retention-contract.js +0 -104
- package/dist/retention-contract.js.map +0 -1
- package/dist/retention-json.d.ts.map +0 -1
- package/dist/retention-json.js.map +0 -1
- package/dist/routing-authority.d.ts.map +0 -1
- package/dist/routing-authority.js.map +0 -1
- package/dist/run-child.d.ts +0 -87
- package/dist/run-child.d.ts.map +0 -1
- package/dist/run-child.js +0 -248
- package/dist/run-child.js.map +0 -1
- package/dist/run-herdr.d.ts +0 -119
- package/dist/run-herdr.d.ts.map +0 -1
- package/dist/run-herdr.js +0 -335
- package/dist/run-herdr.js.map +0 -1
- package/dist/skill-packages.d.ts +0 -116
- package/dist/skill-packages.d.ts.map +0 -1
- package/dist/skill-packages.js +0 -295
- package/dist/skill-packages.js.map +0 -1
- package/dist/skill-resources.d.ts.map +0 -1
- package/dist/skill-resources.js +0 -52
- package/dist/skill-resources.js.map +0 -1
- package/dist/spawn.d.ts.map +0 -1
- package/dist/spawn.js.map +0 -1
- package/dist/vendor/adoption.d.ts +0 -129
- package/dist/vendor/adoption.d.ts.map +0 -1
- package/dist/vendor/adoption.js +0 -102
- package/dist/vendor/adoption.js.map +0 -1
- package/dist/vendor/herdr-pi-lifecycle.d.ts.map +0 -1
- package/dist/vendor/herdr-pi-lifecycle.js.map +0 -1
- package/dist/work-command.d.ts +0 -32
- package/dist/work-command.d.ts.map +0 -1
- package/dist/work-command.js +0 -179
- package/dist/work-command.js.map +0 -1
- package/dist/work-ledger-destination.d.ts +0 -20
- package/dist/work-ledger-destination.d.ts.map +0 -1
- package/dist/work-ledger-destination.js +0 -131
- package/dist/work-ledger-destination.js.map +0 -1
- package/dist/work-ledger-json.d.ts +0 -25
- package/dist/work-ledger-json.d.ts.map +0 -1
- package/dist/work-ledger-json.js +0 -267
- package/dist/work-ledger-json.js.map +0 -1
- package/dist/work-ledger-occurrences.d.ts +0 -227
- package/dist/work-ledger-occurrences.d.ts.map +0 -1
- package/dist/work-ledger-occurrences.js +0 -115
- package/dist/work-ledger-occurrences.js.map +0 -1
- package/dist/work-ledger-projection.d.ts +0 -295
- package/dist/work-ledger-projection.d.ts.map +0 -1
- package/dist/work-ledger-projection.js +0 -237
- package/dist/work-ledger-projection.js.map +0 -1
- package/dist/work-ledger-snapshot.d.ts +0 -29
- package/dist/work-ledger-snapshot.d.ts.map +0 -1
- package/dist/work-ledger-snapshot.js +0 -267
- package/dist/work-ledger-snapshot.js.map +0 -1
- package/dist/work-ledger-types.d.ts +0 -261
- package/dist/work-ledger-types.d.ts.map +0 -1
- package/dist/work-ledger-types.js +0 -13
- package/dist/work-ledger-types.js.map +0 -1
- package/dist/work-ledger-validation.d.ts +0 -14
- package/dist/work-ledger-validation.d.ts.map +0 -1
- package/dist/work-ledger-validation.js +0 -226
- package/dist/work-ledger-validation.js.map +0 -1
- package/dist/work-ledger.d.ts +0 -43
- package/dist/work-ledger.d.ts.map +0 -1
- package/dist/work-ledger.js +0 -225
- package/dist/work-ledger.js.map +0 -1
- package/dist/work-policy-registry.d.ts +0 -133
- package/dist/work-policy-registry.d.ts.map +0 -1
- package/dist/work-policy-registry.js +0 -128
- package/dist/work-policy-registry.js.map +0 -1
- package/dist/work-run.d.ts +0 -56
- package/dist/work-run.d.ts.map +0 -1
- package/dist/work-run.js +0 -102
- package/dist/work-run.js.map +0 -1
- package/dist/work-setup.d.ts +0 -40
- package/dist/work-setup.d.ts.map +0 -1
- package/dist/work-setup.js +0 -174
- package/dist/work-setup.js.map +0 -1
- package/dist/workflow-fact-id.d.ts +0 -4
- package/dist/workflow-fact-id.d.ts.map +0 -1
- package/dist/workflow-fact-id.js +0 -14
- package/dist/workflow-fact-id.js.map +0 -1
- package/dist/workflow-facts.d.ts +0 -34
- package/dist/workflow-facts.d.ts.map +0 -1
- package/dist/workflow-facts.js +0 -43
- package/dist/workflow-facts.js.map +0 -1
- package/dist/workspace-lease.d.ts +0 -40
- package/dist/workspace-lease.d.ts.map +0 -1
- package/dist/workspace-lease.js +0 -333
- package/dist/workspace-lease.js.map +0 -1
- package/dist/workspace.d.ts +0 -57
- package/dist/workspace.d.ts.map +0 -1
- package/dist/workspace.js +0 -216
- package/dist/workspace.js.map +0 -1
- package/extensions/daily-dashboard-session.ts +0 -48
- package/extensions/daily-work-session.ts +0 -20
- package/extensions/learning-outcome-session.ts +0 -38
- package/extensions/learning-session.ts +0 -59
- package/extensions/ordinary-runtime.ts +0 -14
- package/extensions/primary-shadow.ts +0 -11
- package/extensions/work-policy-session.ts +0 -139
- package/extensions/work-run-session.ts +0 -75
- package/extensions/work-runtime.ts +0 -44
- package/extensions/work-session.ts +0 -132
- package/src/activity-timeline.ts +0 -133
- package/src/approval-prompt.ts +0 -225
- package/src/approval-store.ts +0 -386
- package/src/approval.ts +0 -399
- package/src/capabilities.ts +0 -220
- package/src/catalog.ts +0 -306
- package/src/check-runner.ts +0 -387
- package/src/control-journal.ts +0 -26
- package/src/correlation.ts +0 -320
- package/src/daily-dashboard-host.ts +0 -105
- package/src/daily-panel.ts +0 -80
- package/src/daily-view-input.ts +0 -59
- package/src/daily-view-render.ts +0 -45
- package/src/daily-view.ts +0 -160
- package/src/dashboard-cli.ts +0 -340
- package/src/dashboard-display-controls.ts +0 -21
- package/src/dashboard-handshake.ts +0 -199
- package/src/dashboard-harness.ts +0 -37
- package/src/dashboard-herdr.ts +0 -363
- package/src/dashboard-host-contract.ts +0 -50
- package/src/dashboard-host-transport.ts +0 -43
- package/src/dashboard-host.ts +0 -244
- package/src/dashboard-menu.ts +0 -28
- package/src/dashboard-observation.ts +0 -46
- package/src/dashboard-projection.ts +0 -390
- package/src/dashboard-render.ts +0 -259
- package/src/debrief-contract.ts +0 -127
- package/src/debrief-fixture.ts +0 -29
- package/src/debrief-host.ts +0 -53
- package/src/debrief-render.ts +0 -49
- package/src/debrief.ts +0 -198
- package/src/definitions.ts +0 -211
- package/src/delegate-types.ts +0 -154
- package/src/delegate.ts +0 -348
- package/src/delegation-approval.ts +0 -126
- package/src/dispatch-control.ts +0 -81
- package/src/effect-profile-runtime.ts +0 -46
- package/src/effect-profile.ts +0 -129
- package/src/execution-retention.ts +0 -230
- package/src/executor.ts +0 -123
- package/src/experiment-contract.ts +0 -66
- package/src/experiment-state.ts +0 -44
- package/src/experiment-store.ts +0 -98
- package/src/experiment.ts +0 -236
- package/src/factory-contract.ts +0 -47
- package/src/factory-migration.ts +0 -29
- package/src/factory-order.ts +0 -56
- package/src/factory-registry.ts +0 -60
- package/src/fanout.ts +0 -106
- package/src/file-lock.ts +0 -178
- package/src/finalization.ts +0 -79
- package/src/git-identity.ts +0 -56
- package/src/grant-env.ts +0 -221
- package/src/grant-store.ts +0 -235
- package/src/herdr-cli.ts +0 -125
- package/src/herdr-pi-lifecycle.ts +0 -21
- package/src/herdr-poll.ts +0 -253
- package/src/herdr-stage.ts +0 -55
- package/src/init.ts +0 -389
- package/src/intent-application.ts +0 -91
- package/src/intent-control.ts +0 -107
- package/src/intent-scheduling.ts +0 -14
- package/src/learning-connection.ts +0 -70
- package/src/lease-helper.ts +0 -97
- package/src/lease-record.ts +0 -131
- package/src/ledger-append.ts +0 -72
- package/src/ledger-events.ts +0 -226
- package/src/ledger-report.ts +0 -357
- package/src/ledger-v3-validation.ts +0 -266
- package/src/ledger.ts +0 -369
- package/src/measured-order.ts +0 -72
- package/src/measured-session.ts +0 -70
- package/src/model-preflight.ts +0 -41
- package/src/native-session-target.ts +0 -23
- package/src/native-session.ts +0 -139
- package/src/order-schedule.ts +0 -42
- package/src/ordinary-children.ts +0 -59
- package/src/pane-reaper.ts +0 -270
- package/src/pi-tools.ts +0 -25
- package/src/producer-ipc-contract.ts +0 -26
- package/src/producer-ipc.ts +0 -107
- package/src/product-files.ts +0 -34
- package/src/propagation.ts +0 -333
- package/src/refusals.ts +0 -70
- package/src/resolve.ts +0 -267
- package/src/resource-budget.ts +0 -349
- package/src/retention-contract.ts +0 -84
- package/src/retention-json.ts +0 -20
- package/src/run-child.ts +0 -303
- package/src/run-herdr.ts +0 -386
- package/src/skill-packages.ts +0 -314
- package/src/skill-resources.ts +0 -48
- package/src/vendor/adoption.ts +0 -109
- package/src/work-command.ts +0 -197
- package/src/work-ledger-destination.ts +0 -113
- package/src/work-ledger-json.ts +0 -228
- package/src/work-ledger-occurrences.ts +0 -99
- package/src/work-ledger-projection.ts +0 -262
- package/src/work-ledger-snapshot.ts +0 -246
- package/src/work-ledger-types.ts +0 -229
- package/src/work-ledger-validation.ts +0 -174
- package/src/work-ledger.ts +0 -186
- package/src/work-policy-registry.ts +0 -81
- package/src/work-run.ts +0 -79
- package/src/work-setup.ts +0 -141
- package/src/workflow-fact-id.ts +0 -16
- package/src/workflow-facts.ts +0 -65
- package/src/workspace-lease.ts +0 -363
- package/src/workspace.ts +0 -308
- /package/contracts/{ledger/v3 → ledger-record/v1}/fixtures/capability-decision.json +0 -0
- /package/contracts/{ledger/v3 → ledger-record/v1}/fixtures/workspace-lease.json +0 -0
- /package/dist/{herdr-name.d.ts → executors/herdr-name.d.ts} +0 -0
- /package/dist/{herdr-name.js → executors/herdr-name.js} +0 -0
- /package/dist/{herdr-pi-lifecycle.d.ts → executors/herdr-pi-lifecycle.d.ts} +0 -0
- /package/dist/{herdr-start.d.ts → executors/herdr-start.d.ts} +0 -0
- /package/dist/{herdr-start.js → executors/herdr-start.js} +0 -0
- /package/dist/{vendor → executors/vendor}/herdr-pi-lifecycle.d.ts +0 -0
- /package/dist/{vendor → executors/vendor}/herdr-pi-lifecycle.js +0 -0
- /package/dist/{file-lock.d.ts → governance/file-lock.d.ts} +0 -0
- /package/dist/{finalization.d.ts → governance/finalization.d.ts} +0 -0
- /package/dist/{finalization.js → governance/finalization.js} +0 -0
- /package/dist/{lease-helper.d.ts → governance/lease-helper.d.ts} +0 -0
- /package/dist/{lease-record.js → governance/lease-record.js} +0 -0
- /package/dist/{retention-contract.d.ts → governance/retention-contract.d.ts} +0 -0
- /package/dist/{retention-json.d.ts → governance/retention-json.d.ts} +0 -0
- /package/dist/{retention-json.js → governance/retention-json.js} +0 -0
- /package/dist/{chain.d.ts → kernel/chain.d.ts} +0 -0
- /package/dist/{chain.js → kernel/chain.js} +0 -0
- /package/dist/{correlation.d.ts → kernel/correlation.d.ts} +0 -0
- /package/dist/{definitions.d.ts → kernel/definitions.d.ts} +0 -0
- /package/dist/{delegate.d.ts → kernel/delegate.d.ts} +0 -0
- /package/dist/{delegation-approval.d.ts → kernel/delegation-approval.d.ts} +0 -0
- /package/dist/{execution-id.d.ts → kernel/execution-id.d.ts} +0 -0
- /package/dist/{execution-id.js → kernel/execution-id.js} +0 -0
- /package/dist/{fanout.d.ts → kernel/fanout.d.ts} +0 -0
- /package/dist/{ledger-identifiers.d.ts → kernel/ledger-identifiers.d.ts} +0 -0
- /package/dist/{ledger-identifiers.js → kernel/ledger-identifiers.js} +0 -0
- /package/dist/{pi-tools.d.ts → kernel/pi-tools.d.ts} +0 -0
- /package/dist/{progress.d.ts → kernel/progress.d.ts} +0 -0
- /package/dist/{progress.js → kernel/progress.js} +0 -0
- /package/dist/{resolve.d.ts → kernel/resolve.d.ts} +0 -0
- /package/dist/{routing-authority.d.ts → kernel/routing-authority.d.ts} +0 -0
- /package/dist/{routing-authority.js → kernel/routing-authority.js} +0 -0
- /package/dist/{skill-resources.d.ts → kernel/skill-resources.d.ts} +0 -0
- /package/dist/{spawn.d.ts → kernel/spawn.d.ts} +0 -0
- /package/dist/{spawn.js → kernel/spawn.js} +0 -0
- /package/dist/{dashboard-render.d.ts → products/dashboard-render.d.ts} +0 -0
- /package/src/{herdr-name.ts → executors/herdr-name.ts} +0 -0
- /package/src/{herdr-start.ts → executors/herdr-start.ts} +0 -0
- /package/src/{vendor → executors/vendor}/herdr-pi-lifecycle.ts +0 -0
- /package/src/{chain.ts → kernel/chain.ts} +0 -0
- /package/src/{execution-id.ts → kernel/execution-id.ts} +0 -0
- /package/src/{ledger-identifiers.ts → kernel/ledger-identifiers.ts} +0 -0
- /package/src/{progress.ts → kernel/progress.ts} +0 -0
- /package/src/{routing-authority.ts → kernel/routing-authority.ts} +0 -0
- /package/src/{spawn.ts → kernel/spawn.ts} +0 -0
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
+
import { mkdir, writeFile, rename } from "node:fs/promises";
|
|
3
|
+
import { isAbsolute, join } from "node:path";
|
|
4
|
+
import { buildExecutionRetentionManifest } from "./retention-contract.ts";
|
|
5
|
+
import {
|
|
6
|
+
missingNativeSession,
|
|
7
|
+
readNativeSession,
|
|
8
|
+
type NativeSessionObservation,
|
|
9
|
+
type NativeSessionManager,
|
|
10
|
+
type NativeSessionCapture,
|
|
11
|
+
} from "./native-session.ts";
|
|
12
|
+
export {
|
|
13
|
+
buildExecutionRetentionManifest,
|
|
14
|
+
parseExecutionRetentionManifest,
|
|
15
|
+
RETENTION_SCHEMA,
|
|
16
|
+
} from "./retention-contract.ts";
|
|
17
|
+
export {
|
|
18
|
+
ENV_NATIVE_SESSION_ROOT,
|
|
19
|
+
readNativeSession,
|
|
20
|
+
parseNativeSessionBytes,
|
|
21
|
+
type NativeSessionObservation,
|
|
22
|
+
type NativeSessionManager,
|
|
23
|
+
} from "./native-session.ts";
|
|
24
|
+
import { ENV_EXECUTION_ARCHIVE } from "../kernel/env-names.ts";
|
|
25
|
+
export { ENV_EXECUTION_ARCHIVE } from "../kernel/env-names.ts";
|
|
26
|
+
import { isUnderPiProjectDir } from "../kernel/project-paths.ts";
|
|
27
|
+
|
|
28
|
+
/** Operator-owned archive boundary; never a model-facing parameter or an authority source. */
|
|
29
|
+
export const RETENTION_VERSION = "2.0";
|
|
30
|
+
const LIMIT = 1024 * 1024;
|
|
31
|
+
const MAX_ACTIVE = 32;
|
|
32
|
+
let active = 0;
|
|
33
|
+
const digest = (bytes: Uint8Array | string) => createHash("sha256").update(bytes).digest("hex");
|
|
34
|
+
export interface RetentionIdentity {
|
|
35
|
+
executionId: string;
|
|
36
|
+
parentExecutionId: string | null;
|
|
37
|
+
childId: string;
|
|
38
|
+
toolCallId: string | null;
|
|
39
|
+
executor: "process" | "herdr" | "check";
|
|
40
|
+
taskDigest: string | null;
|
|
41
|
+
definitionDigest: string | null;
|
|
42
|
+
configurationDigest: string;
|
|
43
|
+
workspaceId: string | null;
|
|
44
|
+
}
|
|
45
|
+
export interface RetainedContent {
|
|
46
|
+
status: "retained" | "missing";
|
|
47
|
+
path: string | null;
|
|
48
|
+
sha256: string | null;
|
|
49
|
+
bytes: number | null;
|
|
50
|
+
}
|
|
51
|
+
export interface ExecutionRetentionManifest {
|
|
52
|
+
version: "2.0";
|
|
53
|
+
archiveId: string;
|
|
54
|
+
identity: RetentionIdentity;
|
|
55
|
+
native: {
|
|
56
|
+
pid: number | null;
|
|
57
|
+
paneId: string | null;
|
|
58
|
+
agentName: string | null;
|
|
59
|
+
tabId: string | null;
|
|
60
|
+
sessionId: string | null;
|
|
61
|
+
sessionPath: string | null;
|
|
62
|
+
branchLeafId: string | null;
|
|
63
|
+
};
|
|
64
|
+
nativeSession: NativeSessionObservation;
|
|
65
|
+
state: "running" | "terminal";
|
|
66
|
+
outcome: {
|
|
67
|
+
code: number | null;
|
|
68
|
+
signal: string | null;
|
|
69
|
+
timedOut: boolean;
|
|
70
|
+
aborted: boolean;
|
|
71
|
+
truncated: boolean;
|
|
72
|
+
failed: boolean;
|
|
73
|
+
} | null;
|
|
74
|
+
content: Record<"stdout" | "stderr" | "paneSnapshot" | "checkReceipt" | "result" | "session", RetainedContent>;
|
|
75
|
+
coverage: { complete: false; losses: string[] };
|
|
76
|
+
/** Retention is observation, never a work-v4 acceptance decision. */
|
|
77
|
+
acceptance: "not-assessed";
|
|
78
|
+
}
|
|
79
|
+
export interface RetentionStatus {
|
|
80
|
+
manifestPath: string | null;
|
|
81
|
+
status: "disabled" | "pending" | "retained" | "lost";
|
|
82
|
+
}
|
|
83
|
+
const drains = new WeakMap<RetentionStatus, () => Promise<RetentionStatus>>();
|
|
84
|
+
/** Original live status only; drains admitted observations, not producer completeness or fsync. */
|
|
85
|
+
export function drainExecutionRetention(status: RetentionStatus): Promise<RetentionStatus> {
|
|
86
|
+
const drain = drains.get(status);
|
|
87
|
+
if (!drain) return Promise.reject(new TypeError("original live retention status required"));
|
|
88
|
+
return drain();
|
|
89
|
+
}
|
|
90
|
+
const missing = (): RetainedContent => ({ status: "missing", path: null, sha256: null, bytes: null });
|
|
91
|
+
|
|
92
|
+
/** Hash only an explicitly selected configuration. Callers must not pass environment/auth objects. */
|
|
93
|
+
export const retentionConfigurationDigest = (configuration: unknown): string => digest(JSON.stringify(configuration));
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* A bounded, coalescing observation queue. No worker-control path awaits publication. A failed or stalled
|
|
97
|
+
* archive never changes required ledger/lease semantics. `flush` is exclusively for external archival at
|
|
98
|
+
* quiescence; it is NOT called by the spawner. Missing terminal publication means incomplete observation.
|
|
99
|
+
*/
|
|
100
|
+
export function beginExecutionRetention(identity: RetentionIdentity, directory = process.env[ENV_EXECUTION_ARCHIVE]) {
|
|
101
|
+
const archiveId = randomUUID();
|
|
102
|
+
const valid = Boolean(directory && isAbsolute(directory) && !isUnderPiProjectDir(directory));
|
|
103
|
+
const admitted = valid && active < MAX_ACTIVE;
|
|
104
|
+
const root = admitted ? join(directory!, archiveId) : null;
|
|
105
|
+
const manifestPath = root ? join(root, "manifest.json") : null;
|
|
106
|
+
let status: RetentionStatus["status"] = !directory ? "disabled" : admitted ? "pending" : "lost";
|
|
107
|
+
const manifest: ExecutionRetentionManifest = {
|
|
108
|
+
version: RETENTION_VERSION,
|
|
109
|
+
archiveId,
|
|
110
|
+
identity: {
|
|
111
|
+
executionId: identity.executionId,
|
|
112
|
+
parentExecutionId: identity.parentExecutionId,
|
|
113
|
+
childId: identity.childId,
|
|
114
|
+
toolCallId: identity.toolCallId,
|
|
115
|
+
executor: identity.executor,
|
|
116
|
+
taskDigest: identity.taskDigest,
|
|
117
|
+
definitionDigest: identity.definitionDigest,
|
|
118
|
+
configurationDigest: identity.configurationDigest,
|
|
119
|
+
workspaceId: identity.workspaceId,
|
|
120
|
+
},
|
|
121
|
+
native: {
|
|
122
|
+
pid: null,
|
|
123
|
+
paneId: null,
|
|
124
|
+
agentName: null,
|
|
125
|
+
tabId: null,
|
|
126
|
+
sessionId: null,
|
|
127
|
+
sessionPath: null,
|
|
128
|
+
branchLeafId: null,
|
|
129
|
+
},
|
|
130
|
+
nativeSession: missingNativeSession(),
|
|
131
|
+
state: "running",
|
|
132
|
+
outcome: null,
|
|
133
|
+
content: {
|
|
134
|
+
stdout: missing(),
|
|
135
|
+
stderr: missing(),
|
|
136
|
+
paneSnapshot: missing(),
|
|
137
|
+
checkReceipt: missing(),
|
|
138
|
+
result: missing(),
|
|
139
|
+
session: missing(),
|
|
140
|
+
},
|
|
141
|
+
coverage: { complete: false, losses: ["native-session-content-unavailable", "active-branch-unknown"] },
|
|
142
|
+
acceptance: "not-assessed",
|
|
143
|
+
};
|
|
144
|
+
const buffers = new Map<keyof typeof manifest.content, Buffer>();
|
|
145
|
+
const written = new Set<string>();
|
|
146
|
+
let total = 0;
|
|
147
|
+
let dirty = false;
|
|
148
|
+
let running: Promise<void> | undefined;
|
|
149
|
+
let finished = false;
|
|
150
|
+
let released = false;
|
|
151
|
+
let nativeTask: Promise<void> | undefined;
|
|
152
|
+
let nextNative:
|
|
153
|
+
| {
|
|
154
|
+
source: "herdr-id" | "herdr-path" | "pi-session-file" | "pi-session-manager";
|
|
155
|
+
value: string;
|
|
156
|
+
manager?: NativeSessionManager;
|
|
157
|
+
}
|
|
158
|
+
| undefined;
|
|
159
|
+
let pinnedSessionId: string | undefined;
|
|
160
|
+
let pinnedFile: NativeSessionCapture["fileIdentity"];
|
|
161
|
+
const loss = (reason: string) => {
|
|
162
|
+
if (!manifest.coverage.losses.includes(reason)) manifest.coverage.losses.push(reason);
|
|
163
|
+
};
|
|
164
|
+
const release = () => {
|
|
165
|
+
if (admitted && !released) {
|
|
166
|
+
active--;
|
|
167
|
+
released = true;
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
if (admitted) active++;
|
|
171
|
+
else if (directory) loss("archive-unavailable-or-capacity-exceeded");
|
|
172
|
+
const publish = async () => {
|
|
173
|
+
try {
|
|
174
|
+
await mkdir(root!, { recursive: true, mode: 0o700 });
|
|
175
|
+
while (dirty) {
|
|
176
|
+
dirty = false;
|
|
177
|
+
// Detached checkpoint: asynchronous I/O cannot mix later outcome/content into this generation.
|
|
178
|
+
const checkpoint: ExecutionRetentionManifest = JSON.parse(JSON.stringify(manifest));
|
|
179
|
+
const contents = [...buffers];
|
|
180
|
+
for (const [kind, bytes] of contents) {
|
|
181
|
+
const sha256 = digest(bytes);
|
|
182
|
+
const name = `${kind}-${sha256}.bin`;
|
|
183
|
+
if (!written.has(name)) {
|
|
184
|
+
await writeFile(join(root!, name), bytes, { flag: "wx", mode: 0o600 });
|
|
185
|
+
written.add(name);
|
|
186
|
+
}
|
|
187
|
+
checkpoint.content[kind] = { status: "retained", path: name, sha256, bytes: bytes.length };
|
|
188
|
+
}
|
|
189
|
+
await writeFile(
|
|
190
|
+
join(root!, "manifest.pending"),
|
|
191
|
+
JSON.stringify(buildExecutionRetentionManifest(checkpoint)) + "\n",
|
|
192
|
+
{ mode: 0o600 },
|
|
193
|
+
);
|
|
194
|
+
await rename(join(root!, "manifest.pending"), manifestPath!);
|
|
195
|
+
status = "retained";
|
|
196
|
+
}
|
|
197
|
+
} catch {
|
|
198
|
+
status = "lost";
|
|
199
|
+
loss("archive-write-failed");
|
|
200
|
+
buffers.clear();
|
|
201
|
+
release();
|
|
202
|
+
} finally {
|
|
203
|
+
running = undefined;
|
|
204
|
+
if (finished && !nativeTask) {
|
|
205
|
+
buffers.clear();
|
|
206
|
+
release();
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
const schedule = () => {
|
|
211
|
+
if (!admitted || status === "lost" || released) return;
|
|
212
|
+
dirty = true;
|
|
213
|
+
status = "pending";
|
|
214
|
+
if (!running) running = Promise.resolve().then(publish);
|
|
215
|
+
};
|
|
216
|
+
const observeSession = (reference: NonNullable<typeof nextNative>) => {
|
|
217
|
+
if (finished || !admitted || released || status === "lost") return;
|
|
218
|
+
if (nextNative && (nextNative.source !== reference.source || nextNative.value !== reference.value))
|
|
219
|
+
loss("native-session-reference-coalesced");
|
|
220
|
+
nextNative = {
|
|
221
|
+
source: reference.source,
|
|
222
|
+
value: reference.value,
|
|
223
|
+
...(reference.manager ? { manager: reference.manager } : {}),
|
|
224
|
+
};
|
|
225
|
+
if (nativeTask) return;
|
|
226
|
+
nativeTask = Promise.resolve()
|
|
227
|
+
.then(async () => {
|
|
228
|
+
while (nextNative) {
|
|
229
|
+
const current = nextNative;
|
|
230
|
+
nextNative = undefined;
|
|
231
|
+
const captured: NativeSessionCapture =
|
|
232
|
+
current.source === "herdr-id"
|
|
233
|
+
? {
|
|
234
|
+
observation: {
|
|
235
|
+
...missingNativeSession(),
|
|
236
|
+
source: current.source,
|
|
237
|
+
status: "missing" as const,
|
|
238
|
+
sessionId: current.value,
|
|
239
|
+
reason: "native-session-path-unavailable",
|
|
240
|
+
},
|
|
241
|
+
}
|
|
242
|
+
: await readNativeSession({
|
|
243
|
+
path: current.value,
|
|
244
|
+
source: current.source,
|
|
245
|
+
manager: current.manager,
|
|
246
|
+
expectedSessionId: pinnedSessionId,
|
|
247
|
+
expectedFile: pinnedFile,
|
|
248
|
+
});
|
|
249
|
+
if (captured.observation.sessionId && captured.fileIdentity) pinnedFile ??= captured.fileIdentity;
|
|
250
|
+
let observation = captured.observation;
|
|
251
|
+
if (pinnedSessionId && observation.sessionId && pinnedSessionId !== observation.sessionId) {
|
|
252
|
+
observation = {
|
|
253
|
+
...missingNativeSession(),
|
|
254
|
+
source: current.source,
|
|
255
|
+
status: "changed",
|
|
256
|
+
reason: "native-session-id-changed",
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
if (observation.sessionId) pinnedSessionId ??= observation.sessionId;
|
|
260
|
+
manifest.nativeSession = { ...observation };
|
|
261
|
+
manifest.native.sessionId = observation.sessionId;
|
|
262
|
+
manifest.native.sessionPath = observation.sessionPath;
|
|
263
|
+
manifest.native.branchLeafId = observation.branchLeafId;
|
|
264
|
+
buffers.delete("session");
|
|
265
|
+
if (captured.bytes && observation === captured.observation) buffers.set("session", captured.bytes);
|
|
266
|
+
if (observation.reason) loss(observation.reason);
|
|
267
|
+
schedule();
|
|
268
|
+
}
|
|
269
|
+
})
|
|
270
|
+
.catch(() => {
|
|
271
|
+
loss("native-session-observation-failed");
|
|
272
|
+
})
|
|
273
|
+
.finally(() => {
|
|
274
|
+
nativeTask = undefined;
|
|
275
|
+
schedule();
|
|
276
|
+
});
|
|
277
|
+
};
|
|
278
|
+
const drain = async (): Promise<RetentionStatus> => {
|
|
279
|
+
while (nativeTask || running) {
|
|
280
|
+
if (nativeTask) await nativeTask;
|
|
281
|
+
if (running) await running;
|
|
282
|
+
}
|
|
283
|
+
return { manifestPath, status };
|
|
284
|
+
};
|
|
285
|
+
schedule();
|
|
286
|
+
return {
|
|
287
|
+
/** Read-only native API reference; never derive IDs from the locator or a displayed name. */
|
|
288
|
+
observeSession,
|
|
289
|
+
observeSessionManager(manager: NativeSessionManager) {
|
|
290
|
+
try {
|
|
291
|
+
const value = manager.getSessionFile();
|
|
292
|
+
if (value) observeSession({ source: "pi-session-manager", value, manager });
|
|
293
|
+
else {
|
|
294
|
+
loss("native-session-not-persisted");
|
|
295
|
+
schedule();
|
|
296
|
+
}
|
|
297
|
+
} catch {
|
|
298
|
+
loss("native-session-manager-unavailable");
|
|
299
|
+
schedule();
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
status: (): RetentionStatus => {
|
|
303
|
+
const value = { manifestPath, status };
|
|
304
|
+
drains.set(value, drain);
|
|
305
|
+
return value;
|
|
306
|
+
},
|
|
307
|
+
native(value: Partial<Pick<ExecutionRetentionManifest["native"], "pid" | "paneId" | "agentName" | "tabId">>) {
|
|
308
|
+
if (finished) return;
|
|
309
|
+
for (const key of ["pid", "paneId", "agentName", "tabId"] as const) {
|
|
310
|
+
const item = value[key];
|
|
311
|
+
if (key === "pid") {
|
|
312
|
+
if (typeof item === "number" && Number.isSafeInteger(item) && item > 0) manifest.native.pid = item;
|
|
313
|
+
} else if (typeof item === "string" && item.length <= 4096) manifest.native[key] = item;
|
|
314
|
+
}
|
|
315
|
+
schedule();
|
|
316
|
+
},
|
|
317
|
+
capture(
|
|
318
|
+
kind: "stdout" | "stderr" | "paneSnapshot" | "checkReceipt" | "result",
|
|
319
|
+
bytes: Uint8Array,
|
|
320
|
+
replace = false,
|
|
321
|
+
) {
|
|
322
|
+
if (finished || !admitted || status === "lost") return;
|
|
323
|
+
const indivisible = kind === "checkReceipt" || kind === "result";
|
|
324
|
+
if (indivisible) replace = true;
|
|
325
|
+
const old = buffers.get(kind) ?? Buffer.alloc(0);
|
|
326
|
+
const available = indivisible ? LIMIT : LIMIT - total + (replace ? old.length : 0);
|
|
327
|
+
// Receipts and assembled results each have reserved capacity and are never partially published.
|
|
328
|
+
if (indivisible && bytes.length > available) {
|
|
329
|
+
loss(`${kind === "checkReceipt" ? "check-receipt" : kind}-not-retained-capacity`);
|
|
330
|
+
schedule();
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
const kept = Buffer.from(bytes.subarray(0, Math.max(0, available)));
|
|
334
|
+
if (kept.length !== bytes.length) loss(`${kind}-observation-dropped`);
|
|
335
|
+
if (kind === "paneSnapshot") loss("pane-snapshot-not-full-transcript");
|
|
336
|
+
const next = replace ? kept : Buffer.concat([old, kept]);
|
|
337
|
+
if (!indivisible) total += next.length - old.length;
|
|
338
|
+
buffers.set(kind, next);
|
|
339
|
+
schedule();
|
|
340
|
+
},
|
|
341
|
+
finish(outcome: NonNullable<ExecutionRetentionManifest["outcome"]>) {
|
|
342
|
+
if (finished) return;
|
|
343
|
+
manifest.outcome = {
|
|
344
|
+
code: outcome.code,
|
|
345
|
+
signal: outcome.signal,
|
|
346
|
+
timedOut: outcome.timedOut,
|
|
347
|
+
aborted: outcome.aborted,
|
|
348
|
+
truncated: outcome.truncated,
|
|
349
|
+
failed: outcome.failed,
|
|
350
|
+
};
|
|
351
|
+
manifest.state = "terminal";
|
|
352
|
+
if (outcome.truncated) loss("executor-output-truncated");
|
|
353
|
+
if (outcome.aborted || outcome.timedOut) loss("execution-interrupted");
|
|
354
|
+
finished = true;
|
|
355
|
+
schedule();
|
|
356
|
+
},
|
|
357
|
+
/** Observation-only diagnostic; never establishes successful execution or accepted work. */
|
|
358
|
+
coverage: () => ({ complete: false as const, losses: [...manifest.coverage.losses] }),
|
|
359
|
+
flush: drain,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
export type ExecutionRetention = ReturnType<typeof beginExecutionRetention>;
|
|
363
|
+
|
|
364
|
+
/** Public consumer check: neither a reference nor a wire status supplies the missing bytes. */
|
|
365
|
+
export function verifyRetainedBytes(
|
|
366
|
+
reference: RetainedContent,
|
|
367
|
+
bytes?: Uint8Array,
|
|
368
|
+
): "retained" | "missing" | "mismatch" {
|
|
369
|
+
if (reference.status !== "retained" || bytes === undefined) return "missing";
|
|
370
|
+
if (reference.bytes !== bytes.byteLength || reference.sha256 !== digest(bytes)) return "mismatch";
|
|
371
|
+
return "retained";
|
|
372
|
+
}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One cross-process file lock, shared by producer ledgers and the approvals store.
|
|
3
|
+
*
|
|
4
|
+
* **Extracted rather than copied (R-49).** The ledger has had this lock since fan-out made a second writer
|
|
5
|
+
* possible; the approvals store had an unlocked read-modify-write, so session 1 could load, session 2 could
|
|
6
|
+
* revoke, and session 1's next save would **restore the revoked entry** — falsifying a property
|
|
7
|
+
* `approval-store.ts` documents in so many words. The mitigation already existed twenty lines away. A
|
|
8
|
+
* second implementation is how a fix comes to contain a smaller copy of the bug it fixed, which has happened
|
|
9
|
+
* twice in this package (R-38's preview, ADR-0022's republish path), so there is exactly one of these.
|
|
10
|
+
*
|
|
11
|
+
* **The two callers want opposite failure behaviour, and that is the caller's decision, not this module's.**
|
|
12
|
+
* A ledger write that cannot take the lock must fail the delegation closed — a child running with granted
|
|
13
|
+
* capabilities and no audit line is the thing the ledger exists to prevent. An approvals write that cannot
|
|
14
|
+
* take the lock must NOT fail the work: the human already said yes, and the store is a convenience cache
|
|
15
|
+
* (ADR-0020). So this throws `LockTimeoutError`, distinguishable from every other failure, and each caller
|
|
16
|
+
* decides what that means.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { open, readFile, rm, stat } from "node:fs/promises";
|
|
20
|
+
import { randomUUID } from "node:crypto";
|
|
21
|
+
|
|
22
|
+
/** How long to wait for another writer to finish before giving up. Short: failing closed beats hanging. */
|
|
23
|
+
export const LOCK_TIMEOUT_MS = 2000;
|
|
24
|
+
/** A lock older than this is treated as abandoned by a killed process and broken. */
|
|
25
|
+
export const STALE_LOCK_MS = 10_000;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Raised only when the wait ran out. Its own type so a caller can tell "somebody else is writing" from
|
|
29
|
+
* "this filesystem rejected the write", which want different messages and, for the approvals store,
|
|
30
|
+
* different outcomes.
|
|
31
|
+
*/
|
|
32
|
+
export class LockTimeoutError extends Error {
|
|
33
|
+
constructor(label: string) {
|
|
34
|
+
super(`${label} is locked by another writer (waited ${LOCK_TIMEOUT_MS}ms)`);
|
|
35
|
+
this.name = "LockTimeoutError";
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface FileLockOptions {
|
|
40
|
+
readonly staleRecovery?: "age" | "disabled";
|
|
41
|
+
}
|
|
42
|
+
function lockPolicy(options: FileLockOptions | undefined): "age" | "disabled" {
|
|
43
|
+
if (options === undefined) return "age";
|
|
44
|
+
const invalid = (): never => {
|
|
45
|
+
throw new TypeError("invalid file lock options");
|
|
46
|
+
};
|
|
47
|
+
if (
|
|
48
|
+
options === null ||
|
|
49
|
+
typeof options !== "object" ||
|
|
50
|
+
Array.isArray(options) ||
|
|
51
|
+
![Object.prototype, null].includes(Object.getPrototypeOf(options))
|
|
52
|
+
)
|
|
53
|
+
return invalid();
|
|
54
|
+
const keys = Reflect.ownKeys(options);
|
|
55
|
+
if (keys.some((key) => key !== "staleRecovery")) return invalid();
|
|
56
|
+
if (!keys.length) return "age";
|
|
57
|
+
const field = Object.getOwnPropertyDescriptor(options, "staleRecovery")!;
|
|
58
|
+
if (!Object.hasOwn(field, "value") || !field.enumerable || !["age", "disabled"].includes(field.value))
|
|
59
|
+
return invalid();
|
|
60
|
+
return field.value;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Run `work` while holding an exclusive lock beside `path`.
|
|
65
|
+
* Explicit disabled recovery never reclaims by age/liveness. V4 selects it internally; an orphan
|
|
66
|
+
* requires separately authorized quiescent recovery, not a timer or automatic operator action.
|
|
67
|
+
* The age-based behavior described below remains the default for legacy callers.
|
|
68
|
+
*
|
|
69
|
+
* **Why a lock at all.** `O_APPEND` is atomic for one write to a regular file on a POSIX filesystem, and the
|
|
70
|
+
* guarantee does **not** hold on drvfs (`/mnt/c` under WSL2) or NFS — which is exactly where this project
|
|
71
|
+
* runs. The approvals store never had the guarantee anyway: read-modify-write is not one write.
|
|
72
|
+
*
|
|
73
|
+
* **A lock introduces its own failure mode and it is handled deliberately.** A process killed while holding
|
|
74
|
+
* the lock would otherwise block every future write forever, so a lock older than `STALE_LOCK_MS` is broken.
|
|
75
|
+
* Every delete proves ownership first (`removeIfOurs`) — see the token comment in the loop for the two
|
|
76
|
+
* mutual-exclusion breaks that came from not doing so, both reproduced across real OS processes.
|
|
77
|
+
*
|
|
78
|
+
* **What staleness actually measures, stated because it is not what it sounds like.** `STALE_LOCK_MS`
|
|
79
|
+
* compares the lock's mtime to now; it never checks whether the owner is alive. So *any* 10s stall of the
|
|
80
|
+
* holder hands the lock on — a `SIGSTOP`, a laptop suspend, swap thrash, a debugger breakpoint, a long GC
|
|
81
|
+
* pause. Measured on this project's own filesystems, no realistic `work()` comes near it: one ledger append
|
|
82
|
+
* is 0.1ms on ext4 and 21ms on drvfs, and a 10,000-entry `saveApproval` is 30ms / 97ms. Sixteen-way
|
|
83
|
+
* contention raises *waiters'* time, never the holder's — max hold measured at 49ms. So the threshold is
|
|
84
|
+
* two orders of magnitude clear of normal operation and is not guarded against abnormal suspension.
|
|
85
|
+
*
|
|
86
|
+
* The timeout is short *on purpose*: work refused because a file was busy is recoverable and loud, while
|
|
87
|
+
* work that hangs waiting for a lock is neither.
|
|
88
|
+
*/
|
|
89
|
+
export async function withFileLock<T>(
|
|
90
|
+
path: string,
|
|
91
|
+
label: string,
|
|
92
|
+
work: () => Promise<T>,
|
|
93
|
+
options?: FileLockOptions,
|
|
94
|
+
): Promise<T> {
|
|
95
|
+
const staleRecovery = lockPolicy(options); // Detached once, before I/O or any wait.
|
|
96
|
+
const lockPath = `${path}.lock`;
|
|
97
|
+
const deadline = Date.now() + LOCK_TIMEOUT_MS;
|
|
98
|
+
|
|
99
|
+
for (;;) {
|
|
100
|
+
// **A token, and the reason mutual exclusion depends on it (R-67).** `rm(path)` deletes whatever is at
|
|
101
|
+
// the path *now*, not the lock this process created — so the previous version broke its own invariant
|
|
102
|
+
// two ways, both reproduced across real OS processes:
|
|
103
|
+
//
|
|
104
|
+
// - the stale-break `stat` and `rm` are two awaits, so a process descheduled between them could delete
|
|
105
|
+
// a LIVE lock another waiter had just created, and then succeed at its own create: two holders;
|
|
106
|
+
// - worse, the `finally` removed the lock unconditionally. A holder whose lock had been broken out
|
|
107
|
+
// from under it still freed the NEW owner's lock on the way out — and the damage then propagated to
|
|
108
|
+
// processes that raced nothing and observed nothing wrong, which is how one break became a chain.
|
|
109
|
+
//
|
|
110
|
+
// Writing a unique token and re-reading it before every delete makes both inexpressible: this process
|
|
111
|
+
// only ever removes a file it can prove is its own. The docstring used to claim "whichever wins the
|
|
112
|
+
// exclusive create proceeds, which is correct because only one can" — true of the create and false of
|
|
113
|
+
// the delete, which is what made it convincing.
|
|
114
|
+
const token = `${process.pid}:${randomUUID()}`;
|
|
115
|
+
let handle: Awaited<ReturnType<typeof open>> | undefined;
|
|
116
|
+
try {
|
|
117
|
+
handle = await open(lockPath, "wx");
|
|
118
|
+
await handle.writeFile(`${token}\n`, "utf8");
|
|
119
|
+
} catch (error) {
|
|
120
|
+
// The handle may exist even though the WRITE failed (ENOSPC, EDQUOT, EFBIG). The old code jumped
|
|
121
|
+
// straight here and rethrew, so the already-created lock file was left on disk and its descriptor
|
|
122
|
+
// leaked to GC — an orphan that blocks every writer for a full STALE_LOCK_MS and feeds the EMFILE
|
|
123
|
+
// path below. Close and remove before doing anything else; `ours` is safe because we just made it.
|
|
124
|
+
if (handle) {
|
|
125
|
+
await handle.close().catch(() => undefined);
|
|
126
|
+
await removeIfOurs(lockPath, token);
|
|
127
|
+
handle = undefined;
|
|
128
|
+
}
|
|
129
|
+
const code = (error as { code?: string }).code;
|
|
130
|
+
if (code !== "EEXIST") throw error;
|
|
131
|
+
|
|
132
|
+
// Someone else holds it. Break it only if it is old enough to be abandoned — and only the exact file
|
|
133
|
+
// we judged, so a lock created in the gap survives.
|
|
134
|
+
if (staleRecovery === "age")
|
|
135
|
+
try {
|
|
136
|
+
const held = await stat(lockPath);
|
|
137
|
+
if (Date.now() - held.mtimeMs > STALE_LOCK_MS) {
|
|
138
|
+
const abandoned = await readFile(lockPath, "utf8").catch(() => undefined);
|
|
139
|
+
if (abandoned !== undefined) await removeIfOurs(lockPath, abandoned.trim());
|
|
140
|
+
}
|
|
141
|
+
} catch {
|
|
142
|
+
/* it vanished between the check and the stat — the next attempt will simply take it */
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (Date.now() >= deadline) throw new LockTimeoutError(label);
|
|
146
|
+
await new Promise((r) => setTimeout(r, 25));
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
let bodyFailed = false;
|
|
151
|
+
try {
|
|
152
|
+
return await work();
|
|
153
|
+
} catch (error) {
|
|
154
|
+
bodyFailed = true;
|
|
155
|
+
throw error;
|
|
156
|
+
} finally {
|
|
157
|
+
if (staleRecovery === "disabled") {
|
|
158
|
+
try {
|
|
159
|
+
await releaseDisabledLock(handle, lockPath, token);
|
|
160
|
+
} catch (error) {
|
|
161
|
+
if (!bodyFailed) throw error;
|
|
162
|
+
} // Preserve even a falsy primary rejection.
|
|
163
|
+
} else {
|
|
164
|
+
await handle.close().catch(() => undefined);
|
|
165
|
+
// Legacy age policy remains best effort; never remove a demonstrably different token.
|
|
166
|
+
await removeIfOurs(lockPath, token);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/** Disabled ownership cannot silently manufacture an indefinite orphan after a successful body.
|
|
173
|
+
* Try token-checked removal even if close failed; report the first failure after both attempts.
|
|
174
|
+
* Appended bytes are not rolled back, and a primary body error takes precedence at the caller. */
|
|
175
|
+
async function releaseDisabledLock(
|
|
176
|
+
handle: Awaited<ReturnType<typeof open>>,
|
|
177
|
+
lockPath: string,
|
|
178
|
+
token: string,
|
|
179
|
+
): Promise<void> {
|
|
180
|
+
let failure: { error: unknown } | null = null;
|
|
181
|
+
try {
|
|
182
|
+
await handle.close();
|
|
183
|
+
} catch (error) {
|
|
184
|
+
failure = { error };
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
await removeIfOurs(lockPath, token, true);
|
|
188
|
+
} catch (error) {
|
|
189
|
+
failure ??= { error };
|
|
190
|
+
}
|
|
191
|
+
if (failure) throw failure.error;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Delete the lock only if it still holds `token`.
|
|
196
|
+
*
|
|
197
|
+
* Read-then-delete is itself two operations, so this is not atomic either — but it narrows the window from
|
|
198
|
+
* "the whole of `work()`" to "between a read and an unlink", and it removes the *systematic* break entirely:
|
|
199
|
+
* a process can no longer delete a lock it demonstrably never owned.
|
|
200
|
+
*/
|
|
201
|
+
async function removeIfOurs(lockPath: string, token: string, strict = false): Promise<void> {
|
|
202
|
+
try {
|
|
203
|
+
const held = await readFile(lockPath, "utf8");
|
|
204
|
+
if (held.trim() !== token) return;
|
|
205
|
+
await rm(lockPath, { force: true });
|
|
206
|
+
} catch (error) {
|
|
207
|
+
if (strict) throw error; // No ownership inference or force-delete after a failed read.
|
|
208
|
+
/* Legacy: already gone, or unreadable — this process must not force removal. */
|
|
209
|
+
}
|
|
210
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
interface Finalizer {
|
|
2
|
+
label: string;
|
|
3
|
+
run: () => void | Promise<void>;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
const FINALIZER_ERRORS = Symbol("pi-daddy.finalizer-errors");
|
|
7
|
+
|
|
8
|
+
type ErrorWithFinalizers = Error & { [FINALIZER_ERRORS]?: unknown[] };
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Run every finalizer without allowing one of their failures to replace the operation's primary error.
|
|
12
|
+
*
|
|
13
|
+
* Error identity is preserved when possible: refusal codes and `instanceof` checks are part of callers'
|
|
14
|
+
* control flow. Finalizer failures are attached and added to the primary message instead of wrapping it.
|
|
15
|
+
*/
|
|
16
|
+
export async function runWithFinalizers<T>(operation: () => Promise<T>, finalizers: readonly Finalizer[]): Promise<T> {
|
|
17
|
+
let primaryPresent = false;
|
|
18
|
+
let primary: unknown;
|
|
19
|
+
let result: T | undefined;
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
result = await operation();
|
|
23
|
+
} catch (error) {
|
|
24
|
+
primaryPresent = true;
|
|
25
|
+
primary = error;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const failures: Array<{ label: string; error: unknown }> = [];
|
|
29
|
+
for (const finalizer of finalizers) {
|
|
30
|
+
try {
|
|
31
|
+
await finalizer.run();
|
|
32
|
+
} catch (error) {
|
|
33
|
+
failures.push({ label: finalizer.label, error });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (primaryPresent) {
|
|
38
|
+
if (failures.length > 0) throw appendFinalizerFailures(primary, failures);
|
|
39
|
+
throw primary;
|
|
40
|
+
}
|
|
41
|
+
if (failures.length === 1) throw failures[0].error;
|
|
42
|
+
if (failures.length > 1) {
|
|
43
|
+
throw new AggregateError(
|
|
44
|
+
failures.map((failure) => failure.error),
|
|
45
|
+
failures.map((failure) => `${failure.label}: ${String(failure.error)}`).join("; "),
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
return result as T;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** True when a primary error retained a finalizer failure of the requested kind. */
|
|
52
|
+
export function hasFinalizerError(error: unknown, predicate: (value: unknown) => boolean): boolean {
|
|
53
|
+
return error instanceof Error && (error as ErrorWithFinalizers)[FINALIZER_ERRORS]?.some(predicate) === true;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function appendFinalizerFailures(
|
|
57
|
+
primary: unknown,
|
|
58
|
+
failures: ReadonlyArray<{ label: string; error: unknown }>,
|
|
59
|
+
): unknown {
|
|
60
|
+
if (primary instanceof Error) {
|
|
61
|
+
const target = primary as ErrorWithFinalizers;
|
|
62
|
+
try {
|
|
63
|
+
const prior = target[FINALIZER_ERRORS] ?? [];
|
|
64
|
+
Object.defineProperty(target, FINALIZER_ERRORS, {
|
|
65
|
+
configurable: true,
|
|
66
|
+
value: [...prior, ...failures.map((failure) => failure.error)],
|
|
67
|
+
});
|
|
68
|
+
target.message = [
|
|
69
|
+
target.message,
|
|
70
|
+
...failures.map((failure) => `${failure.label}: ${String(failure.error)}`),
|
|
71
|
+
].join("; ");
|
|
72
|
+
return target;
|
|
73
|
+
} catch {
|
|
74
|
+
// A frozen foreign error cannot be annotated. Keep it as the first AggregateError member and cause.
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return new AggregateError(
|
|
78
|
+
[primary, ...failures.map((failure) => failure.error)],
|
|
79
|
+
[String(primary), ...failures.map((failure) => `${failure.label}: ${String(failure.error)}`)].join("; "),
|
|
80
|
+
{ cause: primary },
|
|
81
|
+
);
|
|
82
|
+
}
|