pi-daddy 0.49.2 → 0.49.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog — pi-daddy
2
2
 
3
+ ## 0.49.3 — 2026-10-10
4
+
5
+ - Show approval-only grant previews as `AUTO` when session Auto is on instead of misleading `BLOCK` rows. The status reads the same observed Auto state as the header; unavailable policy and genuine refusals remain blocked. Preview never acquires permission, and actual delegation still rechecks live Auto and execution conditions.
6
+
3
7
  ## 0.49.2 — 2026-10-10
4
8
 
5
9
  - Show the selected JEV provider/model, transport and shared local data root in dashboard Settings when the owning Harness reports them; older Harness versions remain compatible. Update both packages and restart Pi to see the selected route.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # pi-daddy
2
2
 
3
- Source target: **0.48.3**. Before installation, verify that `npm view pi-daddy version` and Git tag `v0.48.3` both resolve to this release.
3
+ Source target: **0.49.3**. Before installation, verify that `npm view pi-daddy version` and Git tag `v0.49.3` both resolve to this release.
4
4
 
5
5
  **Capability governance and coordination for [pi](https://github.com/badlogic/pi-mono)'s multi-level agent system.**
6
6
  An orchestrator grants each sub-agent a deliberate subset of what it holds and withholds the rest. A sub-agent may
@@ -188,6 +188,7 @@ approvals` lists what is persisted; `/grants revoke <capability>@<definition>` o
188
188
  in pi's agent directory, not in the workspace.
189
189
 
190
190
  **Auto mode** lets the operator approve every Daddy permission request for the current session and its descendants.
191
+ `/grants` marks an approval-only gate as `AUTO` when Auto is on. This is a preview of the permission step; actual delegation still rechecks Auto and all other execution conditions. Genuine refusals remain `BLOCK`.
191
192
  Start Pi with `PI_DADDY_AUTO_MODE=1` for Auto ON, or `PI_DADDY_AUTO_MODE=0` (the default when unset) for Auto OFF.
192
193
  In the connected dashboard, press **a** to switch it on or off. `/grants auto on` and `/grants auto off` control the
193
194
  same session setting; `/grants` shows the current state and source. Reload preserves the session choice; a new
@@ -14,6 +14,7 @@ import type { childExecutionLimits } from "./dashboard-settings.ts";
14
14
  */
15
15
 
16
16
  import { renderExecutionControls } from "./execution-controls.ts";
17
+ import { shouldSeekApproval } from "../src/kernel/approval.ts";
17
18
  import type { Capability } from "../src/kernel/resolve.ts";
18
19
  import type { ExecutorChoice } from "../src/executors/executor.ts";
19
20
  import type { Catalog } from "../src/kernel/catalog.ts";
@@ -31,6 +32,8 @@ export interface GrantsCommandContext {
31
32
  nativeSessionRoot?: string;
32
33
  executionLimits?: ReturnType<typeof childExecutionLimits>;
33
34
  autoModeStatus?: string;
35
+ /** Observed with the status line; presentation only, never an approval. */
36
+ autoModeEnabled?: boolean;
34
37
  /** Explicit owner mutation; the command parser itself holds no permission authority. */
35
38
  changeAutoMode?: (enabled: boolean) => Promise<string>;
36
39
  ownGrant: Capability[];
@@ -513,9 +516,17 @@ export const grantsCommand = {
513
516
  plan.ok && approval && approval.approved.length > 0
514
517
  ? ` (${approval.approved.map((c) => `${c} approved: ${approval.sources[c] ?? "?"}`).join("; ")})`
515
518
  : "";
519
+ const awaitingAuto =
520
+ ctx.grants.autoModeEnabled === true &&
521
+ !plan.ok &&
522
+ plan.refusal?.code === "GATED_UNAPPROVED" &&
523
+ shouldSeekApproval(plan.result);
524
+ const reason = awaitingAuto
525
+ ? `${plan.result!.gatedBlocked.join(", ")}: Auto supplies approval at dispatch; live state is rechecked`
526
+ : plan.reason;
516
527
  lines.push(
517
- ` ${plan.ok ? "allow" : "BLOCK"} ${name} [${runtimeText}]` +
518
- (plan.ok ? ` ${plan.effective.join(", ")}${because}` : ` — ${plan.reason}`),
528
+ ` ${plan.ok ? "allow" : awaitingAuto ? "AUTO" : "BLOCK"} ${name} [${runtimeText}]` +
529
+ (plan.ok ? ` ${plan.effective.join(", ")}${because}` : ` — ${reason}`),
519
530
  );
520
531
  }
521
532
  // R-48. The cap is fine; the SILENCE was not. An operator running `/grants` to answer "what can this
@@ -455,6 +455,12 @@ export default function (pi: ExtensionAPI, trustedSession?: GrantsSession) {
455
455
  handler: async (args, ctx) => {
456
456
  // Auto controls and emergency revoke-all need no definition acquisition; OFF must remain reachable.
457
457
  if (args.trim() !== "revoke --all" && args.trim().split(/\s+/)[0] !== "auto") await session.ensureDefinitions?.();
458
+ const autoView = await getDashboardControlState(session)
459
+ .then(({ auto }) => ({
460
+ autoModeEnabled: auto.enabled,
461
+ autoModeStatus: `${auto.enabled ? "ON" : "OFF"} (${auto.source}; current session permissions)`,
462
+ }))
463
+ .catch((error) => ({ autoModeEnabled: false, autoModeStatus: `unavailable: ${String(error)}` }));
458
464
  return grantsCommand.handler(args, {
459
465
  ...ctx,
460
466
  grants: {
@@ -488,9 +494,7 @@ export default function (pi: ExtensionAPI, trustedSession?: GrantsSession) {
488
494
  const { auto } = await setAutoApproval(session, enabled, "command");
489
495
  return `${auto.enabled ? "ON" : "OFF"} (${auto.source}; current session permissions)`;
490
496
  },
491
- autoModeStatus: await getDashboardControlState(session)
492
- .then(({ auto }) => `${auto.enabled ? "ON" : "OFF"} (${auto.source}; current session permissions)`)
493
- .catch((error) => `unavailable: ${String(error)}`),
497
+ ...autoView,
494
498
  catalog: session.catalog,
495
499
  definitions: session.definitions,
496
500
  sessionApprovals: session.sessionApprovals,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-daddy",
3
- "version": "0.49.2",
3
+ "version": "0.49.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",