pi-daddy 0.48.1 → 0.48.3

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 (41) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +25 -6
  3. package/dist/executors/captured-execution.d.ts.map +1 -1
  4. package/dist/executors/captured-execution.js +12 -1
  5. package/dist/executors/captured-execution.js.map +1 -1
  6. package/dist/executors/herdr-agent-display.d.ts +10 -0
  7. package/dist/executors/herdr-agent-display.d.ts.map +1 -0
  8. package/dist/executors/herdr-agent-display.js +68 -0
  9. package/dist/executors/herdr-agent-display.js.map +1 -0
  10. package/dist/executors/herdr-launcher.d.ts.map +1 -1
  11. package/dist/executors/herdr-launcher.js +30 -4
  12. package/dist/executors/herdr-launcher.js.map +1 -1
  13. package/dist/executors/herdr-owned.d.ts +2 -0
  14. package/dist/executors/herdr-owned.d.ts.map +1 -1
  15. package/dist/executors/herdr-owned.js +33 -3
  16. package/dist/executors/herdr-owned.js.map +1 -1
  17. package/dist/executors/owned-pi-ui.d.ts +3 -0
  18. package/dist/executors/owned-pi-ui.d.ts.map +1 -0
  19. package/dist/executors/owned-pi-ui.js +114 -0
  20. package/dist/executors/owned-pi-ui.js.map +1 -0
  21. package/dist/executors/owned-pi-view.d.ts +5 -0
  22. package/dist/executors/owned-pi-view.d.ts.map +1 -0
  23. package/dist/executors/owned-pi-view.js +60 -0
  24. package/dist/executors/owned-pi-view.js.map +1 -0
  25. package/dist/executors/owned-worker.d.ts +2 -0
  26. package/dist/executors/owned-worker.d.ts.map +1 -1
  27. package/dist/executors/owned-worker.js +27 -11
  28. package/dist/executors/owned-worker.js.map +1 -1
  29. package/dist/governance/approval-prompt.d.ts +1 -1
  30. package/extensions/approvals.ts +3 -2
  31. package/extensions/execute-child.ts +2 -0
  32. package/extensions/session.ts +3 -8
  33. package/package.json +1 -1
  34. package/src/executors/captured-execution.ts +13 -1
  35. package/src/executors/herdr-agent-display.ts +72 -0
  36. package/src/executors/herdr-launcher.ts +23 -3
  37. package/src/executors/herdr-owned.ts +36 -3
  38. package/src/executors/owned-pi-ui.ts +116 -0
  39. package/src/executors/owned-pi-view.ts +58 -0
  40. package/src/executors/owned-worker.ts +29 -11
  41. package/src/governance/approval-prompt.ts +1 -1
@@ -0,0 +1,114 @@
1
+ /** Install LAST: observe final extension-transformed Pi events through the private inherited pipe. */
2
+ import { fstatSync } from "node:fs";
3
+ import { Socket } from "node:net";
4
+ import { getAgentDir, ProjectTrustStore, SettingsManager } from "@earendil-works/pi-coding-agent";
5
+ import { OWNED_PI_VIEW_READY, failOwnedPiUi as fail } from "./owned-pi-view.js";
6
+ const EVENT_FD = 6;
7
+ export default function ownedPiUi(pi) {
8
+ try {
9
+ const channel = fstatSync(EVENT_FD);
10
+ if (!channel.isFIFO() && !channel.isSocket())
11
+ throw Error("fd 6 is not an inherited event pipe");
12
+ const output = new Socket({ fd: EVENT_FD, readable: false, writable: true });
13
+ output.on("error", fail);
14
+ let pending = Promise.resolve();
15
+ const send = (event) => {
16
+ let record;
17
+ try {
18
+ record = JSON.stringify(event) + "\n";
19
+ }
20
+ catch (error) {
21
+ return fail(error);
22
+ }
23
+ pending = pending
24
+ .then(() => new Promise((resolve) => {
25
+ output.write(record, (error) => (error ? fail(error) : resolve()));
26
+ }))
27
+ .catch(fail);
28
+ return pending;
29
+ };
30
+ // Keep the previous noninteractive trust policy; native UI must not introduce a blocking trust dialog.
31
+ pi.on("project_trust", (event) => {
32
+ try {
33
+ const agentDir = getAgentDir();
34
+ const remembered = new ProjectTrustStore(agentDir).get(event.cwd);
35
+ const trusted = remembered ??
36
+ SettingsManager.create(event.cwd, agentDir, { projectTrusted: false }).getDefaultProjectTrust() === "always";
37
+ return { trusted: trusted ? "yes" : "no", remember: false };
38
+ }
39
+ catch (error) {
40
+ return fail(error);
41
+ }
42
+ });
43
+ let guardedSession;
44
+ pi.events.on(OWNED_PI_VIEW_READY, (ready) => {
45
+ if (ready && typeof ready === "object" && "sessionManager" in ready && "sessionId" in ready)
46
+ guardedSession = { sessionManager: ready.sessionManager, sessionId: ready.sessionId };
47
+ });
48
+ let started = false;
49
+ pi.on("session_start", (_event, ctx) => {
50
+ try {
51
+ if (started)
52
+ throw Error("the owned session cannot be replaced");
53
+ if (ctx.mode !== "tui" ||
54
+ guardedSession?.sessionManager !== ctx.sessionManager ||
55
+ guardedSession.sessionId !== ctx.sessionManager.getSessionId())
56
+ throw Error("the native Pi view guard is not ready for this session");
57
+ const header = ctx.sessionManager.getHeader();
58
+ if (!header ||
59
+ header.type !== "session" ||
60
+ header.version !== 3 ||
61
+ header.id !== ctx.sessionManager.getSessionId())
62
+ throw Error("missing or mismatched actual Pi session header");
63
+ started = true;
64
+ return send(header);
65
+ }
66
+ catch (error) {
67
+ return fail(error);
68
+ }
69
+ });
70
+ const forward = (event) => {
71
+ if (!started)
72
+ fail("Pi event arrived before the guarded session");
73
+ return send(event);
74
+ };
75
+ pi.on("agent_start", forward);
76
+ pi.on("agent_end", forward);
77
+ pi.on("turn_start", forward);
78
+ pi.on("turn_end", forward);
79
+ pi.on("message_start", forward);
80
+ pi.on("message_end", forward);
81
+ pi.on("tool_execution_start", forward);
82
+ pi.on("tool_execution_update", forward);
83
+ pi.on("tool_execution_end", forward);
84
+ pi.on("message_update", (event) => {
85
+ // Match Pi's JSON delta projection without copying growing partial-message snapshots.
86
+ if (event.message.role !== "assistant")
87
+ fail("message_update is not an assistant message");
88
+ const usage = event.message.usage, update = event.assistantMessageEvent;
89
+ if (!("partial" in update))
90
+ return forward({ type: event.type, usage, assistantMessageEvent: update });
91
+ const { partial, ...delta } = update;
92
+ if (update.type === "toolcall_start") {
93
+ const tool = partial.content[update.contentIndex];
94
+ if (tool?.type !== "toolCall")
95
+ fail("toolcall_start lacks its actual tool call");
96
+ return forward({
97
+ type: event.type,
98
+ usage,
99
+ assistantMessageEvent: { ...delta, id: tool.id, toolName: tool.name },
100
+ });
101
+ }
102
+ return forward({ type: event.type, usage, assistantMessageEvent: delta });
103
+ });
104
+ pi.on("agent_settled", async (event, ctx) => {
105
+ await forward(event);
106
+ // The pipe has flushed before orderly shutdown; native receipt/session checks remain authoritative.
107
+ ctx.shutdown();
108
+ });
109
+ }
110
+ catch (error) {
111
+ fail(error);
112
+ }
113
+ }
114
+ //# sourceMappingURL=owned-pi-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owned-pi-ui.js","sourceRoot":"","sources":["../../src/executors/owned-pi-ui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
+ export declare const OWNED_PI_VIEW_READY = "pi-daddy:owned-pi-view-ready";
3
+ export declare function failOwnedPiUi(error: unknown): never;
4
+ export default function ownedPiView(pi: ExtensionAPI): void;
5
+ //# sourceMappingURL=owned-pi-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owned-pi-view.d.ts","sourceRoot":"","sources":["../../src/executors/owned-pi-view.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEpE,eAAO,MAAM,mBAAmB,iCAAiC,CAAC;AAClE,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAMnD;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CA4C1D"}
@@ -0,0 +1,60 @@
1
+ /** Install FIRST: native Pi remains observable, but only its parent can control work. */
2
+ import { writeSync } from "node:fs";
3
+ export const OWNED_PI_VIEW_READY = "pi-daddy:owned-pi-view-ready";
4
+ export function failOwnedPiUi(error) {
5
+ try {
6
+ writeSync(2, "pi-daddy: owned Pi UI refused: " + String(error) + "\n");
7
+ }
8
+ finally {
9
+ process.exit(70);
10
+ }
11
+ }
12
+ export default function ownedPiView(pi) {
13
+ try {
14
+ if (typeof pi.registerMarkdownTransformer !== "function")
15
+ throw Error("Pi lacks its public markdown renderer hook");
16
+ pi.registerMarkdownTransformer((markdown, context) => context.messageType === "assistant-thinking" ? "Thinking hidden" : markdown);
17
+ let guarded = false;
18
+ // No await here: the first session handler installs the guard before another handler can yield.
19
+ pi.on("session_start", (_event, ctx) => {
20
+ try {
21
+ if (guarded)
22
+ throw Error("the owned session cannot be replaced");
23
+ if (ctx.mode !== "tui" ||
24
+ typeof ctx.ui.onTerminalInput !== "function" ||
25
+ typeof ctx.ui.getToolsExpanded !== "function" ||
26
+ typeof ctx.ui.setToolsExpanded !== "function")
27
+ throw Error("Pi lacks the required native TUI controls");
28
+ const unsubscribe = ctx.ui.onTerminalInput((data) => {
29
+ // The renderer consumes this exact terminal response before dispatching any user action.
30
+ if (/^\x1b\[6;\d+;\d+t$/.test(data))
31
+ return;
32
+ try {
33
+ if (["\x0f", "\x1b[111;5u", "\x1b[111;5:1u", "\x1b[111;5:2u", "\x1b[27;5;111~"].includes(data))
34
+ ctx.ui.setToolsExpanded(!ctx.ui.getToolsExpanded());
35
+ }
36
+ catch (error) {
37
+ failOwnedPiUi(error);
38
+ }
39
+ return { consume: true };
40
+ });
41
+ if (typeof unsubscribe !== "function")
42
+ throw Error("Pi did not install the terminal input guard");
43
+ ctx.ui.setEditorText("");
44
+ ctx.ui.setStatus("pi-daddy-owned", "View only · parent controls the task · Ctrl+O expands tools");
45
+ guarded = true;
46
+ pi.events.emit(OWNED_PI_VIEW_READY, {
47
+ sessionManager: ctx.sessionManager,
48
+ sessionId: ctx.sessionManager.getSessionId(),
49
+ });
50
+ }
51
+ catch (error) {
52
+ failOwnedPiUi(error);
53
+ }
54
+ });
55
+ }
56
+ catch (error) {
57
+ failOwnedPiUi(error);
58
+ }
59
+ }
60
+ //# sourceMappingURL=owned-pi-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owned-pi-view.js","sourceRoot":"","sources":["../../src/executors/owned-pi-view.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,8 @@ export interface OwnedChildRunRequest extends ChildRunRequest {
8
8
  onOwnership?: (identity: CapturedWorkerIdentity) => Promise<void> | void;
9
9
  /** JSON protocol consumers observe all bytes without capturing enormous replay streams as answer text. */
10
10
  captureStdout?: boolean;
11
+ /** Actual pane terminal for Pi's native view. Protocol events arrive separately on fd 6. */
12
+ terminalUi?: boolean;
11
13
  /** Bounded diagnostics may truncate without stopping independently captured primary output. */
12
14
  stopOnOutputLimit?: boolean;
13
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"owned-worker.d.ts","sourceRoot":"","sources":["../../src/executors/owned-worker.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE9E,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAM3G,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAE3G,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,iGAAiG;IACjG,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACzE,0GAA0G;IAC1G,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+FAA+F;IAC/F,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AACD,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,OAAO,EAAE,qBAAqB,CAAC;CAChC;AACD,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAgS/F"}
1
+ {"version":3,"file":"owned-worker.d.ts","sourceRoot":"","sources":["../../src/executors/owned-worker.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE9E,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAM3G,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAE3G,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,iGAAiG;IACjG,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACzE,0GAA0G;IAC1G,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,4FAA4F;IAC5F,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+FAA+F;IAC/F,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AACD,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,OAAO,EAAE,qBAAqB,CAAC;CAChC;AACD,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAgT/F"}
@@ -26,6 +26,8 @@ export async function runOwnedChild(request) {
26
26
  return notStarted("cancelled before helper launch", true);
27
27
  if (process.platform !== "linux" || process.arch !== "x64")
28
28
  return notStarted("captured worker requires qualified Linux x64 helper");
29
+ if (request.terminalUi && (!process.stdin.isTTY || !process.stdout.isTTY || !process.stderr.isTTY))
30
+ return notStarted("native Pi view requires a real pane terminal on stdin, stdout and stderr");
29
31
  let helper, root, hash;
30
32
  const nonce = randomUUID();
31
33
  let binary;
@@ -72,12 +74,25 @@ export async function runOwnedChild(request) {
72
74
  ], {
73
75
  cwd: root,
74
76
  env: request.env,
75
- stdio: ["ignore", "pipe", "pipe", "pipe", "pipe", binary.fd],
76
- detached: true,
77
+ stdio: request.terminalUi
78
+ ? ["inherit", "inherit", "inherit", "pipe", "pipe", binary.fd, "pipe"]
79
+ : ["ignore", "pipe", "pipe", "pipe", "pipe", binary.fd],
80
+ // The UI shares the pane's foreground process group for raw input and SIGWINCH.
81
+ // Cleanup still targets owned descendants by pidfd, never by process group.
82
+ detached: !request.terminalUi,
77
83
  });
78
84
  void binary.close();
79
85
  const control = child.stdio[3];
80
86
  const status = child.stdio[4];
87
+ const streams = {
88
+ stdout: request.terminalUi ? child.stdio.at(6) : child.stdout,
89
+ stderr: child.stderr,
90
+ };
91
+ const closeObservations = () => {
92
+ streams.stdout?.destroy();
93
+ streams.stderr?.destroy();
94
+ status.destroy();
95
+ };
81
96
  let identity;
82
97
  let text = "", count = 0, truncated = false, timedOut = false, aborted = false, idle = false;
83
98
  let failure, done = false, stopping = false, ready = "";
@@ -122,9 +137,7 @@ export async function runOwnedChild(request) {
122
137
  stopWatchdog = setTimeout(() => {
123
138
  failure ??= "worker helper failed to establish cleanup before its bound";
124
139
  child.kill("SIGKILL");
125
- child.stdout?.destroy();
126
- child.stderr?.destroy();
127
- status.destroy();
140
+ closeObservations();
128
141
  }, cleanupCeiling + 1000);
129
142
  };
130
143
  function armIdle() {
@@ -138,10 +151,15 @@ export async function runOwnedChild(request) {
138
151
  stop();
139
152
  }, request.idleTimeoutMs);
140
153
  }
141
- child.stdout?.on("data", (bytes) => observe("stdout", bytes));
142
- child.stderr?.on("data", (bytes) => observe("stderr", bytes));
154
+ streams.stdout?.on("data", (bytes) => observe("stdout", bytes));
155
+ streams.stderr?.on("data", (bytes) => observe("stderr", bytes));
156
+ for (const stream of Object.values(streams))
157
+ stream?.on("error", (error) => {
158
+ failure ??= "child event channel failed: " + String(error);
159
+ stop();
160
+ });
143
161
  for (const stream of ["stdout", "stderr"])
144
- child[stream]?.on("end", () => {
162
+ streams[stream]?.on("end", () => {
145
163
  const tail = decoders[stream].end();
146
164
  if (tail && !(stream === "stdout" && request.captureStdout === false)) {
147
165
  const kept = takeBytes(tail, Math.max(0, (request.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES) - count));
@@ -248,9 +266,7 @@ export async function runOwnedChild(request) {
248
266
  void (async () => {
249
267
  if (!identity || !(await readCapturedWorkerReceipt(identity))) {
250
268
  failure ??= "helper exited without an independent settlement receipt";
251
- child.stdout?.destroy();
252
- child.stderr?.destroy();
253
- status.destroy();
269
+ closeObservations();
254
270
  }
255
271
  })();
256
272
  });
@@ -1 +1 @@
1
- {"version":3,"file":"owned-worker.js","sourceRoot":"","sources":["../../src/executors/owned-worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"owned-worker.js","sourceRoot":"","sources":["../../src/executors/owned-worker.ts"],"names":[],"mappings":"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"}
@@ -58,7 +58,7 @@ export interface PromptOutcome {
58
58
  }
59
59
  export interface ApprovalGateOptions {
60
60
  ui: ApprovalUI;
61
- /** pi's `ctx.hasUI` — false in print/json mode, and therefore in every governed child. */
61
+ /** Whether a human can answer here. False in print/json mode and view-only child tabs. */
62
62
  hasUI: boolean;
63
63
  /** pi's `ctx.mode`, quoted back in the refusal so an operator can see why. */
64
64
  mode: string;
@@ -233,8 +233,9 @@ export async function obtainApprovals(
233
233
  // precisely what spec §6.1 exists to prevent. Options are per-call; the queue is session-long.
234
234
  const gate = session.approvalGateFor({
235
235
  ui: ctx.ui,
236
- hasUI: ctx.hasUI,
237
- mode: ctx.mode,
236
+ // A native child tab is a viewer. Auto and inherited approvals still work; only the root can answer.
237
+ hasUI: ctx.hasUI && !(session.depth > 0),
238
+ mode: session.depth > 0 && ctx.mode === "tui" ? "view-only child" : ctx.mode,
238
239
  timeoutMs: () => timeoutMsFromEnv(process.env[ENV_APPROVAL_TIMEOUT]),
239
240
  autoMode: session.autoMode,
240
241
  });
@@ -424,6 +424,7 @@ async function executePreparedChild(
424
424
  const output = await runCapturedExecution(
425
425
  {
426
426
  executionId,
427
+ terminalUi: session.executor.kind === "herdr",
427
428
  sessionPath: activitySession.path,
428
429
  onReadCleanup,
429
430
  onOwnership: async (identity) => {
@@ -461,6 +462,7 @@ async function executePreparedChild(
461
462
  session.executor.kind === "herdr"
462
463
  ? (request) =>
463
464
  runHerdrOwned(request, {
465
+ displayName: input.agent ?? "child",
464
466
  onDisplay: (display) => {
465
467
  displayHerdr = display;
466
468
  },
@@ -694,14 +694,9 @@ export function createGrantsSession(
694
694
  skillPaths: skillPathsFromCatalog(await delegationCatalog(session)),
695
695
  // ADR-0016: operator-authored SKILL.md definitions, so `delegate({agent})` can name one.
696
696
  definitions: session.definitions,
697
- // The herdr executor drives the child after starting it, so its plan must NOT carry `--print`.
698
- // Threaded through the plan rather than patched afterwards: the argv is what the ledger records, and
699
- // an executor quietly rewriting it would make the record describe a spawn that did not happen.
700
- //
701
- // Read live off `session.executor` (ADR-0031) rather than a boolean captured in the factory: the probe
702
- // has not run when this session object is built, so a captured value would plan `--print` for a session
703
- // that turns out to use panes — and `runHerdrPane` refuses a plan containing `--print` by design.
704
- interactive: false, // Both qualified backends use the same one-shot Pi JSON protocol.
697
+ // Plan the real terminal invocation explicitly; the captured backend remains one-shot JSON.
698
+ // Read the selected executor at dispatch, after its live qualification completes.
699
+ interactive: session.executor.kind === "herdr",
705
700
  ...(approved ? { approved } : {}),
706
701
  };
707
702
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-daddy",
3
- "version": "0.48.1",
3
+ "version": "0.48.3",
4
4
  "description": "Capability governance for pi sub-agents: spawn Agent Skills (SKILL.md) definitions whose allowed-tools becomes a grant that can only narrow going down a delegation tree, enforced by pi's own --tools allowlist, with an append-only ledger.",
5
5
  "keywords": [
6
6
  "pi-package",
@@ -2,6 +2,7 @@
2
2
  import { mkdtemp } from "node:fs/promises";
3
3
  import { tmpdir } from "node:os";
4
4
  import { join } from "node:path";
5
+ import { fileURLToPath } from "node:url";
5
6
  import { runOwnedChild, type OwnedChildRunRequest, type OwnedChildRunResult } from "./owned-worker.ts";
6
7
  import type { BoundedReadCleanupError } from "../kernel/bounded-read.ts";
7
8
  import { ChildFinalCapture, type ChildFinal } from "./child-final.ts";
@@ -36,7 +37,18 @@ export async function runCapturedExecution(
36
37
  };
37
38
  }
38
39
  const capture = new ChildFinalCapture(request.onOutput, request.onReadCleanup);
39
- const args = [...request.args.slice(0, -1), "--mode", "json", request.args.at(-1)!];
40
+ const args = [...request.args];
41
+ if (request.terminalUi) {
42
+ const extension = (name: string) =>
43
+ fileURLToPath(new URL("./" + name + (import.meta.url.endsWith(".ts") ? ".ts" : ".js"), import.meta.url));
44
+ // Pi enables editor commands before awaiting session_start handlers. The view guard must be first;
45
+ // the event observer remains last so earlier message transformations are captured exactly.
46
+ const firstExtension = args.findIndex(
47
+ (arg, index) => index < args.length - 1 && ["--no-extensions", "-ne", "-e", "--extension"].includes(arg),
48
+ );
49
+ args.splice(firstExtension < 0 ? args.length - 1 : firstExtension, 0, "-e", extension("owned-pi-view"));
50
+ args.splice(args.length - 1, 0, "-e", extension("owned-pi-ui"), "--tui-mode", "regular");
51
+ } else args.splice(args.length - 1, 0, "--mode", "json");
40
52
  const output = await runOwned({
41
53
  ...request,
42
54
  args,
@@ -0,0 +1,72 @@
1
+ /** Herdr sidebar observations only; never permission, execution or settlement authority. */
2
+ import { createConnection } from "node:net";
3
+ export interface HerdrAgentDisplay {
4
+ source: string;
5
+ role: string;
6
+ }
7
+ /** The pane launcher owns these reports, so coordinator loss still reaches native cleanup and release. */
8
+ export function herdrAgentDisplay(display: HerdrAgentDisplay, env: NodeJS.ProcessEnv = process.env) {
9
+ let pending = Promise.resolve(false);
10
+ const socketPath = env.HERDR_SOCKET_PATH,
11
+ paneId = env.HERDR_PANE_ID;
12
+ function publish(method: string, extra: Record<string, unknown>, seq: number): Promise<boolean> {
13
+ pending = pending.then(async () => {
14
+ if (env.HERDR_ENV !== "1" || !socketPath || !paneId) return false;
15
+ const request = {
16
+ id: display.source + ":" + seq,
17
+ method,
18
+ params: { pane_id: paneId, source: display.source, agent: "pi", seq, ...extra },
19
+ };
20
+ const delivered = await new Promise<boolean>((resolve) => {
21
+ let finished = false,
22
+ buffer = "";
23
+ const socket = createConnection(socketPath);
24
+ const finish = (ok: boolean) => {
25
+ if (finished) return;
26
+ finished = true;
27
+ clearTimeout(timer);
28
+ socket.destroy();
29
+ resolve(ok);
30
+ };
31
+ const timer = setTimeout(() => finish(false), 750);
32
+ socket.on("error", () => finish(false));
33
+ socket.on("end", () => finish(false));
34
+ socket.on("connect", () => socket.write(JSON.stringify(request) + "\n"));
35
+ socket.on("data", (bytes) => {
36
+ buffer += bytes.toString();
37
+ if (buffer.length > 16384) return finish(false);
38
+ const end = buffer.indexOf("\n");
39
+ if (end < 0) return;
40
+ try {
41
+ const reply = JSON.parse(buffer.slice(0, end));
42
+ finish(reply.id === request.id && !reply.error && reply.result !== undefined);
43
+ } catch {
44
+ finish(false);
45
+ }
46
+ });
47
+ }).catch(() => false);
48
+ if (!delivered) console.error("pi-daddy: Herdr agent sidebar report unavailable");
49
+ return delivered;
50
+ });
51
+ return pending;
52
+ }
53
+ return {
54
+ working: () => {
55
+ void publish("pane.report_agent", { state: "working" }, 1);
56
+ // Metadata has its own sequence namespace and is visible only while our exact lifecycle source owns the pane.
57
+ return publish(
58
+ "pane.report_metadata",
59
+ {
60
+ applies_to_source: display.source,
61
+ title: display.role,
62
+ display_agent: "Pi / " + display.role,
63
+ },
64
+ 1,
65
+ );
66
+ },
67
+ finish: (settled: boolean) =>
68
+ settled
69
+ ? publish("pane.release_agent", {}, 2)
70
+ : publish("pane.report_agent", { state: "unknown", message: "Native cleanup is unverified" }, 2),
71
+ };
72
+ }
@@ -4,11 +4,13 @@ import { processTreeActivity } from "./process-activity.ts";
4
4
  import { createConnection } from "node:net";
5
5
  import { runOwnedChild, type OwnedChildRunRequest } from "./owned-worker.ts";
6
6
  import { wire } from "./herdr-wire.ts";
7
+ import { herdrAgentDisplay } from "./herdr-agent-display.ts";
7
8
  export async function launchHerdrWorker(socketPath: string, token: string): Promise<void> {
8
9
  const socket = createConnection(socketPath);
9
10
  const abort = new AbortController();
10
11
  let started = false,
11
12
  authenticated = false,
13
+ terminalUi = false,
12
14
  acknowledge: (() => void) | undefined,
13
15
  rejectGate: ((error: Error) => void) | undefined;
14
16
  const lost = (error: Error) => {
@@ -31,7 +33,7 @@ export async function launchHerdrWorker(socketPath: string, token: string): Prom
31
33
  return;
32
34
  }
33
35
  if (message?.type === "display" && authenticated && typeof message.text === "string") {
34
- process.stdout.write(message.text);
36
+ if (!terminalUi) process.stdout.write(message.text);
35
37
  return;
36
38
  }
37
39
  if (message?.type !== "request" || started) {
@@ -42,9 +44,14 @@ export async function launchHerdrWorker(socketPath: string, token: string): Prom
42
44
  started = true;
43
45
  authenticated = true;
44
46
  const request = message.request as OwnedChildRunRequest & { sessionPath?: string };
47
+ terminalUi = request.terminalUi === true;
45
48
  let childPid: number | undefined;
49
+ const display = herdrAgentDisplay(message.display);
50
+ let settled = false;
46
51
  void (async () => {
52
+ const wasRaw = process.stdin.isRaw;
47
53
  try {
54
+ if (terminalUi && process.stdin.isTTY) process.stdin.setRawMode(true);
48
55
  const result = await runOwnedChild({
49
56
  ...request,
50
57
  signal: abort.signal,
@@ -83,16 +90,23 @@ export async function launchHerdrWorker(socketPath: string, token: string): Prom
83
90
  },
84
91
  onSpawn: (pid) => {
85
92
  childPid = pid;
93
+ void display.working();
86
94
  send({ type: "spawned", pid });
87
- process.stdout.write("pi-daddy: governed child running\n");
95
+ if (!terminalUi) process.stdout.write("pi-daddy: governed child running\n");
88
96
  },
89
97
  });
98
+ settled = result.cleanup.state === "settled" || result.cleanup.state === "not-started";
99
+ // Mark only this owned terminal as settled; this is cosmetic, not process or sidebar authority.
100
+ // Unknown cleanup keeps its existing title, and a killed launcher cannot reset it.
101
+ if (terminalUi && settled) process.stdout.write("\x1b]0;Task settled\x07");
102
+ const displayReleased = await display.finish(settled);
90
103
  if (!socket.destroyed) {
91
- send({ type: "result", result });
104
+ send({ type: "result", result, displayReleased: settled && displayReleased });
92
105
  socket.end();
93
106
  }
94
107
  process.stdout.write("\npi-daddy: " + result.cleanup.state + "\n");
95
108
  } catch (error) {
109
+ await display.finish(settled);
96
110
  if (!socket.destroyed) {
97
111
  try {
98
112
  send({ type: "failure", reason: String(error) });
@@ -100,6 +114,12 @@ export async function launchHerdrWorker(socketPath: string, token: string): Prom
100
114
  socket.end();
101
115
  }
102
116
  }
117
+ } finally {
118
+ try {
119
+ if (terminalUi && process.stdin.isTTY) process.stdin.setRawMode(wasRaw);
120
+ } catch {
121
+ // A lost pane cannot be restored; native cleanup remains independently recorded.
122
+ }
103
123
  }
104
124
  })();
105
125
  },