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.
Files changed (53) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +355 -45
  3. package/dist/executors/captured-execution.d.ts +2 -2
  4. package/dist/executors/captured-execution.d.ts.map +1 -1
  5. package/dist/executors/captured-execution.js +2 -2
  6. package/dist/executors/captured-execution.js.map +1 -1
  7. package/dist/executors/executor.d.ts.map +1 -1
  8. package/dist/executors/executor.js +4 -2
  9. package/dist/executors/executor.js.map +1 -1
  10. package/dist/executors/herdr-cli.d.ts +2 -0
  11. package/dist/executors/herdr-cli.d.ts.map +1 -1
  12. package/dist/executors/herdr-cli.js +2 -2
  13. package/dist/executors/herdr-cli.js.map +1 -1
  14. package/dist/executors/herdr-launcher.d.ts +2 -0
  15. package/dist/executors/herdr-launcher.d.ts.map +1 -0
  16. package/dist/executors/herdr-launcher.js +123 -0
  17. package/dist/executors/herdr-launcher.js.map +1 -0
  18. package/dist/executors/herdr-owned.d.ts +13 -0
  19. package/dist/executors/herdr-owned.d.ts.map +1 -0
  20. package/dist/executors/herdr-owned.js +229 -0
  21. package/dist/executors/herdr-owned.js.map +1 -0
  22. package/dist/executors/herdr-qualification.d.ts +6 -0
  23. package/dist/executors/herdr-qualification.d.ts.map +1 -0
  24. package/dist/executors/herdr-qualification.js +33 -0
  25. package/dist/executors/herdr-qualification.js.map +1 -0
  26. package/dist/executors/herdr-wire.d.ts +5 -0
  27. package/dist/executors/herdr-wire.d.ts.map +1 -0
  28. package/dist/executors/herdr-wire.js +47 -0
  29. package/dist/executors/herdr-wire.js.map +1 -0
  30. package/dist/governance/runtime-settlement-lock.d.ts +5 -0
  31. package/dist/governance/runtime-settlement-lock.d.ts.map +1 -0
  32. package/dist/governance/runtime-settlement-lock.js +72 -0
  33. package/dist/governance/runtime-settlement-lock.js.map +1 -0
  34. package/dist/governance/runtime-settlement.d.ts +22 -0
  35. package/dist/governance/runtime-settlement.d.ts.map +1 -0
  36. package/dist/governance/runtime-settlement.js +236 -0
  37. package/dist/governance/runtime-settlement.js.map +1 -0
  38. package/extensions/execute-child.ts +98 -74
  39. package/extensions/executor-session.ts +2 -1
  40. package/extensions/grants.ts +3 -0
  41. package/extensions/reload-environment.ts +8 -0
  42. package/extensions/runtime-snapshot.ts +123 -0
  43. package/extensions/session.ts +1 -1
  44. package/package.json +1 -1
  45. package/src/executors/captured-execution.ts +2 -1
  46. package/src/executors/executor.ts +4 -2
  47. package/src/executors/herdr-cli.ts +19 -12
  48. package/src/executors/herdr-launcher.ts +124 -0
  49. package/src/executors/herdr-owned.ts +260 -0
  50. package/src/executors/herdr-qualification.ts +33 -0
  51. package/src/executors/herdr-wire.ts +43 -0
  52. package/src/governance/runtime-settlement-lock.ts +76 -0
  53. 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.44.2**. Before installation, verify that `npm view pi-daddy version` and Git tag `v0.44.2` both resolve to this release.
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. An
6
- orchestrator grants each sub-agent a deliberate subset of what it holds and withholds the rest; a sub-agent may delegate
7
- further, but only ever a subset of what it holds. Enforcement is pi's own `--tools` allowlist on a separate child
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 session's ceiling and spawnable definitions. `/grants init` writes the review copy at
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
- the decisions to the running session; commit the review copy when the project's ignore rules permit it. A definition
18
- is an [Agent Skills](https://agentskills.io/specification) `SKILL.md` whose `allowed-tools` is the ceiling and whose
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,EAAiB,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,GACA,OAAO,CAAC,uBAAuB,CAAC,CA2ClC"}
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 runOwnedChild({
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;IAED,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,aAAa,CAAC;QACjC,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
+ {"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,CAQhG"}
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 in this release. " +
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,6GAA6G;IAC7G,kHAAkH,CAAC;AAErH,MAAM,UAAU,cAAc,CAAC,GAAuB,EAAE,KAAwB;IAC9E,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,MAAM,CAAC;IAC3C,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7E,UAAU,EAAE,GAAG,MAAM,CAAC,UAAU,iDAAiD;KAClF,CAAC;AACJ,CAAC;AACD,SAAS,cAAc,CAAC,GAAuB,EAAE,KAAwB;IACvE,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;QAChB,OAAO;YACL,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,oEAAoE;SACjF,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,KAAK,EAAE,EAAE,EAAE,CAAC;YACd,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,gCAAgC,EAAE,CAAC;QACrG,CAAC;QACD,yGAAyG;QACzG,yGAAyG;QACzG,yGAAyG;QACzG,uEAAuE;QACvE,MAAM,GAAG,GAAG,KAAK,EAAE,KAAK,IAAI,iCAAiC,CAAC;QAC9D,OAAO;YACL,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,OAAO,EACL,2EAA2E,GAAG,KAAK;gBACnF,kGAAkG;gBAClG,0FAA0F;gBAC1F,2FAA2F;YAC7F,UAAU,EAAE,yCAAyC,GAAG,kCAAkC;SAC3F,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,qGAAqG;QACrG,yGAAyG;QACzG,4FAA4F;QAC5F,oDAAoD;QACpD,OAAO;YACL,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,KAAK,KAAK,IAAI;YACtB,UAAU,EACR,wFAAwF;gBACxF,4EAA4E;SAC/E,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,EAAE,EAAE,EAAE,CAAC;QACd,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,2CAA2C,EAAE,CAAC;IACjH,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,wGAAwG;QACxG,4GAA4G;QAC5G,wGAAwG;QACxG,0GAA0G;QAC1G,8BAA8B;QAC9B,EAAE;QACF,2GAA2G;QAC3G,sGAAsG;QACtG,+FAA+F;QAC/F,OAAO;YACL,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,4CAA4C;SACzD,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,IAAI;QACZ,kGAAkG;QAClG,yGAAyG;QACzG,UAAU,EACR,mDAAmD,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK;YAC9F,uCAAuC;KAC1C,CAAC;AACJ,CAAC"}
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,SAatB,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,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"}
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":"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"}
1
+ {"version":3,"file":"herdr-cli.js","sourceRoot":"","sources":["../../src/executors/herdr-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function launchHerdrWorker(socketPath: string, token: string): Promise<void>;
2
+ //# sourceMappingURL=herdr-launcher.d.ts.map
@@ -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"}