pi-daddy 0.43.1 → 0.44.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +97 -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 +16 -11
- 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,74 @@ 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.1 — Pi 1.0.4 extension-loader compatibility (2026-10-07)
|
|
16
|
+
|
|
17
|
+
- Declare Pi and TypeBox as wildcard host-provided peers and retain the qualified versions only as development dependencies. Pi 1.0.4 can now supply its single runtime copies without extension-loader warnings or duplicate modules.
|
|
18
|
+
|
|
19
|
+
## 0.44.0 — stable release (2026-10-07)
|
|
20
|
+
|
|
21
|
+
- Rebuild the native helper using a SHA-pinned Zig/static-musl toolchain, retain exact source/artifact/license
|
|
22
|
+
provenance, and have CI reproduce every output byte. The loader verifies the held executable against its generated
|
|
23
|
+
JavaScript constant; the checksum sidecar is no longer runtime authority. Ship the corresponding musl and Zig notices.
|
|
24
|
+
- Reject invalid native control/status descriptors and unsupported child enumeration before admitting a worker;
|
|
25
|
+
treat control-read failures as owner loss, validate numeric bounds, send TERM once per unreaped child, and preserve
|
|
26
|
+
the original stop reason during hard escalation. Startup uses the caller's timeout/deadline, retaining late valid
|
|
27
|
+
ownership evidence without reopening a cancelled worker's start gate.
|
|
28
|
+
- Recheck retained reservations against their original durable receipts before single, parallel and chain dispatch.
|
|
29
|
+
Exact later settlement proof releases capacity once; missing or mismatched proof remains retained, and the original
|
|
30
|
+
failed/unknown result remains unchanged. Use `delegate_all` for independent parallel work.
|
|
31
|
+
- Compare streamed/persisted messages structurally: object-key order is irrelevant, array order and every value remain
|
|
32
|
+
binding. Share a final-output conformance table with skill-harness, preserving text bytes without invented separators.
|
|
33
|
+
- **Breaking — explicit package support:** require Linux x64 and exact Pi 1.0.4 in package platform and peer metadata.
|
|
34
|
+
Other platforms or Pi versions must retain their previously qualified runtime until separately qualified.
|
|
35
|
+
- Clarify the original candidate's removed monetary/advisor/model automation and passive-cost JSON breaking changes,
|
|
36
|
+
with migration guidance and version-scoped changelog entries.
|
|
37
|
+
|
|
38
|
+
## 0.44.0-rc.1 — captured delegation qualification (2026-10-07)
|
|
39
|
+
|
|
40
|
+
Release candidate for review, not a stable or npm publication. Use the immutable candidate tag for source review.
|
|
41
|
+
|
|
42
|
+
- **Breaking — delegation bounds:** budget now caps active descendants through disjoint subtree reservations, alongside
|
|
43
|
+
depth and per-call limits. Settled children return capacity; uncertain cleanup retains it. A single child
|
|
44
|
+
conservatively reserves the available subtree, and active ownership survives extension reloads.
|
|
45
|
+
- **Bounded input and approval handling:** retain cleanup failures on the original owner, guard manual history
|
|
46
|
+
reads, and time out approvals without weakening their authority. Named approval revocation uses the pinned
|
|
47
|
+
selected definition; `revoke --all` remains available without resource acquisition.
|
|
48
|
+
- **Captured execution contract:** qualify Pi 1.0.4 JSON settlement against the exact persisted current turn and
|
|
49
|
+
active branch. Preserve complete final text and expose work/final/cleanup/observation states independently.
|
|
50
|
+
Failed children return native error results with available evidence; optional recording failures preserve work.
|
|
51
|
+
- **Cleanup:** use the packaged Linux x64 subreaper and execution-bound durable receipts. Unknown subtree cleanup
|
|
52
|
+
retains capacity and quarantines workspace reuse; preserve the referenced ownership directory as evidence.
|
|
53
|
+
- **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.
|
|
54
|
+
- **Breaking — staged backend release:** governed Herdr execution refuses, even when its server answers, until parity is
|
|
55
|
+
qualified. Explicitly set `PI_DADDY_HERDR=0` for captured execution; there is no fallback after selection.
|
|
56
|
+
- **Required handoffs:** block dependent chain steps when the complete prior final exceeds the handoff limit.
|
|
57
|
+
The completed step and its full result remain available; no tail-only handoff is promoted to complete.
|
|
58
|
+
- **Selected Principal resources:** bind the native phase to selected inline and delegated bytes, hash and exact
|
|
59
|
+
package manifest, use `delegate_describe` to obtain the required definition identity, and pin it until reload.
|
|
60
|
+
Missing, moved or tampered marked Principal resources refuse rather than becoming ordinary inline definitions.
|
|
61
|
+
|
|
62
|
+
- **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
|
|
63
|
+
legacy settings and cost arguments are inert; manual model edits, permission approvals and retained historical
|
|
64
|
+
usage remain. Pi 1.0.4 argument preparation validates active arguments after removing the retired cost override.
|
|
65
|
+
- Live complete episode cost is explicitly unavailable in the session dashboard; historical usage remains in reports.
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
### Passive cost coverage
|
|
69
|
+
|
|
70
|
+
- **Breaking — report JSON change:** row/group/total cost and episode-cost percentiles may be null when coverage is incomplete.
|
|
71
|
+
Use observedCost for the known subtotal and costCoverage for complete/partial/unavailable status. A reported zero
|
|
72
|
+
remains zero. Cost coverage concerns recorded child executions only; root and unrecorded work are not measured.
|
|
73
|
+
|
|
74
|
+
### Surviving guard repairs
|
|
75
|
+
|
|
76
|
+
- Treat damaged or oversized runtime/resource settings and package metadata as failures, not missing defaults.
|
|
77
|
+
Bounded reads reject FIFOs and malformed UTF-8; unresolved cleanup stays attached to the operation and session owner.
|
|
78
|
+
- Pruned handoffs carry only the active Pi branch and shared ancestry. Unavailable input is labeled incomplete.
|
|
79
|
+
Named file handoffs require Linux held-descriptor confinement proof and refuse when it is unavailable.
|
|
80
|
+
- Approval timeouts accept absent (120 seconds), literal 0 (unlimited), or canonical whole seconds 1..2147483.
|
|
81
|
+
Fix malformed values before requesting a new prompt; existing authority remains usable.
|
|
82
|
+
|
|
15
83
|
## 0.43.1 — Pi-only documentation refresh (2026-09-29)
|
|
16
84
|
|
|
17
85
|
- Refresh `README.md`, `AGENTS.md`, the package README, and the ledger-record contract README against the shipped
|
|
@@ -786,7 +854,6 @@ and test synchronization only; dependencies and runtime are unchanged.
|
|
|
786
854
|
Rename prose/whitespace keys before calling `runNamedCheck`; invalid IDs now refuse before the executable
|
|
787
855
|
or lease starts rather than failing only when a v3 receipt is appended.
|
|
788
856
|
|
|
789
|
-
|
|
790
857
|
## 0.19.0 — workspace routing is a capability (2026-08-23)
|
|
791
858
|
|
|
792
859
|
**The four hang fixes below were staged for a 0.18.2 and are released here instead — a decision reversed
|
|
@@ -794,13 +861,13 @@ deliberately, so the reversal is recorded rather than the reason vanishing.** Th
|
|
|
794
861
|
argued for cutting them as a patch so a fix for released code would not be gated on a breaking change. The
|
|
795
862
|
counter-argument won: **R-131 — workspace routing does not attenuate — is a live escalation in published
|
|
796
863
|
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
|
|
864
|
+
ledger line that reads as authorised, and the fix for it _is_ the breaking change. A 0.18.2 would have fixed
|
|
798
865
|
one defect and left that one open, on a line that then needed supporting alongside this one. Shipping once
|
|
799
866
|
fixes all three.
|
|
800
867
|
|
|
801
868
|
- **FIX — a retained lease no longer reports a retention that did not happen (R-152).** `markRetained`
|
|
802
869
|
returned `void` and `releaseDelegationWorkspace` hardcoded the ledger word, so a `workspace_lease` event
|
|
803
|
-
said `retained` —
|
|
870
|
+
said `retained` — _"the pane may still be live"_ — for a helper that had already died (the fact is `lost`),
|
|
804
871
|
for a lease already cleanly released, and for a retention whose record could not be written. It now answers
|
|
805
872
|
in the release vocabulary and the caller ledgers what it says. **Breaking for direct library callers only:**
|
|
806
873
|
`WorkspaceLease.markRetained` returns `Promise<LeaseReleaseOutcome>` instead of `Promise<void>`, and
|
|
@@ -827,7 +894,6 @@ fixes all three.
|
|
|
827
894
|
explicitly rejected outcome. Measured with a `herdr` that sleeps: before, `LOCK=HELD` with no marker
|
|
828
895
|
indefinitely; after, released with the marker written. Tunable via `herdrCloseTimeoutMs` (default 15s).
|
|
829
896
|
|
|
830
|
-
|
|
831
897
|
- Ship a canonical JSON Schema draft 2020-12 contract for `ledgerVersion: 2` plus deterministic fixtures for
|
|
832
898
|
all four event types, generated through the production builders. Stable package export paths let external
|
|
833
899
|
harnesses pin the real contract instead of maintaining a parallel format.
|
|
@@ -886,7 +952,7 @@ and a mutation battery, and are listed because ADR-0035 claimed three of them as
|
|
|
886
952
|
amendment). **The entries under "Present in earlier releases" below DID ship**, and an earlier draft of this section put
|
|
887
953
|
them under this heading, telling operators the `tool:*` attenuation escape could not affect them. (That draft
|
|
888
954
|
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
|
|
955
|
+
here that provably did _not_ ship. It has moved back.)
|
|
890
956
|
|
|
891
957
|
- **Routing terminated below the root instead of attenuating.** `unknownCapabilities` did not know the
|
|
892
958
|
namespace, and a catalog is always present in a real session, so every requested `workspace:<id>` was
|
|
@@ -1008,7 +1074,7 @@ is never a force-push, and `test/branch-guard.test.ts`, which pins it against se
|
|
|
1008
1074
|
|
|
1009
1075
|
**Why a version at all**, since nothing here changed: rule 10 says version bumps take the same path as
|
|
1010
1076
|
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
|
|
1077
|
+
six independent agents across two rounds that found sixteen defects, including that _"never commit to `main`"_
|
|
1012
1078
|
forbids the merge the rule requires, and that the guard written to fix that had reproduced the same defect in
|
|
1013
1079
|
shell. `docs/03-risks.md` R-85 and the 2026-08-18 session-log entry hold the details.
|
|
1014
1080
|
|
|
@@ -1021,11 +1087,11 @@ order is now what the sentence says it is.
|
|
|
1021
1087
|
one that removes the last reason to keep an ungoverned spawner installed alongside this one.
|
|
1022
1088
|
|
|
1023
1089
|
- **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
|
|
1090
|
+
child, which is the highest-authority text a child receives after its own `SKILL.md`. The label is _framing_ — a
|
|
1025
1091
|
determined injection can argue with it — but the **nonce is mechanism**: minted after the producing child
|
|
1026
1092
|
finished, so it cannot forge a closing delimiter. ADR-0033 records the stronger option (quarantine to a file the
|
|
1027
1093
|
next step must `read`) as the prepared answer if framing proves insufficient.
|
|
1028
|
-
- **Gated upfront: one dialog per capability
|
|
1094
|
+
- **Gated upfront: one dialog per capability _and_ definition, all before the first step runs.** Approvals arrive
|
|
1029
1095
|
together instead of interrupting a running pipeline. Not one dialog for everything — an approval is keyed
|
|
1030
1096
|
`capability@subject`, so a single dialog spanning several definitions would ask about one and spend the answer on
|
|
1031
1097
|
the rest. ADR-0033 originally specified that, three reviewers found it was a privilege path, and the ADR carries
|
|
@@ -1040,7 +1106,7 @@ one that removes the last reason to keep an ungoverned spawner installed alongsi
|
|
|
1040
1106
|
`PI_GRANTS_FANOUT=12` (the default is 8). At most 8 steps.
|
|
1041
1107
|
|
|
1042
1108
|
**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
|
|
1109
|
+
workspace — the gap that hid three shipping defects in 0.16.0, where the unit fake was a _claim_ about herdr that
|
|
1044
1110
|
nothing verified.
|
|
1045
1111
|
|
|
1046
1112
|
## 0.16.0 — children you can watch, in panes chosen for you
|
|
@@ -1048,17 +1114,17 @@ nothing verified.
|
|
|
1048
1114
|
**If herdr is running, your sub-agents now run in herdr panes without you configuring anything — and the
|
|
1049
1115
|
parent shows what each one is doing while it works.** Two ADRs, shipped together.
|
|
1050
1116
|
|
|
1051
|
-
### `PI_GRANTS_HERDR` is three-state, and unset now means
|
|
1117
|
+
### `PI_GRANTS_HERDR` is three-state, and unset now means _probe_ (ADR-0031)
|
|
1052
1118
|
|
|
1053
|
-
| Value | Behaviour
|
|
1054
|
-
|
|
|
1119
|
+
| Value | Behaviour |
|
|
1120
|
+
| :---- | :-------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1055
1121
|
| 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`
|
|
1122
|
+
| `1` | Demand herdr. **Every delegation refuses** if it is unreachable — no fallback. |
|
|
1123
|
+
| `0` | Demand the captured subprocess. No probe. |
|
|
1058
1124
|
|
|
1059
1125
|
**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
|
|
1126
|
+
a path nobody chose — so only a _reachable_ server counts. This reverses part of ADR-0016 point 6, which
|
|
1127
|
+
refused auto-detection on the grounds that a run must not "silently relocate"; the answer to _silently_ is that
|
|
1062
1128
|
the executor is now named at session start, in `/grants`, and per child in the ledger.
|
|
1063
1129
|
|
|
1064
1130
|
**What to do about it:** nothing, unless you relied on an unset variable meaning subprocesses. If you did, set
|
|
@@ -1090,7 +1156,7 @@ returned.
|
|
|
1090
1156
|
|
|
1091
1157
|
A pane used to be destroyed the instant its child settled, so a twenty-second child's pane was gone before
|
|
1092
1158
|
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
|
|
1159
|
+
at once, with process `exit` as the backstop. `PI_GRANTS_HERDR_KEEP_PANE=1` still means _not even then_.
|
|
1094
1160
|
|
|
1095
1161
|
A child's pane also defaults to the **parent's own herdr workspace** now, so switching to one is a tab away
|
|
1096
1162
|
rather than a workspace away.
|
|
@@ -1106,7 +1172,7 @@ shipping blockers, and they change what the herdr path guarantees:
|
|
|
1106
1172
|
working with its grant after its result was reported.
|
|
1107
1173
|
- **herdr binds an agent name to its tab.** With panes outliving their calls, the **second `delegate` of every
|
|
1108
1174
|
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
|
|
1175
|
+
- **The 8-pane cap killed live siblings**, because pi runs tool calls in parallel by default. Only _settled_ panes
|
|
1110
1176
|
are reclaimable now; if they are all live the cap yields rather than enforcing.
|
|
1111
1177
|
- **The pane reader amplified output 89,000×** once a pane scrolled or passed the output cap: `agent read` returns
|
|
1112
1178
|
a snapshot of a bounded terminal and was being diffed as an append-only stream.
|
|
@@ -1127,7 +1193,7 @@ and coverage was added where it was simply absent — including that nothing ver
|
|
|
1127
1193
|
### Also
|
|
1128
1194
|
|
|
1129
1195
|
- **`/grants ledger` tallies executors**, so "which children ran in panes?" no longer needs `jq`.
|
|
1130
|
-
- **The tripwire names `delegate_all`.** It said only
|
|
1196
|
+
- **The tripwire names `delegate_all`.** It said only _"Use `delegate` instead"_, and a request for parallel
|
|
1131
1197
|
work was answered with a single sequential call as a result.
|
|
1132
1198
|
- **The ledger records `executor` per child** — required, not optional. The executor is decided by a probe now,
|
|
1133
1199
|
so nothing outside the record preserves which one ran, and the two paths do not produce the same argv.
|
|
@@ -1158,7 +1224,7 @@ pi
|
|
|
1158
1224
|
**always wins**: it is how a child is governed and how CI is configured. `.pi/grants.env` is still written
|
|
1159
1225
|
and still worth committing — it is the reviewable record, no longer what the enforcer reads. (ADR-0030)
|
|
1160
1226
|
- **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
|
|
1227
|
+
`edit`, so once bash is granted those are conferred; asking anyway let an operator answer _no_ to
|
|
1162
1228
|
`tool:write` and then watch `build` be allowed it. It now reports them as already conferred instead.
|
|
1163
1229
|
- **An unknown `/grants` subcommand is refused rather than ignored.** `/grants init` used to print the
|
|
1164
1230
|
ordinary status screen with the word silently dropped, so a command that did not exist looked like it had
|
|
@@ -1182,7 +1248,7 @@ resolution, enforcement, approvals or the ledger changed — this is the part be
|
|
|
1182
1248
|
- **The generated grant is READ-ONLY by default** (ADR-0029). `init` grants what the copied skills declare
|
|
1183
1249
|
minus anything that can change your machine — `bash`, `write`, `edit` and the universal capabilities are
|
|
1184
1250
|
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
|
|
1251
|
+
setup; widening costs one deliberate uncomment. The reason: `PI_GRANTS_GRANT` is what _bounds_ a declared
|
|
1186
1252
|
ceiling, so generating it from those ceilings would give the bound and the bounded one author, and it
|
|
1187
1253
|
would not be you.
|
|
1188
1254
|
|
|
@@ -1193,14 +1259,14 @@ resolution, enforcement, approvals or the ledger changed — this is the part be
|
|
|
1193
1259
|
`PI_GRANTS_GRANT` string by hand — seven times for `principal-pi-skills`.
|
|
1194
1260
|
|
|
1195
1261
|
**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
|
|
1262
|
+
copied byte for byte; one that declares none is copied with a _commented_ placeholder and stays
|
|
1197
1263
|
unspawnable until a human fills it in. The placeholder is deliberately not a working example, so
|
|
1198
1264
|
uncommenting it unedited fails loudly instead of granting something nobody decided. An existing file is
|
|
1199
1265
|
**kept**, never overwritten — that edit is the capability decision, and a second `init` run is exactly
|
|
1200
1266
|
when it would be destroyed. `--force` exists and says what it costs.
|
|
1201
1267
|
|
|
1202
1268
|
- **Session start says how many definitions are spawnable, and names the withheld ones.** The line reported
|
|
1203
|
-
the grant and never the definitions, so
|
|
1269
|
+
the grant and never the definitions, so _"governance is working"_ and _"did the install fail?"_ looked
|
|
1204
1270
|
identical:
|
|
1205
1271
|
|
|
1206
1272
|
```
|
|
@@ -1224,11 +1290,11 @@ resolution, enforcement, approvals or the ledger changed — this is the part be
|
|
|
1224
1290
|
from a package are refused, and the assembled grant is charset-checked before the file is written at all.
|
|
1225
1291
|
|
|
1226
1292
|
- **Fixed before release: `init` overwrote an operator's file and wrote through symlinks** (R-79). The
|
|
1227
|
-
presence probe was `readFile`, which treats
|
|
1293
|
+
presence probe was `readFile`, which treats _unreadable_ as _absent_ — so a permissions-restricted
|
|
1228
1294
|
`SKILL.md` was replaced and its ceiling **widened**, with no `--force`. And `writeFile` follows symlinks, so
|
|
1229
1295
|
a dangling link at a target path created the file outside the project while reporting an in-project path.
|
|
1230
1296
|
Both are one `open(path, "wx")`. `--force` no longer regenerates `.pi/grants.env`, and `pi-daddy init
|
|
1231
|
-
|
|
1297
|
+
--Force` is no longer accepted as a silent no-op.
|
|
1232
1298
|
|
|
1233
1299
|
- **Fixed before release: the startup line blamed your files for a session-level refusal** (R-81). A session
|
|
1234
1300
|
at its depth limit, or with a malformed `PI_GRANTS_MAX_DEPTH`, was told its `SKILL.md` files were written
|
|
@@ -1258,17 +1324,17 @@ as a user of this package:
|
|
|
1258
1324
|
the path, not the lock this process created, so a broken stale lock cascaded: the old holder freed the new
|
|
1259
1325
|
owner's lock on the way out, and the next arrival — which raced nothing — walked in beside it. Reproduced
|
|
1260
1326
|
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
|
|
1327
|
+
- **The ledger over-claimed human approval under concurrency.** One _Allow for this session_ answered under
|
|
1262
1328
|
a fan-out of eight wrote eight lines each recording `approvalSource: "prompt"`. Riders now record
|
|
1263
1329
|
`session`, which is what actually happened.
|
|
1264
1330
|
|
|
1265
1331
|
One breaking change, and it is a type.
|
|
1266
1332
|
|
|
1267
1333
|
- **BREAKING: `revokeApproval` returns `"revoked" | "absent" | "failed" | "busy"`**, not a boolean. It had
|
|
1268
|
-
two outcomes for four facts, and `/grants revoke` printed
|
|
1334
|
+
two outcomes for four facts, and `/grants revoke` printed _"no persisted approval named X"_ whenever the
|
|
1269
1335
|
write failed — telling an operator that the approval they are revoking does not exist **while it is still
|
|
1270
1336
|
in effect**. The most alarming outcome wore the most reassuring message. `busy` is separate because a lock
|
|
1271
|
-
timeout happens
|
|
1337
|
+
timeout happens _before_ the load, so nothing was looked at and nothing may be claimed about the entry.
|
|
1272
1338
|
Callers switching on the boolean must switch on the string; `"revoked"` is the only success.
|
|
1273
1339
|
- **Approval writes hold a lock (R-49).** Every write is load → modify → write and none of them was
|
|
1274
1340
|
serialised, so session 1 could load, session 2 could revoke, and session 1's next save would restore the
|
|
@@ -1278,10 +1344,10 @@ One breaking change, and it is a type.
|
|
|
1278
1344
|
- **`/grants ledger` counts where each approval came from.** ADR-0020 keeps the persistence layer on an
|
|
1279
1345
|
asserted fatigue argument and named the evidence that would settle it — `persisted` against `prompt` over
|
|
1280
1346
|
real use. The data was already recorded and nothing read it. **Two numbers, both labelled**: raw records
|
|
1281
|
-
are an
|
|
1347
|
+
are an _upper bound_ on prompts avoided, because within one session only the first would have been a
|
|
1282
1348
|
prompt and the rest come from the in-memory session cache; distinct `capability@subject` pairs are the
|
|
1283
1349
|
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
|
|
1350
|
+
Records written before per-capability sources existed are reported as _not counted_ rather than folded in,
|
|
1285
1351
|
because that older scalar over-claimed `prompt`.
|
|
1286
1352
|
- **A revoke is documented as taking effect at the next gate check**, not "immediately". A spawn whose gate
|
|
1287
1353
|
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.1** (tag `v0.44.1`), 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.
|