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
|
@@ -1,18 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
1
|
+
import type { Delegation } from "../src/kernel/delegate.ts";
|
|
2
|
+
import {
|
|
3
|
+
beginExecutionRetention,
|
|
4
|
+
retentionConfigurationDigest,
|
|
5
|
+
type RetentionStatus,
|
|
6
|
+
} from "../src/governance/execution-retention.ts";
|
|
7
|
+
import { appendLedgerEvent, buildChildLifecycleEvent } from "../src/governance/ledger.ts";
|
|
8
|
+
import { hasFinalizerError } from "../src/governance/finalization.ts";
|
|
9
|
+
import { mergeChildEnv } from "../src/kernel/propagation.ts";
|
|
10
|
+
import type { Capability } from "../src/kernel/resolve.ts";
|
|
11
|
+
import {
|
|
12
|
+
DEFAULT_KILL_GRACE_MS,
|
|
13
|
+
ENV_CHILD_IDLE_TIMEOUT,
|
|
14
|
+
ENV_CHILD_TIMEOUT,
|
|
15
|
+
idleTimeoutFromEnv,
|
|
16
|
+
runChild,
|
|
17
|
+
timeoutFromEnv,
|
|
18
|
+
} from "../src/kernel/run-child.ts";
|
|
19
|
+
import { activitySessionFor } from "../src/executors/activity-session.ts";
|
|
20
|
+
import { processTreeActivity } from "../src/executors/process-activity.ts";
|
|
21
|
+
import { resolveWorkspace } from "../src/executors/herdr-cli.ts";
|
|
22
|
+
import { HerdrWriterCloseError, runHerdrPane } from "../src/executors/run-herdr.ts";
|
|
23
|
+
import { GovernanceRefusal, refusal, type StructuredRefusal } from "../src/kernel/refusals.ts";
|
|
12
24
|
import { ENV_HERDR_KEEP_PANE, type GrantsSession } from "./session.ts";
|
|
13
25
|
import { releaseDelegationWorkspace, type PreparedWorkspace } from "./workspace-runtime.ts";
|
|
14
|
-
import {
|
|
15
|
-
import { ActivityTimelineRecorder, ENV_ACTIVITY_PARENT_TASK } from "../src/activity-timeline.ts";
|
|
26
|
+
import { ActivityTimelineRecorder, ENV_ACTIVITY_PARENT_TASK } from "../src/products/activity-timeline.ts";
|
|
16
27
|
export interface DelegationOutcome {
|
|
17
28
|
ok: boolean;
|
|
18
29
|
text: string;
|
|
@@ -61,8 +72,10 @@ export async function appendAfterRuntimeRecord<T>(
|
|
|
61
72
|
|
|
62
73
|
/** A failed writer-tab close may be secondary to the executor error that triggered cleanup. */
|
|
63
74
|
export function isHerdrWriterCloseFailure(error: unknown): boolean {
|
|
64
|
-
return
|
|
65
|
-
|
|
75
|
+
return (
|
|
76
|
+
error instanceof HerdrWriterCloseError ||
|
|
77
|
+
hasFinalizerError(error, (value) => value instanceof HerdrWriterCloseError)
|
|
78
|
+
);
|
|
66
79
|
}
|
|
67
80
|
export interface ChildProgressUpdate {
|
|
68
81
|
chunk?: string;
|
|
@@ -81,17 +94,14 @@ export interface ChildProgressUpdate {
|
|
|
81
94
|
* has already run, so failing closed there prevents nothing and used to discard completed work while
|
|
82
95
|
* blaming "ledger" (R-99). The failure is reported alongside the outcome instead of replacing it.
|
|
83
96
|
*/
|
|
84
|
-
export function executePlannedChild(input:
|
|
85
|
-
return withOrdinaryChild(input, signal => executeChildBody({ ...input, signal }));
|
|
86
|
-
}
|
|
87
|
-
async function executeChildBody(input: {
|
|
97
|
+
export async function executePlannedChild(input: {
|
|
88
98
|
session: GrantsSession;
|
|
89
99
|
plan: Delegation;
|
|
90
100
|
agent?: string;
|
|
91
101
|
childId: string;
|
|
92
102
|
executionId: string;
|
|
93
103
|
parentExecutionId: string | null;
|
|
94
|
-
toolCallId?: string;
|
|
104
|
+
toolCallId?: string;
|
|
95
105
|
cwd: string;
|
|
96
106
|
preparedWorkspace?: PreparedWorkspace;
|
|
97
107
|
signal?: AbortSignal;
|
|
@@ -99,301 +109,438 @@ async function executeChildBody(input: {
|
|
|
99
109
|
}): Promise<DelegationOutcome> {
|
|
100
110
|
const { session, plan, childId, executionId, parentExecutionId, preparedWorkspace, signal, onProgress } = input;
|
|
101
111
|
const ledgerPath = session.ledgerPath;
|
|
102
|
-
let activityParent: string | undefined,
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
state: "starting",
|
|
117
|
-
executor: session.executor.kind,
|
|
118
|
-
deadlineAt,
|
|
119
|
-
correlation: plan.correlation,
|
|
120
|
-
now: startedAt,
|
|
121
|
-
}),
|
|
122
|
-
);
|
|
123
|
-
} catch (error) {
|
|
124
|
-
await releaseDelegationWorkspace({
|
|
125
|
-
prepared: preparedWorkspace, childId, executionId, parentExecutionId, reason: "ledger-failed",
|
|
126
|
-
});
|
|
127
|
-
throw error;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
const workAttempt = await beginDeclaredWorkAttempt({
|
|
131
|
-
session, plan, childId, executionId, parentExecutionId, toolCallId: input.toolCallId, declaredWork: input.declaredWork,
|
|
132
|
-
preparedWorkspace, configuredTimeoutMs, startedAt,
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
// The recorded deadline and executor timer are one fact. Waiting for the strict starting append consumes
|
|
136
|
-
// the budget; handing the child a fresh full timeout would leave it live after the dashboard truthfully
|
|
137
|
-
// marked that deadline incomplete.
|
|
138
|
-
const remainingTimeoutMs = Math.max(1, Date.parse(deadlineAt) - Date.now());
|
|
139
|
-
const terminationGraceMs = Math.min(DEFAULT_KILL_GRACE_MS, Math.max(1, Math.floor(remainingTimeoutMs / 10)));
|
|
140
|
-
const cwd = preparedWorkspace?.workspace.root ?? input.cwd;
|
|
141
|
-
const leaseAbort = new AbortController();
|
|
142
|
-
const writerLease = preparedWorkspace?.lease.access === "write" ? preparedWorkspace.lease : undefined;
|
|
143
|
-
// Tracked as a FACT, not only as an abort: "the kernel lock protecting this workspace evaporated under
|
|
144
|
-
// a live governed writer" and "the operator pressed stop" produced byte-identical reasons before, and a
|
|
145
|
-
// count of lost leases is exactly the number an operator auditing this feature needs (R-103).
|
|
146
|
-
let leaseLost = false;
|
|
147
|
-
writerLease?.lost.then(() => { leaseLost = true; leaseAbort.abort(); });
|
|
148
|
-
const executionSignal = signal
|
|
149
|
-
? AbortSignal.any([signal, leaseAbort.signal])
|
|
150
|
-
: writerLease ? leaseAbort.signal : undefined;
|
|
151
|
-
const retention = beginExecutionRetention({ executionId, parentExecutionId, childId,
|
|
152
|
-
toolCallId: input.toolCallId ?? null, executor: session.executor.kind, taskDigest: plan.taskDigest,
|
|
153
|
-
definitionDigest: plan.definitionDigest?.sha256 ?? null,
|
|
154
|
-
configurationDigest: retentionConfigurationDigest({ args: plan.args, effective: plan.effective, timeoutMs: configuredTimeoutMs }),
|
|
155
|
-
workspaceId: preparedWorkspace?.workspace.workspaceId ?? null });
|
|
156
|
-
const sessionFlag = plan.args.indexOf("--session");
|
|
157
|
-
if (sessionFlag >= 0) retention.observeSession({ source: "pi-session-file", value: plan.args[sessionFlag + 1] });
|
|
158
|
-
let releaseReason = "failed";
|
|
159
|
-
let retainWriterLease = false;
|
|
160
|
-
let terminalAttempted = false, workTerminalAttempted = false;
|
|
161
|
-
const teardownFailures: string[] = [];
|
|
162
|
-
let runtimeRecord: Promise<void> | undefined;
|
|
163
|
-
const recordRunning = (executor: "process" | "herdr", pane?: { id: string; agentName: string }): void => {
|
|
164
|
-
if (!ledgerPath) return;
|
|
165
|
-
try {
|
|
166
|
-
runtimeRecord = appendLedgerEvent(
|
|
167
|
-
{
|
|
168
|
-
path: ledgerPath,
|
|
169
|
-
strict: false,
|
|
170
|
-
onFailure: (cause) => teardownFailures.push(`child runtime identity record failed: ${String(cause)}`),
|
|
171
|
-
},
|
|
172
|
-
buildChildLifecycleEvent({
|
|
173
|
-
executionId, parentExecutionId, childId, state: "running", executor, deadlineAt,
|
|
174
|
-
...(pane ? { herdrPaneId: pane.id, herdrAgentName: pane.agentName } : {}),
|
|
175
|
-
correlation: plan.correlation, now: new Date(),
|
|
176
|
-
}),
|
|
177
|
-
);
|
|
178
|
-
} catch (error) {
|
|
179
|
-
teardownFailures.push(`child runtime identity record failed: ${String(error)}`);
|
|
112
|
+
let activityParent: string | undefined,
|
|
113
|
+
activity = new ActivityTimelineRecorder(input.cwd),
|
|
114
|
+
activityStarted = false,
|
|
115
|
+
activityFinished = false;
|
|
116
|
+
try {
|
|
117
|
+
const env = { ...process.env };
|
|
118
|
+
for (const name of [
|
|
119
|
+
"PI_DADDY_ACTIVITY_PATH",
|
|
120
|
+
"PI_DADDY_ACTIVITY_ROOT",
|
|
121
|
+
"PI_DADDY_ACTIVITY_TASK",
|
|
122
|
+
ENV_ACTIVITY_PARENT_TASK,
|
|
123
|
+
]) {
|
|
124
|
+
const value = plan.env[name];
|
|
125
|
+
if (value) env[name] = value;
|
|
180
126
|
}
|
|
181
|
-
|
|
127
|
+
activity = new ActivityTimelineRecorder(input.cwd, env);
|
|
128
|
+
activityParent = plan.env[ENV_ACTIVITY_PARENT_TASK];
|
|
129
|
+
} catch {}
|
|
182
130
|
try {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
recordRunning("herdr", { id: paneId, agentName });
|
|
205
|
-
onProgress?.({ paneId, agentName, state: "running" });
|
|
206
|
-
},
|
|
207
|
-
onTab: preparedWorkspace ? (tabId) => preparedWorkspace.lease.attachHerdrTab(tabId) : undefined,
|
|
208
|
-
onNativeTab: (tabId) => retention.native({ tabId }),
|
|
209
|
-
onSnapshot: onProgress ? (snapshot) => onProgress({ snapshot }) : undefined,
|
|
210
|
-
})
|
|
211
|
-
: await runChild({
|
|
212
|
-
command: writerLease ? "setpriv" : "pi",
|
|
213
|
-
args: writerLease ? ["--pdeathsig", "KILL", "--", "pi", ...plan.args] : plan.args,
|
|
214
|
-
env: mergeChildEnv(process.env, plan.env),
|
|
215
|
-
cwd,
|
|
216
|
-
signal: executionSignal,
|
|
217
|
-
// SIGTERM gets only grace that fits INSIDE the recorded deadline. The independent hard timer
|
|
218
|
-
// prevents a delayed soft-timeout callback from starting a fresh grace period beyond that bound.
|
|
219
|
-
timeoutMs: Math.max(1, remainingTimeoutMs - terminationGraceMs),
|
|
220
|
-
hardDeadlineAt: Date.parse(deadlineAt),
|
|
221
|
-
onOutput: onProgress ? (chunk) => onProgress({ chunk }) : undefined,
|
|
222
|
-
onObservation: (stream, bytes) => retention.capture(stream, bytes),
|
|
223
|
-
onSpawn: (pid) => {
|
|
224
|
-
// Lease attachment is a security hook and may fail the spawn. The shared reporters isolate
|
|
225
|
-
// display exceptions before they reach this callback; runChild deliberately kills on any error
|
|
226
|
-
// here, so presentation must never be added directly without that reporter boundary.
|
|
227
|
-
preparedWorkspace?.lease.attachProcess(pid);
|
|
228
|
-
retention.native({ pid });
|
|
229
|
-
recordRunning("process");
|
|
230
|
-
onProgress?.({ state: "running" });
|
|
231
|
-
},
|
|
232
|
-
});
|
|
131
|
+
await activity.childStarted(
|
|
132
|
+
executionId,
|
|
133
|
+
activityParent,
|
|
134
|
+
input.agent ?? "governed child",
|
|
135
|
+
(plan.args.at(-1) ?? "").trimStart(),
|
|
136
|
+
);
|
|
137
|
+
activityStarted = true;
|
|
138
|
+
} catch {}
|
|
139
|
+
const configuredTimeoutMs = timeoutFromEnv(process.env[ENV_CHILD_TIMEOUT]);
|
|
140
|
+
// PR 3e: the working bound is inactivity; `deadlineAt` below is the runaway ceiling. Every child gets a pi session
|
|
141
|
+
// file so the parent can see it working when its stdout is quiet (pi appends each message and tool result to it).
|
|
142
|
+
const configuredIdleMs = idleTimeoutFromEnv(process.env[ENV_CHILD_IDLE_TIMEOUT]);
|
|
143
|
+
const activitySession = await activitySessionFor(plan.args, executionId);
|
|
144
|
+
// Disposed on every path (review finding: it leaked on every throw), except when the operator keeps a Herdr pane,
|
|
145
|
+
// where the interactive pi in that pane is still alive and still appending to this file.
|
|
146
|
+
const keepPaneRequested = session.executor.kind === "herdr" && process.env[ENV_HERDR_KEEP_PANE] === "1";
|
|
147
|
+
try {
|
|
148
|
+
return await executeWithActivitySession();
|
|
149
|
+
} finally {
|
|
150
|
+
if (!keepPaneRequested) await activitySession.dispose();
|
|
151
|
+
}
|
|
233
152
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
153
|
+
async function executeWithActivitySession(): Promise<DelegationOutcome> {
|
|
154
|
+
const args = activitySession.args;
|
|
155
|
+
// The process executor adds a second signal that is live during a tool call: the child tree's CPU time and
|
|
156
|
+
// descendants (`process-activity.ts`). Herdr children are started by the daemon, so their pid is not known here.
|
|
157
|
+
let childPid: number | undefined;
|
|
158
|
+
const probe = async () => {
|
|
159
|
+
const [file, tree] = await Promise.all([
|
|
160
|
+
activitySession.probe(),
|
|
161
|
+
childPid === undefined ? undefined : processTreeActivity(childPid),
|
|
162
|
+
]);
|
|
163
|
+
return file === undefined && tree === undefined ? undefined : `${file ?? "-"}|${tree ?? "-"}`;
|
|
164
|
+
};
|
|
165
|
+
const startedAt = new Date();
|
|
166
|
+
const deadlineAt = new Date(startedAt.getTime() + configuredTimeoutMs).toISOString();
|
|
243
167
|
if (ledgerPath) {
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
168
|
+
try {
|
|
169
|
+
await appendLedgerEvent(
|
|
170
|
+
{ path: ledgerPath, strict: true },
|
|
171
|
+
buildChildLifecycleEvent({
|
|
172
|
+
executionId,
|
|
173
|
+
parentExecutionId,
|
|
174
|
+
childId,
|
|
175
|
+
state: "starting",
|
|
176
|
+
executor: session.executor.kind,
|
|
177
|
+
deadlineAt,
|
|
178
|
+
idleTimeoutMs: configuredIdleMs,
|
|
179
|
+
correlation: plan.correlation,
|
|
180
|
+
now: startedAt,
|
|
181
|
+
}),
|
|
182
|
+
);
|
|
183
|
+
} catch (error) {
|
|
184
|
+
await releaseDelegationWorkspace({
|
|
185
|
+
prepared: preparedWorkspace,
|
|
186
|
+
childId,
|
|
257
187
|
executionId,
|
|
258
188
|
parentExecutionId,
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
189
|
+
reason: "ledger-failed",
|
|
190
|
+
});
|
|
191
|
+
throw error;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// The recorded deadline and executor timer are one fact. Waiting for the strict starting append consumes
|
|
195
|
+
// the budget; handing the child a fresh full timeout would leave it live after the dashboard truthfully
|
|
196
|
+
// marked that deadline incomplete.
|
|
197
|
+
const remainingTimeoutMs = Math.max(1, Date.parse(deadlineAt) - Date.now());
|
|
198
|
+
const terminationGraceMs = Math.min(DEFAULT_KILL_GRACE_MS, Math.max(1, Math.floor(remainingTimeoutMs / 10)));
|
|
199
|
+
const cwd = preparedWorkspace?.workspace.root ?? input.cwd;
|
|
200
|
+
const leaseAbort = new AbortController();
|
|
201
|
+
const writerLease = preparedWorkspace?.lease.access === "write" ? preparedWorkspace.lease : undefined;
|
|
202
|
+
// Tracked as a FACT, not only as an abort: "the kernel lock protecting this workspace evaporated under
|
|
203
|
+
// a live governed writer" and "the operator pressed stop" produced byte-identical reasons before, and a
|
|
204
|
+
// count of lost leases is exactly the number an operator auditing this feature needs (R-103).
|
|
205
|
+
let leaseLost = false;
|
|
206
|
+
writerLease?.lost.then(() => {
|
|
207
|
+
leaseLost = true;
|
|
208
|
+
leaseAbort.abort();
|
|
209
|
+
});
|
|
210
|
+
const executionSignal = signal
|
|
211
|
+
? AbortSignal.any([signal, leaseAbort.signal])
|
|
212
|
+
: writerLease
|
|
213
|
+
? leaseAbort.signal
|
|
214
|
+
: undefined;
|
|
215
|
+
const retention = beginExecutionRetention({
|
|
216
|
+
executionId,
|
|
217
|
+
parentExecutionId,
|
|
218
|
+
childId,
|
|
219
|
+
toolCallId: input.toolCallId ?? null,
|
|
220
|
+
executor: session.executor.kind,
|
|
221
|
+
taskDigest: plan.taskDigest,
|
|
222
|
+
definitionDigest: plan.definitionDigest?.sha256 ?? null,
|
|
223
|
+
configurationDigest: retentionConfigurationDigest({
|
|
224
|
+
args: plan.args,
|
|
225
|
+
effective: plan.effective,
|
|
226
|
+
timeoutMs: configuredTimeoutMs,
|
|
227
|
+
}),
|
|
228
|
+
workspaceId: preparedWorkspace?.workspace.workspaceId ?? null,
|
|
229
|
+
});
|
|
230
|
+
const sessionFlag = plan.args.indexOf("--session");
|
|
231
|
+
if (sessionFlag >= 0) retention.observeSession({ source: "pi-session-file", value: plan.args[sessionFlag + 1] });
|
|
232
|
+
let releaseReason = "failed";
|
|
233
|
+
let retainWriterLease = false;
|
|
234
|
+
let terminalAttempted = false;
|
|
235
|
+
const teardownFailures: string[] = [];
|
|
236
|
+
let runtimeRecord: Promise<void> | undefined;
|
|
237
|
+
const recordRunning = (executor: "process" | "herdr", pane?: { id: string; agentName: string }): void => {
|
|
238
|
+
if (!ledgerPath) return;
|
|
239
|
+
try {
|
|
240
|
+
runtimeRecord = appendLedgerEvent(
|
|
241
|
+
{
|
|
242
|
+
path: ledgerPath,
|
|
243
|
+
strict: false,
|
|
244
|
+
onFailure: (cause) => teardownFailures.push(`child runtime identity record failed: ${String(cause)}`),
|
|
245
|
+
},
|
|
246
|
+
buildChildLifecycleEvent({
|
|
247
|
+
executionId,
|
|
248
|
+
parentExecutionId,
|
|
249
|
+
childId,
|
|
250
|
+
state: "running",
|
|
251
|
+
executor,
|
|
252
|
+
deadlineAt,
|
|
253
|
+
idleTimeoutMs: configuredIdleMs,
|
|
254
|
+
...(pane ? { herdrPaneId: pane.id, herdrAgentName: pane.agentName } : {}),
|
|
255
|
+
correlation: plan.correlation,
|
|
256
|
+
now: new Date(),
|
|
257
|
+
}),
|
|
258
|
+
);
|
|
259
|
+
} catch (error) {
|
|
260
|
+
teardownFailures.push(`child runtime identity record failed: ${String(error)}`);
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
try {
|
|
264
|
+
const output =
|
|
265
|
+
session.executor.kind === "herdr"
|
|
266
|
+
? await runHerdrPane({
|
|
267
|
+
args: args.slice(0, -1),
|
|
268
|
+
prompt: args[args.length - 1].trimStart(),
|
|
269
|
+
env: plan.env,
|
|
270
|
+
cwd,
|
|
271
|
+
name: `${input.agent ?? "delegate"}-${childId}`,
|
|
272
|
+
workspace: resolveWorkspace(process.env),
|
|
273
|
+
signal: executionSignal,
|
|
274
|
+
timeoutMs: remainingTimeoutMs,
|
|
275
|
+
idleTimeoutMs: configuredIdleMs,
|
|
276
|
+
activityProbe: activitySession.probe, // Herdr: session file plus pane text when a display is attached
|
|
277
|
+
keepPane: writerLease ? false : process.env[ENV_HERDR_KEEP_PANE] === "1",
|
|
278
|
+
closeOnSettle: Boolean(writerLease),
|
|
279
|
+
onPane: (paneId, agentName) => {
|
|
280
|
+
retention.native({ paneId, agentName });
|
|
281
|
+
onProgress?.({ paneId, agentName, state: "starting" });
|
|
282
|
+
},
|
|
283
|
+
onObservation: (bytes) => retention.capture("paneSnapshot", bytes, true),
|
|
284
|
+
onSessionReference: (reference) => retention.observeSession(reference),
|
|
285
|
+
onRunning: (paneId, agentName) => {
|
|
286
|
+
// Record first: runHerdrPane isolates this display callback, so a renderer exception after the
|
|
287
|
+
// observation cannot suppress the authoritative running event.
|
|
288
|
+
recordRunning("herdr", { id: paneId, agentName });
|
|
289
|
+
onProgress?.({ paneId, agentName, state: "running" });
|
|
290
|
+
},
|
|
291
|
+
onTab: preparedWorkspace ? (tabId) => preparedWorkspace.lease.attachHerdrTab(tabId) : undefined,
|
|
292
|
+
onNativeTab: (tabId) => retention.native({ tabId }),
|
|
293
|
+
onSnapshot: onProgress ? (snapshot) => onProgress({ snapshot }) : undefined,
|
|
294
|
+
})
|
|
295
|
+
: await runChild({
|
|
296
|
+
command: writerLease ? "setpriv" : "pi",
|
|
297
|
+
args: writerLease ? ["--pdeathsig", "KILL", "--", "pi", ...args] : args,
|
|
298
|
+
env: mergeChildEnv(process.env, plan.env),
|
|
299
|
+
cwd,
|
|
300
|
+
signal: executionSignal,
|
|
301
|
+
// SIGTERM gets only grace that fits INSIDE the recorded deadline. The independent hard timer
|
|
302
|
+
// prevents a delayed soft-timeout callback from starting a fresh grace period beyond that bound.
|
|
303
|
+
timeoutMs: Math.max(1, remainingTimeoutMs - terminationGraceMs),
|
|
304
|
+
hardDeadlineAt: Date.parse(deadlineAt),
|
|
305
|
+
idleTimeoutMs: configuredIdleMs,
|
|
306
|
+
activityProbe: probe,
|
|
307
|
+
onOutput: onProgress ? (chunk) => onProgress({ chunk }) : undefined,
|
|
308
|
+
onObservation: (stream, bytes) => retention.capture(stream, bytes),
|
|
309
|
+
onSpawn: (pid) => {
|
|
310
|
+
childPid = pid;
|
|
311
|
+
// Lease attachment is a security hook and may fail the spawn. The shared reporters isolate
|
|
312
|
+
// display exceptions before they reach this callback; runChild deliberately kills on any error
|
|
313
|
+
// here, so presentation must never be added directly without that reporter boundary.
|
|
314
|
+
preparedWorkspace?.lease.attachProcess(pid);
|
|
315
|
+
retention.native({ pid });
|
|
316
|
+
recordRunning("process");
|
|
317
|
+
onProgress?.({ state: "running" });
|
|
318
|
+
},
|
|
319
|
+
});
|
|
320
|
+
|
|
321
|
+
if (sessionFlag >= 0) retention.observeSession({ source: "pi-session-file", value: plan.args[sessionFlag + 1] });
|
|
322
|
+
retention.capture("result", Buffer.from(output.text), true);
|
|
323
|
+
const childFailed = Boolean(output.spawnError || output.aborted || output.timedOut || output.code !== 0);
|
|
324
|
+
retention.finish({
|
|
325
|
+
code: output.code,
|
|
326
|
+
signal: output.signal ?? null,
|
|
327
|
+
timedOut: output.timedOut,
|
|
328
|
+
aborted: output.aborted,
|
|
329
|
+
truncated: output.truncated,
|
|
330
|
+
failed: childFailed,
|
|
331
|
+
});
|
|
332
|
+
releaseReason = output.timedOut ? "timeout" : output.aborted ? "cancelled" : childFailed ? "failed" : "completed";
|
|
333
|
+
if (activityStarted)
|
|
334
|
+
try {
|
|
335
|
+
await activity.childFinished(
|
|
336
|
+
executionId,
|
|
337
|
+
activityParent,
|
|
338
|
+
input.agent ?? "governed child",
|
|
339
|
+
output.text,
|
|
340
|
+
childFailed ? (output.aborted ? "cancelled" : "failed") : "completed",
|
|
341
|
+
);
|
|
342
|
+
activityFinished = true;
|
|
343
|
+
} catch {
|
|
344
|
+
/* observation does not control execution */
|
|
345
|
+
}
|
|
346
|
+
if (ledgerPath) {
|
|
347
|
+
terminalAttempted = true;
|
|
348
|
+
await appendAfterRuntimeRecord(runtimeRecord, () =>
|
|
349
|
+
appendLedgerEvent(
|
|
350
|
+
{
|
|
351
|
+
path: ledgerPath,
|
|
352
|
+
// NOT strict, and this line is the whole point of R-99. The child has already run: failing
|
|
353
|
+
// closed here prevents nothing and used to discard a completed child's entire output while
|
|
354
|
+
// blaming "ledger" — under `delegate_all` it discarded every sibling's work too. The docstring
|
|
355
|
+
// above, `docs/SPEC.md` and the ADR-0034 amendment all promised this; only the comment changed.
|
|
356
|
+
// `capability_decision`, which PROVISIONS, still fails closed.
|
|
357
|
+
strict: false,
|
|
358
|
+
onFailure: (cause) => teardownFailures.push(`child lifecycle record failed: ${String(cause)}`),
|
|
359
|
+
},
|
|
360
|
+
buildChildLifecycleEvent({
|
|
361
|
+
executionId,
|
|
362
|
+
parentExecutionId,
|
|
363
|
+
childId,
|
|
364
|
+
state: childFailed ? "failed" : "completed",
|
|
365
|
+
executor: session.executor.kind,
|
|
366
|
+
exitCode: output.code,
|
|
367
|
+
signal: output.signal ?? null,
|
|
368
|
+
timedOut: output.timedOut,
|
|
369
|
+
aborted: output.aborted,
|
|
370
|
+
truncated: output.truncated,
|
|
371
|
+
idleTimeoutMs: configuredIdleMs,
|
|
372
|
+
reason:
|
|
373
|
+
output.spawnError ?? (output.timedOut ? (output.idle ? "idle-timeout" : "wall-clock") : undefined),
|
|
374
|
+
correlation: plan.correlation,
|
|
375
|
+
now: new Date(),
|
|
376
|
+
}),
|
|
377
|
+
),
|
|
378
|
+
);
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
const leaseWasLost = writerLease ? leaseLost : false;
|
|
382
|
+
if (childFailed) {
|
|
383
|
+
const why = output.spawnError
|
|
384
|
+
? `could not be started: ${output.spawnError}`
|
|
385
|
+
: output.aborted
|
|
386
|
+
? leaseWasLost
|
|
387
|
+
? "lost the exclusive writer lease protecting its workspace and was stopped"
|
|
388
|
+
: "was cancelled"
|
|
389
|
+
: output.timedOut
|
|
390
|
+
? output.idle
|
|
391
|
+
? `showed no activity for ${describeBound(configuredIdleMs)} and was killed ` +
|
|
392
|
+
`(${ENV_CHILD_IDLE_TIMEOUT} sets the bound in seconds)`
|
|
393
|
+
: `ran past its ${describeBound(configuredTimeoutMs)} ceiling and was killed ` +
|
|
394
|
+
`(${ENV_CHILD_TIMEOUT} sets it in seconds)`
|
|
395
|
+
: `exited with code ${output.code}`;
|
|
396
|
+
// A stable code for every execution failure. Without these an external controller could tell a
|
|
397
|
+
// policy refusal from an internal error, but not a lost writer lease from a user pressing stop
|
|
398
|
+
// (R-103), and not a missing `setpriv` from an ordinary crash (R-107).
|
|
399
|
+
const code = output.spawnError
|
|
400
|
+
? "EXECUTOR_UNAVAILABLE"
|
|
401
|
+
: leaseWasLost
|
|
402
|
+
? "WORKSPACE_LEASE_STALE"
|
|
403
|
+
: output.timedOut
|
|
404
|
+
? "CHILD_TIMED_OUT"
|
|
405
|
+
: output.aborted
|
|
406
|
+
? "CHILD_CANCELLED"
|
|
407
|
+
: "CHILD_EXIT_NONZERO";
|
|
408
|
+
const failed: DelegationOutcome = {
|
|
409
|
+
ok: false,
|
|
410
|
+
text: output.text.trim(),
|
|
411
|
+
reason: `the sub-agent ${why}`,
|
|
412
|
+
granted: plan.effective,
|
|
413
|
+
depth: plan.childDepth,
|
|
262
414
|
exitCode: output.code,
|
|
263
|
-
|
|
415
|
+
refusal: refusal(code, `the sub-agent ${why}`, { child_id: childId }),
|
|
264
416
|
timedOut: output.timedOut,
|
|
265
417
|
aborted: output.aborted,
|
|
266
418
|
truncated: output.truncated,
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
}
|
|
419
|
+
spawnFailed: Boolean(output.spawnError),
|
|
420
|
+
};
|
|
421
|
+
await teardown();
|
|
422
|
+
return withTeardownNotes(failed);
|
|
423
|
+
}
|
|
273
424
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
const why = output.spawnError
|
|
277
|
-
? `could not be started: ${output.spawnError}`
|
|
278
|
-
: output.aborted
|
|
279
|
-
? leaseWasLost
|
|
280
|
-
? "lost the exclusive writer lease protecting its workspace and was stopped"
|
|
281
|
-
: "was cancelled"
|
|
282
|
-
: output.timedOut
|
|
283
|
-
? "exceeded its time limit and was killed"
|
|
284
|
-
: `exited with code ${output.code}`;
|
|
285
|
-
// A stable code for every execution failure. Without these an external controller could tell a
|
|
286
|
-
// policy refusal from an internal error, but not a lost writer lease from a user pressing stop
|
|
287
|
-
// (R-103), and not a missing `setpriv` from an ordinary crash (R-107).
|
|
288
|
-
const code = output.spawnError
|
|
289
|
-
? "EXECUTOR_UNAVAILABLE"
|
|
290
|
-
: leaseWasLost
|
|
291
|
-
? "WORKSPACE_LEASE_STALE"
|
|
292
|
-
: output.timedOut
|
|
293
|
-
? "CHILD_TIMED_OUT"
|
|
294
|
-
: output.aborted
|
|
295
|
-
? "CHILD_CANCELLED"
|
|
296
|
-
: "CHILD_EXIT_NONZERO";
|
|
297
|
-
const failed: DelegationOutcome = {
|
|
298
|
-
ok: false,
|
|
425
|
+
const succeeded: DelegationOutcome = {
|
|
426
|
+
ok: true,
|
|
299
427
|
text: output.text.trim(),
|
|
300
|
-
reason: `the sub-agent ${why}`,
|
|
301
428
|
granted: plan.effective,
|
|
302
429
|
depth: plan.childDepth,
|
|
303
430
|
exitCode: output.code,
|
|
304
|
-
refusal: refusal(code, `the sub-agent ${why}`, { child_id: childId }),
|
|
305
|
-
timedOut: output.timedOut,
|
|
306
|
-
aborted: output.aborted,
|
|
307
431
|
truncated: output.truncated,
|
|
308
|
-
spawnFailed: Boolean(output.spawnError),
|
|
309
432
|
};
|
|
310
433
|
await teardown();
|
|
311
|
-
return withTeardownNotes(
|
|
434
|
+
return withTeardownNotes(succeeded);
|
|
435
|
+
} catch (error) {
|
|
436
|
+
if (activityStarted && !activityFinished)
|
|
437
|
+
try {
|
|
438
|
+
await activity.childFinished(
|
|
439
|
+
executionId,
|
|
440
|
+
activityParent,
|
|
441
|
+
input.agent ?? "governed child",
|
|
442
|
+
"",
|
|
443
|
+
signal?.aborted ? "cancelled" : "failed",
|
|
444
|
+
);
|
|
445
|
+
} catch {
|
|
446
|
+
/* observation does not control execution */
|
|
447
|
+
}
|
|
448
|
+
retention.finish({
|
|
449
|
+
code: null,
|
|
450
|
+
signal: null,
|
|
451
|
+
timedOut: false,
|
|
452
|
+
aborted: Boolean(signal?.aborted),
|
|
453
|
+
truncated: false,
|
|
454
|
+
failed: true,
|
|
455
|
+
});
|
|
456
|
+
retainWriterLease = Boolean(writerLease && isHerdrWriterCloseFailure(error));
|
|
457
|
+
if (ledgerPath && !terminalAttempted) {
|
|
458
|
+
// Best-effort: this records the failure, so it must not REPLACE the failure. A strict append that
|
|
459
|
+
// throws here would discard the original error — including HerdrWriterCloseError, whose whole
|
|
460
|
+
// meaning is "a lease is deliberately retained" (R-108).
|
|
461
|
+
await appendAfterRuntimeRecord(runtimeRecord, () =>
|
|
462
|
+
appendLedgerEvent(
|
|
463
|
+
{
|
|
464
|
+
path: ledgerPath,
|
|
465
|
+
strict: false,
|
|
466
|
+
onFailure: (cause) => teardownFailures.push(`child lifecycle record failed: ${String(cause)}`),
|
|
467
|
+
},
|
|
468
|
+
buildChildLifecycleEvent({
|
|
469
|
+
executionId,
|
|
470
|
+
parentExecutionId,
|
|
471
|
+
childId,
|
|
472
|
+
state: "failed",
|
|
473
|
+
executor: session.executor.kind,
|
|
474
|
+
idleTimeoutMs: configuredIdleMs,
|
|
475
|
+
reason:
|
|
476
|
+
error instanceof GovernanceRefusal
|
|
477
|
+
? error.code
|
|
478
|
+
: error instanceof Error
|
|
479
|
+
? error.name
|
|
480
|
+
: "unknown executor error",
|
|
481
|
+
correlation: plan.correlation,
|
|
482
|
+
now: new Date(),
|
|
483
|
+
}),
|
|
484
|
+
),
|
|
485
|
+
);
|
|
486
|
+
}
|
|
487
|
+
await teardown();
|
|
488
|
+
// Attached, not dropped. `withTeardownNotes` was applied on both return paths and neither throw path,
|
|
489
|
+
// so a failed lease-release record — the thing that makes the NEXT owner report a phantom crash — was
|
|
490
|
+
// collected into an array nothing read.
|
|
491
|
+
throw errorWithTeardownNotes(error, teardownFailures);
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Surfaces a teardown failure WITHOUT discarding the result. The child already ran; telling the
|
|
495
|
+
* orchestrator "ledger write failed" and nothing else made a completed delegation indistinguishable
|
|
496
|
+
* from one that never happened, which is the one confusion this package must never create (R-99).
|
|
497
|
+
*/
|
|
498
|
+
/**
|
|
499
|
+
* Surfaces a failed best-effort RECORD without displacing the failure it was recording. A
|
|
500
|
+
* `GovernanceRefusal` keeps its `code`, so a controller switching on it still sees the real refusal
|
|
501
|
+
* rather than a ledger complaint. pi renders only `error.message` (its `createErrorToolResult` drops
|
|
502
|
+
* everything else), so the notes go INTO the message — an `AggregateError.errors` array would be invisible.
|
|
503
|
+
*/
|
|
504
|
+
function errorWithTeardownNotes(error: unknown, notes: readonly string[]): unknown {
|
|
505
|
+
if (notes.length === 0) return error;
|
|
506
|
+
if (error instanceof GovernanceRefusal) {
|
|
507
|
+
return new GovernanceRefusal({
|
|
508
|
+
code: error.code,
|
|
509
|
+
message: [error.message, ...notes].join("; "),
|
|
510
|
+
...(error.details ? { details: error.details } : {}),
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
if (error instanceof Error) return new Error([error.message, ...notes].join("; "), { cause: error });
|
|
514
|
+
return error;
|
|
515
|
+
}
|
|
516
|
+
function withTeardownNotes(outcome: DelegationOutcome): DelegationOutcome {
|
|
517
|
+
const observed = { ...outcome, retention: retention.status() };
|
|
518
|
+
if (teardownFailures.length === 0) return observed;
|
|
519
|
+
return {
|
|
520
|
+
...observed,
|
|
521
|
+
control: "failed",
|
|
522
|
+
reason: [outcome.reason, ...teardownFailures].filter(Boolean).join("; "),
|
|
523
|
+
};
|
|
312
524
|
}
|
|
313
525
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
catch (cause) { teardownFailures.push(`declared work terminal record failed: ${String(cause)}`); }
|
|
329
|
-
retainWriterLease = Boolean(writerLease && isHerdrWriterCloseFailure(error));
|
|
330
|
-
if (ledgerPath && !terminalAttempted) {
|
|
331
|
-
// Best-effort: this records the failure, so it must not REPLACE the failure. A strict append that
|
|
332
|
-
// throws here would discard the original error — including HerdrWriterCloseError, whose whole
|
|
333
|
-
// meaning is "a lease is deliberately retained" (R-108).
|
|
334
|
-
await appendAfterRuntimeRecord(runtimeRecord, () => appendLedgerEvent(
|
|
335
|
-
{
|
|
336
|
-
path: ledgerPath,
|
|
337
|
-
strict: false,
|
|
338
|
-
onFailure: (cause) => teardownFailures.push(`child lifecycle record failed: ${String(cause)}`),
|
|
339
|
-
},
|
|
340
|
-
buildChildLifecycleEvent({
|
|
341
|
-
executionId, parentExecutionId, childId, state: "failed", executor: session.executor.kind,
|
|
342
|
-
reason: error instanceof GovernanceRefusal
|
|
343
|
-
? error.code
|
|
344
|
-
: error instanceof Error ? error.name : "unknown executor error",
|
|
345
|
-
correlation: plan.correlation, now: new Date(),
|
|
346
|
-
}),
|
|
347
|
-
));
|
|
526
|
+
async function teardown(): Promise<void> {
|
|
527
|
+
try {
|
|
528
|
+
await releaseDelegationWorkspace({
|
|
529
|
+
prepared: preparedWorkspace,
|
|
530
|
+
childId,
|
|
531
|
+
executionId,
|
|
532
|
+
parentExecutionId,
|
|
533
|
+
ledgerPath,
|
|
534
|
+
reason: releaseReason,
|
|
535
|
+
retain: retainWriterLease,
|
|
536
|
+
});
|
|
537
|
+
} catch (error) {
|
|
538
|
+
teardownFailures.push(`workspace lease record failed: ${String(error)}`);
|
|
539
|
+
}
|
|
348
540
|
}
|
|
349
|
-
await teardown();
|
|
350
|
-
// Attached, not dropped. `withTeardownNotes` was applied on both return paths and neither throw path,
|
|
351
|
-
// so a failed lease-release record — the thing that makes the NEXT owner report a phantom crash — was
|
|
352
|
-
// collected into an array nothing read.
|
|
353
|
-
throw errorWithTeardownNotes(error, teardownFailures);
|
|
354
|
-
}
|
|
355
|
-
/**
|
|
356
|
-
* Surfaces a teardown failure WITHOUT discarding the result. The child already ran; telling the
|
|
357
|
-
* orchestrator "ledger write failed" and nothing else made a completed delegation indistinguishable
|
|
358
|
-
* from one that never happened, which is the one confusion this package must never create (R-99).
|
|
359
|
-
*/
|
|
360
|
-
/**
|
|
361
|
-
* Surfaces a failed best-effort RECORD without displacing the failure it was recording. A
|
|
362
|
-
* `GovernanceRefusal` keeps its `code`, so a controller switching on it still sees the real refusal
|
|
363
|
-
* rather than a ledger complaint. pi renders only `error.message` (its `createErrorToolResult` drops
|
|
364
|
-
* everything else), so the notes go INTO the message — an `AggregateError.errors` array would be invisible.
|
|
365
|
-
*/
|
|
366
|
-
function errorWithTeardownNotes(error: unknown, notes: readonly string[]): unknown {
|
|
367
|
-
if (notes.length === 0) return error;
|
|
368
|
-
if (error instanceof GovernanceRefusal) {
|
|
369
|
-
return new GovernanceRefusal({
|
|
370
|
-
code: error.code,
|
|
371
|
-
message: [error.message, ...notes].join("; "),
|
|
372
|
-
...(error.details ? { details: error.details } : {}),
|
|
373
|
-
});
|
|
374
541
|
}
|
|
375
|
-
if (error instanceof Error) return new Error([error.message, ...notes].join("; "), { cause: error });
|
|
376
|
-
return error;
|
|
377
542
|
}
|
|
378
|
-
function withTeardownNotes(outcome: DelegationOutcome): DelegationOutcome {
|
|
379
|
-
const observed = { ...outcome, retention: retention.status() };
|
|
380
|
-
if (teardownFailures.length === 0) return observed;
|
|
381
|
-
return { ...observed, control: "failed", reason: [outcome.reason, ...teardownFailures].filter(Boolean).join("; ") };
|
|
382
|
-
}
|
|
383
543
|
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
await releaseDelegationWorkspace({
|
|
387
|
-
prepared: preparedWorkspace,
|
|
388
|
-
childId,
|
|
389
|
-
executionId,
|
|
390
|
-
parentExecutionId,
|
|
391
|
-
ledgerPath,
|
|
392
|
-
reason: releaseReason,
|
|
393
|
-
retain: retainWriterLease,
|
|
394
|
-
});
|
|
395
|
-
} catch (error) {
|
|
396
|
-
teardownFailures.push(`workspace lease record failed: ${String(error)}`);
|
|
397
|
-
}
|
|
398
|
-
}
|
|
544
|
+
function describeBound(ms: number): string {
|
|
545
|
+
return ms < 60_000 ? `${Math.round(ms / 1000)} second(s)` : `${Math.round(ms / 60_000)} minute(s)`;
|
|
399
546
|
}
|