pi-daddy 0.28.0 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +99 -124
- package/README.md +18 -896
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/contracts/ledger-record/v1/README.md +44 -0
- package/contracts/ledger-record/v1/fixtures/child-lifecycle.json +45 -0
- package/contracts/ledger-record/v1/fixtures/ledger-record.jsonl +3 -0
- package/contracts/ledger-record/v1/governance-event.schema.json +747 -0
- package/contracts/ledger-record/v1/record.schema.json +91 -0
- package/dist/cli.d.ts +6 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +108 -103
- package/dist/cli.js.map +1 -1
- package/dist/executors/activity-session.d.ts +12 -0
- package/dist/executors/activity-session.d.ts.map +1 -0
- package/dist/executors/activity-session.js +43 -0
- package/dist/executors/activity-session.js.map +1 -0
- package/dist/executors/executor.d.ts +39 -0
- package/dist/executors/executor.d.ts.map +1 -0
- package/dist/executors/executor.js +95 -0
- package/dist/executors/executor.js.map +1 -0
- package/dist/executors/herdr-cli.d.ts +78 -0
- package/dist/executors/herdr-cli.d.ts.map +1 -0
- package/dist/executors/herdr-cli.js +114 -0
- package/dist/executors/herdr-cli.js.map +1 -0
- package/dist/executors/herdr-name.d.ts.map +1 -0
- package/dist/executors/herdr-name.js.map +1 -0
- package/dist/executors/herdr-pi-lifecycle.d.ts.map +1 -0
- package/dist/executors/herdr-pi-lifecycle.js +22 -0
- package/dist/executors/herdr-pi-lifecycle.js.map +1 -0
- package/dist/executors/herdr-poll.d.ts +140 -0
- package/dist/executors/herdr-poll.d.ts.map +1 -0
- package/dist/executors/herdr-poll.js +252 -0
- package/dist/executors/herdr-poll.js.map +1 -0
- package/dist/executors/herdr-stage.d.ts +40 -0
- package/dist/executors/herdr-stage.d.ts.map +1 -0
- package/dist/executors/herdr-stage.js +54 -0
- package/dist/executors/herdr-stage.js.map +1 -0
- package/dist/executors/herdr-start.d.ts.map +1 -0
- package/dist/executors/herdr-start.js.map +1 -0
- package/dist/executors/native-session-target.d.ts +9 -0
- package/dist/executors/native-session-target.d.ts.map +1 -0
- package/dist/executors/native-session-target.js +30 -0
- package/dist/executors/native-session-target.js.map +1 -0
- package/dist/executors/pane-reaper.d.ts +111 -0
- package/dist/executors/pane-reaper.d.ts.map +1 -0
- package/dist/executors/pane-reaper.js +242 -0
- package/dist/executors/pane-reaper.js.map +1 -0
- package/dist/executors/process-activity.d.ts +3 -0
- package/dist/executors/process-activity.d.ts.map +1 -0
- package/dist/executors/process-activity.js +59 -0
- package/dist/executors/process-activity.js.map +1 -0
- package/dist/executors/run-herdr.d.ts +122 -0
- package/dist/executors/run-herdr.d.ts.map +1 -0
- package/dist/executors/run-herdr.js +341 -0
- package/dist/executors/run-herdr.js.map +1 -0
- package/dist/executors/vendor/herdr-pi-lifecycle.d.ts.map +1 -0
- package/dist/executors/vendor/herdr-pi-lifecycle.js.map +1 -0
- package/dist/governance/approval-prompt.d.ts +119 -0
- package/dist/governance/approval-prompt.d.ts.map +1 -0
- package/dist/governance/approval-prompt.js +133 -0
- package/dist/governance/approval-prompt.js.map +1 -0
- package/dist/governance/approval-store.d.ts +149 -0
- package/dist/governance/approval-store.d.ts.map +1 -0
- package/dist/governance/approval-store.js +309 -0
- package/dist/governance/approval-store.js.map +1 -0
- package/dist/governance/execution-retention.d.ts +90 -0
- package/dist/governance/execution-retention.d.ts.map +1 -0
- package/dist/governance/execution-retention.js +317 -0
- package/dist/governance/execution-retention.js.map +1 -0
- package/dist/governance/file-lock.d.ts.map +1 -0
- package/dist/governance/file-lock.js +205 -0
- package/dist/governance/file-lock.js.map +1 -0
- package/dist/governance/finalization.d.ts.map +1 -0
- package/dist/governance/finalization.js.map +1 -0
- package/dist/governance/grant-store.d.ts +96 -0
- package/dist/governance/grant-store.d.ts.map +1 -0
- package/dist/governance/grant-store.js +186 -0
- package/dist/governance/grant-store.js.map +1 -0
- package/dist/governance/init.d.ts +129 -0
- package/dist/governance/init.d.ts.map +1 -0
- package/dist/governance/init.js +360 -0
- package/dist/governance/init.js.map +1 -0
- package/dist/governance/lease-helper.d.ts.map +1 -0
- package/dist/governance/lease-helper.js +121 -0
- package/dist/governance/lease-helper.js.map +1 -0
- package/dist/governance/lease-record.d.ts +90 -0
- package/dist/governance/lease-record.d.ts.map +1 -0
- package/dist/governance/lease-record.js.map +1 -0
- package/dist/governance/ledger-events.d.ts +111 -0
- package/dist/governance/ledger-events.d.ts.map +1 -0
- package/dist/governance/ledger-events.js +129 -0
- package/dist/governance/ledger-events.js.map +1 -0
- package/dist/governance/ledger-report.d.ts +134 -0
- package/dist/governance/ledger-report.d.ts.map +1 -0
- package/dist/governance/ledger-report.js +294 -0
- package/dist/governance/ledger-report.js.map +1 -0
- package/dist/governance/ledger-v3-validation.d.ts +21 -0
- package/dist/governance/ledger-v3-validation.d.ts.map +1 -0
- package/dist/governance/ledger-v3-validation.js +353 -0
- package/dist/governance/ledger-v3-validation.js.map +1 -0
- package/dist/governance/ledger.d.ts +258 -0
- package/dist/governance/ledger.d.ts.map +1 -0
- package/dist/governance/ledger.js +201 -0
- package/dist/governance/ledger.js.map +1 -0
- package/dist/governance/native-session.d.ts +59 -0
- package/dist/governance/native-session.d.ts.map +1 -0
- package/dist/governance/native-session.js +208 -0
- package/dist/governance/native-session.js.map +1 -0
- package/dist/governance/record.d.ts +65 -0
- package/dist/governance/record.d.ts.map +1 -0
- package/dist/governance/record.js +259 -0
- package/dist/governance/record.js.map +1 -0
- package/dist/governance/retention-contract.d.ts.map +1 -0
- package/dist/governance/retention-contract.js +187 -0
- package/dist/governance/retention-contract.js.map +1 -0
- package/dist/governance/retention-json.d.ts.map +1 -0
- package/dist/governance/retention-json.js.map +1 -0
- package/dist/governance/workspace-lease.d.ts +40 -0
- package/dist/governance/workspace-lease.d.ts.map +1 -0
- package/dist/governance/workspace-lease.js +357 -0
- package/dist/governance/workspace-lease.js.map +1 -0
- package/dist/index.d.ts +59 -42
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +61 -42
- package/dist/index.js.map +1 -1
- package/dist/kernel/approval.d.ts +241 -0
- package/dist/kernel/approval.d.ts.map +1 -0
- package/dist/kernel/approval.js +270 -0
- package/dist/kernel/approval.js.map +1 -0
- package/dist/kernel/capabilities.d.ts +136 -0
- package/dist/kernel/capabilities.d.ts.map +1 -0
- package/dist/kernel/capabilities.js +199 -0
- package/dist/kernel/capabilities.js.map +1 -0
- package/dist/kernel/catalog.d.ts +98 -0
- package/dist/kernel/catalog.d.ts.map +1 -0
- package/dist/kernel/catalog.js +280 -0
- package/dist/kernel/catalog.js.map +1 -0
- package/dist/kernel/chain.d.ts.map +1 -0
- package/dist/kernel/chain.js.map +1 -0
- package/dist/kernel/correlation.d.ts.map +1 -0
- package/dist/kernel/correlation.js +267 -0
- package/dist/kernel/correlation.js.map +1 -0
- package/dist/kernel/definitions.d.ts.map +1 -0
- package/dist/kernel/definitions.js +164 -0
- package/dist/kernel/definitions.js.map +1 -0
- package/dist/kernel/delegate-types.d.ts +160 -0
- package/dist/kernel/delegate-types.d.ts.map +1 -0
- package/dist/kernel/delegate-types.js +9 -0
- package/dist/kernel/delegate-types.js.map +1 -0
- package/dist/kernel/delegate.d.ts.map +1 -0
- package/dist/kernel/delegate.js +314 -0
- package/dist/kernel/delegate.js.map +1 -0
- package/dist/kernel/delegation-approval.d.ts.map +1 -0
- package/dist/kernel/delegation-approval.js +93 -0
- package/dist/kernel/delegation-approval.js.map +1 -0
- package/dist/kernel/env-names.d.ts +51 -0
- package/dist/kernel/env-names.d.ts.map +1 -0
- package/dist/kernel/env-names.js +112 -0
- package/dist/kernel/env-names.js.map +1 -0
- package/dist/kernel/execution-id.d.ts.map +1 -0
- package/dist/kernel/execution-id.js.map +1 -0
- package/dist/kernel/fanout.d.ts.map +1 -0
- package/dist/kernel/fanout.js +93 -0
- package/dist/kernel/fanout.js.map +1 -0
- package/dist/kernel/grant-env.d.ts +118 -0
- package/dist/kernel/grant-env.d.ts.map +1 -0
- package/dist/kernel/grant-env.js +104 -0
- package/dist/kernel/grant-env.js.map +1 -0
- package/dist/kernel/ledger-identifiers.d.ts.map +1 -0
- package/dist/kernel/ledger-identifiers.js.map +1 -0
- package/dist/kernel/model-preflight.d.ts +13 -0
- package/dist/kernel/model-preflight.d.ts.map +1 -0
- package/dist/kernel/model-preflight.js +30 -0
- package/dist/kernel/model-preflight.js.map +1 -0
- package/dist/kernel/pi-tools.d.ts.map +1 -0
- package/dist/kernel/pi-tools.js +29 -0
- package/dist/kernel/pi-tools.js.map +1 -0
- package/dist/kernel/progress.d.ts.map +1 -0
- package/dist/kernel/progress.js.map +1 -0
- package/dist/kernel/project-paths.d.ts +43 -0
- package/dist/kernel/project-paths.d.ts.map +1 -0
- package/dist/kernel/project-paths.js +81 -0
- package/dist/kernel/project-paths.js.map +1 -0
- package/dist/kernel/propagation.d.ts +195 -0
- package/dist/kernel/propagation.d.ts.map +1 -0
- package/dist/kernel/propagation.js +275 -0
- package/dist/kernel/propagation.js.map +1 -0
- package/dist/kernel/refusals.d.ts +16 -0
- package/dist/kernel/refusals.d.ts.map +1 -0
- package/dist/kernel/refusals.js +53 -0
- package/dist/kernel/refusals.js.map +1 -0
- package/dist/kernel/resolve.d.ts.map +1 -0
- package/dist/kernel/resolve.js +201 -0
- package/dist/kernel/resolve.js.map +1 -0
- package/dist/kernel/routing-authority.d.ts.map +1 -0
- package/dist/kernel/routing-authority.js.map +1 -0
- package/dist/kernel/run-child.d.ts +111 -0
- package/dist/kernel/run-child.d.ts.map +1 -0
- package/dist/kernel/run-child.js +324 -0
- package/dist/kernel/run-child.js.map +1 -0
- package/dist/kernel/skill-packages.d.ts +116 -0
- package/dist/kernel/skill-packages.d.ts.map +1 -0
- package/dist/kernel/skill-packages.js +300 -0
- package/dist/kernel/skill-packages.js.map +1 -0
- package/dist/kernel/skill-resources.d.ts.map +1 -0
- package/dist/kernel/skill-resources.js +56 -0
- package/dist/kernel/skill-resources.js.map +1 -0
- package/dist/kernel/spawn.d.ts.map +1 -0
- package/dist/kernel/spawn.js.map +1 -0
- package/dist/kernel/workspace.d.ts +51 -0
- package/dist/kernel/workspace.d.ts.map +1 -0
- package/dist/kernel/workspace.js +223 -0
- package/dist/kernel/workspace.js.map +1 -0
- package/dist/products/activity-timeline.d.ts +126 -0
- package/dist/products/activity-timeline.d.ts.map +1 -0
- package/dist/products/activity-timeline.js +542 -0
- package/dist/products/activity-timeline.js.map +1 -0
- package/dist/products/dashboard-cli.d.ts +26 -0
- package/dist/products/dashboard-cli.d.ts.map +1 -0
- package/dist/products/dashboard-cli.js +224 -0
- package/dist/products/dashboard-cli.js.map +1 -0
- package/dist/products/dashboard-display-controls.d.ts +17 -0
- package/dist/products/dashboard-display-controls.d.ts.map +1 -0
- package/dist/products/dashboard-display-controls.js +38 -0
- package/dist/products/dashboard-display-controls.js.map +1 -0
- package/dist/products/dashboard-handshake.d.ts +42 -0
- package/dist/products/dashboard-handshake.d.ts.map +1 -0
- package/dist/products/dashboard-handshake.js +158 -0
- package/dist/products/dashboard-handshake.js.map +1 -0
- package/dist/products/dashboard-herdr.d.ts +55 -0
- package/dist/products/dashboard-herdr.d.ts.map +1 -0
- package/dist/products/dashboard-herdr.js +324 -0
- package/dist/products/dashboard-herdr.js.map +1 -0
- package/dist/products/dashboard-projection.d.ts +62 -0
- package/dist/products/dashboard-projection.d.ts.map +1 -0
- package/dist/products/dashboard-projection.js +305 -0
- package/dist/products/dashboard-projection.js.map +1 -0
- package/dist/products/dashboard-render.d.ts.map +1 -0
- package/dist/products/dashboard-render.js +208 -0
- package/dist/products/dashboard-render.js.map +1 -0
- package/extensions/activity-timeline.ts +134 -28
- package/extensions/approval-banking.ts +3 -3
- package/extensions/approvals.ts +18 -12
- package/extensions/chain-approval-facts.ts +9 -6
- package/extensions/chain-ledger.ts +4 -4
- package/extensions/chain-plan.ts +6 -6
- package/extensions/correlation-shape.ts +42 -33
- package/extensions/delegate-chain.ts +93 -45
- package/extensions/delegation-authority.ts +7 -3
- package/extensions/delegation-ledger.ts +2 -2
- package/extensions/delegation-native.ts +24 -7
- package/extensions/delegation.ts +91 -80
- package/extensions/execute-child.ts +440 -293
- package/extensions/execution-occurrence.ts +2 -2
- package/extensions/executor-session.ts +5 -5
- package/extensions/fanout-outcome.ts +8 -6
- package/extensions/grant-store-refusal.ts +24 -12
- package/extensions/grants-command.ts +41 -33
- package/extensions/grants-connected-command.ts +29 -15
- package/extensions/grants.ts +73 -73
- package/extensions/init-command.ts +18 -12
- package/extensions/reload-environment.ts +12 -5
- package/extensions/run-delegation.ts +29 -19
- package/extensions/session-environment.ts +25 -11
- package/extensions/session-report.ts +60 -11
- package/extensions/session.ts +58 -34
- package/extensions/spawn-summary.ts +5 -5
- package/extensions/stored-grant-session.ts +5 -5
- package/extensions/tripwire.ts +1 -1
- package/extensions/workspace-runtime.ts +26 -24
- package/herdr-plugin/herdr-plugin.toml +1 -1
- package/package.json +4 -211
- package/src/cli.ts +136 -89
- package/src/executors/activity-session.ts +54 -0
- package/src/executors/executor.ts +123 -0
- package/src/executors/herdr-cli.ts +132 -0
- package/src/executors/herdr-pi-lifecycle.ts +21 -0
- package/src/executors/herdr-poll.ts +305 -0
- package/src/executors/herdr-stage.ts +55 -0
- package/src/executors/native-session-target.ts +31 -0
- package/src/executors/pane-reaper.ts +270 -0
- package/src/executors/process-activity.ts +54 -0
- package/src/executors/run-herdr.ts +426 -0
- package/src/governance/approval-prompt.ts +225 -0
- package/src/governance/approval-store.ts +385 -0
- package/src/governance/execution-retention.ts +372 -0
- package/src/governance/file-lock.ts +210 -0
- package/src/governance/finalization.ts +82 -0
- package/src/governance/grant-store.ts +235 -0
- package/src/governance/init.ts +447 -0
- package/src/governance/lease-helper.ts +124 -0
- package/src/governance/lease-record.ts +131 -0
- package/src/governance/ledger-events.ts +222 -0
- package/src/governance/ledger-report.ts +396 -0
- package/src/governance/ledger-v3-validation.ts +384 -0
- package/src/governance/ledger.ts +419 -0
- package/src/governance/native-session.ts +264 -0
- package/src/governance/record.ts +294 -0
- package/src/governance/retention-contract.ts +201 -0
- package/src/governance/retention-json.ts +24 -0
- package/src/governance/workspace-lease.ts +429 -0
- package/src/index.ts +82 -92
- package/src/kernel/approval.ts +406 -0
- package/src/kernel/capabilities.ts +216 -0
- package/src/kernel/catalog.ts +313 -0
- package/src/kernel/correlation.ts +351 -0
- package/src/kernel/definitions.ts +215 -0
- package/src/kernel/delegate-types.ts +162 -0
- package/src/kernel/delegate.ts +370 -0
- package/src/kernel/delegation-approval.ts +126 -0
- package/src/kernel/env-names.ts +119 -0
- package/src/kernel/fanout.ts +106 -0
- package/src/kernel/grant-env.ts +174 -0
- package/src/kernel/model-preflight.ts +44 -0
- package/src/kernel/pi-tools.ts +32 -0
- package/src/kernel/project-paths.ts +97 -0
- package/src/kernel/propagation.ts +341 -0
- package/src/kernel/refusals.ts +64 -0
- package/src/kernel/resolve.ts +258 -0
- package/src/kernel/run-child.ts +418 -0
- package/src/kernel/skill-packages.ts +329 -0
- package/src/kernel/skill-resources.ts +64 -0
- package/src/kernel/workspace.ts +336 -0
- package/src/products/activity-timeline.ts +679 -0
- package/src/products/dashboard-cli.ts +250 -0
- package/src/products/dashboard-display-controls.ts +44 -0
- package/src/products/dashboard-handshake.ts +222 -0
- package/src/products/dashboard-herdr.ts +427 -0
- package/src/products/dashboard-projection.ts +389 -0
- package/src/products/dashboard-render.ts +260 -0
- package/PRODUCT-GUIDE.md +0 -155
- package/REQUIREMENTS.md +0 -41
- package/contracts/daily-view/v1/README.md +0 -114
- package/contracts/daily-view/v1/fixtures/view.json +0 -525
- package/contracts/daily-view/v1/fixtures/view.txt +0 -75
- package/contracts/daily-view/v1/fixtures/work.jsonl +0 -17
- package/contracts/daily-view/v1/p03/README.md +0 -26
- package/contracts/daily-view/v1/p03/fixtures/retained-executions.json +0 -241
- package/contracts/daily-view/v1/p03/projection.schema.json +0 -194
- package/contracts/daily-view/v1/p03/provenance.json +0 -21
- package/contracts/dashboard-host/v1/README.md +0 -176
- package/contracts/debrief/v1/README.md +0 -146
- package/contracts/debrief/v1/intervention/README.md +0 -32
- package/contracts/debrief/v1/intervention/fixtures/artifact-3ee11136beb864f518252e5024dae9197421fbf97b6e981d3243c782b5c44bd0.txt +0 -1
- package/contracts/debrief/v1/intervention/fixtures/artifact-58905d872dd3c54a9705f67b05fa82edbad7af6476ae8993faf1a7b9fadfb905.txt +0 -1
- package/contracts/debrief/v1/intervention/fixtures/assessment.json +0 -29
- package/contracts/debrief/v1/intervention/fixtures/blind-view.json +0 -20
- package/contracts/debrief/v1/intervention/fixtures/choice.json +0 -7
- package/contracts/debrief/v1/intervention/fixtures/manifest.json +0 -57
- package/contracts/debrief/v1/intervention/fixtures/reveal.json +0 -39
- package/contracts/debrief/v1/provenance.json +0 -89
- package/contracts/debrief/v1/work-capture/README.md +0 -38
- package/contracts/debrief/v1/work-capture/fixtures/batch.json +0 -17
- package/contracts/debrief/v1/work-capture/fixtures/cases.json +0 -184
- package/contracts/debrief/v1/work-capture/fixtures/review.json +0 -184
- package/contracts/debrief/v1/work-capture/review-request.schema.json +0 -41
- package/contracts/debrief/v1/work-capture/work-case.schema.json +0 -190
- package/contracts/debrief/v2/README.md +0 -71
- package/contracts/debrief/v2/input-pin.json +0 -66
- package/contracts/debrief/v2/intervention-upstream.md +0 -40
- package/contracts/debrief/v2/work-signals-upstream.md +0 -22
- package/contracts/dispatch-control/v1/README.md +0 -109
- package/contracts/dispatch-control/v1/request.schema.json +0 -19
- package/contracts/effect-profile/v1/README.md +0 -124
- package/contracts/execution-retention/v1/README.md +0 -109
- package/contracts/execution-retention/v2/README.md +0 -148
- package/contracts/execution-retention/v2/fixtures/interrupted-native-bytes.json +0 -91
- package/contracts/execution-retention/v2/fixtures/missing-native-session.json +0 -91
- package/contracts/execution-retention/v2/fixtures/native-file-unknown-branch.json +0 -91
- package/contracts/execution-retention/v2/fixtures/native-id-without-bytes.json +0 -91
- package/contracts/execution-retention/v2/fixtures/native-live-branch.json +0 -90
- package/contracts/execution-retention/v2/fixtures/replaced-native-session.json +0 -92
- package/contracts/execution-retention/v2/fixtures/result-82c620cdfeb8ca6b858cf653d7f5e2eedca5315d6244216d60e8b36f03223d6a.bin +0 -1
- package/contracts/execution-retention/v2/fixtures/session-2ec1f134bc739984434f7fca689e1c3d1c39fce2dcadae709e9b6faedfcc4ac7.bin +0 -3
- package/contracts/execution-retention/v2/fixtures/session-9bdb4bd16a901da31580acf056bda525225259e15ec409e0410480109011772f.bin +0 -3
- package/contracts/execution-retention/v2/manifest.schema.json +0 -858
- package/contracts/experiment/v1/README.md +0 -164
- package/contracts/factory-order/v1/README.md +0 -151
- package/contracts/factory-order/v1/adoption-pin.json +0 -8
- package/contracts/intent-control/v1/README.md +0 -135
- package/contracts/intent-control/v1/request.schema.json +0 -1096
- package/contracts/intent-control/v2/README.md +0 -34
- package/contracts/intent-control/v2/request.schema.json +0 -1070
- package/contracts/ledger/v2/README.md +0 -59
- package/contracts/ledger/v2/fixtures/capability-decision.json +0 -95
- package/contracts/ledger/v2/fixtures/check-receipt.json +0 -40
- package/contracts/ledger/v2/fixtures/child-lifecycle.json +0 -42
- package/contracts/ledger/v2/fixtures/workspace-lease.json +0 -41
- package/contracts/ledger/v2/ledger-event.schema.json +0 -633
- package/contracts/ledger/v3/README.md +0 -36
- package/contracts/ledger/v3/fixtures/check-receipt.json +0 -41
- package/contracts/ledger/v3/fixtures/child-lifecycle.json +0 -44
- package/contracts/ledger/v3/fixtures/workflow-fact.json +0 -40
- package/contracts/ledger/v3/ledger-event.schema.json +0 -955
- package/contracts/ledger/v4/README.md +0 -241
- package/contracts/ledger/v4/fixtures/layout-options.json +0 -428
- package/contracts/ledger/v4/fixtures/work-acceptance.json +0 -57
- package/contracts/ledger/v4/fixtures/work-occurrence.json +0 -44
- package/contracts/ledger/v4/fixtures/work-revision.json +0 -26
- package/contracts/ledger/v4/fixtures/work-snapshot.json +0 -73
- package/contracts/ledger/v4/ledger-event.schema.json +0 -162
- package/contracts/ordinary-control/v1/README.md +0 -59
- package/contracts/producer-ipc/v1/README.md +0 -137
- package/dist/activity-timeline.d.ts +0 -109
- package/dist/activity-timeline.d.ts.map +0 -1
- package/dist/activity-timeline.js +0 -208
- package/dist/activity-timeline.js.map +0 -1
- package/dist/approval-prompt.d.ts +0 -119
- package/dist/approval-prompt.d.ts.map +0 -1
- package/dist/approval-prompt.js +0 -133
- package/dist/approval-prompt.js.map +0 -1
- package/dist/approval-store.d.ts +0 -149
- package/dist/approval-store.d.ts.map +0 -1
- package/dist/approval-store.js +0 -314
- package/dist/approval-store.js.map +0 -1
- package/dist/approval.d.ts +0 -241
- package/dist/approval.d.ts.map +0 -1
- package/dist/approval.js +0 -268
- package/dist/approval.js.map +0 -1
- package/dist/capabilities.d.ts +0 -136
- package/dist/capabilities.d.ts.map +0 -1
- package/dist/capabilities.js +0 -203
- package/dist/capabilities.js.map +0 -1
- package/dist/catalog.d.ts +0 -98
- package/dist/catalog.d.ts.map +0 -1
- package/dist/catalog.js +0 -273
- package/dist/catalog.js.map +0 -1
- package/dist/chain.d.ts.map +0 -1
- package/dist/chain.js.map +0 -1
- package/dist/check-runner.d.ts +0 -66
- package/dist/check-runner.d.ts.map +0 -1
- package/dist/check-runner.js +0 -275
- package/dist/check-runner.js.map +0 -1
- package/dist/control-journal.d.ts +0 -20
- package/dist/control-journal.d.ts.map +0 -1
- package/dist/control-journal.js +0 -73
- package/dist/control-journal.js.map +0 -1
- package/dist/correlation.d.ts.map +0 -1
- package/dist/correlation.js +0 -231
- package/dist/correlation.js.map +0 -1
- package/dist/daily-dashboard-host.d.ts +0 -136
- package/dist/daily-dashboard-host.d.ts.map +0 -1
- package/dist/daily-dashboard-host.js +0 -164
- package/dist/daily-dashboard-host.js.map +0 -1
- package/dist/daily-panel.d.ts +0 -36
- package/dist/daily-panel.d.ts.map +0 -1
- package/dist/daily-panel.js +0 -84
- package/dist/daily-panel.js.map +0 -1
- package/dist/daily-view-input.d.ts +0 -44
- package/dist/daily-view-input.d.ts.map +0 -1
- package/dist/daily-view-input.js +0 -68
- package/dist/daily-view-input.js.map +0 -1
- package/dist/daily-view-render.d.ts +0 -5
- package/dist/daily-view-render.d.ts.map +0 -1
- package/dist/daily-view-render.js +0 -42
- package/dist/daily-view-render.js.map +0 -1
- package/dist/daily-view.d.ts +0 -77
- package/dist/daily-view.d.ts.map +0 -1
- package/dist/daily-view.js +0 -176
- package/dist/daily-view.js.map +0 -1
- package/dist/dashboard-cli.d.ts +0 -54
- package/dist/dashboard-cli.d.ts.map +0 -1
- package/dist/dashboard-cli.js +0 -367
- package/dist/dashboard-cli.js.map +0 -1
- package/dist/dashboard-display-controls.d.ts +0 -15
- package/dist/dashboard-display-controls.d.ts.map +0 -1
- package/dist/dashboard-display-controls.js +0 -34
- package/dist/dashboard-display-controls.js.map +0 -1
- package/dist/dashboard-handshake.d.ts +0 -42
- package/dist/dashboard-handshake.d.ts.map +0 -1
- package/dist/dashboard-handshake.js +0 -147
- package/dist/dashboard-handshake.js.map +0 -1
- package/dist/dashboard-harness.d.ts +0 -22
- package/dist/dashboard-harness.d.ts.map +0 -1
- package/dist/dashboard-harness.js +0 -89
- package/dist/dashboard-harness.js.map +0 -1
- package/dist/dashboard-herdr.d.ts +0 -55
- package/dist/dashboard-herdr.d.ts.map +0 -1
- package/dist/dashboard-herdr.js +0 -293
- package/dist/dashboard-herdr.js.map +0 -1
- package/dist/dashboard-host-contract.d.ts +0 -127
- package/dist/dashboard-host-contract.d.ts.map +0 -1
- package/dist/dashboard-host-contract.js +0 -14
- package/dist/dashboard-host-contract.js.map +0 -1
- package/dist/dashboard-host-transport.d.ts +0 -16
- package/dist/dashboard-host-transport.d.ts.map +0 -1
- package/dist/dashboard-host-transport.js +0 -127
- package/dist/dashboard-host-transport.js.map +0 -1
- package/dist/dashboard-host.d.ts +0 -239
- package/dist/dashboard-host.d.ts.map +0 -1
- package/dist/dashboard-host.js +0 -474
- package/dist/dashboard-host.js.map +0 -1
- package/dist/dashboard-menu.d.ts +0 -16
- package/dist/dashboard-menu.d.ts.map +0 -1
- package/dist/dashboard-menu.js +0 -33
- package/dist/dashboard-menu.js.map +0 -1
- package/dist/dashboard-observation.d.ts +0 -28
- package/dist/dashboard-observation.d.ts.map +0 -1
- package/dist/dashboard-observation.js +0 -87
- package/dist/dashboard-observation.js.map +0 -1
- package/dist/dashboard-projection.d.ts +0 -73
- package/dist/dashboard-projection.d.ts.map +0 -1
- package/dist/dashboard-projection.js +0 -294
- package/dist/dashboard-projection.js.map +0 -1
- package/dist/dashboard-render.d.ts.map +0 -1
- package/dist/dashboard-render.js +0 -212
- package/dist/dashboard-render.js.map +0 -1
- package/dist/debrief-contract.d.ts +0 -65
- package/dist/debrief-contract.d.ts.map +0 -1
- package/dist/debrief-contract.js +0 -151
- package/dist/debrief-contract.js.map +0 -1
- package/dist/debrief-fixture.d.ts +0 -16
- package/dist/debrief-fixture.d.ts.map +0 -1
- package/dist/debrief-fixture.js +0 -41
- package/dist/debrief-fixture.js.map +0 -1
- package/dist/debrief-host.d.ts +0 -59
- package/dist/debrief-host.d.ts.map +0 -1
- package/dist/debrief-host.js +0 -49
- package/dist/debrief-host.js.map +0 -1
- package/dist/debrief-render.d.ts +0 -5
- package/dist/debrief-render.d.ts.map +0 -1
- package/dist/debrief-render.js +0 -65
- package/dist/debrief-render.js.map +0 -1
- package/dist/debrief.d.ts +0 -90
- package/dist/debrief.d.ts.map +0 -1
- package/dist/debrief.js +0 -263
- package/dist/debrief.js.map +0 -1
- package/dist/definitions.d.ts.map +0 -1
- package/dist/definitions.js +0 -164
- package/dist/definitions.js.map +0 -1
- package/dist/delegate-types.d.ts +0 -154
- package/dist/delegate-types.d.ts.map +0 -1
- package/dist/delegate-types.js +0 -8
- package/dist/delegate-types.js.map +0 -1
- package/dist/delegate.d.ts.map +0 -1
- package/dist/delegate.js +0 -313
- package/dist/delegate.js.map +0 -1
- package/dist/delegation-approval.d.ts.map +0 -1
- package/dist/delegation-approval.js +0 -94
- package/dist/delegation-approval.js.map +0 -1
- package/dist/dispatch-control.d.ts +0 -45
- package/dist/dispatch-control.d.ts.map +0 -1
- package/dist/dispatch-control.js +0 -76
- package/dist/dispatch-control.js.map +0 -1
- package/dist/effect-profile-runtime.d.ts +0 -40
- package/dist/effect-profile-runtime.d.ts.map +0 -1
- package/dist/effect-profile-runtime.js +0 -51
- package/dist/effect-profile-runtime.js.map +0 -1
- package/dist/effect-profile.d.ts +0 -40
- package/dist/effect-profile.d.ts.map +0 -1
- package/dist/effect-profile.js +0 -152
- package/dist/effect-profile.js.map +0 -1
- package/dist/execution-id.d.ts.map +0 -1
- package/dist/execution-id.js.map +0 -1
- package/dist/execution-retention.d.ts +0 -90
- package/dist/execution-retention.d.ts.map +0 -1
- package/dist/execution-retention.js +0 -247
- package/dist/execution-retention.js.map +0 -1
- package/dist/executor.d.ts +0 -39
- package/dist/executor.d.ts.map +0 -1
- package/dist/executor.js +0 -94
- package/dist/executor.js.map +0 -1
- package/dist/experiment-contract.d.ts +0 -56
- package/dist/experiment-contract.d.ts.map +0 -1
- package/dist/experiment-contract.js +0 -80
- package/dist/experiment-contract.js.map +0 -1
- package/dist/experiment-state.d.ts +0 -22
- package/dist/experiment-state.d.ts.map +0 -1
- package/dist/experiment-state.js +0 -79
- package/dist/experiment-state.js.map +0 -1
- package/dist/experiment-store.d.ts +0 -30
- package/dist/experiment-store.d.ts.map +0 -1
- package/dist/experiment-store.js +0 -147
- package/dist/experiment-store.js.map +0 -1
- package/dist/experiment.d.ts +0 -65
- package/dist/experiment.d.ts.map +0 -1
- package/dist/experiment.js +0 -362
- package/dist/experiment.js.map +0 -1
- package/dist/factory-contract.d.ts +0 -79
- package/dist/factory-contract.d.ts.map +0 -1
- package/dist/factory-contract.js +0 -89
- package/dist/factory-contract.js.map +0 -1
- package/dist/factory-migration.d.ts +0 -20
- package/dist/factory-migration.d.ts.map +0 -1
- package/dist/factory-migration.js +0 -55
- package/dist/factory-migration.js.map +0 -1
- package/dist/factory-order.d.ts +0 -848
- package/dist/factory-order.d.ts.map +0 -1
- package/dist/factory-order.js +0 -83
- package/dist/factory-order.js.map +0 -1
- package/dist/factory-registry.d.ts +0 -121
- package/dist/factory-registry.d.ts.map +0 -1
- package/dist/factory-registry.js +0 -133
- package/dist/factory-registry.js.map +0 -1
- package/dist/fanout.d.ts.map +0 -1
- package/dist/fanout.js +0 -93
- package/dist/fanout.js.map +0 -1
- package/dist/file-lock.d.ts.map +0 -1
- package/dist/file-lock.js +0 -201
- package/dist/file-lock.js.map +0 -1
- package/dist/finalization.d.ts.map +0 -1
- package/dist/finalization.js.map +0 -1
- package/dist/git-identity.d.ts +0 -13
- package/dist/git-identity.d.ts.map +0 -1
- package/dist/git-identity.js +0 -47
- package/dist/git-identity.js.map +0 -1
- package/dist/grant-env.d.ts +0 -75
- package/dist/grant-env.d.ts.map +0 -1
- package/dist/grant-env.js +0 -154
- package/dist/grant-env.js.map +0 -1
- package/dist/grant-store.d.ts +0 -96
- package/dist/grant-store.d.ts.map +0 -1
- package/dist/grant-store.js +0 -188
- package/dist/grant-store.js.map +0 -1
- package/dist/herdr-cli.d.ts +0 -78
- package/dist/herdr-cli.d.ts.map +0 -1
- package/dist/herdr-cli.js +0 -113
- package/dist/herdr-cli.js.map +0 -1
- package/dist/herdr-name.d.ts.map +0 -1
- package/dist/herdr-name.js.map +0 -1
- package/dist/herdr-pi-lifecycle.d.ts.map +0 -1
- package/dist/herdr-pi-lifecycle.js +0 -22
- package/dist/herdr-pi-lifecycle.js.map +0 -1
- package/dist/herdr-poll.d.ts +0 -133
- package/dist/herdr-poll.d.ts.map +0 -1
- package/dist/herdr-poll.js +0 -222
- package/dist/herdr-poll.js.map +0 -1
- package/dist/herdr-stage.d.ts +0 -40
- package/dist/herdr-stage.d.ts.map +0 -1
- package/dist/herdr-stage.js +0 -54
- package/dist/herdr-stage.js.map +0 -1
- package/dist/herdr-start.d.ts.map +0 -1
- package/dist/herdr-start.js.map +0 -1
- package/dist/init.d.ts +0 -117
- package/dist/init.d.ts.map +0 -1
- package/dist/init.js +0 -323
- package/dist/init.js.map +0 -1
- package/dist/intent-application.d.ts +0 -17
- package/dist/intent-application.d.ts.map +0 -1
- package/dist/intent-application.js +0 -114
- package/dist/intent-application.js.map +0 -1
- package/dist/intent-control.d.ts +0 -201
- package/dist/intent-control.d.ts.map +0 -1
- package/dist/intent-control.js +0 -110
- package/dist/intent-control.js.map +0 -1
- package/dist/intent-scheduling.d.ts +0 -9
- package/dist/intent-scheduling.d.ts.map +0 -1
- package/dist/intent-scheduling.js +0 -15
- package/dist/intent-scheduling.js.map +0 -1
- package/dist/learning-connection.d.ts +0 -127
- package/dist/learning-connection.d.ts.map +0 -1
- package/dist/learning-connection.js +0 -54
- package/dist/learning-connection.js.map +0 -1
- package/dist/lease-helper.d.ts.map +0 -1
- package/dist/lease-helper.js +0 -94
- package/dist/lease-helper.js.map +0 -1
- package/dist/lease-record.d.ts +0 -90
- package/dist/lease-record.d.ts.map +0 -1
- package/dist/lease-record.js.map +0 -1
- package/dist/ledger-append.d.ts +0 -15
- package/dist/ledger-append.d.ts.map +0 -1
- package/dist/ledger-append.js +0 -94
- package/dist/ledger-append.js.map +0 -1
- package/dist/ledger-events.d.ts +0 -131
- package/dist/ledger-events.d.ts.map +0 -1
- package/dist/ledger-events.js +0 -107
- package/dist/ledger-events.js.map +0 -1
- package/dist/ledger-identifiers.d.ts.map +0 -1
- package/dist/ledger-identifiers.js.map +0 -1
- package/dist/ledger-report.d.ts +0 -134
- package/dist/ledger-report.d.ts.map +0 -1
- package/dist/ledger-report.js +0 -271
- package/dist/ledger-report.js.map +0 -1
- package/dist/ledger-v3-validation.d.ts +0 -11
- package/dist/ledger-v3-validation.d.ts.map +0 -1
- package/dist/ledger-v3-validation.js +0 -265
- package/dist/ledger-v3-validation.js.map +0 -1
- package/dist/ledger.d.ts +0 -242
- package/dist/ledger.d.ts.map +0 -1
- package/dist/ledger.js +0 -142
- package/dist/ledger.js.map +0 -1
- package/dist/measured-order.d.ts +0 -249
- package/dist/measured-order.d.ts.map +0 -1
- package/dist/measured-order.js +0 -309
- package/dist/measured-order.js.map +0 -1
- package/dist/measured-session.d.ts +0 -97
- package/dist/measured-session.d.ts.map +0 -1
- package/dist/measured-session.js +0 -134
- package/dist/measured-session.js.map +0 -1
- package/dist/model-preflight.d.ts +0 -13
- package/dist/model-preflight.d.ts.map +0 -1
- package/dist/model-preflight.js +0 -29
- package/dist/model-preflight.js.map +0 -1
- package/dist/native-session-target.d.ts +0 -9
- package/dist/native-session-target.d.ts.map +0 -1
- package/dist/native-session-target.js +0 -29
- package/dist/native-session-target.js.map +0 -1
- package/dist/native-session.d.ts +0 -59
- package/dist/native-session.d.ts.map +0 -1
- package/dist/native-session.js +0 -154
- package/dist/native-session.js.map +0 -1
- package/dist/order-schedule.d.ts +0 -37
- package/dist/order-schedule.d.ts.map +0 -1
- package/dist/order-schedule.js +0 -81
- package/dist/order-schedule.js.map +0 -1
- package/dist/ordinary-children.d.ts +0 -52
- package/dist/ordinary-children.d.ts.map +0 -1
- package/dist/ordinary-children.js +0 -93
- package/dist/ordinary-children.js.map +0 -1
- package/dist/pane-reaper.d.ts +0 -111
- package/dist/pane-reaper.d.ts.map +0 -1
- package/dist/pane-reaper.js +0 -242
- package/dist/pane-reaper.js.map +0 -1
- package/dist/pi-tools.d.ts.map +0 -1
- package/dist/pi-tools.js +0 -21
- package/dist/pi-tools.js.map +0 -1
- package/dist/producer-ipc-contract.d.ts +0 -29
- package/dist/producer-ipc-contract.d.ts.map +0 -1
- package/dist/producer-ipc-contract.js +0 -29
- package/dist/producer-ipc-contract.js.map +0 -1
- package/dist/producer-ipc.d.ts +0 -55
- package/dist/producer-ipc.d.ts.map +0 -1
- package/dist/producer-ipc.js +0 -143
- package/dist/producer-ipc.js.map +0 -1
- package/dist/product-files.d.ts +0 -6
- package/dist/product-files.d.ts.map +0 -1
- package/dist/product-files.js +0 -55
- package/dist/product-files.js.map +0 -1
- package/dist/progress.d.ts.map +0 -1
- package/dist/progress.js.map +0 -1
- package/dist/propagation.d.ts +0 -203
- package/dist/propagation.d.ts.map +0 -1
- package/dist/propagation.js +0 -279
- package/dist/propagation.js.map +0 -1
- package/dist/refusals.d.ts +0 -16
- package/dist/refusals.d.ts.map +0 -1
- package/dist/refusals.js +0 -55
- package/dist/refusals.js.map +0 -1
- package/dist/resolve.d.ts.map +0 -1
- package/dist/resolve.js +0 -211
- package/dist/resolve.js.map +0 -1
- package/dist/resource-budget.d.ts +0 -334
- package/dist/resource-budget.d.ts.map +0 -1
- package/dist/resource-budget.js +0 -415
- package/dist/resource-budget.js.map +0 -1
- package/dist/retention-contract.d.ts.map +0 -1
- package/dist/retention-contract.js +0 -104
- package/dist/retention-contract.js.map +0 -1
- package/dist/retention-json.d.ts.map +0 -1
- package/dist/retention-json.js.map +0 -1
- package/dist/routing-authority.d.ts.map +0 -1
- package/dist/routing-authority.js.map +0 -1
- package/dist/run-child.d.ts +0 -87
- package/dist/run-child.d.ts.map +0 -1
- package/dist/run-child.js +0 -248
- package/dist/run-child.js.map +0 -1
- package/dist/run-herdr.d.ts +0 -119
- package/dist/run-herdr.d.ts.map +0 -1
- package/dist/run-herdr.js +0 -335
- package/dist/run-herdr.js.map +0 -1
- package/dist/skill-packages.d.ts +0 -116
- package/dist/skill-packages.d.ts.map +0 -1
- package/dist/skill-packages.js +0 -295
- package/dist/skill-packages.js.map +0 -1
- package/dist/skill-resources.d.ts.map +0 -1
- package/dist/skill-resources.js +0 -52
- package/dist/skill-resources.js.map +0 -1
- package/dist/spawn.d.ts.map +0 -1
- package/dist/spawn.js.map +0 -1
- package/dist/vendor/adoption.d.ts +0 -129
- package/dist/vendor/adoption.d.ts.map +0 -1
- package/dist/vendor/adoption.js +0 -102
- package/dist/vendor/adoption.js.map +0 -1
- package/dist/vendor/herdr-pi-lifecycle.d.ts.map +0 -1
- package/dist/vendor/herdr-pi-lifecycle.js.map +0 -1
- package/dist/work-command.d.ts +0 -32
- package/dist/work-command.d.ts.map +0 -1
- package/dist/work-command.js +0 -179
- package/dist/work-command.js.map +0 -1
- package/dist/work-ledger-destination.d.ts +0 -20
- package/dist/work-ledger-destination.d.ts.map +0 -1
- package/dist/work-ledger-destination.js +0 -131
- package/dist/work-ledger-destination.js.map +0 -1
- package/dist/work-ledger-json.d.ts +0 -25
- package/dist/work-ledger-json.d.ts.map +0 -1
- package/dist/work-ledger-json.js +0 -267
- package/dist/work-ledger-json.js.map +0 -1
- package/dist/work-ledger-occurrences.d.ts +0 -227
- package/dist/work-ledger-occurrences.d.ts.map +0 -1
- package/dist/work-ledger-occurrences.js +0 -115
- package/dist/work-ledger-occurrences.js.map +0 -1
- package/dist/work-ledger-projection.d.ts +0 -295
- package/dist/work-ledger-projection.d.ts.map +0 -1
- package/dist/work-ledger-projection.js +0 -237
- package/dist/work-ledger-projection.js.map +0 -1
- package/dist/work-ledger-snapshot.d.ts +0 -29
- package/dist/work-ledger-snapshot.d.ts.map +0 -1
- package/dist/work-ledger-snapshot.js +0 -267
- package/dist/work-ledger-snapshot.js.map +0 -1
- package/dist/work-ledger-types.d.ts +0 -261
- package/dist/work-ledger-types.d.ts.map +0 -1
- package/dist/work-ledger-types.js +0 -13
- package/dist/work-ledger-types.js.map +0 -1
- package/dist/work-ledger-validation.d.ts +0 -14
- package/dist/work-ledger-validation.d.ts.map +0 -1
- package/dist/work-ledger-validation.js +0 -226
- package/dist/work-ledger-validation.js.map +0 -1
- package/dist/work-ledger.d.ts +0 -43
- package/dist/work-ledger.d.ts.map +0 -1
- package/dist/work-ledger.js +0 -225
- package/dist/work-ledger.js.map +0 -1
- package/dist/work-policy-registry.d.ts +0 -133
- package/dist/work-policy-registry.d.ts.map +0 -1
- package/dist/work-policy-registry.js +0 -128
- package/dist/work-policy-registry.js.map +0 -1
- package/dist/work-run.d.ts +0 -56
- package/dist/work-run.d.ts.map +0 -1
- package/dist/work-run.js +0 -102
- package/dist/work-run.js.map +0 -1
- package/dist/work-setup.d.ts +0 -40
- package/dist/work-setup.d.ts.map +0 -1
- package/dist/work-setup.js +0 -174
- package/dist/work-setup.js.map +0 -1
- package/dist/workflow-fact-id.d.ts +0 -4
- package/dist/workflow-fact-id.d.ts.map +0 -1
- package/dist/workflow-fact-id.js +0 -14
- package/dist/workflow-fact-id.js.map +0 -1
- package/dist/workflow-facts.d.ts +0 -34
- package/dist/workflow-facts.d.ts.map +0 -1
- package/dist/workflow-facts.js +0 -43
- package/dist/workflow-facts.js.map +0 -1
- package/dist/workspace-lease.d.ts +0 -40
- package/dist/workspace-lease.d.ts.map +0 -1
- package/dist/workspace-lease.js +0 -333
- package/dist/workspace-lease.js.map +0 -1
- package/dist/workspace.d.ts +0 -57
- package/dist/workspace.d.ts.map +0 -1
- package/dist/workspace.js +0 -216
- package/dist/workspace.js.map +0 -1
- package/extensions/daily-dashboard-session.ts +0 -48
- package/extensions/daily-work-session.ts +0 -20
- package/extensions/learning-outcome-session.ts +0 -38
- package/extensions/learning-session.ts +0 -59
- package/extensions/ordinary-runtime.ts +0 -14
- package/extensions/primary-shadow.ts +0 -11
- package/extensions/work-policy-session.ts +0 -139
- package/extensions/work-run-session.ts +0 -75
- package/extensions/work-runtime.ts +0 -44
- package/extensions/work-session.ts +0 -132
- package/src/activity-timeline.ts +0 -133
- package/src/approval-prompt.ts +0 -225
- package/src/approval-store.ts +0 -386
- package/src/approval.ts +0 -399
- package/src/capabilities.ts +0 -220
- package/src/catalog.ts +0 -306
- package/src/check-runner.ts +0 -387
- package/src/control-journal.ts +0 -26
- package/src/correlation.ts +0 -320
- package/src/daily-dashboard-host.ts +0 -105
- package/src/daily-panel.ts +0 -80
- package/src/daily-view-input.ts +0 -59
- package/src/daily-view-render.ts +0 -45
- package/src/daily-view.ts +0 -160
- package/src/dashboard-cli.ts +0 -340
- package/src/dashboard-display-controls.ts +0 -21
- package/src/dashboard-handshake.ts +0 -199
- package/src/dashboard-harness.ts +0 -37
- package/src/dashboard-herdr.ts +0 -363
- package/src/dashboard-host-contract.ts +0 -50
- package/src/dashboard-host-transport.ts +0 -43
- package/src/dashboard-host.ts +0 -244
- package/src/dashboard-menu.ts +0 -28
- package/src/dashboard-observation.ts +0 -46
- package/src/dashboard-projection.ts +0 -390
- package/src/dashboard-render.ts +0 -259
- package/src/debrief-contract.ts +0 -127
- package/src/debrief-fixture.ts +0 -29
- package/src/debrief-host.ts +0 -53
- package/src/debrief-render.ts +0 -49
- package/src/debrief.ts +0 -198
- package/src/definitions.ts +0 -211
- package/src/delegate-types.ts +0 -154
- package/src/delegate.ts +0 -348
- package/src/delegation-approval.ts +0 -126
- package/src/dispatch-control.ts +0 -81
- package/src/effect-profile-runtime.ts +0 -46
- package/src/effect-profile.ts +0 -129
- package/src/execution-retention.ts +0 -230
- package/src/executor.ts +0 -123
- package/src/experiment-contract.ts +0 -66
- package/src/experiment-state.ts +0 -44
- package/src/experiment-store.ts +0 -98
- package/src/experiment.ts +0 -236
- package/src/factory-contract.ts +0 -47
- package/src/factory-migration.ts +0 -29
- package/src/factory-order.ts +0 -56
- package/src/factory-registry.ts +0 -60
- package/src/fanout.ts +0 -106
- package/src/file-lock.ts +0 -178
- package/src/finalization.ts +0 -79
- package/src/git-identity.ts +0 -56
- package/src/grant-env.ts +0 -221
- package/src/grant-store.ts +0 -235
- package/src/herdr-cli.ts +0 -125
- package/src/herdr-pi-lifecycle.ts +0 -21
- package/src/herdr-poll.ts +0 -253
- package/src/herdr-stage.ts +0 -55
- package/src/init.ts +0 -389
- package/src/intent-application.ts +0 -91
- package/src/intent-control.ts +0 -107
- package/src/intent-scheduling.ts +0 -14
- package/src/learning-connection.ts +0 -70
- package/src/lease-helper.ts +0 -97
- package/src/lease-record.ts +0 -131
- package/src/ledger-append.ts +0 -72
- package/src/ledger-events.ts +0 -226
- package/src/ledger-report.ts +0 -357
- package/src/ledger-v3-validation.ts +0 -266
- package/src/ledger.ts +0 -369
- package/src/measured-order.ts +0 -72
- package/src/measured-session.ts +0 -70
- package/src/model-preflight.ts +0 -41
- package/src/native-session-target.ts +0 -23
- package/src/native-session.ts +0 -139
- package/src/order-schedule.ts +0 -42
- package/src/ordinary-children.ts +0 -59
- package/src/pane-reaper.ts +0 -270
- package/src/pi-tools.ts +0 -25
- package/src/producer-ipc-contract.ts +0 -26
- package/src/producer-ipc.ts +0 -107
- package/src/product-files.ts +0 -34
- package/src/propagation.ts +0 -333
- package/src/refusals.ts +0 -70
- package/src/resolve.ts +0 -267
- package/src/resource-budget.ts +0 -349
- package/src/retention-contract.ts +0 -84
- package/src/retention-json.ts +0 -20
- package/src/run-child.ts +0 -303
- package/src/run-herdr.ts +0 -386
- package/src/skill-packages.ts +0 -314
- package/src/skill-resources.ts +0 -48
- package/src/vendor/adoption.ts +0 -109
- package/src/work-command.ts +0 -197
- package/src/work-ledger-destination.ts +0 -113
- package/src/work-ledger-json.ts +0 -228
- package/src/work-ledger-occurrences.ts +0 -99
- package/src/work-ledger-projection.ts +0 -262
- package/src/work-ledger-snapshot.ts +0 -246
- package/src/work-ledger-types.ts +0 -229
- package/src/work-ledger-validation.ts +0 -174
- package/src/work-ledger.ts +0 -186
- package/src/work-policy-registry.ts +0 -81
- package/src/work-run.ts +0 -79
- package/src/work-setup.ts +0 -141
- package/src/workflow-fact-id.ts +0 -16
- package/src/workflow-facts.ts +0 -65
- package/src/workspace-lease.ts +0 -363
- package/src/workspace.ts +0 -308
- /package/contracts/{ledger/v3 → ledger-record/v1}/fixtures/capability-decision.json +0 -0
- /package/contracts/{ledger/v3 → ledger-record/v1}/fixtures/workspace-lease.json +0 -0
- /package/dist/{herdr-name.d.ts → executors/herdr-name.d.ts} +0 -0
- /package/dist/{herdr-name.js → executors/herdr-name.js} +0 -0
- /package/dist/{herdr-pi-lifecycle.d.ts → executors/herdr-pi-lifecycle.d.ts} +0 -0
- /package/dist/{herdr-start.d.ts → executors/herdr-start.d.ts} +0 -0
- /package/dist/{herdr-start.js → executors/herdr-start.js} +0 -0
- /package/dist/{vendor → executors/vendor}/herdr-pi-lifecycle.d.ts +0 -0
- /package/dist/{vendor → executors/vendor}/herdr-pi-lifecycle.js +0 -0
- /package/dist/{file-lock.d.ts → governance/file-lock.d.ts} +0 -0
- /package/dist/{finalization.d.ts → governance/finalization.d.ts} +0 -0
- /package/dist/{finalization.js → governance/finalization.js} +0 -0
- /package/dist/{lease-helper.d.ts → governance/lease-helper.d.ts} +0 -0
- /package/dist/{lease-record.js → governance/lease-record.js} +0 -0
- /package/dist/{retention-contract.d.ts → governance/retention-contract.d.ts} +0 -0
- /package/dist/{retention-json.d.ts → governance/retention-json.d.ts} +0 -0
- /package/dist/{retention-json.js → governance/retention-json.js} +0 -0
- /package/dist/{chain.d.ts → kernel/chain.d.ts} +0 -0
- /package/dist/{chain.js → kernel/chain.js} +0 -0
- /package/dist/{correlation.d.ts → kernel/correlation.d.ts} +0 -0
- /package/dist/{definitions.d.ts → kernel/definitions.d.ts} +0 -0
- /package/dist/{delegate.d.ts → kernel/delegate.d.ts} +0 -0
- /package/dist/{delegation-approval.d.ts → kernel/delegation-approval.d.ts} +0 -0
- /package/dist/{execution-id.d.ts → kernel/execution-id.d.ts} +0 -0
- /package/dist/{execution-id.js → kernel/execution-id.js} +0 -0
- /package/dist/{fanout.d.ts → kernel/fanout.d.ts} +0 -0
- /package/dist/{ledger-identifiers.d.ts → kernel/ledger-identifiers.d.ts} +0 -0
- /package/dist/{ledger-identifiers.js → kernel/ledger-identifiers.js} +0 -0
- /package/dist/{pi-tools.d.ts → kernel/pi-tools.d.ts} +0 -0
- /package/dist/{progress.d.ts → kernel/progress.d.ts} +0 -0
- /package/dist/{progress.js → kernel/progress.js} +0 -0
- /package/dist/{resolve.d.ts → kernel/resolve.d.ts} +0 -0
- /package/dist/{routing-authority.d.ts → kernel/routing-authority.d.ts} +0 -0
- /package/dist/{routing-authority.js → kernel/routing-authority.js} +0 -0
- /package/dist/{skill-resources.d.ts → kernel/skill-resources.d.ts} +0 -0
- /package/dist/{spawn.d.ts → kernel/spawn.d.ts} +0 -0
- /package/dist/{spawn.js → kernel/spawn.js} +0 -0
- /package/dist/{dashboard-render.d.ts → products/dashboard-render.d.ts} +0 -0
- /package/src/{herdr-name.ts → executors/herdr-name.ts} +0 -0
- /package/src/{herdr-start.ts → executors/herdr-start.ts} +0 -0
- /package/src/{vendor → executors/vendor}/herdr-pi-lifecycle.ts +0 -0
- /package/src/{chain.ts → kernel/chain.ts} +0 -0
- /package/src/{execution-id.ts → kernel/execution-id.ts} +0 -0
- /package/src/{ledger-identifiers.ts → kernel/ledger-identifiers.ts} +0 -0
- /package/src/{progress.ts → kernel/progress.ts} +0 -0
- /package/src/{routing-authority.ts → kernel/routing-authority.ts} +0 -0
- /package/src/{spawn.ts → kernel/spawn.ts} +0 -0
package/src/native-session.ts
DELETED
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import { constants } from "node:fs";
|
|
2
|
-
import { open, lstat, realpath } from "node:fs/promises";
|
|
3
|
-
import { isAbsolute, relative, sep } from "node:path";
|
|
4
|
-
import { createHash } from "node:crypto";
|
|
5
|
-
import { parseRetentionJson } from "./retention-json.ts";
|
|
6
|
-
|
|
7
|
-
export const ENV_NATIVE_SESSION_ROOT = "PI_GRANTS_NATIVE_SESSION_ROOT";
|
|
8
|
-
export const MAX_NATIVE_SESSION_BYTES = 1024 * 1024;
|
|
9
|
-
export type NativeSessionSource = "herdr-id" | "herdr-path" | "pi-session-file" | "pi-session-manager";
|
|
10
|
-
export interface NativeSessionObservation {
|
|
11
|
-
source: NativeSessionSource | null;
|
|
12
|
-
status: "missing" | "verified" | "invalid" | "changed" | "truncated" | "unsupported";
|
|
13
|
-
sessionId: string | null;
|
|
14
|
-
sessionPath: string | null;
|
|
15
|
-
parentSessionPath: string | null;
|
|
16
|
-
branchLeafId: string | null;
|
|
17
|
-
branchState: "unknown" | "observed";
|
|
18
|
-
lastPersistedEntryId: string | null;
|
|
19
|
-
sha256: string | null;
|
|
20
|
-
reason: string | null;
|
|
21
|
-
}
|
|
22
|
-
export interface NativeSessionCapture { observation: NativeSessionObservation; bytes?: Buffer; fileIdentity?: { device: string; inode: string } }
|
|
23
|
-
/** Read-only methods of pi 0.84.2's public SessionManager; no runtime/session creation or model work. */
|
|
24
|
-
export interface NativeSessionManager {
|
|
25
|
-
getSessionFile(): string | undefined;
|
|
26
|
-
getSessionId(): string;
|
|
27
|
-
getLeafId(): string | null;
|
|
28
|
-
}
|
|
29
|
-
export const missingNativeSession = (): NativeSessionObservation => ({ source: null, status: "missing", sessionId: null,
|
|
30
|
-
sessionPath: null, parentSessionPath: null, branchLeafId: null, branchState: "unknown", lastPersistedEntryId: null,
|
|
31
|
-
sha256: null, reason: "native-session-unavailable" });
|
|
32
|
-
const id = (x: unknown): x is string => typeof x === "string" && /^[a-zA-Z0-9_-]{1,128}$/.test(x);
|
|
33
|
-
const uuid = (x: unknown): x is string => typeof x === "string" && /^[a-f0-9]{8}(?:-[a-f0-9]{4}){3}-[a-f0-9]{12}$/i.test(x);
|
|
34
|
-
const obj = (x: unknown): x is Record<string, unknown> => x !== null && typeof x === "object" && !Array.isArray(x);
|
|
35
|
-
const filePath = (x: unknown): x is string => typeof x === "string" && x.length <= 4096 && isAbsolute(x) && !x.includes("\0");
|
|
36
|
-
|
|
37
|
-
/** Parse the retained native v3 bytes, never load/migrate/rewrite a session via SessionManager.open(). */
|
|
38
|
-
export function parseNativeSessionBytes(bytes: Uint8Array, input: {
|
|
39
|
-
source: NativeSessionSource; path: string; expectedSessionId?: string; truncated?: boolean;
|
|
40
|
-
liveLeaf?: { sessionId: string; leafId: string | null };
|
|
41
|
-
}): NativeSessionCapture {
|
|
42
|
-
const observation = { ...missingNativeSession(), source: input.source, sessionPath: input.path };
|
|
43
|
-
const result: NativeSessionCapture = { observation };
|
|
44
|
-
const fail = (status: NativeSessionObservation["status"], reason: string) => {
|
|
45
|
-
observation.status = status; observation.reason = reason; observation.branchLeafId = null; observation.branchState = "unknown";
|
|
46
|
-
return result;
|
|
47
|
-
};
|
|
48
|
-
if (bytes.length > MAX_NATIVE_SESSION_BYTES) return fail("truncated", "native-session-size-limit");
|
|
49
|
-
const raw = Buffer.from(bytes), newline = raw.indexOf(10);
|
|
50
|
-
let header: unknown;
|
|
51
|
-
try { header = parseRetentionJson(new TextDecoder("utf-8", { fatal: true }).decode(raw.subarray(0, newline < 0 ? raw.length : newline)), MAX_NATIVE_SESSION_BYTES); }
|
|
52
|
-
catch { return fail("invalid", "native-session-header-invalid"); }
|
|
53
|
-
if (!obj(header) || header.type !== "session" || header.version !== 3 || !uuid(header.id) ||
|
|
54
|
-
!filePath(header.cwd) || typeof header.timestamp !== "string" || !Number.isFinite(Date.parse(header.timestamp)) ||
|
|
55
|
-
(header.parentSession !== undefined && !filePath(header.parentSession))) return fail("invalid", "native-session-header-invalid");
|
|
56
|
-
if (input.expectedSessionId !== undefined && header.id !== input.expectedSessionId) return fail("changed", "native-session-id-changed");
|
|
57
|
-
// Only validated session headers admit transcript bytes; arbitrary files are never archived here.
|
|
58
|
-
result.bytes = Buffer.from(bytes);
|
|
59
|
-
observation.sessionId = header.id;
|
|
60
|
-
observation.parentSessionPath = header.parentSession as string | undefined ?? null;
|
|
61
|
-
observation.sha256 = createHash("sha256").update(bytes).digest("hex");
|
|
62
|
-
if (input.truncated || raw.at(-1) !== 10) return fail("truncated", "native-session-incomplete-bytes");
|
|
63
|
-
let text: string;
|
|
64
|
-
try { text = new TextDecoder("utf-8", { fatal: true }).decode(raw); }
|
|
65
|
-
catch { return fail("invalid", "native-session-utf8-invalid"); }
|
|
66
|
-
const lines = text.split("\n");
|
|
67
|
-
const ids = new Set<string>();
|
|
68
|
-
if (lines.length > 10002) return fail("invalid", "native-session-entry-limit");
|
|
69
|
-
for (const line of lines.slice(1, -1)) {
|
|
70
|
-
let entry: unknown;
|
|
71
|
-
try { entry = parseRetentionJson(line, MAX_NATIVE_SESSION_BYTES); } catch { return fail("invalid", "native-session-entry-invalid"); }
|
|
72
|
-
if (!obj(entry) || typeof entry.type !== "string" || entry.type === "session" || !id(entry.id) || ids.has(entry.id) ||
|
|
73
|
-
!(entry.parentId === null || (id(entry.parentId) && ids.has(entry.parentId))) || typeof entry.timestamp !== "string" ||
|
|
74
|
-
!Number.isFinite(Date.parse(entry.timestamp))) return fail("invalid", "native-session-parent-link-invalid");
|
|
75
|
-
ids.add(entry.id); observation.lastPersistedEntryId = entry.id;
|
|
76
|
-
}
|
|
77
|
-
if (input.liveLeaf) {
|
|
78
|
-
if (input.liveLeaf.sessionId !== header.id || (input.liveLeaf.leafId !== null && !ids.has(input.liveLeaf.leafId))) {
|
|
79
|
-
return fail("changed", "native-session-live-leaf-mismatch");
|
|
80
|
-
}
|
|
81
|
-
observation.branchLeafId = input.liveLeaf.leafId; observation.branchState = "observed";
|
|
82
|
-
}
|
|
83
|
-
observation.status = "verified"; observation.reason = observation.branchState === "unknown" ? "active-branch-unknown" : null;
|
|
84
|
-
return result;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/** Private allowlisted files only, bounded non-following descriptor reads, no scan of session/auth dirs. */
|
|
88
|
-
export async function readNativeSession(input: {
|
|
89
|
-
path: string; source: NativeSessionSource; expectedSessionId?: string; allowedRoot?: string;
|
|
90
|
-
manager?: NativeSessionManager;
|
|
91
|
-
expectedFile?: { device: string; inode: string };
|
|
92
|
-
}): Promise<NativeSessionCapture> {
|
|
93
|
-
const gap = (status: NativeSessionObservation["status"], reason: string): NativeSessionCapture => ({ observation: {
|
|
94
|
-
...missingNativeSession(), source: input.source, status, reason, sessionPath: filePath(input.path) ? input.path : null,
|
|
95
|
-
} });
|
|
96
|
-
const root = input.allowedRoot ?? process.env[ENV_NATIVE_SESSION_ROOT];
|
|
97
|
-
if (!filePath(input.path) || !input.path.endsWith(".jsonl") || !root || !filePath(root)) return gap("unsupported", "native-session-private-root-required");
|
|
98
|
-
const within = (base: string, candidate: string) => { const p = relative(base, candidate); return p !== "" && p !== ".." && !p.startsWith(`..${sep}`) && !isAbsolute(p); };
|
|
99
|
-
if (!within(root, input.path)) return gap("unsupported", "native-session-outside-private-root");
|
|
100
|
-
let handle: Awaited<ReturnType<typeof open>> | undefined;
|
|
101
|
-
try {
|
|
102
|
-
const canonicalRoot = await realpath(root), canonicalFile = await realpath(input.path);
|
|
103
|
-
const rootStat = await lstat(canonicalRoot);
|
|
104
|
-
if (!rootStat.isDirectory() || (rootStat.mode & 0o077) !== 0 || (typeof process.getuid === "function" && rootStat.uid !== process.getuid())) return gap("unsupported", "native-session-root-not-private");
|
|
105
|
-
if (!within(canonicalRoot, canonicalFile) || (await lstat(input.path)).isSymbolicLink()) return gap("unsupported", "native-session-path-alias");
|
|
106
|
-
handle = await open(input.path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
|
|
107
|
-
const before = await handle.stat();
|
|
108
|
-
if (!before.isFile() || before.nlink !== 1 || (typeof process.getuid === "function" && before.uid !== process.getuid())) {
|
|
109
|
-
return gap("unsupported", "native-session-not-private-regular-file");
|
|
110
|
-
}
|
|
111
|
-
const fileIdentity = { device: String(before.dev), inode: String(before.ino) };
|
|
112
|
-
if (input.expectedFile && (input.expectedFile.device !== fileIdentity.device || input.expectedFile.inode !== fileIdentity.inode)) return gap("changed", "native-session-file-replaced");
|
|
113
|
-
const live = input.manager ? { sessionId: input.manager.getSessionId(), leafId: input.manager.getLeafId(), path: input.manager.getSessionFile() } : undefined;
|
|
114
|
-
if (live && live.path !== input.path) return gap("changed", "native-session-manager-path-changed");
|
|
115
|
-
const bytes = Buffer.alloc(Math.min(before.size, MAX_NATIVE_SESSION_BYTES));
|
|
116
|
-
let offset = 0;
|
|
117
|
-
while (offset < bytes.length) { const read = await handle.read(bytes, offset, bytes.length - offset, offset); if (!read.bytesRead) break; offset += read.bytesRead; }
|
|
118
|
-
const after = await handle.stat(), location = await lstat(input.path);
|
|
119
|
-
if (before.dev !== location.dev || before.ino !== location.ino || before.size !== after.size || before.mtimeMs !== after.mtimeMs ||
|
|
120
|
-
before.ctimeMs !== after.ctimeMs || location.isSymbolicLink() || after.size !== location.size) return gap("changed", "native-session-file-changed");
|
|
121
|
-
if (live && (input.manager!.getSessionId() !== live.sessionId || input.manager!.getLeafId() !== live.leafId || input.manager!.getSessionFile() !== live.path)) {
|
|
122
|
-
return gap("changed", "native-session-live-state-changed");
|
|
123
|
-
}
|
|
124
|
-
return { ...parseNativeSessionBytes(bytes.subarray(0, offset), { ...input, liveLeaf: live,
|
|
125
|
-
truncated: before.size > MAX_NATIVE_SESSION_BYTES || offset !== before.size }), fileIdentity };
|
|
126
|
-
} catch (error) {
|
|
127
|
-
return gap((error as NodeJS.ErrnoException).code === "ENOENT" ? "missing" : "invalid", "native-session-read-failed");
|
|
128
|
-
} finally { await handle?.close().catch(() => undefined); }
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/** Herdr 0.8.2 protocol 20 AgentInfo.agent_session; never scrape terminal text, PID or names. */
|
|
132
|
-
export function herdrSessionReference(value: unknown, expectedPane: string): { source: "herdr-id" | "herdr-path"; value: string } | null {
|
|
133
|
-
if (!obj(value) || value.pane_id !== expectedPane || value.agent !== "pi" || !obj(value.agent_session)) return null;
|
|
134
|
-
const s = value.agent_session;
|
|
135
|
-
if (s.agent !== "pi" || typeof s.source !== "string" || s.source.length > 128) return null;
|
|
136
|
-
if (s.kind === "id" && uuid(s.value)) return { source: "herdr-id", value: s.value };
|
|
137
|
-
if (s.kind === "path" && filePath(s.value)) return { source: "herdr-path", value: s.value };
|
|
138
|
-
return null;
|
|
139
|
-
}
|
package/src/order-schedule.ts
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { closed, cloneExperiment, experimentHash } from "./experiment-contract.ts";
|
|
2
|
-
import type { VariantRecord } from "./experiment-state.ts";
|
|
3
|
-
export interface OrderNode { nodeId: string; dependencies: readonly string[]; executions: readonly string[]; expectedDigest: string; decision: { decisionId: string; authorityId: string } | null }
|
|
4
|
-
export interface OrderSchedule { version: "order-schedule-v1"; policyDigest: string; nodes: readonly OrderNode[] }
|
|
5
|
-
export interface FactoryDecision { version: "factory-decision-v1"; requestId: string; bindingDigest: string; nodeId: string; evidenceDigest: string; authorityId: string; choice: "approve" | "reject" }
|
|
6
|
-
export const factoryDecisionDigest = (d: FactoryDecision) => experimentHash(factoryDecision(d));
|
|
7
|
-
export function factoryDecision(value: FactoryDecision): FactoryDecision {
|
|
8
|
-
const d = cloneExperiment(value); closed(d,["version","requestId","bindingDigest","nodeId","evidenceDigest","authorityId","choice"]);
|
|
9
|
-
if(d.version!=="factory-decision-v1" || ![d.requestId,d.nodeId,d.authorityId].every(x=>typeof x==="string"&&/^[a-zA-Z0-9:_-]{1,128}$/.test(x)) || ![d.bindingDigest,d.evidenceDigest].every(x=>typeof x==="string"&&/^[a-f0-9]{64}$/.test(x)) || !["approve","reject"].includes(d.choice))throw new Error("invalid reserved decision");return d;
|
|
10
|
-
}
|
|
11
|
-
export function orderSchedule(input: OrderSchedule, executions: readonly string[]): OrderSchedule {
|
|
12
|
-
const s=cloneExperiment(input);closed(s,["version","policyDigest","nodes"]);
|
|
13
|
-
if(s.version!=="order-schedule-v1"|| !/^[a-f0-9]{64}$/.test(s.policyDigest)||!Array.isArray(s.nodes)||!s.nodes.length||s.nodes.length>16)throw new Error("bounded order schedule required");
|
|
14
|
-
const ids=new Set<string>(),all:string[]=[];
|
|
15
|
-
for(const n of s.nodes as readonly OrderNode[]){closed(n,["nodeId","dependencies","executions","expectedDigest","decision"]);
|
|
16
|
-
if(!/^[a-zA-Z0-9:_-]{1,128}$/.test(n.nodeId)||ids.has(n.nodeId)||!Array.isArray(n.dependencies)||n.dependencies.length>16||new Set(n.dependencies).size!==n.dependencies.length||!Array.isArray(n.executions)||n.executions.length<1||n.executions.length>3||!/^[a-f0-9]{64}$/.test(n.expectedDigest))throw new Error("invalid node/dependency/recovery policy");
|
|
17
|
-
if(n.decision!==null){closed(n.decision,["decisionId","authorityId"]);if(![n.decision.decisionId,n.decision.authorityId].every(x=>/^[a-zA-Z0-9:_-]{1,128}$/.test(x)))throw new Error("invalid decision owner");}
|
|
18
|
-
ids.add(n.nodeId);all.push(...n.executions);
|
|
19
|
-
}
|
|
20
|
-
if(new Set(all).size!==all.length||all.length!==executions.length||all.some(x=>!executions.includes(x)))throw new Error("schedule must own every reserved execution exactly once");
|
|
21
|
-
const visiting=new Set<string>(),done=new Set<string>();
|
|
22
|
-
const visit=(id:string)=>{if(done.has(id))return;if(visiting.has(id))throw new Error("dependency cycle");const n=s.nodes.find(n=>n.nodeId===id);if(!n)throw new Error("missing dependency");visiting.add(id);n.dependencies.forEach(visit);visiting.delete(id);done.add(id);};s.nodes.forEach(n=>visit(n.nodeId));return s;
|
|
23
|
-
}
|
|
24
|
-
export interface OrderNodeView {nodeId:string;state:"eligible"|"running"|"unknown"|"exhausted"|"decision-required"|"decision-rejected"|"dependency-blocked"|"satisfied";action:"dispatch"|"decide"|"wait"|"stakeholder"|"none";executionId:string|null;evidenceDigest:string|null}
|
|
25
|
-
export function evaluateOrder(s:OrderSchedule,variants:readonly VariantRecord[],digests:ReadonlyMap<string,string|null>,decisions:readonly FactoryDecision[]):OrderNodeView[]{
|
|
26
|
-
const rows=new Map<string,OrderNodeView>();
|
|
27
|
-
function evaluate(n:OrderNode):OrderNodeView{
|
|
28
|
-
if(rows.has(n.nodeId))return rows.get(n.nodeId)!;
|
|
29
|
-
const row:OrderNodeView={nodeId:n.nodeId,state:"exhausted",action:"stakeholder",executionId:null,evidenceDigest:null};
|
|
30
|
-
if(n.dependencies.some(id=>evaluate(s.nodes.find(n=>n.nodeId===id)!).state!=="satisfied")){row.state="dependency-blocked";row.action="wait";rows.set(n.nodeId,row);return row;}
|
|
31
|
-
for(const id of n.executions){const v=variants.find(v=>v.executionId===id)!;row.executionId=id;
|
|
32
|
-
if(v.state==="unknown"){row.state="unknown";row.action="stakeholder";break;}
|
|
33
|
-
if(v.state==="completed"&&digests.get(id)===n.expectedDigest){row.evidenceDigest=experimentHash({nodeId:n.nodeId,policyDigest:s.policyDigest,executionId:id,artifactDigest:v.artifactDigest,expectedDigest:n.expectedDigest});
|
|
34
|
-
const d=decisions.find(d=>d.nodeId===n.nodeId&&d.evidenceDigest===row.evidenceDigest);
|
|
35
|
-
row.state=n.decision?d?d.choice==="approve"?"satisfied":"decision-rejected":"decision-required":"satisfied";row.action=row.state==="decision-required"?"decide":row.state==="decision-rejected"?"stakeholder":"none";break;}
|
|
36
|
-
if(["unstarted","queued"].includes(v.state)){row.state="eligible";row.action="dispatch";break;}
|
|
37
|
-
if(["dispatching","running"].includes(v.state)){row.state="running";row.action="wait";break;}
|
|
38
|
-
}
|
|
39
|
-
rows.set(n.nodeId,row);return row;
|
|
40
|
-
}
|
|
41
|
-
return s.nodes.map(evaluate);
|
|
42
|
-
}
|
package/src/ordinary-children.ts
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { isExecutionId } from "./execution-id.ts";
|
|
3
|
-
import { dataDigest, detached, freeze, sha } from "./debrief-contract.ts";
|
|
4
|
-
import { controlShape } from "./dispatch-control.ts";
|
|
5
|
-
export interface OrdinaryTarget { executionId:string; parentExecutionId:string|null; toolCallId:string|null }
|
|
6
|
-
export interface OrdinaryCancellation { version:"ordinary-cancel-v1"; requestId:string; bindingDigest:string; expectedRevision:number; target:OrdinaryTarget }
|
|
7
|
-
export interface OrdinaryAuthority { bindingDigest:string; requestDigests:readonly string[] }
|
|
8
|
-
type ControlState="not-assessed"|"failed"|"unknown";
|
|
9
|
-
interface Row { target:OrdinaryTarget; state:"active"|"settled"|"unknown"; abortRequested:boolean; control:ControlState; boundary:ControlState; outcome:unknown }
|
|
10
|
-
interface State { holds:Set<string>; enabled:boolean; coverageGap:boolean; bindingDigest:string; revision:number; rows:Map<string,Row>; handles:Map<string,AbortController>; requests:Map<string,{digest:string;result:unknown}> }
|
|
11
|
-
const sessions=new WeakMap<object,OrdinaryChildren>(),ports=new WeakMap<object,State>();
|
|
12
|
-
const id=(v:unknown)=>typeof v==="string"&&/^[a-zA-Z0-9:_-]{1,128}$/.test(v);
|
|
13
|
-
function target(value:OrdinaryTarget){const t=detached(value);controlShape(t,["executionId","parentExecutionId","toolCallId"]);if(!isExecutionId(t.executionId)||!(t.parentExecutionId===null||isExecutionId(t.parentExecutionId))||!(t.toolCallId===null||typeof t.toolCallId==="string"&&t.toolCallId.length>0&&t.toolCallId.length<=256))throw Error("exact original occurrence identity required");return t;}
|
|
14
|
-
export function ordinaryCancellation(input:OrdinaryCancellation){const r=detached(input);controlShape(r,["version","requestId","bindingDigest","expectedRevision","target"]);if(r.version!=="ordinary-cancel-v1"||!id(r.requestId)||!sha(r.bindingDigest)||!Number.isSafeInteger(r.expectedRevision)||r.expectedRevision<0)throw Error("invalid ordinary cancellation");return freeze({...r,target:target(r.target)});}
|
|
15
|
-
export const ordinaryCancellationDigest=(r:OrdinaryCancellation)=>dataDigest(ordinaryCancellation(r));
|
|
16
|
-
export interface OrdinaryChildren { readonly bindingDigest:string; inspect():unknown; quiescent():boolean; cancel(request:OrdinaryCancellation,authority:OrdinaryAuthority|null):unknown }
|
|
17
|
-
export const isOrdinaryChildren=(p:unknown):p is OrdinaryChildren=>typeof p==="object"&&p!==null&&ports.has(p);
|
|
18
|
-
/** Extension-internal constructor. No disk discovery/recovery and no identity inferred from labels. */
|
|
19
|
-
function initializeOrdinaryChildren(session:object):void {
|
|
20
|
-
if(sessions.has(session))throw Error("original session already registered");
|
|
21
|
-
const s:State={holds:new Set(),enabled:false,coverageGap:false,bindingDigest:dataDigest({occurrence:randomUUID()}),revision:0,rows:new Map(),handles:new Map(),requests:new Map()};
|
|
22
|
-
const port:OrdinaryChildren=Object.freeze({bindingDigest:s.bindingDigest,
|
|
23
|
-
quiescent:()=>!s.coverageGap&&[...s.rows.values()].every(r=>r.state==="settled"&&r.boundary==="not-assessed"),
|
|
24
|
-
inspect:()=>freeze(detached({bindingDigest:s.bindingDigest,revision:s.revision,children:[...s.rows.values()],admission:s.holds.size?"held-by-original-owner":"open",coverage:s.coverageGap?"unretained-before-opt-in":"original-registered-lifetimes-only",freshness:"snapshot-unknown",recovery:"unavailable",acceptance:"not-assessed"})),
|
|
25
|
-
cancel(input:OrdinaryCancellation,authority:OrdinaryAuthority|null){
|
|
26
|
-
const r=ordinaryCancellation(input),digest=ordinaryCancellationDigest(input),old=s.requests.get(r.requestId);
|
|
27
|
-
if(old){if(old.digest!==digest)throw Error("immutable ordinary cancellation ID");return freeze(detached(old.result));}
|
|
28
|
-
if(r.bindingDigest!==s.bindingDigest||r.expectedRevision!==s.revision)throw Error("stale original ordinary controller CAS");
|
|
29
|
-
if(!authority||authority.bindingDigest!==s.bindingDigest||!authority.requestDigests.includes(digest))throw Error("independent exact ordinary cancellation authority required");
|
|
30
|
-
const row=s.rows.get(r.target.executionId),handle=s.handles.get(r.target.executionId);
|
|
31
|
-
if(!row||dataDigest(row.target)!==dataDigest(r.target)||row.state!=="active"||!handle)throw Error("original live child handle unavailable; no recovery");
|
|
32
|
-
if(s.requests.size>=1024)throw Error("ordinary cancellation capacity exhausted");
|
|
33
|
-
// Synchronous original-handle operation: CAS cannot yield between checking and requesting abort.
|
|
34
|
-
const result={state:"abort-requested",target:r.target,revision:++s.revision,completion:"pending-original-caller",durability:"process-local"};
|
|
35
|
-
s.requests.set(r.requestId,{digest,result});row.abortRequested=true;handle.abort();return freeze(detached(result));
|
|
36
|
-
}});
|
|
37
|
-
sessions.set(session,port);ports.set(port,s);
|
|
38
|
-
}
|
|
39
|
-
/** Only the original session object can retrieve its retained port; spreading/copying cannot. */
|
|
40
|
-
export function ordinaryChildrenFor(session:object):OrdinaryChildren {const p=sessions.get(session);if(!p)throw Error("original grants session required");ports.get(p)!.enabled=true;return p;}
|
|
41
|
-
/** Associate the actual extension API object at factory creation, never a label or path. */
|
|
42
|
-
export function associateOrdinaryHost(host:object,session:object){initializeOrdinaryChildren(session);const p=sessions.get(session);if(!p||sessions.has(host))throw Error("original unbound extension host required");sessions.set(host,p);}
|
|
43
|
-
export function retainSessionChild(session:object,input:OrdinaryTarget,caller?:AbortSignal){const p=sessions.get(session);if(!p)return undefined;const s=ports.get(p)!;if(!s.enabled){s.coverageGap=true;return undefined;}return retainOrdinaryChild(p,input,caller);}
|
|
44
|
-
/** Internal host control seam, not a model tool or recovered capability. Reads never call it. */
|
|
45
|
-
export function holdOrdinaryDispatch(port:OrdinaryChildren,key:string){
|
|
46
|
-
const s=ports.get(port);if(!s||!sha(key))throw Error("original ordinary boundary required");
|
|
47
|
-
if(s.coverageGap||[...s.rows.values()].some(r=>r.state!=="active"&&r.boundary!=="not-assessed"))throw Error("ordinary boundary unavailable; no recovery");
|
|
48
|
-
if(!s.holds.has(key)){if(s.holds.size>=32)throw Error("ordinary boundary capacity exhausted");s.holds.add(key);s.revision++;}
|
|
49
|
-
return Object.freeze({ready:()=>port.quiescent(),release:()=>{if(s.holds.delete(key))s.revision++;}});
|
|
50
|
-
}
|
|
51
|
-
/** Extension executor seam; never exported through the package root or model tools. */
|
|
52
|
-
export function retainOrdinaryChild(port:OrdinaryChildren,input:OrdinaryTarget,caller?:AbortSignal){
|
|
53
|
-
const s=ports.get(port);if(!s)throw Error("original ordinary controller required");const t=target(input);
|
|
54
|
-
if(s.holds.size)throw Error("ordinary dispatch held at original control boundary");
|
|
55
|
-
if(s.rows.has(t.executionId)||s.rows.size>=1024)throw Error("ordinary occurrence reused or capacity exhausted");
|
|
56
|
-
const abort=new AbortController(),row:Row={target:t,state:"active",abortRequested:false,control:"not-assessed",boundary:"not-assessed",outcome:null};s.rows.set(t.executionId,row);s.handles.set(t.executionId,abort);s.revision++;
|
|
57
|
-
let done=false;return {signal:caller?AbortSignal.any([caller,abort.signal]):abort.signal,
|
|
58
|
-
settle(outcome:unknown,control:ControlState,boundary:ControlState=control){if(done)throw Error("original child already settled");done=true;row.outcome=detached(outcome);row.control=control;row.boundary=boundary;row.state=boundary==="unknown"?"unknown":"settled";s.handles.delete(t.executionId);s.revision++;}};
|
|
59
|
-
}
|
package/src/pane-reaper.ts
DELETED
|
@@ -1,270 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Close herdr panes this process opened but never got to close.
|
|
3
|
-
*
|
|
4
|
-
* **As of ADR-0032 a pane belongs to the AGENT RUN, not to the tool call.** `runHerdrPane` closes a tab only for
|
|
5
|
-
* a child that did *not* settle — closing the tab is the only kill herdr offers, so a child still working must
|
|
6
|
-
* lose its pane. A child that answered keeps its pane so a human can read it, and this module reaps those: at
|
|
7
|
-
* `agent_settled` (async) and at process `exit` (sync backstop).
|
|
8
|
-
*
|
|
9
|
-
* The gap that remains is the one this module was created for. A pi session **killed outright** runs no `exit`
|
|
10
|
-
* handler, so it leaves one pane per tracked child, and `docs/probes/g16-herdr` records that an orphaned pane is
|
|
11
|
-
* not trivially closable afterwards. R-62 was re-rated L×L → M×L when ADR-0031 made panes the default path.
|
|
12
|
-
*
|
|
13
|
-
* **Registered on `exit` only, deliberately — not on SIGINT or SIGTERM.** That is the part worth reading,
|
|
14
|
-
* because the obvious fix is the dangerous one. Adding a signal listener *suppresses Node's default
|
|
15
|
-
* termination*, so a library that adds one takes over an application-level decision it has no standing to
|
|
16
|
-
* make: pi uses SIGINT to interrupt a turn, and a listener here that re-raised would turn "cancel this
|
|
17
|
-
* delegation" into "exit pi". A governance package quietly changing the host's interrupt semantics is a
|
|
18
|
-
* worse defect than the leak it fixes, and it would land on **every** session rather than the opt-in ones.
|
|
19
|
-
*
|
|
20
|
-
* So the coverage is exact and stated rather than implied:
|
|
21
|
-
*
|
|
22
|
-
* - **Covered:** normal exit, `process.exit()`, an uncaught exception that unwinds to the default handler.
|
|
23
|
-
* - **NOT covered:** SIGKILL, and SIGTERM/SIGINT where nothing else in the process has installed a
|
|
24
|
-
* listener. Node terminates without running `exit` handlers in those cases, by design. A pane can still
|
|
25
|
-
* be orphaned there, and `herdr tab close <id>` is the manual remedy.
|
|
26
|
-
*
|
|
27
|
-
* Everything here is **synchronous**, because an `exit` handler is: a promise scheduled there never runs.
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
import { execFileSync } from "node:child_process";
|
|
31
|
-
import { rmSync } from "node:fs";
|
|
32
|
-
import { rm } from "node:fs/promises";
|
|
33
|
-
import { MAX_CHILDREN_PER_CALL } from "./fanout.ts";
|
|
34
|
-
import { defaultExec, parseReply, type HerdrExec } from "./herdr-cli.ts";
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* How many panes may be open at once — ADR-0032.
|
|
38
|
-
*
|
|
39
|
-
* **Derived from `MAX_CHILDREN_PER_CALL` rather than declared, so the two cannot drift.** The bound is not
|
|
40
|
-
* decoration: `delegate_all` is capped per call and the fan-out budget bounds a subtree, but a plain blocking
|
|
41
|
-
* `delegate` spends **nothing** from that budget by design — so thirty sequential `delegate` calls in one agent
|
|
42
|
-
* run would otherwise hold thirty panes open until it settled.
|
|
43
|
-
*/
|
|
44
|
-
export const MAX_OPEN_PANES = MAX_CHILDREN_PER_CALL;
|
|
45
|
-
|
|
46
|
-
export interface OpenPane {
|
|
47
|
-
/** herdr tab id — what `tab close` takes. */
|
|
48
|
-
tab: string;
|
|
49
|
-
/** herdr agent name, for diagnostics. There is no `agent stop`, so nothing acts on it — see `closePane`. */
|
|
50
|
-
name: string;
|
|
51
|
-
/** Staged system-prompt directory, removed with the pane it belonged to. */
|
|
52
|
-
promptDir?: string;
|
|
53
|
-
/**
|
|
54
|
-
* True once the child has answered and stopped working.
|
|
55
|
-
*
|
|
56
|
-
* **The trim may only close a pane with this set**, and that is a correctness rule rather than politeness. pi
|
|
57
|
-
* executes tool calls in **parallel** by default, and a plain `delegate` spends nothing from the fan-out
|
|
58
|
-
* budget — so one assistant message can hold `delegate_all(8)` *and* a `delegate`, and the ninth pane's trim
|
|
59
|
-
* used to close the oldest **live sibling**. Measured: two `delegate_all(8)` in one message killed **8 of 16
|
|
60
|
-
* children mid-work**, each reported as "could not be started" with its partial output discarded, while the
|
|
61
|
-
* ledger recorded all sixteen as provisioned. ADR-0032 argued the cap from *sequential* delegates only.
|
|
62
|
-
*/
|
|
63
|
-
settled?: boolean;
|
|
64
|
-
/**
|
|
65
|
-
* The operator asked to keep this tab (`PI_GRANTS_HERDR_KEEP_PANE=1`), so no sweep may close it.
|
|
66
|
-
*
|
|
67
|
-
* It is registered anyway, and only for its `promptDir`: that temp dir was otherwise unreachable by either
|
|
68
|
-
* sweep and leaked one directory per kept pane, forever. So `exit` removes the staged prompt and leaves the
|
|
69
|
-
* tab, which is exactly what the flag promises.
|
|
70
|
-
*/
|
|
71
|
-
keepTab?: boolean;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/** A run has finished with its pane: the trim may now reclaim it. */
|
|
75
|
-
export function markPaneSettled(tab: string): void {
|
|
76
|
-
const pane = open.get(tab);
|
|
77
|
-
if (pane) pane.settled = true;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Panes opened by THIS process and not yet closed. Keyed by tab id, so a double close is impossible.
|
|
82
|
-
*
|
|
83
|
-
* **That keying rests on tab ids being unique, which was measured rather than assumed** (herdr 0.7.5): ids
|
|
84
|
-
* are `w<workspace>:t<counter>`, allocated by the single server, and **not recycled** — creating a tab,
|
|
85
|
-
* closing it, and creating again yields the next counter value, never the freed one. If that ever changed,
|
|
86
|
-
* concurrent panes would collapse into one entry and an early finisher's `untrackPane` would drop a live
|
|
87
|
-
* sibling. Recorded because the hazard is invisible in the code and the precondition lives in another
|
|
88
|
-
* project.
|
|
89
|
-
*/
|
|
90
|
-
const open = new Map<string, OpenPane>();
|
|
91
|
-
let hookInstalled = false;
|
|
92
|
-
|
|
93
|
-
/** A run has opened a pane. Idempotent per tab, and installs the exit hook on first use only. */
|
|
94
|
-
export function trackPane(pane: OpenPane): void {
|
|
95
|
-
open.set(pane.tab, pane);
|
|
96
|
-
if (hookInstalled) return;
|
|
97
|
-
hookInstalled = true;
|
|
98
|
-
// `once`, and only ever one, so a fan-out of eight children does not install eight handlers and trip
|
|
99
|
-
// Node's MaxListenersExceededWarning — which would be this package printing a warning about itself.
|
|
100
|
-
process.once("exit", () => void reapOpenPanes());
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/** A run closed its own pane the normal way. */
|
|
104
|
-
export function untrackPane(tab: string): void {
|
|
105
|
-
open.delete(tab);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/** How many panes are currently outstanding — for tests and for `/grants`. */
|
|
109
|
-
export function openPaneCount(): number {
|
|
110
|
-
return open.size;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/** Per-command wall clock. `SIGKILL` because `timeout` alone is not a bound — see `TOTAL_BUDGET_MS`. */
|
|
114
|
-
const PER_CALL_MS = 2000;
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Total wall clock the whole sweep may add to process exit.
|
|
118
|
-
*
|
|
119
|
-
* **Measured, and the reason this exists.** With eight panes and a hung herdr, a per-call timeout of 5s
|
|
120
|
-
* across two calls per pane is **80 seconds of silent hang at shutdown** — `stdio: "ignore"`, so the process
|
|
121
|
-
* looks wedged with no output. Worse, `timeout` is not a hard bound at all: `spawnSync` sends `SIGTERM` and
|
|
122
|
-
* then waits for the child to actually die, so a process ignoring `SIGTERM` runs to its own completion
|
|
123
|
-
* (measured: a 3s timeout took 59.8s against `trap '' TERM; sleep 60`). Hence `killSignal: "SIGKILL"` **and**
|
|
124
|
-
* a budget across the whole sweep rather than per call.
|
|
125
|
-
*
|
|
126
|
-
* A pane left open because the budget ran out is the failure this whole module downgrades to, and it is the
|
|
127
|
-
* right one: `herdr tab close <id>` is a five-second manual fix, whereas a shell that will not exit is not.
|
|
128
|
-
*/
|
|
129
|
-
const TOTAL_BUDGET_MS = 6000;
|
|
130
|
-
|
|
131
|
-
/** Run one herdr command synchronously, swallowing everything: at exit there is nowhere to report. */
|
|
132
|
-
const defaultSyncExec = (args: string[]): void => {
|
|
133
|
-
execFileSync("herdr", args, { stdio: "ignore", timeout: PER_CALL_MS, killSignal: "SIGKILL" });
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Close every outstanding pane and return the tab ids closed.
|
|
138
|
-
*
|
|
139
|
-
* Exported and parameterised so it can be tested without herdr installed: the exit hook is unreachable from
|
|
140
|
-
* a test (registering a real `exit` handler would run during the test runner's own shutdown), so the hook is
|
|
141
|
-
* one line and *this* is where the behaviour lives.
|
|
142
|
-
*
|
|
143
|
-
* Failures are swallowed per pane rather than per call — one pane herdr will not close must not strand the
|
|
144
|
-
* other seven, and nothing at exit has anywhere to report to anyway.
|
|
145
|
-
*/
|
|
146
|
-
export function reapOpenPanes(syncExec: (args: string[]) => void = defaultSyncExec, now = Date.now): string[] {
|
|
147
|
-
const closed: string[] = [];
|
|
148
|
-
const deadline = now() + TOTAL_BUDGET_MS;
|
|
149
|
-
for (const pane of [...open.values()]) {
|
|
150
|
-
// Checked BEFORE each pane rather than after, so the budget bounds what we start, not what we finish.
|
|
151
|
-
// Panes left behind stay in the map; there is no later sweep, and saying so is the honest position —
|
|
152
|
-
// `openPaneCount()` is non-zero afterwards precisely so a caller could report it if it ever wanted to.
|
|
153
|
-
if (now() >= deadline) break;
|
|
154
|
-
// No `agent stop`: it is not a herdr command (see `closePane`). Closing the tab is the kill.
|
|
155
|
-
//
|
|
156
|
-
// A `keepTab` pane is registered only for its staged prompt: remove that and leave the tab alone, which is
|
|
157
|
-
// the whole of what `PI_GRANTS_HERDR_KEEP_PANE=1` promises.
|
|
158
|
-
let closedThisPane = pane.keepTab === true;
|
|
159
|
-
if (pane.keepTab) {
|
|
160
|
-
if (pane.promptDir) {
|
|
161
|
-
try {
|
|
162
|
-
rmSync(pane.promptDir, { recursive: true, force: true });
|
|
163
|
-
} catch {
|
|
164
|
-
/* /tmp litter, not correctness */
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
open.delete(pane.tab);
|
|
168
|
-
continue;
|
|
169
|
-
}
|
|
170
|
-
try {
|
|
171
|
-
syncExec(["tab", "close", pane.tab]);
|
|
172
|
-
closed.push(pane.tab);
|
|
173
|
-
closedThisPane = true;
|
|
174
|
-
} catch {
|
|
175
|
-
/* an orphan we could not close: `herdr tab close` is the manual remedy, as documented above */
|
|
176
|
-
}
|
|
177
|
-
// **The staged prompt is deleted only when the tab is provably gone.** It used to be removed
|
|
178
|
-
// unconditionally, so a pane herdr refused to close lost its `--append-system-prompt` file — and pi treats a
|
|
179
|
-
// missing path there as **literal text, with no warning** (`resource-loader.js`: `existsSync` fails, the
|
|
180
|
-
// input is returned). Re-running that pane's echoed argv would hand the child a pathname as its
|
|
181
|
-
// instructions. Litter is cheaper than silently swapping a definition's body for its filename.
|
|
182
|
-
if (closedThisPane && pane.promptDir) {
|
|
183
|
-
try {
|
|
184
|
-
rmSync(pane.promptDir, { recursive: true, force: true });
|
|
185
|
-
} catch {
|
|
186
|
-
/* /tmp litter, not correctness */
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
// Untracked either way, and only here: at `exit` there is no later sweep, so keeping an unclosable pane
|
|
190
|
-
// registered buys nothing. `closePane`'s async path deliberately differs — another sweep may still run.
|
|
191
|
-
open.delete(pane.tab);
|
|
192
|
-
}
|
|
193
|
-
return closed;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
* Close one tracked pane. Shared by the async sweep and the trim so they cannot disagree about what "closed"
|
|
198
|
-
* means — which is the whole of R-62's lesson, one layer up.
|
|
199
|
-
*
|
|
200
|
-
* Returns whether the tab is **provably** gone. A close herdr refused leaves the pane tracked, so the `exit`
|
|
201
|
-
* handler retries it; untracking on a failed close is what disabled the one control built for that failure.
|
|
202
|
-
*/
|
|
203
|
-
async function closePane(exec: HerdrExec, pane: OpenPane): Promise<boolean> {
|
|
204
|
-
// **No `agent stop`.** It is not a herdr command — measured against 0.7.5, where it prints the usage banner
|
|
205
|
-
// and exits 0, which `defaultExec` reports as success. Two call sites here and one in `run-herdr.ts` issued it
|
|
206
|
-
// for nothing, and `docs/probes/g16-herdr` asserted it worked from a block that was never run. Closing the tab
|
|
207
|
-
// is the only kill herdr offers, and it does kill the child.
|
|
208
|
-
const reply = await exec(["tab", "close", pane.tab]).catch(() => undefined);
|
|
209
|
-
const closed = reply !== undefined && !parseReply(reply).error;
|
|
210
|
-
if (!closed) return false;
|
|
211
|
-
if (pane.promptDir) await rm(pane.promptDir, { recursive: true, force: true }).catch(() => undefined);
|
|
212
|
-
open.delete(pane.tab);
|
|
213
|
-
return true;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
/**
|
|
217
|
-
* Close every outstanding pane — the `agent_settled` path (ADR-0032).
|
|
218
|
-
*
|
|
219
|
-
* **A separate function from `reapOpenPanes` rather than a shared implementation**, and the reason is not
|
|
220
|
-
* style. The sync one is `execFileSync` with a six-second total budget *by necessity*: an `exit` handler cannot
|
|
221
|
-
* await. Running that at `agent_settled` would freeze pi for up to six seconds **every time the operator gets
|
|
222
|
-
* their prompt back** — turning a feature that exists to make work visible into a stall.
|
|
223
|
-
*
|
|
224
|
-
* Both drain the same `Map`, keyed by tab id, so a double close is impossible and a pane herdr refused stays
|
|
225
|
-
* registered for whichever sweep runs next.
|
|
226
|
-
*
|
|
227
|
-
* Sequential rather than concurrent: a fan-out's panes are at most `MAX_OPEN_PANES`, and eight `tab close`
|
|
228
|
-
* calls in parallel against one herdr server buys nothing worth the burst.
|
|
229
|
-
*/
|
|
230
|
-
export async function reapOpenPanesAsync(exec: HerdrExec = defaultExec): Promise<string[]> {
|
|
231
|
-
const closed: string[] = [];
|
|
232
|
-
for (const pane of [...open.values()]) {
|
|
233
|
-
// `keepTab` panes are registered only so their staged prompt can be reaped at `exit`; the tab itself is the
|
|
234
|
-
// operator's to close.
|
|
235
|
-
if (pane.keepTab) continue;
|
|
236
|
-
if (await closePane(exec, pane)) closed.push(pane.tab);
|
|
237
|
-
}
|
|
238
|
-
return closed;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
/**
|
|
242
|
-
* Keep at most `MAX_OPEN_PANES` open, closing the oldest first.
|
|
243
|
-
*
|
|
244
|
-
* The `Map`'s insertion order **is** the age order, so no timestamp is needed — and that is why `trackPane`
|
|
245
|
-
* must never re-`set` an existing tab, which would move it to the back of the queue and make an old pane look
|
|
246
|
-
* new.
|
|
247
|
-
*
|
|
248
|
-
* Whatever it closes is returned so the caller can **say so** rather than silently dropping a pane the operator
|
|
249
|
-
* was reading (R-48's rule, applied to a display).
|
|
250
|
-
*/
|
|
251
|
-
export async function trimOpenPanes(exec: HerdrExec = defaultExec): Promise<string[]> {
|
|
252
|
-
if (open.size <= MAX_OPEN_PANES) return [];
|
|
253
|
-
const closed: string[] = [];
|
|
254
|
-
|
|
255
|
-
// **Only SETTLED panes are candidates, oldest first.** A live sibling's pane is its child's only terminal, and
|
|
256
|
-
// closing a tab kills the child — see `OpenPane.settled`. If every open pane is live the cap is exceeded and
|
|
257
|
-
// nothing is closed, which is the right failure: a pane too many costs an operator a keystroke, and a killed
|
|
258
|
-
// child costs them the work.
|
|
259
|
-
//
|
|
260
|
-
// **Walks past what it cannot close**, rather than attempting `excess` panes from the front and calling it
|
|
261
|
-
// done. A pane herdr refuses to close used to sit at the head forever, so the cap silently stopped holding
|
|
262
|
-
// (measured: 30 panes for 30 delegates when every close was refused) and the same corpse was re-attacked on
|
|
263
|
-
// every spawn — O(n²) round-trips.
|
|
264
|
-
for (const pane of [...open.values()]) {
|
|
265
|
-
if (open.size - closed.length <= MAX_OPEN_PANES) break;
|
|
266
|
-
if (!pane.settled || pane.keepTab) continue;
|
|
267
|
-
if (await closePane(exec, pane)) closed.push(pane.tab);
|
|
268
|
-
}
|
|
269
|
-
return closed;
|
|
270
|
-
}
|
package/src/pi-tools.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Facts about pi itself: its built-in tool names, and the capability that means "all of them".
|
|
3
|
-
*
|
|
4
|
-
* These lived in `agent-types.ts` until ADR-0016 deleted that module along with the rest of the
|
|
5
|
-
* `@tintinweb/pi-subagents` port. They are not about agent types at all — `PI_BUILTIN_TOOLS` is how the
|
|
6
|
-
* catalog tells a built-in from an extension tool, and `WILDCARD` is a capability id — so they outlive
|
|
7
|
-
* the port and belong somewhere that does not name a package we no longer depend on.
|
|
8
|
-
*
|
|
9
|
-
* **`PI_BUILTIN_TOOLS` is a pinned observation, and it has already drifted once** (R-31): pi 0.84.1
|
|
10
|
-
* exposes a `parallel` tool that the 0.83.0 list did not contain, which made it classify as an
|
|
11
|
-
* *extension* capability. The list is used for classification only — never for enforcement, which is
|
|
12
|
-
* `--tools`' job — so drift misfiles a capability rather than granting one. Keep it current anyway; a
|
|
13
|
-
* misfiled capability is a confusing catalog.
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
import type { Capability } from "./resolve.ts";
|
|
17
|
-
|
|
18
|
-
/** Capability held only by a delegator authorised to hand out everything. */
|
|
19
|
-
export const WILDCARD: Capability = "tool:*";
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
/** pi's built-in tools, observed against 0.84.1. `parallel` was added since 0.83.0 — see R-31. */
|
|
23
|
-
export const PI_BUILTIN_TOOLS = [
|
|
24
|
-
"bash", "edit", "edit-diff", "find", "grep", "ls", "parallel", "read", "write",
|
|
25
|
-
] as const;
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { createHash } from "node:crypto";
|
|
2
|
-
import { isExecutionId } from "./execution-id.ts";
|
|
3
|
-
import type { AttemptDemand } from "./resource-budget.ts";
|
|
4
|
-
export const PRODUCER_IPC_LIMITS = Object.freeze({ frameBytes:1024, referenceBytes:128, childMs:3000, graceMs:50, maxElapsedMs:30000 });
|
|
5
|
-
export interface ProducerIpcBinding { version:"producer-ipc-v1"; budgetDigest:string; orderId:string; experimentId:string; executionId:string; charterSha256:string; invocationId:string }
|
|
6
|
-
export interface ProducerIpcReferences { claimRef:string; responseRef:string }
|
|
7
|
-
const id = (v:unknown):v is string => typeof v === "string" && /^[a-zA-Z0-9:_-]{1,128}$/.test(v);
|
|
8
|
-
const hash = (v:unknown):v is string => typeof v === "string" && /^[a-f0-9]{64}$/.test(v);
|
|
9
|
-
export function ipcShape(value:unknown, keys:readonly string[]): asserts value is Record<string,unknown> {
|
|
10
|
-
if (!value || typeof value !== "object" || ![Object.prototype,null].includes(Object.getPrototypeOf(value)) || Reflect.ownKeys(value).length !== keys.length || keys.some(k=>{const d=Object.getOwnPropertyDescriptor(value,k);return !d||!d.enumerable||!Object.hasOwn(d,"value");})) throw new TypeError("closed producer IPC data required");
|
|
11
|
-
}
|
|
12
|
-
export function producerIpcBinding(value:ProducerIpcBinding):Readonly<ProducerIpcBinding> {
|
|
13
|
-
ipcShape(value,["version","budgetDigest","orderId","experimentId","executionId","charterSha256","invocationId"]);
|
|
14
|
-
if (value.version!=="producer-ipc-v1" || !hash(value.budgetDigest) || !hash(value.charterSha256) || !isExecutionId(value.executionId) || ![value.orderId,value.experimentId,value.invocationId].every(id)) throw new TypeError("exact producer IPC binding required");
|
|
15
|
-
return Object.freeze({version:value.version,budgetDigest:value.budgetDigest,orderId:value.orderId,experimentId:value.experimentId,executionId:value.executionId,charterSha256:value.charterSha256,invocationId:value.invocationId});
|
|
16
|
-
}
|
|
17
|
-
export const producerIpcBindingDigest = (value:ProducerIpcBinding) => createHash("sha256").update(JSON.stringify(producerIpcBinding(value))).digest("hex");
|
|
18
|
-
export const producerIpcFrame = (value:ProducerIpcBinding):Buffer => Buffer.from(JSON.stringify({id:producerIpcBinding(value).invocationId,sequence:1})+"\n");
|
|
19
|
-
/** Existing v4 reservation schema, not a new model/effort/skills experiment operation. */
|
|
20
|
-
export function producerIpcDemand(value:ProducerIpcBinding):AttemptDemand {
|
|
21
|
-
const b=producerIpcBinding(value);return {attemptId:b.executionId,orderId:b.orderId,experimentId:b.experimentId,kind:"primary",parentAttemptId:null,inputBytes:Buffer.byteLength(JSON.stringify(b)),inputDigest:producerIpcBindingDigest(b)};
|
|
22
|
-
}
|
|
23
|
-
export function ipcReferences(value:ProducerIpcReferences):Readonly<ProducerIpcReferences> {
|
|
24
|
-
ipcShape(value,["claimRef","responseRef"]);if(!id(value.claimRef)||!id(value.responseRef))throw new TypeError("bounded evidence references required");
|
|
25
|
-
return Object.freeze({claimRef:value.claimRef,responseRef:value.responseRef});
|
|
26
|
-
}
|