pi-daddy 0.45.0 → 0.46.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 +4 -0
- package/README.md +355 -45
- package/dist/executors/captured-execution.d.ts +2 -2
- package/dist/executors/captured-execution.d.ts.map +1 -1
- package/dist/executors/captured-execution.js +2 -2
- package/dist/executors/captured-execution.js.map +1 -1
- package/dist/executors/executor.d.ts.map +1 -1
- package/dist/executors/executor.js +4 -2
- package/dist/executors/executor.js.map +1 -1
- package/dist/executors/herdr-cli.d.ts +2 -0
- package/dist/executors/herdr-cli.d.ts.map +1 -1
- package/dist/executors/herdr-cli.js +2 -2
- package/dist/executors/herdr-cli.js.map +1 -1
- package/dist/executors/herdr-launcher.d.ts +2 -0
- package/dist/executors/herdr-launcher.d.ts.map +1 -0
- package/dist/executors/herdr-launcher.js +123 -0
- package/dist/executors/herdr-launcher.js.map +1 -0
- package/dist/executors/herdr-owned.d.ts +13 -0
- package/dist/executors/herdr-owned.d.ts.map +1 -0
- package/dist/executors/herdr-owned.js +229 -0
- package/dist/executors/herdr-owned.js.map +1 -0
- package/dist/executors/herdr-qualification.d.ts +6 -0
- package/dist/executors/herdr-qualification.d.ts.map +1 -0
- package/dist/executors/herdr-qualification.js +33 -0
- package/dist/executors/herdr-qualification.js.map +1 -0
- package/dist/executors/herdr-wire.d.ts +5 -0
- package/dist/executors/herdr-wire.d.ts.map +1 -0
- package/dist/executors/herdr-wire.js +47 -0
- package/dist/executors/herdr-wire.js.map +1 -0
- package/dist/governance/runtime-settlement-lock.d.ts +5 -0
- package/dist/governance/runtime-settlement-lock.d.ts.map +1 -0
- package/dist/governance/runtime-settlement-lock.js +72 -0
- package/dist/governance/runtime-settlement-lock.js.map +1 -0
- package/dist/governance/runtime-settlement.d.ts +22 -0
- package/dist/governance/runtime-settlement.d.ts.map +1 -0
- package/dist/governance/runtime-settlement.js +236 -0
- package/dist/governance/runtime-settlement.js.map +1 -0
- package/extensions/execute-child.ts +98 -74
- package/extensions/executor-session.ts +2 -1
- package/extensions/grants.ts +3 -0
- package/extensions/reload-environment.ts +8 -0
- package/extensions/runtime-snapshot.ts +123 -0
- package/extensions/session.ts +1 -1
- package/package.json +1 -1
- package/src/executors/captured-execution.ts +2 -1
- package/src/executors/executor.ts +4 -2
- package/src/executors/herdr-cli.ts +19 -12
- package/src/executors/herdr-launcher.ts +124 -0
- package/src/executors/herdr-owned.ts +260 -0
- package/src/executors/herdr-qualification.ts +33 -0
- package/src/executors/herdr-wire.ts +43 -0
- package/src/governance/runtime-settlement-lock.ts +76 -0
- package/src/governance/runtime-settlement.ts +271 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Changelog — pi-daddy
|
|
2
2
|
|
|
3
|
+
## 0.46.0 — 2026-10-08
|
|
4
|
+
|
|
5
|
+
Qualify owned Herdr execution on Linux x64 with client/server 0.8.2 and protocol 20. Native ownership gates execution and independently reaps descendants after coordinator, launcher or server loss; final answers use the same Pi 1.0.4 settled/persisted checks as captured execution. Add a durable session settlement journal and trusted runtime snapshot bridge for one-shot Principal resume. Unsupported versions refuse without backend substitution.
|
|
6
|
+
|
|
3
7
|
Newest first. **Breaking changes are marked and say what to do about them.**
|
|
4
8
|
|
|
5
9
|
This file exists because the README had grown ninety lines of stacked version banners before a reader
|
package/README.md
CHANGED
|
@@ -1,58 +1,29 @@
|
|
|
1
1
|
# pi-daddy
|
|
2
2
|
|
|
3
|
-
Source target: **0.
|
|
3
|
+
Source target: **0.46.0**. Before installation, verify that `npm view pi-daddy version` and Git tag `v0.46.0` both resolve to this release.
|
|
4
4
|
|
|
5
|
-
Capability governance and coordination for [pi](https://github.com/badlogic/pi-mono)'s multi-level agent system
|
|
6
|
-
orchestrator grants each sub-agent a deliberate subset of what it holds and withholds the rest
|
|
7
|
-
further, but only ever a subset of what it holds. Enforcement is pi's own `--tools` allowlist on a separate
|
|
8
|
-
process, with an optional append-only, hash-chained governance ledger.
|
|
5
|
+
**Capability governance and coordination for [pi](https://github.com/badlogic/pi-mono)'s multi-level agent system.**
|
|
6
|
+
An orchestrator grants each sub-agent a deliberate subset of what it holds and withholds the rest. A sub-agent may
|
|
7
|
+
delegate further, but only ever a subset of what it holds. Enforcement is pi's own `--tools` allowlist on a separate
|
|
8
|
+
child process, with an optional append-only, hash-chained governance ledger.
|
|
9
|
+
|
|
10
|
+
This file is the product description, present tense. If code and this file disagree, fix this file. Agents start at
|
|
11
|
+
`AGENTS.md`, which carries the rules, the decisions still in force, the measured facts and the roadmap.
|
|
12
|
+
|
|
13
|
+
## Install and first run
|
|
9
14
|
|
|
10
15
|
```bash
|
|
11
16
|
pi install npm:pi-daddy
|
|
12
17
|
pi
|
|
13
18
|
```
|
|
14
19
|
|
|
15
|
-
`/grants` shows the
|
|
20
|
+
In the session, `/grants` shows the tool ceiling this session holds and the definitions it can spawn. Governance is
|
|
21
|
+
on after installation unless `PI_DADDY_GOVERNANCE=off`; before initialization a root session is bounded by its
|
|
22
|
+
observed tool surface, but no project grant or ledger consent has been stored. `/grants init` scans enabled packages
|
|
23
|
+
that declare runtime skills, asks which withheld capabilities to grant, writes the review copy at
|
|
16
24
|
`.pi/pi-daddy/settings.json`, stores the enforced grant outside the workspace, enables the project ledger, and applies
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
body is the child's system prompt.
|
|
20
|
-
|
|
21
|
-
```
|
|
22
|
-
delegate({ agent: "review-security", task: "Review the diff." })
|
|
23
|
-
delegate_all({ children: [ { agent: "review-security", task: "…" }, { agent: "review-perf", task: "…" } ] })
|
|
24
|
-
delegate_chain({ steps: [ { agent: "plan", task: "…" }, { agent: "build", task: "Implement: {previous}" } ] })
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
```
|
|
28
|
-
effective = ( requested ∩ parentGrant ∩ ceiling ) \ (gated \ approved)
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
Escalation is impossible by construction on the tool surface. It does not contain an agent holding an execution
|
|
32
|
-
primitive: a child granted `bash` can start an ungoverned descendant, so `bash` is gated by default and every gate
|
|
33
|
-
answer is recorded when a governance ledger is configured.
|
|
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
|
-
Pi and TypeBox are wildcard host-provided peers so Pi's extension loader supplies one shared runtime copy. Development and release qualification pin exact Pi **1.0.4**; later Pi versions require new qualification. Prefer a Pi-managed install under a host pinned to 1.0.4. An ordinary standalone npm install may resolve newer peer versions and is outside this qualification. In a Pi-managed no-peer install, standalone help, version and reporting remain available; run initialization inside Pi with `/grants init`. 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
|
-
|
|
48
|
-
The package requires Node.js 22.19.0 or newer. `pi-daddy report` joins episode usage and attribution;
|
|
49
|
-
`pi-daddy outcomes` adds Git, CI, amendment, and operator-correction signals for commits carrying a `Pi-Episode`
|
|
50
|
-
trailer. A connected dashboard can change model/thinking defaults for its owning session without changing persistent
|
|
51
|
-
settings or enforcement.
|
|
52
|
-
|
|
53
|
-
The full product description is the repository [README](https://github.com/mojomanyana/pi-daddy#readme); the
|
|
54
|
-
[CHANGELOG](./CHANGELOG.md) says what each release changed and what to do about breaking changes. The one shipped
|
|
55
|
-
contract is `contracts/ledger-record/v1`.
|
|
25
|
+
both decisions to the running session. Commit the review copy when the project's ignore rules permit it. The
|
|
26
|
+
standalone `pi-daddy init` command scaffolds files only; it cannot mutate a live pi session.
|
|
56
27
|
|
|
57
28
|
## Optional local public evidence capture
|
|
58
29
|
|
|
@@ -101,3 +72,342 @@ local root deliberately. Hashes identify retained bytes; they do not authenticat
|
|
|
101
72
|
running as the same user. Capture integrity establishes neither reviewer approval nor task completion and
|
|
102
73
|
adds no grants, ledger events or automatic resumption. Future JEV/LoRA experiments may explicitly consume
|
|
103
74
|
reviewed public evidence offline; this feature sends nothing to an external evaluator.
|
|
75
|
+
|
|
76
|
+
## What a definition is
|
|
77
|
+
|
|
78
|
+
An [Agent Skills](https://agentskills.io/specification) `SKILL.md`. Its `allowed-tools` is the ceiling; its body is
|
|
79
|
+
the child's system prompt. The standard specifies `allowed-tools` as "pre-approved" and marks it experimental: it
|
|
80
|
+
declares intent and blocks nothing. Passed through `--tools` it becomes structural. That is the contribution.
|
|
81
|
+
|
|
82
|
+
```yaml
|
|
83
|
+
---
|
|
84
|
+
name: review-security
|
|
85
|
+
description: Reviews a diff for authn/authz, injection and secrets handling.
|
|
86
|
+
allowed-tools: Read, Grep
|
|
87
|
+
---
|
|
88
|
+
Review ONLY the diff you are given, for security. Report findings; never edit.
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## The three tools
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
delegate({ agent: "review-security", task: "Review the diff." })
|
|
95
|
+
delegate_all({ children: [ { agent: "review-security", task: "…" }, { agent: "review-perf", task: "…" } ] })
|
|
96
|
+
delegate_chain({ steps: [ { agent: "plan", task: "…" }, { agent: "build", task: "Implement: {previous}" } ] })
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Each child is a separate OS process with its own tool allowlist, its own instructions and no knowledge of its
|
|
100
|
+
siblings. `delegate_all` runs children concurrently under the active descendant capacity limit.
|
|
101
|
+
`delegate_chain` runs steps in sequence; each step receives its predecessor's complete verified final inside a
|
|
102
|
+
fenced, labelled, nonce-delimited block. A required final exceeding the 32 KiB handoff bound stops dependent steps;
|
|
103
|
+
the complete result remains available to the caller. The chain is planned and gated before any step runs. A child may itself hold `delegate` and spawn further, with the
|
|
104
|
+
same tools, one level deeper, under the same rules.
|
|
105
|
+
|
|
106
|
+
## What a child receives
|
|
107
|
+
|
|
108
|
+
By default a child gets two things: its definition body as its system prompt, and the task. Anything more is a
|
|
109
|
+
capability. `context:<mode>` names how much of the parent's own session crosses, and it attenuates like every other
|
|
110
|
+
id, so a child can never receive a richer handoff than the definition's ceiling and the parent's grant allow.
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
delegate({ agent: "review", task: "Review the diff.",
|
|
114
|
+
context: { mode: "summary", summary: "we chose flock over mtime; the lease is a helper process" } })
|
|
115
|
+
|
|
116
|
+
delegate({ agent: "build", task: "Implement it.",
|
|
117
|
+
context: { mode: "files", files: ["src/kernel/resolve.ts"] } })
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
| Mode | What crosses |
|
|
121
|
+
| :--- | :--- |
|
|
122
|
+
| `none` | nothing beyond the definition and the task; the default |
|
|
123
|
+
| `files` | the contents of paths the parent names, confined to the working directory |
|
|
124
|
+
| `pruned` | the last few turns of the parent's session, plus older turns naming those files |
|
|
125
|
+
| `summary` | what the parent writes in its own words |
|
|
126
|
+
| `fork` | the parent's whole session, as a fork; **gated**, so a human answers first |
|
|
127
|
+
|
|
128
|
+
A `delegate_chain` step takes the same parameter, and because a chain is planned as one unit, a gate any step
|
|
129
|
+
raises is answered before the first step runs.
|
|
130
|
+
|
|
131
|
+
The modes are ordered, and each subsumes the weaker ones: a parent holding `context:fork` may hand a child
|
|
132
|
+
`context:files`. What crosses arrives inside a labelled, nonce-delimited fence marked as data rather than
|
|
133
|
+
instructions, capped at 32 KiB, with anything that did not fit said inside the fence. The capability decision record
|
|
134
|
+
names the mode the child actually received and how much crossed.
|
|
135
|
+
|
|
136
|
+
`pruned` keeps recent turns plus turns naming the given files. The deterministic selector keeps those candidates
|
|
137
|
+
against the task, keeping a subset. A probe over the operator's sessions measured 0.737 delivered term recall at the
|
|
138
|
+
20-turn default; that is not task-success evidence and is not enough to make `pruned` the default.
|
|
139
|
+
|
|
140
|
+
## The guarantee, and its limit
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
effective = ( requested ∩ parentGrant ∩ ceiling ) \ (gated \ approved)
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Escalation is impossible by construction on the tool surface: no policy engine, no model on the security path. Depth,
|
|
147
|
+
active descendant capacity, approvals and workspace routing attenuate the same way. When a governance ledger is configured, each
|
|
148
|
+
decision is recorded and the `denied` set is the signal: an agent repeatedly asking for what it does not hold is the
|
|
149
|
+
escalation tell.
|
|
150
|
+
|
|
151
|
+
What it does not do: contain an agent holding an execution primitive. A child granted `bash` can start a wholly
|
|
152
|
+
ungoverned descendant. Containing that is the operating system's job, so `bash` is **gated by default** in a
|
|
153
|
+
governed session and gating is closed under subsumption (gating `write` also gates `bash`). The escape is not made
|
|
154
|
+
impossible; it is made loud, which is what matters when the realistic threat is a confused or prompt-injected agent.
|
|
155
|
+
|
|
156
|
+
**`write`, `edit` and `edit-diff` are gated too, since 0.40.0, and the reason is the same one.** A review used
|
|
157
|
+
pi's own `write` from a governed child to rewrite the operator's stored grant — widening it from `tool:read` to
|
|
158
|
+
`tool:bash` — and to write the record that says which workspaces are routable. `write` takes an absolute path and
|
|
159
|
+
performs no confinement, so it reaches every operator-state file on the same account. It is therefore much closer
|
|
160
|
+
to `bash` than a tool allowlist suggests, and it is now loud for the same reason `bash` is. The cost is real:
|
|
161
|
+
most useful delegations write something, so they ask once until an approval is banked. `PI_DADDY_GATED` is the
|
|
162
|
+
escape hatch for an operator who wants the old behaviour, and an explicitly empty value gates nothing.
|
|
163
|
+
|
|
164
|
+
## Approvals
|
|
165
|
+
|
|
166
|
+
A gated capability needs the UI of the session executing the delegation. Captured children use Pi's JSON mode
|
|
167
|
+
without a UI; a gate with neither an inherited approval nor an available UI is denied. The answer is **once**, **for this session**, or **always** (persisted for a bounded period, offered only for a
|
|
168
|
+
named definition, keyed `capability@subject`). Approvals inherit down the subtree intersected with each child's grant;
|
|
169
|
+
a `once` never crosses a spawn. The approval store and governance ledger never store raw task text. `/grants
|
|
170
|
+
approvals` lists what is persisted; `/grants revoke <capability>@<definition>` or `--all` removes it. The store lives
|
|
171
|
+
in pi's agent directory, not in the workspace.
|
|
172
|
+
|
|
173
|
+
Monetary usage is observational. It never pauses, stops or authorizes a child. Available usage remains in
|
|
174
|
+
lifecycle records and episode reports; missing or partial coverage is not a zero-cost claim. Permission approvals,
|
|
175
|
+
depth, fan-out limits and execution timeouts are separate controls.
|
|
176
|
+
|
|
177
|
+
## The ledger
|
|
178
|
+
|
|
179
|
+
When configured, `.pi/pi-daddy/grants.jsonl` holds capability decisions, child lifecycles, workspace leases, cost
|
|
180
|
+
and session configuration, and episode outcomes. Each line is a **record envelope**
|
|
181
|
+
`{v, seq, prev, at, kind, id, body, digest}`: `prev` is the hash of the previous line, `digest` the hash of the record.
|
|
182
|
+
A damaged file is read up to the damage; the writer then refuses with `LEDGER_DAMAGED` until `pi-daddy ledger repair
|
|
183
|
+
<path> --yes` drops the damaged tail. A ledger written before the envelope existed is imported once at session start
|
|
184
|
+
(`pi-daddy ledger import <source> <target>` does it by hand) and never repaired. `/grants ledger` reports records,
|
|
185
|
+
escalation attempts, integrity, executors and which definition bodies ran, by digest.
|
|
186
|
+
|
|
187
|
+
The activity timeline (`activity.jsonl`, parent turns, child lifecycles, runtime-skill reads) uses the same envelope
|
|
188
|
+
and is enabled by default. It may store private prompt and final content in `.pi/pi-daddy/content/`; set
|
|
189
|
+
`PI_DADDY_ACTIVITY_CONTENT=metadata-only` (or `off`) to keep only digests, or
|
|
190
|
+
`PI_DADDY_ACTIVITY_TIMELINE=off` to disable observation.
|
|
191
|
+
|
|
192
|
+
`pi-daddy outcomes` reads Git history, optional GitHub Actions results from `gh`, and narrowly recognized corrections
|
|
193
|
+
in the next recorded operator turn, then appends only changed `episode_outcome` signals. Only commits carrying a
|
|
194
|
+
`Pi-Episode: <episode-id>` trailer is considered; `pi-daddy report` can display attribution only when matching episode
|
|
195
|
+
data exists in the local ledgers and shows the latest label beside each such episode. These labels are delayed for 48 hours and are operational heuristics, not quality acceptance. The contract
|
|
196
|
+
is `packages/pi-daddy/contracts/ledger-record/v1`.
|
|
197
|
+
|
|
198
|
+
## Workspaces and leases
|
|
199
|
+
|
|
200
|
+
A registered worktree is named `workspace:<id>` and routing a child there is a capability that attenuates like any
|
|
201
|
+
other. Acceptance is trust on first use: the first session accepts and announces every id already in the registry.
|
|
202
|
+
Later additions are refused until `/grants workspaces` accepts the current id set, effective next session. Each session
|
|
203
|
+
pins accepted ids to their resolved destinations, so a destination changed during that session is refused; the next
|
|
204
|
+
session repins an already accepted id without another acceptance step. A writer routed to a workspace holds an
|
|
205
|
+
exclusive lease. A kernel `flock` serializes live writers; execution-bound helper receipts separately prove that
|
|
206
|
+
the previous captured subtree settled. Unknown cleanup quarantines the workspace even after the lock disappears,
|
|
207
|
+
refusing a successor until the original ownership evidence proves settlement. It coordinates governed children only; it is not a sandbox, path confinement, or proof of
|
|
208
|
+
anything a child did.
|
|
209
|
+
|
|
210
|
+
## Executors and the dashboard
|
|
211
|
+
|
|
212
|
+
Captured and Herdr pane execution share the native owner and current-final validator on Linux x64. Qualification is limited to the measured Ubuntu WSL2 environment: kernel `6.18.33.2-microsoft-standard-WSL2`, x86_64, Node `v26.7.0`, and exact Pi 1.0.4. Other kernel/runtime combinations, native Windows, and WSL-to-Windows worker interop remain unqualified.
|
|
213
|
+
A packaged native helper owns and reaps the cooperating child subtree. The final is accepted only when Pi's JSON
|
|
214
|
+
protocol settles and matches the exact persisted current turn and active branch. Complete final text is preserved;
|
|
215
|
+
work, final availability, subtree cleanup and optional observation completeness are separate result fields. A failed
|
|
216
|
+
execution returns `isError` with its available evidence. Display, diagnostics and optional recording cannot replace
|
|
217
|
+
the primary final. Unknown cleanup retains capacity and workspace exclusion.
|
|
218
|
+
|
|
219
|
+
Pi and TypeBox are wildcard host-provided peers so Pi's extension loader supplies one shared runtime copy. Development and release qualification pin exact Pi **1.0.4**; later Pi versions require new qualification. Prefer a Pi-managed install under a host pinned to 1.0.4. An ordinary standalone npm install may resolve newer peer versions and is outside this qualification. In a Pi-managed no-peer install, standalone help, version and reporting remain available; run initialization inside Pi with `/grants init`. 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.
|
|
220
|
+
|
|
221
|
+
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.
|
|
222
|
+
|
|
223
|
+
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.
|
|
224
|
+
|
|
225
|
+
Set `PI_DADDY_HERDR=0` for captured execution or `PI_DADDY_HERDR=1` to demand Herdr panes. An unset value
|
|
226
|
+
probes for a responding server. The qualified Herdr transport requires client/server 0.8.2 and protocol 20;
|
|
227
|
+
a version mismatch refuses governed work with no backend fallback. Each owned pane starts a packaged launcher
|
|
228
|
+
connected to the coordinator over a private bounded Unix socket. The launcher uses the same pinned native
|
|
229
|
+
subreaper, and the coordinator binds its identity before releasing the worker gate. Child environment and
|
|
230
|
+
arguments come from the governed plan, without inheriting the Herdr daemon's environment. Only public text is
|
|
231
|
+
shown in the pane; raw protocol/private reasoning is not used as a display channel.
|
|
232
|
+
|
|
233
|
+
Native receipts, not pane closure or idle screen state, prove subtree cleanup. Model-free qualification covers
|
|
234
|
+
actual Pi CLI success, retry, nested tool and failed-final cases, cancellation, coordinator SIGKILL and loss of
|
|
235
|
+
the independently owned Herdr server, including detached descendants. Retained panes have no live Pi writer.
|
|
236
|
+
An unavailable pane display cannot replace a missing final or cleanup receipt. Dashboard display remains independent.
|
|
237
|
+
|
|
238
|
+
The trusted extension event `pi-daddy:runtime-snapshot:v1` supports Principal's explicitly armed resume checks.
|
|
239
|
+
It reports the actual Pi session/canonical working directory, a stable owner scope, current backend qualification,
|
|
240
|
+
outstanding execution identities and an exact settlement digest. A private runtime journal under the operator's
|
|
241
|
+
Pi agent directory records pending launches before execution and native ownership before the gate opens. An OS
|
|
242
|
+
lock excludes concurrent owners; clean same-session restart rechecks original receipts and preserves the digest.
|
|
243
|
+
Missing or changed receipts, interrupted unbound launches, live owners and failed control finalization refuse
|
|
244
|
+
resume. The journal contains process identities and receipts, never task text or an approval. A model-authored
|
|
245
|
+
list of children, successful prose or a progress flag cannot supply these facts. Principal separately verifies
|
|
246
|
+
operator authorization, candidate and artifacts before consuming its checkpoint and queueing a fixed continuation.
|
|
247
|
+
This bridge never grants capabilities, approves work or calls JEV/OpenAI/other models. The ledger schema is unchanged.
|
|
248
|
+
Same-user hostile filesystem or co-loaded-extension authenticity is outside this cooperative ownership boundary.
|
|
249
|
+
|
|
250
|
+
`pi-daddy-dashboard` renders a ledger or activity timeline in a terminal; `/grants dashboard` opens it in a Herdr pane
|
|
251
|
+
beside the session. Its execution history and current episode cost are
|
|
252
|
+
read-only. A dashboard connected through `/grants dashboard` accepts
|
|
253
|
+
`m <definition> <provider:model> <thinking>` (or `m all ...`) over a private session-local socket and applies the same
|
|
254
|
+
in-memory overrides and `session_config` audit event as `/grants models`; a standalone dashboard is read-only, and
|
|
255
|
+
neither form can affect enforcement.
|
|
256
|
+
|
|
257
|
+
## Bounds and configuration
|
|
258
|
+
|
|
259
|
+
Every variable is `PI_DADDY_*`. Operator-facing controls are grouped below; the environment overrides stored
|
|
260
|
+
configuration where both exist.
|
|
261
|
+
|
|
262
|
+
| Area | Variables |
|
|
263
|
+
| :--- | :--- |
|
|
264
|
+
| Governance | `PI_DADDY_GOVERNANCE`, `PI_DADDY_GRANT`, `PI_DADDY_GATED`, `PI_DADDY_MAX_DEPTH`, `PI_DADDY_FANOUT`, `PI_DADDY_LEDGER`, `PI_DADDY_APPROVAL_TIMEOUT` |
|
|
265
|
+
| Child execution | `PI_DADDY_HERDR`, `PI_DADDY_HERDR_WORKSPACE`, `PI_DADDY_HERDR_KEEP_PANE`, `PI_DADDY_CHILD_IDLE_TIMEOUT`, `PI_DADDY_CHILD_TIMEOUT`, `PI_DADDY_ALLOW_UNRESOLVED_MODELS` |
|
|
266
|
+
| Workspaces and retention | `PI_DADDY_WORKSPACE_REGISTRY`, `PI_DADDY_WORKSPACE_LEASE_DIR`, `PI_DADDY_EXECUTION_ARCHIVE`, `PI_DADDY_RETAIN_NATIVE_SESSIONS`, `PI_DADDY_NATIVE_SESSION_ROOT` |
|
|
267
|
+
| Activity | `PI_DADDY_ACTIVITY_TIMELINE`, `PI_DADDY_ACTIVITY_CONTENT` |
|
|
268
|
+
|
|
269
|
+
`PI_DADDY_FANOUT` bounds active cooperating descendant sessions. Its default remains 8; literal 0 means exhausted,
|
|
270
|
+
and malformed values refuse. A reservation includes the child and its disjoint descendant allowance, so concurrent
|
|
271
|
+
calls can refuse while an earlier subtree holds capacity even when that subtree is not using every slot. Repeated
|
|
272
|
+
settled work returns capacity; unknown cleanup does not. The same live owner retains reservations through reload.
|
|
273
|
+
Changing its capacity configuration requires a new owner after the old subtree has settled. Depth and per-call
|
|
274
|
+
limits still apply independently; this is not a lifetime call quota.
|
|
275
|
+
|
|
276
|
+
The retired `PI_DADDY_EPISODE_COST_CEILING`, `PI_DADDY_ADVISOR`, `PI_DADDY_ADVISOR_KEY`,
|
|
277
|
+
`PI_DADDY_ADVISOR_MODEL` and `PI_DADDY_ADVISOR_TASK_EGRESS` inputs are inert compatibility inputs.
|
|
278
|
+
|
|
279
|
+
`PI_DADDY_CHILD_IDLE_TIMEOUT` is seconds without activity before a child is stopped (default fifteen minutes);
|
|
280
|
+
activity is output, a child-session-file change, or Linux process-tree CPU/descendant activity.
|
|
281
|
+
`PI_DADDY_CHILD_TIMEOUT` is the runaway ceiling for a child that never goes quiet (default six hours). The remaining
|
|
282
|
+
names in the source inventory are internal propagation, attribution, workspace-pin, or dashboard-transport fields;
|
|
283
|
+
do not set them manually. Prelaunch refusals use stable codes (`CAPABILITY_ESCALATION`, `GATED_UNAPPROVED`,
|
|
284
|
+
`DEPTH_EXCEEDED`, `FANOUT_EXCEEDED`, `WORKSPACE_NOT_AUTHORIZED`, `CHILD_TIMED_OUT`, `LEDGER_DAMAGED`, …); the full
|
|
285
|
+
enumeration is `REFUSAL_CODES` and is pinned by the contract.
|
|
286
|
+
|
|
287
|
+
### Child work attribution
|
|
288
|
+
|
|
289
|
+
Every governed child receives `PI_DADDY_EPISODE` (the ledger episode), `PI_DADDY_DEFINITION` (the definition name),
|
|
290
|
+
and `PI_DADDY_EXECUTION` (the lifecycle execution id). These are attribution metadata, not authority.
|
|
291
|
+
|
|
292
|
+
### Per-definition model and thinking
|
|
293
|
+
|
|
294
|
+
Child runtime defaults are reviewable beside each definition in `.pi/pi-daddy/settings.json`. Selection applies
|
|
295
|
+
explicit argument → session override → project definition settings → an intact authored model/thinking preference
|
|
296
|
+
row → normal defaults/current Pi. Authored rows are never combined into a new model/thinking pair. Unsupported
|
|
297
|
+
explicit pairs refuse; the runtime does not clamp effort or select a substitute model. Use `/grants models`
|
|
298
|
+
or a connected dashboard to edit session overrides. Delegation never opens an automatic model chooser.
|
|
299
|
+
|
|
300
|
+
```json
|
|
301
|
+
{
|
|
302
|
+
"defaults": { "model": "openai-codex:gpt-5.6-sol", "thinking": "medium" },
|
|
303
|
+
"definitions": [
|
|
304
|
+
{
|
|
305
|
+
"name": "review",
|
|
306
|
+
"declares": ["tool:read"],
|
|
307
|
+
"spawnable": true,
|
|
308
|
+
"model": "anthropic:claude-opus-4-6",
|
|
309
|
+
"thinking": "high"
|
|
310
|
+
}
|
|
311
|
+
]
|
|
312
|
+
}
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
Valid thinking values are `off`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. `/grants` shows the
|
|
316
|
+
resolved value and source for every displayed definition.
|
|
317
|
+
|
|
318
|
+
## Retired intervention inputs
|
|
319
|
+
|
|
320
|
+
External advisors, monetary cost gates and the first-delegation model chooser were removed. These recognized old
|
|
321
|
+
inputs are inert, including malformed values; the package does not rewrite existing configuration or history:
|
|
322
|
+
|
|
323
|
+
| Input | Compatibility behavior |
|
|
324
|
+
|---|---|
|
|
325
|
+
| Tool argument `episodeCostCeiling` on single/all/chain | Removed before Pi validates the remaining arguments |
|
|
326
|
+
| Settings `episodeCostCeiling`, `advisor`, `sessionModelPrompt` | Ignored; active model and authority fields still validate |
|
|
327
|
+
| `PI_DADDY_EPISODE_COST_CEILING`, `PI_DADDY_ADVISOR`, `PI_DADDY_ADVISOR_KEY`, `PI_DADDY_ADVISOR_MODEL`, `PI_DADDY_ADVISOR_TASK_EGRESS` | Never select or execute an intervention; reserved environment stripping remains |
|
|
328
|
+
|
|
329
|
+
Historical advice/cost-gate records remain readable. Manual model choices and permission approvals remain active.
|
|
330
|
+
For future JEV or learned-policy experiments, existing versioned decision/lifecycle records and harness result exports
|
|
331
|
+
remain the observation boundary. A separately selected experimental adviser may propose a choice for evaluation; it
|
|
332
|
+
must never grant capabilities, approve work, start retries or silently change the selected model. No automatic remote
|
|
333
|
+
advisor call or training pipeline is installed. Dataset consent, supported training method and comparative value need
|
|
334
|
+
separate qualification.
|
|
335
|
+
|
|
336
|
+
## Command-line reference
|
|
337
|
+
|
|
338
|
+
```text
|
|
339
|
+
pi-daddy init [--force] [--dir <path>]
|
|
340
|
+
pi-daddy ledger repair <path> [--yes]
|
|
341
|
+
pi-daddy ledger import <source> <target>
|
|
342
|
+
pi-daddy report [--since <date>] [--definition <name>] [--model <id>]
|
|
343
|
+
[--group-by definition|model|thinking] [--json]
|
|
344
|
+
pi-daddy outcomes
|
|
345
|
+
|
|
346
|
+
pi-daddy-dashboard [--ledger <path>] [--once] [--details] [--no-color]
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
`pi-daddy init` prepares the review files but cannot apply a grant to an already-running session; use `/grants init`
|
|
350
|
+
for that. `--force` rewrites copied legacy runtime-skill definitions, never `settings.json`.
|
|
351
|
+
|
|
352
|
+
## Programmatic API
|
|
353
|
+
|
|
354
|
+
The package requires Node.js 22.19.0 or newer. Code is exported only from `pi-daddy`; schemas and fixtures are exported
|
|
355
|
+
from `pi-daddy/contracts/*`. Layer subpaths are private. The root exports kernel, governance, executor, and product
|
|
356
|
+
primitives, including `resolve`, `planSpawn`, `appendLedgerEvent`, `readRecords`, `runChild`, and `buildCatalog`.
|
|
357
|
+
|
|
358
|
+
## The layers
|
|
359
|
+
|
|
360
|
+
The Files column names the main modules of each layer, not all of them; the module docstrings are the
|
|
361
|
+
specification of who owns what.
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
| Layer | Answers | Files |
|
|
365
|
+
| :--- | :--- | :--- |
|
|
366
|
+
| `src/kernel` | What may a child hold, and how is that carried? Mostly pure; the readers that discover what exists are the exception, and they are bounded. | `resolve`, `spawn`, `propagation`, `catalog`, `definitions`, `capabilities`, `approval`, `chain`, `context-handoff`, `fanout`, `correlation`, `refusals`, `env-names`, `project-paths`, `workspace`, `bounded-read` |
|
|
367
|
+
| `src/governance` | What was decided, and where is it written? | `record`, `ledger`, `ledger-events`, `ledger-report`, `approval-store`, `approval-prompt`, `grant-store`, `init`, `workspace-lease`, `execution-retention` |
|
|
368
|
+
| `src/executors` | How does a child process start and end? | `executor`, `run-herdr`, `herdr-*`, `pane-reaper` |
|
|
369
|
+
| `src/products` | What does the operator see or report? | `activity-timeline`, `dashboard-*`, `episode-report`, `episode-outcomes` |
|
|
370
|
+
| `extensions/` | The pi extension and its wiring: hooks, the three tools, approvals flow, `/grants`. | `grants.ts` is the entry point |
|
|
371
|
+
|
|
372
|
+
## Tests
|
|
373
|
+
|
|
374
|
+
```bash
|
|
375
|
+
npm run format:check
|
|
376
|
+
npm run typecheck
|
|
377
|
+
npm test
|
|
378
|
+
npm run build --workspace=pi-daddy
|
|
379
|
+
npm run test:integration:ci --workspace=pi-daddy # model-free CI subset
|
|
380
|
+
npm run test:integration --workspace=pi-daddy # real Pi; Herdr creates and stops only its own named test server
|
|
381
|
+
npm run test:smoke --workspace=pi-daddy # pack, install into a scratch project, import and use it
|
|
382
|
+
PI_DADDY_IT_MODEL=1 npm run test:integration --workspace=pi-daddy # opt-in real-model tier; consumes tokens
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
`pi-daddy` under `packages/pi-daddy` is the only published package; the workspace root is private.
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
### Exact definition runtime choices (candidate)
|
|
389
|
+
|
|
390
|
+
A selected definition may author a single-line `runtime-preferences` JSON array:
|
|
391
|
+
|
|
392
|
+
```yaml
|
|
393
|
+
runtime-preferences: '[{"model":"provider/model-id","thinking":"high"},{"model":"provider/other-id","thinking":"medium"}]'
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
Call arguments, per-definition session controls, and per-definition project settings win per field.
|
|
397
|
+
The complete needed authored list validates before any candidate is selected. A partial override filters
|
|
398
|
+
intact rows; ordinary configured/current defaults may fill missing fields without being labeled an authored
|
|
399
|
+
pair. Unsupported explicit effort refuses rather than clamping. Resolution checks only named local models
|
|
400
|
+
and passive auth status. Unknown authentication stays unknown; there are no credential commands, remote
|
|
401
|
+
health probes, provider-wide searches, or post-launch substitution. With no explicit/current model supplied,
|
|
402
|
+
Pi's ordinary configured default remains in effect; this does not attest a resolved pair.
|
|
403
|
+
|
|
404
|
+
On Pi 1.0.4, the first request or native delegation reads the public selected skill inventory once. Native
|
|
405
|
+
`plan`, `build`, `review`, `debug`, and `investigate` binding requires the selected Principal package's
|
|
406
|
+
`principal-agents.json` paths and hashes. It freezes the generated delegated body and the intersection of
|
|
407
|
+
inline and delegated ceilings. An unrelated skill with the same name is never labeled Principal. Failed
|
|
408
|
+
binding has no inline fallback. Reload creates a new snapshot; observing provider tools never rereads bodies.
|
|
409
|
+
|
|
410
|
+
Call `delegate_describe({agent:"build"})` and carry its `definitionId` into `delegate`, a `delegate_all`
|
|
411
|
+
child, or a `delegate_chain` step. Principal bindings require that precondition. Description starts no child
|
|
412
|
+
and grants no authority. A stale ID refuses before approval or launch. This hash is an observation and
|
|
413
|
+
precondition, not an approval record or a learned-policy authorization.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type OwnedChildRunRequest, type OwnedChildRunResult } from "./owned-worker.ts";
|
|
1
|
+
import { runOwnedChild, type OwnedChildRunRequest, type OwnedChildRunResult } from "./owned-worker.ts";
|
|
2
2
|
import type { BoundedReadCleanupError } from "../kernel/bounded-read.ts";
|
|
3
3
|
import { type ChildFinal } from "./child-final.ts";
|
|
4
4
|
export interface CapturedExecutionResult extends OwnedChildRunResult {
|
|
@@ -9,5 +9,5 @@ export interface CapturedExecutionResult extends OwnedChildRunResult {
|
|
|
9
9
|
export declare function runCapturedExecution(request: Omit<OwnedChildRunRequest, "ownershipDir" | "captureStdout"> & {
|
|
10
10
|
sessionPath: string;
|
|
11
11
|
onReadCleanup?: (error: BoundedReadCleanupError) => void;
|
|
12
|
-
}): Promise<CapturedExecutionResult>;
|
|
12
|
+
}, runOwned?: typeof runOwnedChild): Promise<CapturedExecutionResult>;
|
|
13
13
|
//# sourceMappingURL=captured-execution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"captured-execution.d.ts","sourceRoot":"","sources":["../../src/executors/captured-execution.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"captured-execution.d.ts","sourceRoot":"","sources":["../../src/executors/captured-execution.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACvG,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACtE,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,KAAK,EAAE,UAAU,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AACD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,cAAc,GAAG,eAAe,CAAC,GAAG;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,CAAC;CAC1D,EACD,QAAQ,GAAE,OAAO,aAA6B,GAC7C,OAAO,CAAC,uBAAuB,CAAC,CA2ClC"}
|
|
@@ -4,7 +4,7 @@ import { tmpdir } from "node:os";
|
|
|
4
4
|
import { join } from "node:path";
|
|
5
5
|
import { runOwnedChild } from "./owned-worker.js";
|
|
6
6
|
import { ChildFinalCapture } from "./child-final.js";
|
|
7
|
-
export async function runCapturedExecution(request) {
|
|
7
|
+
export async function runCapturedExecution(request, runOwned = runOwnedChild) {
|
|
8
8
|
let directory;
|
|
9
9
|
try {
|
|
10
10
|
directory = await mkdtemp(join(tmpdir(), "pi-daddy-owner-"));
|
|
@@ -26,7 +26,7 @@ export async function runCapturedExecution(request) {
|
|
|
26
26
|
}
|
|
27
27
|
const capture = new ChildFinalCapture(request.onOutput, request.onReadCleanup);
|
|
28
28
|
const args = [...request.args.slice(0, -1), "--mode", "json", request.args.at(-1)];
|
|
29
|
-
const output = await
|
|
29
|
+
const output = await runOwned({
|
|
30
30
|
...request,
|
|
31
31
|
args,
|
|
32
32
|
ownershipDir: join(directory, "ownership"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"captured-execution.js","sourceRoot":"","sources":["../../src/executors/captured-execution.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAC3G,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAuD,MAAM,mBAAmB,CAAC;AAEvG,OAAO,EAAE,iBAAiB,EAAmB,MAAM,kBAAkB,CAAC;AAMtE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAGC;
|
|
1
|
+
{"version":3,"file":"captured-execution.js","sourceRoot":"","sources":["../../src/executors/captured-execution.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAC3G,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAuD,MAAM,mBAAmB,CAAC;AAEvG,OAAO,EAAE,iBAAiB,EAAmB,MAAM,kBAAkB,CAAC;AAMtE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAGC,EACD,WAAiC,aAAa;IAE9C,IAAI,SAAiB,CAAC;IACtB,IAAI,CAAC;QACH,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,yDAAyD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACxF,OAAO;YACL,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,EAAE;YACR,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,MAAM;YAClB,OAAO,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE;YACzC,KAAK,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE;YACvC,WAAW,EAAE,EAAE;YACf,oBAAoB,EAAE,KAAK;SAC5B,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAC/E,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;QAC5B,GAAG,OAAO;QACV,IAAI;QACJ,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC;QAC1C,aAAa,EAAE,KAAK;QACpB,iBAAiB,EAAE,KAAK;QACxB,aAAa,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC/B,IAAI,MAAM,KAAK,QAAQ;gBAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;KACF,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACpG,OAAO;QACL,GAAG,MAAM;QACT,KAAK;QACL,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,MAAM,CAAC,IAAI;QACxB,oBAAoB,EAAE,MAAM,CAAC,SAAS;QACtC,IAAI,EAAE,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC;KAC7E,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/executors/executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,sEAAsE;IACtE,MAAM,EAAE,OAAO,CAAC;IAChB,8DAA8D;IAC9D,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,sGAAsG;AACtG,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE3D;AAED,eAAO,MAAM,wBAAwB,QAE+E,CAAC;AAErH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/executors/executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,sEAAsE;IACtE,MAAM,EAAE,OAAO,CAAC;IAChB,8DAA8D;IAC9D,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,sGAAsG;AACtG,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE3D;AAED,eAAO,MAAM,wBAAwB,QAE+E,CAAC;AAErH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,cAAc,CAUhG"}
|
|
@@ -20,15 +20,17 @@ export { ENV_HERDR } from "../kernel/env-names.js";
|
|
|
20
20
|
export function needsProbe(raw) {
|
|
21
21
|
return raw === undefined || raw === "1";
|
|
22
22
|
}
|
|
23
|
-
export const HERDR_UNQUALIFIED_REASON = "Herdr governed execution is not qualified for complete current finals and subtree cleanup
|
|
23
|
+
export const HERDR_UNQUALIFIED_REASON = "Herdr governed execution is not qualified for complete current finals and subtree cleanup on the detected transport. " +
|
|
24
24
|
"Delegation is refused; set PI_DADDY_HERDR=0 explicitly to select captured execution. No backend fallback occurs.";
|
|
25
25
|
export function chooseExecutor(raw, probe) {
|
|
26
26
|
const choice = selectExecutor(raw, probe);
|
|
27
27
|
if (choice.kind !== "herdr")
|
|
28
28
|
return choice;
|
|
29
|
+
if (!choice.refusal && probe?.qualified === true)
|
|
30
|
+
return { ...choice, disclosure: `${choice.disclosure} — qualified native ownership` };
|
|
29
31
|
return {
|
|
30
32
|
...choice,
|
|
31
|
-
refusal: [choice.refusal, HERDR_UNQUALIFIED_REASON].filter(Boolean).join(" "),
|
|
33
|
+
refusal: [choice.refusal, HERDR_UNQUALIFIED_REASON, probe?.qualificationReason].filter(Boolean).join(" "),
|
|
32
34
|
disclosure: `${choice.disclosure} — unqualified; governed delegation will refuse`,
|
|
33
35
|
};
|
|
34
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/executors/executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,cAAc,EAAqB,MAAM,6BAA6B,CAAC;AAEhF,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAmBnD,sGAAsG;AACtG,MAAM,UAAU,UAAU,CAAC,GAAuB;IAChD,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,GAAG,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GACnC,
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/executors/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,6 +35,8 @@ export declare function parseReply(reply: {
|
|
|
35
35
|
export declare const PROBE_TIMEOUT_MS = 2000;
|
|
36
36
|
export interface HerdrProbe {
|
|
37
37
|
ok: boolean;
|
|
38
|
+
qualified?: boolean;
|
|
39
|
+
qualificationReason?: string;
|
|
38
40
|
/** herdr's own words when it is not reachable. Carried so the disclosure line can name the reason. */
|
|
39
41
|
error?: string;
|
|
40
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"herdr-cli.d.ts","sourceRoot":"","sources":["../../src/executors/herdr-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,oGAAoG;AACpG,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE7G,eAAO,MAAM,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"herdr-cli.d.ts","sourceRoot":"","sources":["../../src/executors/herdr-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,oGAAoG;AACpG,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE7G,eAAO,MAAM,WAAW,EAAE,SAkBtB,CAAC;AAEL;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAcA;AAED,gGAAgG;AAChG,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sGAAsG;IACtG,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,UAAU,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAsB5G;AAED,mGAAmG;AACnG,eAAO,MAAM,oBAAoB,uBAAuB,CAAC;AAEzD,oGAAoG;AAEpG;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,SAAS,CAI3E"}
|
|
@@ -13,7 +13,7 @@ import { execFile } from "node:child_process";
|
|
|
13
13
|
import { ENV_HERDR_WORKSPACE } from "../kernel/env-names.js";
|
|
14
14
|
export { ENV_HERDR_WORKSPACE } from "../kernel/env-names.js";
|
|
15
15
|
export const defaultExec = (args) => new Promise((settle) => {
|
|
16
|
-
execFile("herdr", args, { maxBuffer: 32 * 1024 * 1024 }, (error, stdout, stderr) => {
|
|
16
|
+
execFile("herdr", args, { maxBuffer: 32 * 1024 * 1024, timeout: 10000, killSignal: "SIGKILL" }, (error, stdout, stderr) => {
|
|
17
17
|
const raw = error?.code;
|
|
18
18
|
const code = typeof raw === "number" ? raw : error ? 1 : 0;
|
|
19
19
|
// **A string `code` is a spawn failure, and it used to be thrown away.** `ENOENT` — herdr not installed —
|
|
@@ -34,7 +34,7 @@ export const defaultExec = (args) => new Promise((settle) => {
|
|
|
34
34
|
*/
|
|
35
35
|
export function parseReply(reply) {
|
|
36
36
|
try {
|
|
37
|
-
const parsed = JSON.parse(reply.stdout);
|
|
37
|
+
const parsed = JSON.parse(reply.stdout.trim() || reply.stderr.trim());
|
|
38
38
|
if (parsed.error)
|
|
39
39
|
return { error: parsed.error.message ?? parsed.error.code ?? "herdr reported an error" };
|
|
40
40
|
return { result: parsed.result };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"herdr-cli.js","sourceRoot":"","sources":["../../src/executors/herdr-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAK7D,MAAM,CAAC,MAAM,WAAW,GAAc,CAAC,IAAI,EAAE,EAAE,CAC7C,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;IACrB,QAAQ,
|
|
1
|
+
{"version":3,"file":"herdr-cli.js","sourceRoot":"","sources":["../../src/executors/herdr-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"herdr-launcher.d.ts","sourceRoot":"","sources":["../../src/executors/herdr-launcher.ts"],"names":[],"mappings":"AAMA,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgHxF"}
|