pi-daddy 0.43.1 → 0.44.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 +93 -31
- package/README.md +15 -0
- package/THIRD_PARTY_LICENSES/musl-COPYRIGHT.txt +193 -0
- package/THIRD_PARTY_LICENSES/zig-MIT.txt +21 -0
- package/THIRD_PARTY_NOTICES.md +9 -0
- package/dist/cli.d.ts +2 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +10 -5
- package/dist/cli.js.map +1 -1
- package/dist/executors/activity-session.js +116 -65
- package/dist/executors/activity-session.js.map +1 -1
- package/dist/executors/captured-execution.d.ts +13 -0
- package/dist/executors/captured-execution.d.ts.map +1 -0
- package/dist/executors/captured-execution.js +53 -0
- package/dist/executors/captured-execution.js.map +1 -0
- package/dist/executors/child-final.d.ts +31 -0
- package/dist/executors/child-final.d.ts.map +1 -0
- package/dist/executors/child-final.js +197 -0
- package/dist/executors/child-final.js.map +1 -0
- package/dist/executors/executor.d.ts +2 -1
- package/dist/executors/executor.d.ts.map +1 -1
- package/dist/executors/executor.js +12 -0
- package/dist/executors/executor.js.map +1 -1
- package/dist/executors/owned-worker.d.ts +18 -0
- package/dist/executors/owned-worker.d.ts.map +1 -0
- package/dist/executors/owned-worker.js +295 -0
- package/dist/executors/owned-worker.js.map +1 -0
- package/dist/executors/worker-artifact.d.ts +3 -0
- package/dist/executors/worker-artifact.d.ts.map +1 -0
- package/dist/executors/worker-artifact.js +3 -0
- package/dist/executors/worker-artifact.js.map +1 -0
- package/dist/governance/approval-prompt.d.ts +4 -3
- package/dist/governance/approval-prompt.d.ts.map +1 -1
- package/dist/governance/approval-prompt.js +13 -6
- package/dist/governance/approval-prompt.js.map +1 -1
- package/dist/governance/captured-worker-record.d.ts +9 -0
- package/dist/governance/captured-worker-record.d.ts.map +1 -0
- package/dist/governance/captured-worker-record.js +123 -0
- package/dist/governance/captured-worker-record.js.map +1 -0
- package/dist/governance/lease-record.d.ts +4 -0
- package/dist/governance/lease-record.d.ts.map +1 -1
- package/dist/governance/lease-record.js +19 -2
- package/dist/governance/lease-record.js.map +1 -1
- package/dist/governance/ledger-events.d.ts +5 -5
- package/dist/governance/ledger-events.d.ts.map +1 -1
- package/dist/governance/ledger-v3-validation.js +1 -1
- package/dist/governance/ledger-v3-validation.js.map +1 -1
- package/dist/governance/workspace-acceptance.d.ts +3 -1
- package/dist/governance/workspace-acceptance.d.ts.map +1 -1
- package/dist/governance/workspace-acceptance.js +21 -5
- package/dist/governance/workspace-acceptance.js.map +1 -1
- package/dist/governance/workspace-lease.d.ts.map +1 -1
- package/dist/governance/workspace-lease.js +44 -1
- package/dist/governance/workspace-lease.js.map +1 -1
- package/dist/kernel/authority-text.d.ts +3 -0
- package/dist/kernel/authority-text.d.ts.map +1 -0
- package/dist/kernel/authority-text.js +22 -0
- package/dist/kernel/authority-text.js.map +1 -0
- package/dist/kernel/bounded-read-failures.d.ts +9 -0
- package/dist/kernel/bounded-read-failures.d.ts.map +1 -0
- package/dist/kernel/bounded-read-failures.js +33 -0
- package/dist/kernel/bounded-read-failures.js.map +1 -0
- package/dist/kernel/bounded-read-sync.d.ts +24 -0
- package/dist/kernel/bounded-read-sync.d.ts.map +1 -0
- package/dist/kernel/bounded-read-sync.js +75 -0
- package/dist/kernel/bounded-read-sync.js.map +1 -0
- package/dist/kernel/bounded-read.d.ts +29 -2
- package/dist/kernel/bounded-read.d.ts.map +1 -1
- package/dist/kernel/bounded-read.js +98 -9
- package/dist/kernel/bounded-read.js.map +1 -1
- package/dist/kernel/capacity.d.ts +36 -0
- package/dist/kernel/capacity.d.ts.map +1 -0
- package/dist/kernel/capacity.js +94 -0
- package/dist/kernel/capacity.js.map +1 -0
- package/dist/kernel/captured-worker-contract.d.ts +38 -0
- package/dist/kernel/captured-worker-contract.d.ts.map +1 -0
- package/dist/kernel/captured-worker-contract.js +2 -0
- package/dist/kernel/captured-worker-contract.js.map +1 -0
- package/dist/kernel/catalog.d.ts +12 -3
- package/dist/kernel/catalog.d.ts.map +1 -1
- package/dist/kernel/catalog.js +28 -8
- package/dist/kernel/catalog.js.map +1 -1
- package/dist/kernel/chain.d.ts +1 -0
- package/dist/kernel/chain.d.ts.map +1 -1
- package/dist/kernel/chain.js.map +1 -1
- package/dist/kernel/definitions.d.ts +11 -1
- package/dist/kernel/definitions.d.ts.map +1 -1
- package/dist/kernel/definitions.js +6 -3
- package/dist/kernel/definitions.js.map +1 -1
- package/dist/kernel/fanout.d.ts +5 -25
- package/dist/kernel/fanout.d.ts.map +1 -1
- package/dist/kernel/fanout.js +15 -30
- package/dist/kernel/fanout.js.map +1 -1
- package/dist/kernel/grant-env.d.ts +0 -2
- package/dist/kernel/grant-env.d.ts.map +1 -1
- package/dist/kernel/grant-env.js +0 -1
- package/dist/kernel/grant-env.js.map +1 -1
- package/dist/kernel/model-preflight.d.ts +8 -0
- package/dist/kernel/model-preflight.d.ts.map +1 -1
- package/dist/kernel/model-preflight.js +23 -0
- package/dist/kernel/model-preflight.js.map +1 -1
- package/dist/kernel/selected-definitions.d.ts +15 -0
- package/dist/kernel/selected-definitions.d.ts.map +1 -0
- package/dist/kernel/selected-definitions.js +146 -0
- package/dist/kernel/selected-definitions.js.map +1 -0
- package/dist/kernel/skill-packages.d.ts +4 -2
- package/dist/kernel/skill-packages.d.ts.map +1 -1
- package/dist/kernel/skill-packages.js +34 -41
- package/dist/kernel/skill-packages.js.map +1 -1
- package/dist/kernel/skill-resources.d.ts.map +1 -1
- package/dist/kernel/skill-resources.js +8 -11
- package/dist/kernel/skill-resources.js.map +1 -1
- package/dist/kernel/workspace.d.ts +6 -3
- package/dist/kernel/workspace.d.ts.map +1 -1
- package/dist/kernel/workspace.js +10 -6
- package/dist/kernel/workspace.js.map +1 -1
- package/dist/products/dashboard-cli.js +1 -1
- package/dist/products/dashboard-cli.js.map +1 -1
- package/dist/products/dashboard-render.d.ts +1 -2
- package/dist/products/dashboard-render.d.ts.map +1 -1
- package/dist/products/dashboard-render.js +3 -1
- package/dist/products/dashboard-render.js.map +1 -1
- package/dist/products/dashboard-session-client.d.ts +1 -2
- package/dist/products/dashboard-session-client.d.ts.map +1 -1
- package/dist/products/dashboard-session-client.js.map +1 -1
- package/dist/products/episode-report.d.ts +12 -8
- package/dist/products/episode-report.d.ts.map +1 -1
- package/dist/products/episode-report.js +61 -12
- package/dist/products/episode-report.js.map +1 -1
- package/extensions/approvals.ts +1 -1
- package/extensions/chain-plan.ts +9 -3
- package/extensions/context-staging.ts +30 -35
- package/extensions/dashboard-session-server.ts +1 -2
- package/extensions/definition-describe.ts +44 -0
- package/extensions/definition-runtime.ts +89 -26
- package/extensions/delegate-chain.ts +273 -256
- package/extensions/delegation-activation.ts +1 -1
- package/extensions/delegation.ts +41 -53
- package/extensions/execute-child.ts +167 -134
- package/extensions/fanout-outcome.ts +1 -9
- package/extensions/grants-command.ts +2 -9
- package/extensions/grants.ts +106 -38
- package/extensions/init-command.ts +52 -12
- package/extensions/reload-environment.ts +21 -2
- package/extensions/retired-inputs.ts +7 -0
- package/extensions/run-delegation.ts +212 -265
- package/extensions/session-capacity.ts +53 -0
- package/extensions/session-environment.ts +5 -2
- package/extensions/session-model-prompt.ts +33 -32
- package/extensions/session-report.ts +28 -11
- package/extensions/session.ts +200 -157
- package/extensions/workspace-runtime.ts +2 -1
- package/native/README.md +25 -0
- package/native/linux-x64/worker +0 -0
- package/native/linux-x64/worker.sha256 +1 -0
- package/native/provenance.json +42 -0
- package/native/toolchain.json +18 -0
- package/native/worker.c +209 -0
- package/package.json +15 -7
- package/src/cli.ts +16 -6
- package/src/executors/activity-session.ts +120 -66
- package/src/executors/captured-execution.ts +61 -0
- package/src/executors/child-final.ts +190 -0
- package/src/executors/executor.ts +14 -1
- package/src/executors/owned-worker.ts +322 -0
- package/src/executors/worker-artifact.ts +2 -0
- package/src/governance/approval-prompt.ts +18 -8
- package/src/governance/captured-worker-record.ts +138 -0
- package/src/governance/lease-record.ts +21 -2
- package/src/governance/ledger-events.ts +5 -5
- package/src/governance/ledger-v3-validation.ts +1 -1
- package/src/governance/workspace-acceptance.ts +20 -4
- package/src/governance/workspace-lease.ts +59 -1
- package/src/kernel/authority-text.ts +17 -0
- package/src/kernel/bounded-read-failures.ts +42 -0
- package/src/kernel/bounded-read-sync.ts +87 -0
- package/src/kernel/bounded-read.ts +128 -11
- package/src/kernel/capacity.ts +123 -0
- package/src/kernel/captured-worker-contract.ts +29 -0
- package/src/kernel/catalog.ts +45 -16
- package/src/kernel/chain.ts +1 -0
- package/src/kernel/definitions.ts +11 -2
- package/src/kernel/fanout.ts +17 -32
- package/src/kernel/grant-env.ts +0 -3
- package/src/kernel/model-preflight.ts +29 -0
- package/src/kernel/selected-definitions.ts +156 -0
- package/src/kernel/skill-packages.ts +40 -38
- package/src/kernel/skill-resources.ts +8 -9
- package/src/kernel/workspace.ts +12 -5
- package/src/products/dashboard-cli.ts +1 -1
- package/src/products/dashboard-render.ts +6 -2
- package/src/products/dashboard-session-client.ts +1 -2
- package/src/products/episode-report.ts +80 -17
- package/dist/advisors/advisor.d.ts +0 -90
- package/dist/advisors/advisor.d.ts.map +0 -1
- package/dist/advisors/advisor.js +0 -154
- package/dist/advisors/advisor.js.map +0 -1
- package/dist/advisors/decider.d.ts +0 -88
- package/dist/advisors/decider.d.ts.map +0 -1
- package/dist/advisors/decider.js +0 -29
- package/dist/advisors/decider.js.map +0 -1
- package/dist/advisors/jev.d.ts +0 -41
- package/dist/advisors/jev.d.ts.map +0 -1
- package/dist/advisors/jev.js +0 -139
- package/dist/advisors/jev.js.map +0 -1
- package/dist/advisors/settings.d.ts +0 -49
- package/dist/advisors/settings.d.ts.map +0 -1
- package/dist/advisors/settings.js +0 -99
- package/dist/advisors/settings.js.map +0 -1
- package/dist/governance/episode-cost-gate.d.ts +0 -31
- package/dist/governance/episode-cost-gate.d.ts.map +0 -1
- package/dist/governance/episode-cost-gate.js +0 -112
- package/dist/governance/episode-cost-gate.js.map +0 -1
- package/extensions/advisor-session.ts +0 -67
- package/extensions/effort-advice.ts +0 -112
- package/extensions/pruning-advice.ts +0 -133
- package/src/advisors/advisor.ts +0 -246
- package/src/advisors/decider.ts +0 -74
- package/src/advisors/jev.ts +0 -163
- package/src/advisors/settings.ts +0 -115
- package/src/governance/episode-cost-gate.ts +0 -128
package/CHANGELOG.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Newest first. **Breaking changes are marked and say what to do about them.**
|
|
4
4
|
|
|
5
5
|
This file exists because the README had grown ninety lines of stacked version banners before a reader
|
|
6
|
-
reached what the package
|
|
6
|
+
reached what the package _does_ — churn documentation in front of product documentation. The banners are
|
|
7
7
|
the record of how the package got here and are worth keeping; they are not worth reading first.
|
|
8
8
|
|
|
9
9
|
> **0.13.0 is the first PUBLISHED release.** Every version below it was developed in this repository and
|
|
@@ -12,6 +12,70 @@ the record of how the package got here and are worth keeping; they are not worth
|
|
|
12
12
|
> the record of how the package arrived at what it does, and because the reasoning behind each one is
|
|
13
13
|
> usually the clearest statement of why the current behaviour is what it is.
|
|
14
14
|
|
|
15
|
+
## 0.44.0 — stable release (2026-10-07)
|
|
16
|
+
|
|
17
|
+
- Rebuild the native helper using a SHA-pinned Zig/static-musl toolchain, retain exact source/artifact/license
|
|
18
|
+
provenance, and have CI reproduce every output byte. The loader verifies the held executable against its generated
|
|
19
|
+
JavaScript constant; the checksum sidecar is no longer runtime authority. Ship the corresponding musl and Zig notices.
|
|
20
|
+
- Reject invalid native control/status descriptors and unsupported child enumeration before admitting a worker;
|
|
21
|
+
treat control-read failures as owner loss, validate numeric bounds, send TERM once per unreaped child, and preserve
|
|
22
|
+
the original stop reason during hard escalation. Startup uses the caller's timeout/deadline, retaining late valid
|
|
23
|
+
ownership evidence without reopening a cancelled worker's start gate.
|
|
24
|
+
- Recheck retained reservations against their original durable receipts before single, parallel and chain dispatch.
|
|
25
|
+
Exact later settlement proof releases capacity once; missing or mismatched proof remains retained, and the original
|
|
26
|
+
failed/unknown result remains unchanged. Use `delegate_all` for independent parallel work.
|
|
27
|
+
- Compare streamed/persisted messages structurally: object-key order is irrelevant, array order and every value remain
|
|
28
|
+
binding. Share a final-output conformance table with skill-harness, preserving text bytes without invented separators.
|
|
29
|
+
- **Breaking — explicit package support:** require Linux x64 and exact Pi 1.0.4 in package platform and peer metadata.
|
|
30
|
+
Other platforms or Pi versions must retain their previously qualified runtime until separately qualified.
|
|
31
|
+
- Clarify the original candidate's removed monetary/advisor/model automation and passive-cost JSON breaking changes,
|
|
32
|
+
with migration guidance and version-scoped changelog entries.
|
|
33
|
+
|
|
34
|
+
## 0.44.0-rc.1 — captured delegation qualification (2026-10-07)
|
|
35
|
+
|
|
36
|
+
Release candidate for review, not a stable or npm publication. Use the immutable candidate tag for source review.
|
|
37
|
+
|
|
38
|
+
- **Breaking — delegation bounds:** budget now caps active descendants through disjoint subtree reservations, alongside
|
|
39
|
+
depth and per-call limits. Settled children return capacity; uncertain cleanup retains it. A single child
|
|
40
|
+
conservatively reserves the available subtree, and active ownership survives extension reloads.
|
|
41
|
+
- **Bounded input and approval handling:** retain cleanup failures on the original owner, guard manual history
|
|
42
|
+
reads, and time out approvals without weakening their authority. Named approval revocation uses the pinned
|
|
43
|
+
selected definition; `revoke --all` remains available without resource acquisition.
|
|
44
|
+
- **Captured execution contract:** qualify Pi 1.0.4 JSON settlement against the exact persisted current turn and
|
|
45
|
+
active branch. Preserve complete final text and expose work/final/cleanup/observation states independently.
|
|
46
|
+
Failed children return native error results with available evidence; optional recording failures preserve work.
|
|
47
|
+
- **Cleanup:** use the packaged Linux x64 subreaper and execution-bound durable receipts. Unknown subtree cleanup
|
|
48
|
+
retains capacity and quarantines workspace reuse; preserve the referenced ownership directory as evidence.
|
|
49
|
+
- **Breaking — platform/backend support:** the package now declares Linux x64 only. macOS, ARM64 and native Windows users must remain on their previous qualified release; this candidate has no qualified executor there.
|
|
50
|
+
- **Breaking — staged backend release:** governed Herdr execution refuses, even when its server answers, until parity is
|
|
51
|
+
qualified. Explicitly set `PI_DADDY_HERDR=0` for captured execution; there is no fallback after selection.
|
|
52
|
+
- **Required handoffs:** block dependent chain steps when the complete prior final exceeds the handoff limit.
|
|
53
|
+
The completed step and its full result remain available; no tail-only handoff is promoted to complete.
|
|
54
|
+
- **Selected Principal resources:** bind the native phase to selected inline and delegated bytes, hash and exact
|
|
55
|
+
package manifest, use `delegate_describe` to obtain the required definition identity, and pin it until reload.
|
|
56
|
+
Missing, moved or tampered marked Principal resources refuse rather than becoming ordinary inline definitions.
|
|
57
|
+
|
|
58
|
+
- **Breaking — removed automation:** remove monetary execution gates, external advisors and the automatic first-delegation model chooser. Configure provider-side spend controls if required, and select models/thinking manually. Recognized
|
|
59
|
+
legacy settings and cost arguments are inert; manual model edits, permission approvals and retained historical
|
|
60
|
+
usage remain. Pi 1.0.4 argument preparation validates active arguments after removing the retired cost override.
|
|
61
|
+
- Live complete episode cost is explicitly unavailable in the session dashboard; historical usage remains in reports.
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
### Passive cost coverage
|
|
65
|
+
|
|
66
|
+
- **Breaking — report JSON change:** row/group/total cost and episode-cost percentiles may be null when coverage is incomplete.
|
|
67
|
+
Use observedCost for the known subtotal and costCoverage for complete/partial/unavailable status. A reported zero
|
|
68
|
+
remains zero. Cost coverage concerns recorded child executions only; root and unrecorded work are not measured.
|
|
69
|
+
|
|
70
|
+
### Surviving guard repairs
|
|
71
|
+
|
|
72
|
+
- Treat damaged or oversized runtime/resource settings and package metadata as failures, not missing defaults.
|
|
73
|
+
Bounded reads reject FIFOs and malformed UTF-8; unresolved cleanup stays attached to the operation and session owner.
|
|
74
|
+
- Pruned handoffs carry only the active Pi branch and shared ancestry. Unavailable input is labeled incomplete.
|
|
75
|
+
Named file handoffs require Linux held-descriptor confinement proof and refuse when it is unavailable.
|
|
76
|
+
- Approval timeouts accept absent (120 seconds), literal 0 (unlimited), or canonical whole seconds 1..2147483.
|
|
77
|
+
Fix malformed values before requesting a new prompt; existing authority remains usable.
|
|
78
|
+
|
|
15
79
|
## 0.43.1 — Pi-only documentation refresh (2026-09-29)
|
|
16
80
|
|
|
17
81
|
- Refresh `README.md`, `AGENTS.md`, the package README, and the ledger-record contract README against the shipped
|
|
@@ -786,7 +850,6 @@ and test synchronization only; dependencies and runtime are unchanged.
|
|
|
786
850
|
Rename prose/whitespace keys before calling `runNamedCheck`; invalid IDs now refuse before the executable
|
|
787
851
|
or lease starts rather than failing only when a v3 receipt is appended.
|
|
788
852
|
|
|
789
|
-
|
|
790
853
|
## 0.19.0 — workspace routing is a capability (2026-08-23)
|
|
791
854
|
|
|
792
855
|
**The four hang fixes below were staged for a 0.18.2 and are released here instead — a decision reversed
|
|
@@ -794,13 +857,13 @@ deliberately, so the reversal is recorded rather than the reason vanishing.** Th
|
|
|
794
857
|
argued for cutting them as a patch so a fix for released code would not be gated on a breaking change. The
|
|
795
858
|
counter-argument won: **R-131 — workspace routing does not attenuate — is a live escalation in published
|
|
796
859
|
0.18.0 and 0.18.1**, a child routed to `staging` can route its grandchild to `prod` with a real lease and a
|
|
797
|
-
ledger line that reads as authorised, and the fix for it
|
|
860
|
+
ledger line that reads as authorised, and the fix for it _is_ the breaking change. A 0.18.2 would have fixed
|
|
798
861
|
one defect and left that one open, on a line that then needed supporting alongside this one. Shipping once
|
|
799
862
|
fixes all three.
|
|
800
863
|
|
|
801
864
|
- **FIX — a retained lease no longer reports a retention that did not happen (R-152).** `markRetained`
|
|
802
865
|
returned `void` and `releaseDelegationWorkspace` hardcoded the ledger word, so a `workspace_lease` event
|
|
803
|
-
said `retained` —
|
|
866
|
+
said `retained` — _"the pane may still be live"_ — for a helper that had already died (the fact is `lost`),
|
|
804
867
|
for a lease already cleanly released, and for a retention whose record could not be written. It now answers
|
|
805
868
|
in the release vocabulary and the caller ledgers what it says. **Breaking for direct library callers only:**
|
|
806
869
|
`WorkspaceLease.markRetained` returns `Promise<LeaseReleaseOutcome>` instead of `Promise<void>`, and
|
|
@@ -827,7 +890,6 @@ fixes all three.
|
|
|
827
890
|
explicitly rejected outcome. Measured with a `herdr` that sleeps: before, `LOCK=HELD` with no marker
|
|
828
891
|
indefinitely; after, released with the marker written. Tunable via `herdrCloseTimeoutMs` (default 15s).
|
|
829
892
|
|
|
830
|
-
|
|
831
893
|
- Ship a canonical JSON Schema draft 2020-12 contract for `ledgerVersion: 2` plus deterministic fixtures for
|
|
832
894
|
all four event types, generated through the production builders. Stable package export paths let external
|
|
833
895
|
harnesses pin the real contract instead of maintaining a parallel format.
|
|
@@ -886,7 +948,7 @@ and a mutation battery, and are listed because ADR-0035 claimed three of them as
|
|
|
886
948
|
amendment). **The entries under "Present in earlier releases" below DID ship**, and an earlier draft of this section put
|
|
887
949
|
them under this heading, telling operators the `tool:*` attenuation escape could not affect them. (That draft
|
|
888
950
|
then said "two" while three bullets sat under the heading, one of which — the v2 enum — is the single item
|
|
889
|
-
here that provably did
|
|
951
|
+
here that provably did _not_ ship. It has moved back.)
|
|
890
952
|
|
|
891
953
|
- **Routing terminated below the root instead of attenuating.** `unknownCapabilities` did not know the
|
|
892
954
|
namespace, and a catalog is always present in a real session, so every requested `workspace:<id>` was
|
|
@@ -1008,7 +1070,7 @@ is never a force-push, and `test/branch-guard.test.ts`, which pins it against se
|
|
|
1008
1070
|
|
|
1009
1071
|
**Why a version at all**, since nothing here changed: rule 10 says version bumps take the same path as
|
|
1010
1072
|
everything else, and this one did — branch, PR, review, squash-merge. The rule's first draft was reviewed by
|
|
1011
|
-
six independent agents across two rounds that found sixteen defects, including that
|
|
1073
|
+
six independent agents across two rounds that found sixteen defects, including that _"never commit to `main`"_
|
|
1012
1074
|
forbids the merge the rule requires, and that the guard written to fix that had reproduced the same defect in
|
|
1013
1075
|
shell. `docs/03-risks.md` R-85 and the 2026-08-18 session-log entry hold the details.
|
|
1014
1076
|
|
|
@@ -1021,11 +1083,11 @@ order is now what the sentence says it is.
|
|
|
1021
1083
|
one that removes the last reason to keep an ungoverned spawner installed alongside this one.
|
|
1022
1084
|
|
|
1023
1085
|
- **The handoff is fenced, labelled and nonce-delimited.** A chain makes step N's task the output of a governed
|
|
1024
|
-
child, which is the highest-authority text a child receives after its own `SKILL.md`. The label is
|
|
1086
|
+
child, which is the highest-authority text a child receives after its own `SKILL.md`. The label is _framing_ — a
|
|
1025
1087
|
determined injection can argue with it — but the **nonce is mechanism**: minted after the producing child
|
|
1026
1088
|
finished, so it cannot forge a closing delimiter. ADR-0033 records the stronger option (quarantine to a file the
|
|
1027
1089
|
next step must `read`) as the prepared answer if framing proves insufficient.
|
|
1028
|
-
- **Gated upfront: one dialog per capability
|
|
1090
|
+
- **Gated upfront: one dialog per capability _and_ definition, all before the first step runs.** Approvals arrive
|
|
1029
1091
|
together instead of interrupting a running pipeline. Not one dialog for everything — an approval is keyed
|
|
1030
1092
|
`capability@subject`, so a single dialog spanning several definitions would ask about one and spend the answer on
|
|
1031
1093
|
the rest. ADR-0033 originally specified that, three reviewers found it was a privilege path, and the ADR carries
|
|
@@ -1040,7 +1102,7 @@ one that removes the last reason to keep an ungoverned spawner installed alongsi
|
|
|
1040
1102
|
`PI_GRANTS_FANOUT=12` (the default is 8). At most 8 steps.
|
|
1041
1103
|
|
|
1042
1104
|
**Also:** `test-integration/herdr.it.ts` now checks herdr's own contracts against a real server in an isolated
|
|
1043
|
-
workspace — the gap that hid three shipping defects in 0.16.0, where the unit fake was a
|
|
1105
|
+
workspace — the gap that hid three shipping defects in 0.16.0, where the unit fake was a _claim_ about herdr that
|
|
1044
1106
|
nothing verified.
|
|
1045
1107
|
|
|
1046
1108
|
## 0.16.0 — children you can watch, in panes chosen for you
|
|
@@ -1048,17 +1110,17 @@ nothing verified.
|
|
|
1048
1110
|
**If herdr is running, your sub-agents now run in herdr panes without you configuring anything — and the
|
|
1049
1111
|
parent shows what each one is doing while it works.** Two ADRs, shipped together.
|
|
1050
1112
|
|
|
1051
|
-
### `PI_GRANTS_HERDR` is three-state, and unset now means
|
|
1113
|
+
### `PI_GRANTS_HERDR` is three-state, and unset now means _probe_ (ADR-0031)
|
|
1052
1114
|
|
|
1053
|
-
| Value | Behaviour
|
|
1054
|
-
|
|
|
1115
|
+
| Value | Behaviour |
|
|
1116
|
+
| :---- | :-------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1055
1117
|
| unset | Probe once at session start (`herdr tab list`, 2s bound). A server that **answers** ⇒ herdr panes; anything else ⇒ captured subprocess. |
|
|
1056
|
-
| `1`
|
|
1057
|
-
| `0`
|
|
1118
|
+
| `1` | Demand herdr. **Every delegation refuses** if it is unreachable — no fallback. |
|
|
1119
|
+
| `0` | Demand the captured subprocess. No probe. |
|
|
1058
1120
|
|
|
1059
1121
|
**Not a `PATH` check.** A binary with no server behind it would make every delegation fail at `tab create`, on
|
|
1060
|
-
a path nobody chose — so only a
|
|
1061
|
-
refused auto-detection on the grounds that a run must not "silently relocate"; the answer to
|
|
1122
|
+
a path nobody chose — so only a _reachable_ server counts. This reverses part of ADR-0016 point 6, which
|
|
1123
|
+
refused auto-detection on the grounds that a run must not "silently relocate"; the answer to _silently_ is that
|
|
1062
1124
|
the executor is now named at session start, in `/grants`, and per child in the ledger.
|
|
1063
1125
|
|
|
1064
1126
|
**What to do about it:** nothing, unless you relied on an unset variable meaning subprocesses. If you did, set
|
|
@@ -1090,7 +1152,7 @@ returned.
|
|
|
1090
1152
|
|
|
1091
1153
|
A pane used to be destroyed the instant its child settled, so a twenty-second child's pane was gone before
|
|
1092
1154
|
anyone could switch to it. Panes now belong to the **agent run** and are swept at `agent_settled`, capped at 8
|
|
1093
|
-
at once, with process `exit` as the backstop. `PI_GRANTS_HERDR_KEEP_PANE=1` still means
|
|
1155
|
+
at once, with process `exit` as the backstop. `PI_GRANTS_HERDR_KEEP_PANE=1` still means _not even then_.
|
|
1094
1156
|
|
|
1095
1157
|
A child's pane also defaults to the **parent's own herdr workspace** now, so switching to one is a tab away
|
|
1096
1158
|
rather than a workspace away.
|
|
@@ -1106,7 +1168,7 @@ shipping blockers, and they change what the herdr path guarantees:
|
|
|
1106
1168
|
working with its grant after its result was reported.
|
|
1107
1169
|
- **herdr binds an agent name to its tab.** With panes outliving their calls, the **second `delegate` of every
|
|
1108
1170
|
turn** failed with `agent_name_taken`. Names are now unique per spawn.
|
|
1109
|
-
- **The 8-pane cap killed live siblings**, because pi runs tool calls in parallel by default. Only
|
|
1171
|
+
- **The 8-pane cap killed live siblings**, because pi runs tool calls in parallel by default. Only _settled_ panes
|
|
1110
1172
|
are reclaimable now; if they are all live the cap yields rather than enforcing.
|
|
1111
1173
|
- **The pane reader amplified output 89,000×** once a pane scrolled or passed the output cap: `agent read` returns
|
|
1112
1174
|
a snapshot of a bounded terminal and was being diffed as an append-only stream.
|
|
@@ -1127,7 +1189,7 @@ and coverage was added where it was simply absent — including that nothing ver
|
|
|
1127
1189
|
### Also
|
|
1128
1190
|
|
|
1129
1191
|
- **`/grants ledger` tallies executors**, so "which children ran in panes?" no longer needs `jq`.
|
|
1130
|
-
- **The tripwire names `delegate_all`.** It said only
|
|
1192
|
+
- **The tripwire names `delegate_all`.** It said only _"Use `delegate` instead"_, and a request for parallel
|
|
1131
1193
|
work was answered with a single sequential call as a result.
|
|
1132
1194
|
- **The ledger records `executor` per child** — required, not optional. The executor is decided by a probe now,
|
|
1133
1195
|
so nothing outside the record preserves which one ran, and the two paths do not produce the same argv.
|
|
@@ -1158,7 +1220,7 @@ pi
|
|
|
1158
1220
|
**always wins**: it is how a child is governed and how CI is configured. `.pi/grants.env` is still written
|
|
1159
1221
|
and still worth committing — it is the reviewable record, no longer what the enforcer reads. (ADR-0030)
|
|
1160
1222
|
- **The dialog does not ask questions whose answers cannot matter.** `tool:bash` subsumes `write` and
|
|
1161
|
-
`edit`, so once bash is granted those are conferred; asking anyway let an operator answer
|
|
1223
|
+
`edit`, so once bash is granted those are conferred; asking anyway let an operator answer _no_ to
|
|
1162
1224
|
`tool:write` and then watch `build` be allowed it. It now reports them as already conferred instead.
|
|
1163
1225
|
- **An unknown `/grants` subcommand is refused rather than ignored.** `/grants init` used to print the
|
|
1164
1226
|
ordinary status screen with the word silently dropped, so a command that did not exist looked like it had
|
|
@@ -1182,7 +1244,7 @@ resolution, enforcement, approvals or the ledger changed — this is the part be
|
|
|
1182
1244
|
- **The generated grant is READ-ONLY by default** (ADR-0029). `init` grants what the copied skills declare
|
|
1183
1245
|
minus anything that can change your machine — `bash`, `write`, `edit` and the universal capabilities are
|
|
1184
1246
|
written **commented**, naming the definitions that need them. `init` + `source` gives a working read-only
|
|
1185
|
-
setup; widening costs one deliberate uncomment. The reason: `PI_GRANTS_GRANT` is what
|
|
1247
|
+
setup; widening costs one deliberate uncomment. The reason: `PI_GRANTS_GRANT` is what _bounds_ a declared
|
|
1186
1248
|
ceiling, so generating it from those ceilings would give the bound and the bounded one author, and it
|
|
1187
1249
|
would not be you.
|
|
1188
1250
|
|
|
@@ -1193,14 +1255,14 @@ resolution, enforcement, approvals or the ledger changed — this is the part be
|
|
|
1193
1255
|
`PI_GRANTS_GRANT` string by hand — seven times for `principal-pi-skills`.
|
|
1194
1256
|
|
|
1195
1257
|
**It chooses no ceiling, and that boundary is the whole design.** A skill that declares `allowed-tools` is
|
|
1196
|
-
copied byte for byte; one that declares none is copied with a
|
|
1258
|
+
copied byte for byte; one that declares none is copied with a _commented_ placeholder and stays
|
|
1197
1259
|
unspawnable until a human fills it in. The placeholder is deliberately not a working example, so
|
|
1198
1260
|
uncommenting it unedited fails loudly instead of granting something nobody decided. An existing file is
|
|
1199
1261
|
**kept**, never overwritten — that edit is the capability decision, and a second `init` run is exactly
|
|
1200
1262
|
when it would be destroyed. `--force` exists and says what it costs.
|
|
1201
1263
|
|
|
1202
1264
|
- **Session start says how many definitions are spawnable, and names the withheld ones.** The line reported
|
|
1203
|
-
the grant and never the definitions, so
|
|
1265
|
+
the grant and never the definitions, so _"governance is working"_ and _"did the install fail?"_ looked
|
|
1204
1266
|
identical:
|
|
1205
1267
|
|
|
1206
1268
|
```
|
|
@@ -1224,11 +1286,11 @@ resolution, enforcement, approvals or the ledger changed — this is the part be
|
|
|
1224
1286
|
from a package are refused, and the assembled grant is charset-checked before the file is written at all.
|
|
1225
1287
|
|
|
1226
1288
|
- **Fixed before release: `init` overwrote an operator's file and wrote through symlinks** (R-79). The
|
|
1227
|
-
presence probe was `readFile`, which treats
|
|
1289
|
+
presence probe was `readFile`, which treats _unreadable_ as _absent_ — so a permissions-restricted
|
|
1228
1290
|
`SKILL.md` was replaced and its ceiling **widened**, with no `--force`. And `writeFile` follows symlinks, so
|
|
1229
1291
|
a dangling link at a target path created the file outside the project while reporting an in-project path.
|
|
1230
1292
|
Both are one `open(path, "wx")`. `--force` no longer regenerates `.pi/grants.env`, and `pi-daddy init
|
|
1231
|
-
|
|
1293
|
+
--Force` is no longer accepted as a silent no-op.
|
|
1232
1294
|
|
|
1233
1295
|
- **Fixed before release: the startup line blamed your files for a session-level refusal** (R-81). A session
|
|
1234
1296
|
at its depth limit, or with a malformed `PI_GRANTS_MAX_DEPTH`, was told its `SKILL.md` files were written
|
|
@@ -1258,17 +1320,17 @@ as a user of this package:
|
|
|
1258
1320
|
the path, not the lock this process created, so a broken stale lock cascaded: the old holder freed the new
|
|
1259
1321
|
owner's lock on the way out, and the next arrival — which raced nothing — walked in beside it. Reproduced
|
|
1260
1322
|
across real OS processes. Every lock now carries a token and proves ownership before deleting.
|
|
1261
|
-
- **The ledger over-claimed human approval under concurrency.** One
|
|
1323
|
+
- **The ledger over-claimed human approval under concurrency.** One _Allow for this session_ answered under
|
|
1262
1324
|
a fan-out of eight wrote eight lines each recording `approvalSource: "prompt"`. Riders now record
|
|
1263
1325
|
`session`, which is what actually happened.
|
|
1264
1326
|
|
|
1265
1327
|
One breaking change, and it is a type.
|
|
1266
1328
|
|
|
1267
1329
|
- **BREAKING: `revokeApproval` returns `"revoked" | "absent" | "failed" | "busy"`**, not a boolean. It had
|
|
1268
|
-
two outcomes for four facts, and `/grants revoke` printed
|
|
1330
|
+
two outcomes for four facts, and `/grants revoke` printed _"no persisted approval named X"_ whenever the
|
|
1269
1331
|
write failed — telling an operator that the approval they are revoking does not exist **while it is still
|
|
1270
1332
|
in effect**. The most alarming outcome wore the most reassuring message. `busy` is separate because a lock
|
|
1271
|
-
timeout happens
|
|
1333
|
+
timeout happens _before_ the load, so nothing was looked at and nothing may be claimed about the entry.
|
|
1272
1334
|
Callers switching on the boolean must switch on the string; `"revoked"` is the only success.
|
|
1273
1335
|
- **Approval writes hold a lock (R-49).** Every write is load → modify → write and none of them was
|
|
1274
1336
|
serialised, so session 1 could load, session 2 could revoke, and session 1's next save would restore the
|
|
@@ -1278,10 +1340,10 @@ One breaking change, and it is a type.
|
|
|
1278
1340
|
- **`/grants ledger` counts where each approval came from.** ADR-0020 keeps the persistence layer on an
|
|
1279
1341
|
asserted fatigue argument and named the evidence that would settle it — `persisted` against `prompt` over
|
|
1280
1342
|
real use. The data was already recorded and nothing read it. **Two numbers, both labelled**: raw records
|
|
1281
|
-
are an
|
|
1343
|
+
are an _upper bound_ on prompts avoided, because within one session only the first would have been a
|
|
1282
1344
|
prompt and the rest come from the in-memory session cache; distinct `capability@subject` pairs are the
|
|
1283
1345
|
closer estimate. Reporting records alone overstated the layer twentyfold in the obvious case (R-63).
|
|
1284
|
-
Records written before per-capability sources existed are reported as
|
|
1346
|
+
Records written before per-capability sources existed are reported as _not counted_ rather than folded in,
|
|
1285
1347
|
because that older scalar over-claimed `prompt`.
|
|
1286
1348
|
- **A revoke is documented as taking effect at the next gate check**, not "immediately". A spawn whose gate
|
|
1287
1349
|
check already passed is not retracted by a revoke arriving microseconds later — inherent to revoking
|
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# pi-daddy
|
|
2
2
|
|
|
3
|
+
Stable release: **0.44.0** (tag `v0.44.0`), published to npm.
|
|
4
|
+
|
|
3
5
|
Capability governance and coordination for [pi](https://github.com/badlogic/pi-mono)'s multi-level agent system. An
|
|
4
6
|
orchestrator grants each sub-agent a deliberate subset of what it holds and withholds the rest; a sub-agent may delegate
|
|
5
7
|
further, but only ever a subset of what it holds. Enforcement is pi's own `--tools` allowlist on a separate child
|
|
@@ -30,6 +32,19 @@ Escalation is impossible by construction on the tool surface. It does not contai
|
|
|
30
32
|
primitive: a child granted `bash` can start an ungoverned descendant, so `bash` is gated by default and every gate
|
|
31
33
|
answer is recorded when a governance ledger is configured.
|
|
32
34
|
|
|
35
|
+
This candidate targets Pi 1.0.4 and captured Linux x64 execution. Qualification is limited to Ubuntu WSL2,
|
|
36
|
+
kernel `6.18.33.2-microsoft-standard-WSL2`, x86_64 and Node `v26.7.0`; other runtime/kernel combinations, native
|
|
37
|
+
Windows and WSL-to-Windows worker interop remain unqualified. Governed Herdr execution refuses until separately qualified. Select captured execution with `PI_DADDY_HERDR=0`. A final must match Pi's settled
|
|
38
|
+
JSON output and persisted current branch. Unknown subtree cleanup retains capacity and workspace exclusion.
|
|
39
|
+
`PI_DADDY_FANOUT` limits active descendants using conservative subtree reservations, with capacity returned only
|
|
40
|
+
after verified settlement. Complete results remain separate from optional recording failures.
|
|
41
|
+
|
|
42
|
+
The package dependency and peer requirement both pin exact Pi **1.0.4**; later Pi versions require new qualification. Use Principal **4.8.0** with this runtime's `delegate_describe` contract. Native phases use `plan`, `build`, `review`, `debug`, and `investigate` with their returned `definitionId`; independent parallel work uses one `delegate_all` batch.
|
|
43
|
+
|
|
44
|
+
Final capture preserves whitespace and concatenates text blocks without inserting separators. Tool-call terminals, empty visible finals and non-`stop` reasons are unavailable. Persisted message comparisons ignore object key order while preserving array order and every field value. The shared `final-conformance.json` table checks these semantics in both runtime and harness. Capture remains bounded: 4 MiB visible final, 32 MiB protocol line, 64 MiB persisted session, and a 3-second bounded session read. Exceeding a limit reports an unavailable final and blocks dependent handoffs; it does not imply the worker failed to settle.
|
|
45
|
+
|
|
46
|
+
Retained capacity is rechecked against the original bound ownership and settlement receipt before a new single, parallel or chain dispatch. Exact later proof refunds the reservation once; missing, malformed or mismatched proof and unbound ownership remain retained. Recovery does not rewrite the original failed/unknown outcome or mint new capacity on reload. A single delegation reserves its available subtree; use `delegate_all` to allocate independent parallel children.
|
|
47
|
+
|
|
33
48
|
The package requires Node.js 22.19.0 or newer. `pi-daddy report` joins episode usage and attribution;
|
|
34
49
|
`pi-daddy outcomes` adds Git, CI, amendment, and operator-correction signals for commits carrying a `Pi-Episode`
|
|
35
50
|
trailer. A connected dashboard can change model/thinking defaults for its owning session without changing persistent
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
musl as a whole is licensed under the following standard MIT license:
|
|
2
|
+
|
|
3
|
+
----------------------------------------------------------------------
|
|
4
|
+
Copyright © 2005-2020 Rich Felker, et al.
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
7
|
+
a copy of this software and associated documentation files (the
|
|
8
|
+
"Software"), to deal in the Software without restriction, including
|
|
9
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
10
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
11
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
12
|
+
the following conditions:
|
|
13
|
+
|
|
14
|
+
The above copyright notice and this permission notice shall be
|
|
15
|
+
included in all copies or substantial portions of the Software.
|
|
16
|
+
|
|
17
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
18
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
19
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
20
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
21
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
22
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
23
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
24
|
+
----------------------------------------------------------------------
|
|
25
|
+
|
|
26
|
+
Authors/contributors include:
|
|
27
|
+
|
|
28
|
+
A. Wilcox
|
|
29
|
+
Ada Worcester
|
|
30
|
+
Alex Dowad
|
|
31
|
+
Alex Suykov
|
|
32
|
+
Alexander Monakov
|
|
33
|
+
Andre McCurdy
|
|
34
|
+
Andrew Kelley
|
|
35
|
+
Anthony G. Basile
|
|
36
|
+
Aric Belsito
|
|
37
|
+
Arvid Picciani
|
|
38
|
+
Bartosz Brachaczek
|
|
39
|
+
Benjamin Peterson
|
|
40
|
+
Bobby Bingham
|
|
41
|
+
Boris Brezillon
|
|
42
|
+
Brent Cook
|
|
43
|
+
Chris Spiegel
|
|
44
|
+
Clément Vasseur
|
|
45
|
+
Daniel Micay
|
|
46
|
+
Daniel Sabogal
|
|
47
|
+
Daurnimator
|
|
48
|
+
David Carlier
|
|
49
|
+
David Edelsohn
|
|
50
|
+
Denys Vlasenko
|
|
51
|
+
Dmitry Ivanov
|
|
52
|
+
Dmitry V. Levin
|
|
53
|
+
Drew DeVault
|
|
54
|
+
Emil Renner Berthing
|
|
55
|
+
Fangrui Song
|
|
56
|
+
Felix Fietkau
|
|
57
|
+
Felix Janda
|
|
58
|
+
Gianluca Anzolin
|
|
59
|
+
Hauke Mehrtens
|
|
60
|
+
He X
|
|
61
|
+
Hiltjo Posthuma
|
|
62
|
+
Isaac Dunham
|
|
63
|
+
Jaydeep Patil
|
|
64
|
+
Jens Gustedt
|
|
65
|
+
Jeremy Huntwork
|
|
66
|
+
Jo-Philipp Wich
|
|
67
|
+
Joakim Sindholt
|
|
68
|
+
John Spencer
|
|
69
|
+
Julien Ramseier
|
|
70
|
+
Justin Cormack
|
|
71
|
+
Kaarle Ritvanen
|
|
72
|
+
Khem Raj
|
|
73
|
+
Kylie McClain
|
|
74
|
+
Leah Neukirchen
|
|
75
|
+
Luca Barbato
|
|
76
|
+
Luka Perkov
|
|
77
|
+
M Farkas-Dyck (Strake)
|
|
78
|
+
Mahesh Bodapati
|
|
79
|
+
Markus Wichmann
|
|
80
|
+
Masanori Ogino
|
|
81
|
+
Michael Clark
|
|
82
|
+
Michael Forney
|
|
83
|
+
Mikhail Kremnyov
|
|
84
|
+
Natanael Copa
|
|
85
|
+
Nicholas J. Kain
|
|
86
|
+
orc
|
|
87
|
+
Pascal Cuoq
|
|
88
|
+
Patrick Oppenlander
|
|
89
|
+
Petr Hosek
|
|
90
|
+
Petr Skocik
|
|
91
|
+
Pierre Carrier
|
|
92
|
+
Reini Urban
|
|
93
|
+
Rich Felker
|
|
94
|
+
Richard Pennington
|
|
95
|
+
Ryan Fairfax
|
|
96
|
+
Samuel Holland
|
|
97
|
+
Segev Finer
|
|
98
|
+
Shiz
|
|
99
|
+
sin
|
|
100
|
+
Solar Designer
|
|
101
|
+
Stefan Kristiansson
|
|
102
|
+
Stefan O'Rear
|
|
103
|
+
Szabolcs Nagy
|
|
104
|
+
Timo Teräs
|
|
105
|
+
Trutz Behn
|
|
106
|
+
Valentin Ochs
|
|
107
|
+
Will Dietz
|
|
108
|
+
William Haddon
|
|
109
|
+
William Pitcock
|
|
110
|
+
|
|
111
|
+
Portions of this software are derived from third-party works licensed
|
|
112
|
+
under terms compatible with the above MIT license:
|
|
113
|
+
|
|
114
|
+
The TRE regular expression implementation (src/regex/reg* and
|
|
115
|
+
src/regex/tre*) is Copyright © 2001-2008 Ville Laurikari and licensed
|
|
116
|
+
under a 2-clause BSD license (license text in the source files). The
|
|
117
|
+
included version has been heavily modified by Rich Felker in 2012, in
|
|
118
|
+
the interests of size, simplicity, and namespace cleanliness.
|
|
119
|
+
|
|
120
|
+
Much of the math library code (src/math/* and src/complex/*) is
|
|
121
|
+
Copyright © 1993,2004 Sun Microsystems or
|
|
122
|
+
Copyright © 2003-2011 David Schultz or
|
|
123
|
+
Copyright © 2003-2009 Steven G. Kargl or
|
|
124
|
+
Copyright © 2003-2009 Bruce D. Evans or
|
|
125
|
+
Copyright © 2008 Stephen L. Moshier or
|
|
126
|
+
Copyright © 2017-2018 Arm Limited
|
|
127
|
+
and labelled as such in comments in the individual source files. All
|
|
128
|
+
have been licensed under extremely permissive terms.
|
|
129
|
+
|
|
130
|
+
The ARM memcpy code (src/string/arm/memcpy.S) is Copyright © 2008
|
|
131
|
+
The Android Open Source Project and is licensed under a two-clause BSD
|
|
132
|
+
license. It was taken from Bionic libc, used on Android.
|
|
133
|
+
|
|
134
|
+
The AArch64 memcpy and memset code (src/string/aarch64/*) are
|
|
135
|
+
Copyright © 1999-2019, Arm Limited.
|
|
136
|
+
|
|
137
|
+
The implementation of DES for crypt (src/crypt/crypt_des.c) is
|
|
138
|
+
Copyright © 1994 David Burren. It is licensed under a BSD license.
|
|
139
|
+
|
|
140
|
+
The implementation of blowfish crypt (src/crypt/crypt_blowfish.c) was
|
|
141
|
+
originally written by Solar Designer and placed into the public
|
|
142
|
+
domain. The code also comes with a fallback permissive license for use
|
|
143
|
+
in jurisdictions that may not recognize the public domain.
|
|
144
|
+
|
|
145
|
+
The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011
|
|
146
|
+
Valentin Ochs and is licensed under an MIT-style license.
|
|
147
|
+
|
|
148
|
+
The x86_64 port was written by Nicholas J. Kain and is licensed under
|
|
149
|
+
the standard MIT terms.
|
|
150
|
+
|
|
151
|
+
The mips and microblaze ports were originally written by Richard
|
|
152
|
+
Pennington for use in the ellcc project. The original code was adapted
|
|
153
|
+
by Rich Felker for build system and code conventions during upstream
|
|
154
|
+
integration. It is licensed under the standard MIT terms.
|
|
155
|
+
|
|
156
|
+
The mips64 port was contributed by Imagination Technologies and is
|
|
157
|
+
licensed under the standard MIT terms.
|
|
158
|
+
|
|
159
|
+
The powerpc port was also originally written by Richard Pennington,
|
|
160
|
+
and later supplemented and integrated by John Spencer. It is licensed
|
|
161
|
+
under the standard MIT terms.
|
|
162
|
+
|
|
163
|
+
All other files which have no copyright comments are original works
|
|
164
|
+
produced specifically for use as part of this library, written either
|
|
165
|
+
by Rich Felker, the main author of the library, or by one or more
|
|
166
|
+
contibutors listed above. Details on authorship of individual files
|
|
167
|
+
can be found in the git version control history of the project. The
|
|
168
|
+
omission of copyright and license comments in each file is in the
|
|
169
|
+
interest of source tree size.
|
|
170
|
+
|
|
171
|
+
In addition, permission is hereby granted for all public header files
|
|
172
|
+
(include/* and arch/*/bits/*) and crt files intended to be linked into
|
|
173
|
+
applications (crt/*, ldso/dlstart.c, and arch/*/crt_arch.h) to omit
|
|
174
|
+
the copyright notice and permission notice otherwise required by the
|
|
175
|
+
license, and to use these files without any requirement of
|
|
176
|
+
attribution. These files include substantial contributions from:
|
|
177
|
+
|
|
178
|
+
Bobby Bingham
|
|
179
|
+
John Spencer
|
|
180
|
+
Nicholas J. Kain
|
|
181
|
+
Rich Felker
|
|
182
|
+
Richard Pennington
|
|
183
|
+
Stefan Kristiansson
|
|
184
|
+
Szabolcs Nagy
|
|
185
|
+
|
|
186
|
+
all of whom have explicitly granted such permission.
|
|
187
|
+
|
|
188
|
+
This file previously contained text expressing a belief that most of
|
|
189
|
+
the files covered by the above exception were sufficiently trivial not
|
|
190
|
+
to be subject to copyright, resulting in confusion over whether it
|
|
191
|
+
negated the permissions granted in the license. In the spirit of
|
|
192
|
+
permissive licensing, and of not having licensing issues being an
|
|
193
|
+
obstacle to adoption, that text has been removed.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (Expat)
|
|
2
|
+
|
|
3
|
+
Copyright (c) Zig contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -5,3 +5,12 @@
|
|
|
5
5
|
`src/executors/vendor/herdr-pi-lifecycle.ts` is the unmodified official Herdr Pi lifecycle integration, copied from Herdr `v0.8.2`, blob `67bc41889abc2791d6dcdfe8279bdc24186cc6fe` (SHA-256 `9b1c41cd72520fc2abe5f2a2aec995c12a926cce844df472c7fd5fcae4f4dbfa`).
|
|
6
6
|
|
|
7
7
|
It is licensed under Apache License 2.0. A copy of that license is distributed at `THIRD_PARTY_LICENSES/herdr-Apache-2.0.txt`.
|
|
8
|
+
|
|
9
|
+
## Captured Linux x64 worker
|
|
10
|
+
|
|
11
|
+
`native/linux-x64/worker` statically links the musl libc shipped in the official Zig 0.14.1
|
|
12
|
+
Linux x86-64 compiler distribution. Its complete copyright/license notice is reproduced in
|
|
13
|
+
`THIRD_PARTY_LICENSES/musl-COPYRIGHT.txt`; Zig's runtime notice is in `THIRD_PARTY_LICENSES/zig-MIT.txt`.
|
|
14
|
+
These are copied directly from the SHA-256-pinned compiler archive by `scripts/build-worker.ts`.
|
|
15
|
+
The worker does not link glibc. `native/provenance.json` records source, compiler archive, artifact
|
|
16
|
+
and license hashes. See `native/README.md` to reproduce and verify the committed binary.
|
package/dist/cli.d.ts
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* unknown-option check that exempted `argv[0]` whenever `--dir` was absent, so `pi-daddy init --Force`
|
|
13
13
|
* was accepted in silence — the exact failure the check's own comment says it prevents.
|
|
14
14
|
*/
|
|
15
|
+
import { loadWorkspaceRegistry } from "./kernel/workspace.ts";
|
|
15
16
|
import { type RefusedSkill, type SkillPackage } from "./kernel/skill-packages.ts";
|
|
16
17
|
import { type EpisodeGroupBy } from "./products/episode-report.ts";
|
|
17
18
|
export interface ParsedArgs {
|
|
@@ -41,5 +42,5 @@ export declare function parseArgs(argv: string[]): ParsedArgs;
|
|
|
41
42
|
/** Say what was refused and what the fix is. Each reason has a different one. */
|
|
42
43
|
/** Exported so the message an operator actually reads can be tested; `init` composes it, nothing else calls it. */
|
|
43
44
|
export declare function reportRefusal(pkg: SkillPackage, refusal: RefusedSkill): string;
|
|
44
|
-
export declare function main(argv: string[]): Promise<number>;
|
|
45
|
+
export declare function main(argv: string[], loadRegistry?: typeof loadWorkspaceRegistry): Promise<number>;
|
|
45
46
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG;AAgBH,OAAO,EAA0B,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGtF,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AAWpC,OAAO,EAAuD,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AA0BxH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,eAAe,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;IACjG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,oFAAoF;IACpF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAgFpD;AA0FD,iFAAiF;AACjF,mHAAmH;AACnH,wBAAgB,aAAa,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,CA8B9E;AA6DD,wBAAsB,IAAI,CACxB,IAAI,EAAE,MAAM,EAAE,EACd,YAAY,GAAE,OAAO,qBAA6C,GACjE,OAAO,CAAC,MAAM,CAAC,CA4HjB"}
|
package/dist/cli.js
CHANGED
|
@@ -16,9 +16,10 @@ import { realpathSync } from "node:fs";
|
|
|
16
16
|
import { readFile } from "node:fs/promises";
|
|
17
17
|
import { relative, resolve as resolvePath } from "node:path";
|
|
18
18
|
import { pathToFileURL } from "node:url";
|
|
19
|
+
import { BoundedReadCleanupError } from "./kernel/bounded-read.js";
|
|
19
20
|
import { UnsafeGrantError } from "./kernel/grant-env.js";
|
|
20
21
|
import { applyInit, countDeclaring, planInit, GITIGNORE_REINCLUDE_LINES, settingsIgnoredByGit, } from "./governance/init.js";
|
|
21
|
-
import { registeredWorkspaceIds } from "./kernel/workspace.js";
|
|
22
|
+
import { registeredWorkspaceIds, loadWorkspaceRegistry } from "./kernel/workspace.js";
|
|
22
23
|
import { explainDoubledNamespace } from "./kernel/catalog.js";
|
|
23
24
|
import { discoverSkillPackages, skillPackageRoots, } from "./kernel/skill-packages.js";
|
|
24
25
|
import { adoptLegacyEnvironment, legacyEnvironmentWarning } from "./kernel/env-names.js";
|
|
@@ -151,7 +152,7 @@ export function parseArgs(argv) {
|
|
|
151
152
|
return { command: "init", dir, force, errors };
|
|
152
153
|
}
|
|
153
154
|
/** Report a plan and what came of applying it. Returns the process exit code. */
|
|
154
|
-
async function init(cwd, force) {
|
|
155
|
+
async function init(cwd, force, loadRegistry) {
|
|
155
156
|
const packages = await discoverSkillPackages(cwd);
|
|
156
157
|
if (packages.length === 0) {
|
|
157
158
|
// Names BOTH roots it looked in, and offers pi's own install command first. The previous message named
|
|
@@ -171,11 +172,15 @@ async function init(cwd, force) {
|
|
|
171
172
|
try {
|
|
172
173
|
// A registry that cannot be read scaffolds no workspace capabilities. That was silent, so the operator
|
|
173
174
|
// saw a plan with none and no way to tell it apart from having registered none (rule 8).
|
|
174
|
-
plan = planInit(packages, cwd, await registeredWorkspaceIds(undefined, (reason) => console.error(`pi-daddy init: workspace registry unreadable, scaffolding none — ${reason}`)));
|
|
175
|
+
plan = planInit(packages, cwd, await registeredWorkspaceIds(undefined, (reason) => console.error(`pi-daddy init: workspace registry unreadable, scaffolding none — ${reason}`), loadRegistry));
|
|
175
176
|
}
|
|
176
177
|
catch (error) {
|
|
177
178
|
// R-78's backstop reaching the surface. Nothing is written: a grant that could mean something to a
|
|
178
179
|
// shell is not a grant, and half-scaffolding a project would be worse than scaffolding none of it.
|
|
180
|
+
if (error instanceof BoundedReadCleanupError) {
|
|
181
|
+
console.error(`pi-daddy init: cleanup failed — ${error.message}; no scaffolding applied.`);
|
|
182
|
+
throw error;
|
|
183
|
+
}
|
|
179
184
|
if (error instanceof UnsafeGrantError) {
|
|
180
185
|
console.error(`pi-daddy init: ${error.message}`);
|
|
181
186
|
return 1;
|
|
@@ -294,7 +299,7 @@ async function report(plan) {
|
|
|
294
299
|
` $EDITOR ${SETTINGS_REL} # review it, then commit it\n` +
|
|
295
300
|
` pi # /grants lists every definition and its verdict`);
|
|
296
301
|
}
|
|
297
|
-
export async function main(argv) {
|
|
302
|
+
export async function main(argv, loadRegistry = loadWorkspaceRegistry) {
|
|
298
303
|
const adoptedLegacy = adoptLegacyEnvironment(process.env);
|
|
299
304
|
if (adoptedLegacy.length > 0)
|
|
300
305
|
console.error(legacyEnvironmentWarning(adoptedLegacy));
|
|
@@ -407,7 +412,7 @@ export async function main(argv) {
|
|
|
407
412
|
// `--dir` made that comparison false for every entry: every declared skill of every package was reported
|
|
408
413
|
// "declared but unreadable", nothing was copied, a degenerate grants.env was written anyway, and the exit
|
|
409
414
|
// code was 0 — while the message blamed the package for a defect in this line.
|
|
410
|
-
return init(resolvePath(parsed.dir ?? process.cwd()), parsed.force);
|
|
415
|
+
return init(resolvePath(parsed.dir ?? process.cwd()), parsed.force, loadRegistry);
|
|
411
416
|
}
|
|
412
417
|
/**
|
|
413
418
|
* Only when run as a program. Importing this module (the tests do) must not execute anything.
|