pi-daddy 0.46.1 → 0.47.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 (106) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +41 -11
  3. package/contracts/ledger-record/v1/governance-event.schema.json +65 -3
  4. package/dist/governance/approval-prompt.d.ts +4 -0
  5. package/dist/governance/approval-prompt.d.ts.map +1 -1
  6. package/dist/governance/approval-prompt.js +59 -4
  7. package/dist/governance/approval-prompt.js.map +1 -1
  8. package/dist/governance/auto-mode-policy.d.ts +11 -0
  9. package/dist/governance/auto-mode-policy.d.ts.map +1 -0
  10. package/dist/governance/auto-mode-policy.js +309 -0
  11. package/dist/governance/auto-mode-policy.js.map +1 -0
  12. package/dist/governance/execution-retention.d.ts +3 -0
  13. package/dist/governance/execution-retention.d.ts.map +1 -1
  14. package/dist/governance/execution-retention.js +30 -0
  15. package/dist/governance/execution-retention.js.map +1 -1
  16. package/dist/governance/ledger-events.d.ts +14 -1
  17. package/dist/governance/ledger-events.d.ts.map +1 -1
  18. package/dist/governance/ledger-events.js +13 -0
  19. package/dist/governance/ledger-events.js.map +1 -1
  20. package/dist/governance/ledger-report.d.ts.map +1 -1
  21. package/dist/governance/ledger-report.js +5 -3
  22. package/dist/governance/ledger-report.js.map +1 -1
  23. package/dist/governance/ledger-v3-validation.d.ts.map +1 -1
  24. package/dist/governance/ledger-v3-validation.js +17 -3
  25. package/dist/governance/ledger-v3-validation.js.map +1 -1
  26. package/dist/governance/ledger.d.ts +1 -1
  27. package/dist/governance/ledger.d.ts.map +1 -1
  28. package/dist/governance/ledger.js +1 -1
  29. package/dist/governance/ledger.js.map +1 -1
  30. package/dist/kernel/approval.d.ts +1 -1
  31. package/dist/kernel/approval.d.ts.map +1 -1
  32. package/dist/kernel/approval.js +1 -1
  33. package/dist/kernel/approval.js.map +1 -1
  34. package/dist/kernel/auto-mode.d.ts +35 -0
  35. package/dist/kernel/auto-mode.d.ts.map +1 -0
  36. package/dist/kernel/auto-mode.js +29 -0
  37. package/dist/kernel/auto-mode.js.map +1 -0
  38. package/dist/kernel/delegate-types.d.ts +2 -0
  39. package/dist/kernel/delegate-types.d.ts.map +1 -1
  40. package/dist/kernel/delegate-types.js.map +1 -1
  41. package/dist/kernel/delegate.d.ts.map +1 -1
  42. package/dist/kernel/delegate.js +2 -2
  43. package/dist/kernel/delegate.js.map +1 -1
  44. package/dist/kernel/env-names.d.ts +2 -0
  45. package/dist/kernel/env-names.d.ts.map +1 -1
  46. package/dist/kernel/env-names.js +4 -0
  47. package/dist/kernel/env-names.js.map +1 -1
  48. package/dist/kernel/propagation.d.ts +5 -1
  49. package/dist/kernel/propagation.d.ts.map +1 -1
  50. package/dist/kernel/propagation.js +8 -2
  51. package/dist/kernel/propagation.js.map +1 -1
  52. package/dist/products/dashboard-cli.d.ts +6 -0
  53. package/dist/products/dashboard-cli.d.ts.map +1 -1
  54. package/dist/products/dashboard-cli.js +248 -52
  55. package/dist/products/dashboard-cli.js.map +1 -1
  56. package/dist/products/dashboard-display-controls.d.ts +2 -1
  57. package/dist/products/dashboard-display-controls.d.ts.map +1 -1
  58. package/dist/products/dashboard-display-controls.js +61 -0
  59. package/dist/products/dashboard-display-controls.js.map +1 -1
  60. package/dist/products/dashboard-render.d.ts +2 -0
  61. package/dist/products/dashboard-render.d.ts.map +1 -1
  62. package/dist/products/dashboard-render.js +2 -2
  63. package/dist/products/dashboard-render.js.map +1 -1
  64. package/dist/products/dashboard-screen.d.ts +52 -0
  65. package/dist/products/dashboard-screen.d.ts.map +1 -0
  66. package/dist/products/dashboard-screen.js +262 -0
  67. package/dist/products/dashboard-screen.js.map +1 -0
  68. package/dist/products/dashboard-session-client.d.ts +34 -2
  69. package/dist/products/dashboard-session-client.d.ts.map +1 -1
  70. package/dist/products/dashboard-session-client.js +51 -0
  71. package/dist/products/dashboard-session-client.js.map +1 -1
  72. package/dist/products/ecosystem-versions.d.ts +19 -0
  73. package/dist/products/ecosystem-versions.d.ts.map +1 -0
  74. package/dist/products/ecosystem-versions.js +2 -0
  75. package/dist/products/ecosystem-versions.js.map +1 -0
  76. package/extensions/approvals.ts +3 -2
  77. package/extensions/dashboard-session-server.ts +32 -4
  78. package/extensions/delegate-chain.ts +2 -0
  79. package/extensions/delegation-ledger.ts +10 -6
  80. package/extensions/ecosystem-versions.ts +166 -0
  81. package/extensions/grants-command.ts +33 -3
  82. package/extensions/grants.ts +28 -2
  83. package/extensions/reload-environment.ts +16 -1
  84. package/extensions/run-delegation.ts +49 -3
  85. package/extensions/session-auto-mode.ts +132 -0
  86. package/extensions/session.ts +47 -37
  87. package/package.json +2 -2
  88. package/src/governance/approval-prompt.ts +62 -4
  89. package/src/governance/auto-mode-policy.ts +297 -0
  90. package/src/governance/execution-retention.ts +24 -0
  91. package/src/governance/ledger-events.ts +22 -1
  92. package/src/governance/ledger-report.ts +5 -3
  93. package/src/governance/ledger-v3-validation.ts +17 -3
  94. package/src/governance/ledger.ts +1 -0
  95. package/src/kernel/approval.ts +1 -1
  96. package/src/kernel/auto-mode.ts +56 -0
  97. package/src/kernel/delegate-types.ts +2 -0
  98. package/src/kernel/delegate.ts +2 -1
  99. package/src/kernel/env-names.ts +4 -0
  100. package/src/kernel/propagation.ts +11 -2
  101. package/src/products/dashboard-cli.ts +255 -53
  102. package/src/products/dashboard-display-controls.ts +52 -0
  103. package/src/products/dashboard-render.ts +2 -2
  104. package/src/products/dashboard-screen.ts +339 -0
  105. package/src/products/dashboard-session-client.ts +60 -1
  106. package/src/products/ecosystem-versions.ts +18 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-screen.js","sourceRoot":"","sources":["../../src/products/dashboard-screen.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { EcosystemVersions } from "./ecosystem-versions.ts";
1
2
  export interface DashboardSessionSnapshot {
2
3
  rows: Array<{
3
4
  definition: string;
@@ -6,11 +7,42 @@ export interface DashboardSessionSnapshot {
6
7
  source: string;
7
8
  }>;
8
9
  cost: number | null;
10
+ activity?: {
11
+ rootId: string;
12
+ path: string;
13
+ taskId: string;
14
+ };
15
+ versions?: EcosystemVersions;
16
+ auto: {
17
+ enabled: boolean;
18
+ source: "default" | "environment" | "session";
19
+ };
20
+ pendingApprovals: Array<{
21
+ id: string;
22
+ subject: string;
23
+ capability: string;
24
+ }>;
9
25
  }
10
- export declare function dashboardSessionRequest(socketPath: string, token: string, request: {
26
+ export type DashboardSessionAction = {
11
27
  action: "get";
12
28
  } | {
13
29
  action: "set";
14
30
  edits: string;
15
- }): Promise<DashboardSessionSnapshot>;
31
+ } | {
32
+ action: "set-auto";
33
+ enabled: boolean;
34
+ };
35
+ export declare function dashboardSessionRequest(socketPath: string, token: string, request: DashboardSessionAction): Promise<DashboardSessionSnapshot>;
36
+ /** A slow status poll cannot overwrite a newer acknowledged mutation. Failed requests expose no guessed mode. */
37
+ export declare function createDashboardConnection(request?: (action: DashboardSessionAction) => Promise<DashboardSessionSnapshot>): {
38
+ state: {
39
+ snapshot?: DashboardSessionSnapshot;
40
+ pending: boolean;
41
+ error?: string;
42
+ };
43
+ refresh(): Promise<void>;
44
+ change(action: Exclude<DashboardSessionAction, {
45
+ action: "get";
46
+ }>): Promise<boolean>;
47
+ };
16
48
  //# sourceMappingURL=dashboard-session-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-session-client.d.ts","sourceRoot":"","sources":["../../src/products/dashboard-session-client.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrF,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;IAAE,MAAM,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC5D,OAAO,CAAC,wBAAwB,CAAC,CAsBnC"}
1
+ {"version":3,"file":"dashboard-session-client.d.ts","sourceRoot":"","sources":["../../src/products/dashboard-session-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAGjE,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrF,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,IAAI,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,SAAS,CAAA;KAAE,CAAC;IAC1E,gBAAgB,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9E;AAED,MAAM,MAAM,sBAAsB,GAChC;IAAE,MAAM,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAElG,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,wBAAwB,CAAC,CA8BnC;AAED,iHAAiH;AACjH,wBAAgB,yBAAyB,CACvC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,OAAO,CAAC,wBAAwB,CAAC;;mBAErD,wBAAwB;iBAAW,OAAO;gBAAU,MAAM;;;mBAoB7D,OAAO,CAAC,sBAAsB,EAAE;QAAE,MAAM,EAAE,KAAK,CAAA;KAAE,CAAC;EAiB1E"}
@@ -16,6 +16,12 @@ export async function dashboardSessionRequest(socketPath, token, request) {
16
16
  const parsed = JSON.parse(output);
17
17
  if (!parsed.ok)
18
18
  throw new Error(parsed.error ?? "dashboard session request failed");
19
+ if (!parsed.auto ||
20
+ typeof parsed.auto.enabled !== "boolean" ||
21
+ !["default", "environment", "session"].includes(parsed.auto.source) ||
22
+ !Array.isArray(parsed.pendingApprovals) ||
23
+ !Array.isArray(parsed.rows))
24
+ throw new Error("dashboard owner does not provide compatible permission controls");
19
25
  resolve(parsed);
20
26
  }
21
27
  catch (error) {
@@ -25,4 +31,49 @@ export async function dashboardSessionRequest(socketPath, token, request) {
25
31
  socket.once("connect", () => socket.write(`${JSON.stringify({ ...request, token })}\n`));
26
32
  });
27
33
  }
34
+ /** A slow status poll cannot overwrite a newer acknowledged mutation. Failed requests expose no guessed mode. */
35
+ export function createDashboardConnection(request) {
36
+ const state = { pending: false };
37
+ let generation = 0;
38
+ return {
39
+ state,
40
+ async refresh() {
41
+ if (!request || state.pending)
42
+ return;
43
+ const observed = generation;
44
+ try {
45
+ const snapshot = await request({ action: "get" });
46
+ if (generation === observed) {
47
+ state.snapshot = snapshot;
48
+ state.error = undefined;
49
+ }
50
+ }
51
+ catch (error) {
52
+ if (generation === observed) {
53
+ state.snapshot = undefined;
54
+ state.error = `Controls unavailable: ${error instanceof Error ? error.message : String(error)}`;
55
+ }
56
+ }
57
+ },
58
+ async change(action) {
59
+ if (!request || !state.snapshot || state.pending)
60
+ return false;
61
+ generation++;
62
+ state.pending = true;
63
+ try {
64
+ state.snapshot = await request(action);
65
+ state.error = undefined;
66
+ return true;
67
+ }
68
+ catch (error) {
69
+ state.snapshot = undefined;
70
+ state.error = `Control change not confirmed: ${error instanceof Error ? error.message : String(error)}`;
71
+ return false;
72
+ }
73
+ finally {
74
+ state.pending = false;
75
+ }
76
+ },
77
+ };
78
+ }
28
79
  //# sourceMappingURL=dashboard-session-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-session-client.js","sourceRoot":"","sources":["../../src/products/dashboard-session-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAO5C,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,UAAkB,EAClB,KAAa,EACb,OAA6D;IAE7D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC,CAAC;QACjG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC;YAChB,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI;gBAAE,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC,CAAC;QACnG,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;YACtB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAgE,CAAC;gBACjG,IAAI,CAAC,MAAM,CAAC,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,kCAAkC,CAAC,CAAC;gBACpF,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"dashboard-session-client.js","sourceRoot":"","sources":["../../src/products/dashboard-session-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /** Operator version inventory. These observations do not qualify runtime compatibility. */
2
+ export type EcosystemPackageId = "pi" | "pi-daddy" | "principal-pi-skills" | "skill-harness";
3
+ export interface EcosystemVersionRow {
4
+ id: EcosystemPackageId;
5
+ label: string;
6
+ loadedVersion: string | null;
7
+ installedVersion: string | null;
8
+ source: string | null;
9
+ path: string | null;
10
+ state: "current" | "reload-required" | "not-reported" | "unavailable" | "multiple";
11
+ commands: string[];
12
+ note?: string;
13
+ }
14
+ export interface EcosystemVersions {
15
+ rows: EcosystemVersionRow[];
16
+ checkedAt: string;
17
+ note?: string;
18
+ }
19
+ //# sourceMappingURL=ecosystem-versions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecosystem-versions.d.ts","sourceRoot":"","sources":["../../src/products/ecosystem-versions.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,UAAU,GAAG,qBAAqB,GAAG,eAAe,CAAC;AAC7F,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,kBAAkB,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,SAAS,GAAG,iBAAiB,GAAG,cAAc,GAAG,aAAa,GAAG,UAAU,CAAC;IACnF,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AACD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,mBAAmB,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ecosystem-versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecosystem-versions.js","sourceRoot":"","sources":["../../src/products/ecosystem-versions.ts"],"names":[],"mappings":""}
@@ -236,6 +236,7 @@ export async function obtainApprovals(
236
236
  hasUI: ctx.hasUI,
237
237
  mode: ctx.mode,
238
238
  timeoutMs: () => timeoutMsFromEnv(process.env[ENV_APPROVAL_TIMEOUT]),
239
+ autoMode: session.autoMode,
239
240
  });
240
241
 
241
242
  const approved = [...pre.approved];
@@ -286,7 +287,7 @@ export async function obtainApprovals(
286
287
  // concurrent children under one *Allow for this session* used to write eight lines each claiming a
287
288
  // prompt. Same repair as R-46, one level up: stop asserting a human was asked on a path where they
288
289
  // were not.
289
- sources[capability] = outcome.joined ? "session" : "prompt";
290
+ sources[capability] = outcome.source === "auto" ? "auto" : outcome.joined ? "session" : "prompt";
290
291
  scopes[capability] = outcome.scope;
291
292
  recordedScopes[capability] = outcome.scope;
292
293
  if (expectedBinding) bindings[capability] = expectedBinding;
@@ -359,7 +360,7 @@ export async function obtainApprovals(
359
360
  delete expiresAt[capability];
360
361
  }
361
362
  }
362
- session.publishChildEnv(); // a new session approval widens what children may inherit — republish now
363
+ if (outcome.source !== "auto") session.publishChildEnv(); // Auto never publishes reusable authority.
363
364
  }
364
365
 
365
366
  return {
@@ -4,6 +4,7 @@ import { createServer, type Server } from "node:net";
4
4
  import { tmpdir } from "node:os";
5
5
  import { join } from "node:path";
6
6
  import type { GrantsSession } from "./session.ts";
7
+ import { getDashboardControlState, setAutoApproval } from "./session-auto-mode.ts";
7
8
  import { saveSessionModelEdits, sessionModelRows } from "./session-model-prompt.ts";
8
9
 
9
10
  export interface DashboardSessionEndpoint {
@@ -26,12 +27,20 @@ async function start(session: GrantsSession): Promise<DashboardSessionEndpoint>
26
27
  const socketPath = join(tmpdir(), `pi-daddy-${process.pid}-${randomBytes(8).toString("hex")}.sock`);
27
28
  const token = randomBytes(24).toString("hex");
28
29
  const server = createServer((socket) => {
29
- let input = "";
30
+ let input = "",
31
+ handled = false;
30
32
  socket.setEncoding("utf8");
33
+ socket.setTimeout(2_000, () => socket.destroy());
34
+ socket.on("error", () => socket.destroy());
31
35
  socket.on("data", (chunk) => {
36
+ if (handled) return;
32
37
  input += chunk;
33
- if (input.length > 16 * 1024) socket.destroy(new Error("dashboard request too large"));
38
+ if (input.length > 16 * 1024) {
39
+ socket.destroy();
40
+ return;
41
+ }
34
42
  if (!input.includes("\n")) return;
43
+ handled = true;
35
44
  const line = input.slice(0, input.indexOf("\n"));
36
45
  void respond(session, token, line)
37
46
  .then((value) => socket.end(`${JSON.stringify(value)}\n`))
@@ -60,9 +69,13 @@ async function start(session: GrantsSession): Promise<DashboardSessionEndpoint>
60
69
  }
61
70
 
62
71
  async function respond(session: GrantsSession, token: string, line: string): Promise<Record<string, unknown>> {
63
- const request = JSON.parse(line) as { token?: unknown; action?: unknown; edits?: unknown };
72
+ const request = JSON.parse(line) as { token?: unknown; action?: unknown; edits?: unknown; enabled?: unknown };
64
73
  if (request.token !== token) return { ok: false, error: "unauthorised dashboard request" };
65
- if (request.action === "set") {
74
+ if (request.action === "set-auto") {
75
+ if (typeof request.enabled !== "boolean") return { ok: false, error: "Auto mode requires an explicit boolean" };
76
+ await setAutoApproval(session, request.enabled, "dashboard");
77
+ } else if (request.action === "set") {
78
+ await getDashboardControlState(session);
66
79
  if (typeof request.edits !== "string") return { ok: false, error: "dashboard edits must be a string" };
67
80
  const invalid = await saveSessionModelEdits(
68
81
  session,
@@ -74,11 +87,26 @@ async function respond(session: GrantsSession, token: string, line: string): Pro
74
87
  } else if (request.action !== "get") return { ok: false, error: "unknown dashboard action" };
75
88
  return {
76
89
  ok: true,
90
+ ...(await getDashboardControlState(session)),
91
+ ...(session.activity ? { activity: { ...session.activity } } : {}),
77
92
  rows: sessionModelRows(session, [...session.definitions.keys()].sort()),
93
+ versions: versionSnapshot(session),
78
94
  cost: null, // Live complete episode cost is unavailable; retained usage remains in the episode report.
79
95
  };
80
96
  }
81
97
 
98
+ function versionSnapshot(session: GrantsSession) {
99
+ try {
100
+ return session.ecosystemVersions?.();
101
+ } catch {
102
+ return {
103
+ rows: [],
104
+ checkedAt: new Date().toISOString(),
105
+ note: "Version inventory unavailable; permission controls remain connected.",
106
+ };
107
+ }
108
+ }
109
+
82
110
  function close(server: Server, socketPath: string): void {
83
111
  server.close();
84
112
  void rm(socketPath, { force: true });
@@ -217,6 +217,8 @@ export function registerChainTool(pi: ExtensionAPI, session: GrantsSession): voi
217
217
  declined = { request, outcome };
218
218
  break;
219
219
  }
220
+ // Auto is provisional and belongs to an actual step admission, never the upfront union.
221
+ if (outcome.sources[request.capability] === "auto") continue;
220
222
  preApproved.push({
221
223
  capability: request.capability,
222
224
  subject: request.subject,
@@ -46,12 +46,16 @@ export async function recordDelegationDecision(input: {
46
46
  result: plan.result,
47
47
  blocked: !plan.ok,
48
48
  reason: plan.reason,
49
- approved: approval?.approved ?? approvalFacts?.approved,
50
- approvalSources: approval?.sources ?? approvalFacts?.sources,
51
- approvalScopes: approval?.recordedScopes ?? approvalFacts?.scopes,
52
- approvalExpiresAt: approval?.expiresAt ?? approvalFacts?.expiresAt,
53
- approvalUses: approval?.uses ?? approvalFacts?.uses,
54
- humanDenied: approval?.humanDenied ?? approvalFacts?.humanDenied,
49
+ // A step can spend an upfront manual once and acquire fresh Auto permission for another capability.
50
+ approved:
51
+ approval || approvalFacts
52
+ ? [...new Set([...(approvalFacts?.approved ?? []), ...(approval?.approved ?? [])])]
53
+ : undefined,
54
+ approvalSources: { ...approvalFacts?.sources, ...approval?.sources },
55
+ approvalScopes: { ...approvalFacts?.scopes, ...approval?.recordedScopes },
56
+ approvalExpiresAt: { ...approvalFacts?.expiresAt, ...approval?.expiresAt },
57
+ approvalUses: { ...approvalFacts?.uses, ...approval?.uses },
58
+ humanDenied: approval?.humanDenied || approvalFacts?.humanDenied,
55
59
  gateOutcome: approval?.gateOutcome,
56
60
  definitionDigest: plan.definitionDigest,
57
61
  definitionHash: plan.definitionHash,
@@ -0,0 +1,166 @@
1
+ /** Report loaded package generations separately from the manifests currently installed on disk. */
2
+ import {
3
+ DefaultPackageManager,
4
+ SettingsManager,
5
+ VERSION,
6
+ getPackageDir,
7
+ type ExtensionAPI,
8
+ type ExtensionContext,
9
+ } from "@earendil-works/pi-coding-agent";
10
+ import { join, resolve } from "node:path";
11
+ import { readBoundedTextSync } from "../src/kernel/bounded-read-sync.ts";
12
+ import { agentDir } from "../src/kernel/project-paths.ts";
13
+ import type { EcosystemPackageId, EcosystemVersionRow, EcosystemVersions } from "../src/products/ecosystem-versions.ts";
14
+
15
+ const CHANNEL = "pi-daddy:ecosystem-versions:v1";
16
+ const packages = [
17
+ { id: "pi", label: "Pi", names: ["@earendil-works/pi-coding-agent"] },
18
+ { id: "pi-daddy", label: "pi-daddy", names: ["pi-daddy"] },
19
+ { id: "principal-pi-skills", label: "Principal", names: ["principal-pi-skills"] },
20
+ { id: "skill-harness", label: "Harness", names: ["skill-harness", "skill-harness-monorepo"] },
21
+ ] as const;
22
+ interface LoadedPackage {
23
+ id: EcosystemPackageId;
24
+ version: string | null;
25
+ root: string;
26
+ }
27
+ const versionPattern = /^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/;
28
+ function manifest(root: string, names: readonly string[]): string | null {
29
+ try {
30
+ const value = JSON.parse(readBoundedTextSync(join(root, "package.json"), { maxBytes: 128 * 1024 }).text);
31
+ return names.includes(value.name) && typeof value.version === "string" && versionPattern.test(value.version)
32
+ ? value.version
33
+ : null;
34
+ } catch {
35
+ return null;
36
+ }
37
+ }
38
+ export interface VersionInventoryPorts {
39
+ hostVersion: string;
40
+ hostRoot: string;
41
+ ownRoot: string;
42
+ readVersion(root: string, names: readonly string[]): string | null;
43
+ configured(ctx: ExtensionContext): Array<{ source: string; scope: "user" | "project"; installedPath?: string }>;
44
+ }
45
+ const defaultPorts = (ownRoot: string): VersionInventoryPorts => ({
46
+ hostVersion: VERSION,
47
+ hostRoot: getPackageDir(),
48
+ ownRoot,
49
+ readVersion: manifest,
50
+ configured: (ctx) =>
51
+ new DefaultPackageManager({
52
+ cwd: ctx.cwd,
53
+ agentDir: agentDir(),
54
+ settingsManager: SettingsManager.create(ctx.cwd, agentDir(), {
55
+ projectTrusted: ctx.isProjectTrusted?.() === true,
56
+ }),
57
+ }).listConfiguredPackages(),
58
+ });
59
+ /** Every package answers synchronously on Pi's native event bus; old packages stay explicitly unreported. */
60
+ export function createEcosystemVersionInventory(
61
+ pi: Pick<ExtensionAPI, "events">,
62
+ ownRoot: string,
63
+ ports = defaultPorts(ownRoot),
64
+ ) {
65
+ const own: LoadedPackage = {
66
+ id: "pi-daddy",
67
+ root: ports.ownRoot,
68
+ version: ports.readVersion(ports.ownRoot, ["pi-daddy"]),
69
+ };
70
+ return (ctx: ExtensionContext): EcosystemVersions => {
71
+ const reports: LoadedPackage[] = [own, { id: "pi", root: ports.hostRoot, version: ports.hostVersion }];
72
+ pi.events?.emit(CHANNEL, {
73
+ report: (value: unknown) => {
74
+ if (!value || typeof value !== "object") return;
75
+ const item = value as LoadedPackage;
76
+ if (
77
+ !["principal-pi-skills", "skill-harness"].includes(item.id) ||
78
+ typeof item.root !== "string" ||
79
+ !item.root.startsWith("/")
80
+ )
81
+ return;
82
+ if (typeof item.version !== "string" || !versionPattern.test(item.version)) return;
83
+ reports.push({ id: item.id, root: item.root, version: item.version });
84
+ },
85
+ });
86
+ let configured: ReturnType<VersionInventoryPorts["configured"]> = [],
87
+ note: string | undefined;
88
+ try {
89
+ configured = ports.configured(ctx);
90
+ } catch {
91
+ note = "Configured package sources unavailable; loaded reports remain visible.";
92
+ }
93
+ const rows: EcosystemVersionRow[] = packages.map((pkg) => {
94
+ const loaded = reports.filter((item) => item.id === pkg.id);
95
+ const sources = configured.filter(
96
+ (item) =>
97
+ item.source === `npm:${pkg.id}` ||
98
+ item.source.startsWith(`npm:${pkg.id}@`) ||
99
+ (item.installedPath !== undefined && ports.readVersion(item.installedPath, pkg.names) !== null) ||
100
+ loaded.some((x) => item.installedPath && resolve(item.installedPath) === resolve(x.root)),
101
+ );
102
+ const source = sources.length === 1 ? sources[0] : undefined;
103
+ const root = loaded.length === 1 ? loaded[0].root : loaded.length === 0 ? source?.installedPath : undefined;
104
+ const installedVersion = root ? ports.readVersion(root, pkg.names) : null;
105
+ const loadedVersion = loaded.length === 1 ? loaded[0].version : null;
106
+ const observedRoots = new Set([
107
+ ...loaded.map((item) => resolve(item.root)),
108
+ ...sources.flatMap((item) => (item.installedPath ? [resolve(item.installedPath)] : [])),
109
+ ]);
110
+ const multiple =
111
+ loaded.length > 1 ||
112
+ sources.length > 1 ||
113
+ observedRoots.size > 1 ||
114
+ (loaded.length > 0 && sources.some((item) => !item.installedPath));
115
+ const commands =
116
+ pkg.id === "pi"
117
+ ? ["pi update"]
118
+ : source?.source.startsWith("npm:") && !multiple
119
+ ? [`pi install${source.scope === "project" ? " --local" : ""} npm:${pkg.id}@<version>`]
120
+ : ["pi list", "pi config"];
121
+ if (pkg.id === "principal-pi-skills" && root && !multiple) {
122
+ const installer = "'" + join(root, "scripts/install-agents.mjs").replaceAll("'", "'\\''") + "'";
123
+ commands.push(`node ${installer} install`, `node ${installer} check`);
124
+ }
125
+ return {
126
+ id: pkg.id,
127
+ label: pkg.label,
128
+ loadedVersion,
129
+ installedVersion,
130
+ source: multiple ? null : (source?.source ?? (pkg.id === "pi" ? "host runtime" : null)),
131
+ path: root ?? null,
132
+ state: multiple
133
+ ? "multiple"
134
+ : loadedVersion && installedVersion
135
+ ? loadedVersion === installedVersion
136
+ ? "current"
137
+ : "reload-required"
138
+ : !loadedVersion && installedVersion
139
+ ? "not-reported"
140
+ : "unavailable",
141
+ commands,
142
+ note: multiple
143
+ ? "Multiple loaded or configured sources; inspect with pi list before changing versions."
144
+ : !loadedVersion
145
+ ? "This package did not report its loaded generation. Installed bytes alone do not establish the running version."
146
+ : pkg.id === "pi"
147
+ ? "Restart Pi after changing its version."
148
+ : "Use an explicit npm version to replace a pin; pi update keeps pinned versions. Reload Pi after installation." +
149
+ (pkg.id === "principal-pi-skills"
150
+ ? " Agent installer commands are optional, for legacy installed agent definitions."
151
+ : ""),
152
+ };
153
+ });
154
+ return { rows, checkedAt: new Date().toISOString(), note };
155
+ };
156
+ }
157
+ export function bindEcosystemVersions(
158
+ pi: ExtensionAPI,
159
+ session: { ecosystemVersions?: () => EcosystemVersions },
160
+ ownRoot: string,
161
+ ): void {
162
+ const read = createEcosystemVersionInventory(pi, ownRoot);
163
+ pi.on("session_start", (_event, ctx) => {
164
+ session.ecosystemVersions = () => read(ctx);
165
+ });
166
+ }
@@ -28,6 +28,9 @@ export interface GrantsCommandContext {
28
28
  governed: boolean;
29
29
  /** Host opt-in captured by this session, not a later environment reread. */
30
30
  nativeSessionRoot?: string;
31
+ autoModeStatus?: string;
32
+ /** Explicit owner mutation; the command parser itself holds no permission authority. */
33
+ changeAutoMode?: (enabled: boolean) => Promise<string>;
31
34
  ownGrant: Capability[];
32
35
  /**
33
36
  * Which executor this session settled on, and why — ADR-0031.
@@ -103,12 +106,13 @@ const KNOWN_SUBCOMMANDS: readonly string[] = [
103
106
  "revoke",
104
107
  "workspaces",
105
108
  "models",
109
+ "auto",
106
110
  ];
107
111
 
108
112
  export const grantsCommand = {
109
113
  description:
110
114
  "Show this session's capability grant, delegation depth, and known agent-type ceilings; " +
111
- "/grants init | /grants dashboard | /grants approvals | /grants revoke | /grants ledger",
115
+ "/grants init | /grants dashboard | /grants auto [on|off] | /grants approvals | /grants revoke | /grants ledger",
112
116
  handler: async (args: string, ctx: any) => {
113
117
  // Everything this command may see, named in one place. Previously these were whatever happened to be in
114
118
  // the enclosing closure — which is how a diagnostic came to disagree with the enforcer (R-28).
@@ -132,7 +136,32 @@ export const grantsCommand = {
132
136
  runtimeFor,
133
137
  } = ctx.grants as GrantsCommandContext;
134
138
 
135
- const [sub, target] = args.trim().split(/\s+/).filter(Boolean);
139
+ const words = args.trim().split(/\s+/).filter(Boolean);
140
+ const [sub, target] = words;
141
+ if (sub === "auto") {
142
+ if (words.length > 2 || (target !== undefined && target !== "on" && target !== "off")) {
143
+ ctx.ui.notify("grants: use /grants auto [on|off]; no permission setting changed.", "warning");
144
+ return;
145
+ }
146
+ if (target === undefined) {
147
+ ctx.ui.notify(`grants: Daddy permission Auto ${ctx.grants.autoModeStatus ?? "unavailable"}`, "info");
148
+ return;
149
+ }
150
+ if (!ctx.grants.changeAutoMode) {
151
+ ctx.ui.notify("grants: Daddy Auto controls are unavailable for this session owner.", "warning");
152
+ return;
153
+ }
154
+ try {
155
+ const status = await ctx.grants.changeAutoMode(target === "on");
156
+ ctx.ui.notify(`grants: Daddy permission Auto ${status}; admitted work continues.`, "info");
157
+ } catch (error) {
158
+ ctx.ui.notify(
159
+ `grants: Auto change not confirmed: ${String(error)}. Read /grants auto for current state.`,
160
+ "error",
161
+ );
162
+ }
163
+ return;
164
+ }
136
165
 
137
166
  if (sub === "init") {
138
167
  await ctx.grants.runInit();
@@ -264,7 +293,7 @@ export const grantsCommand = {
264
293
  if (attributed > 0 || unattributed > 0) {
265
294
  lines.push(
266
295
  ` approvals ${bySource.prompt} prompt · ${bySource.persisted} persisted · ${bySource.session} session · ` +
267
- `${bySource.inherited} inherited`,
296
+ `${bySource.inherited} inherited · ${bySource.auto} auto`,
268
297
  );
269
298
  // **Two numbers, because one of them would lie.** Counting `persisted` RECORDS as prompts avoided
270
299
  // overstates the layer twentyfold in the obvious case: precedence is inherited → session →
@@ -411,6 +440,7 @@ export const grantsCommand = {
411
440
  // two facts about what a spawn will be sit together.
412
441
  ` executor ${executor.disclosure}`,
413
442
  ...renderExecutionControls(ctx.grants.nativeSessionRoot),
443
+ ` Auto ${ctx.grants.autoModeStatus ?? "OFF (default)"}`,
414
444
  ` depth ${depth} of max ${maxDepth}${maxDepth <= 0 ? " (spawning disabled)" : ""}`,
415
445
  ` ledger ${ledgerPath || "(not recording — set PI_DADDY_LEDGER)"}`,
416
446
  ` approvals ${sessionApprovals.size} this session, ${valid.size} persisted` +
@@ -1,3 +1,10 @@
1
+ import { bindEcosystemVersions } from "./ecosystem-versions.ts";
2
+ import {
3
+ initializeSessionAutoMode,
4
+ closeSessionAutoMode,
5
+ getDashboardControlState,
6
+ setAutoApproval,
7
+ } from "./session-auto-mode.ts";
1
8
  /**
2
9
  * pi-daddy — the extension entry point pi loads.
3
10
  *
@@ -79,6 +86,7 @@ export default function (pi: ExtensionAPI, trustedSession?: GrantsSession) {
79
86
  })();
80
87
  const observerExtensionPath = fileURLToPath(new URL("./activity-timeline.ts", import.meta.url));
81
88
  const session = trustedSession ?? createGrantsSession(extensionPath, undefined, observerExtensionPath);
89
+ bindEcosystemVersions(pi, session, fileURLToPath(new URL("../", import.meta.url)));
82
90
  session.currentThinking = typeof pi.getThinkingLevel === "function" ? () => pi.getThinkingLevel() : undefined;
83
91
  registerActivityTimeline(pi, session);
84
92
  const runtimeSnapshot = registerRuntimeSnapshot(pi, session);
@@ -131,6 +139,13 @@ export default function (pi: ExtensionAPI, trustedSession?: GrantsSession) {
131
139
  // this absolute identity verbatim, and resolve(abs) remains abs at every deeper session start.
132
140
  if (session.ledgerPath) session.ledgerPath = resolve(ctx.cwd, session.ledgerPath);
133
141
  try {
142
+ try {
143
+ const nativeId = (owner as { getSessionId?: () => string }).getSessionId?.() ?? session.episodeId;
144
+ await initializeSessionAutoMode(session, reload.environment, nativeId);
145
+ } catch (error) {
146
+ session.autoModeFailure = `Daddy Auto mode unavailable: ${String(error)}`;
147
+ throw error;
148
+ }
134
149
  // ADR-0076 PR 3d: a pre-format project ledger is imported once into the record envelope, bodies verbatim, each
135
150
  // record marked with its source line; the old file is left untouched. Happens before any spawn can append.
136
151
  if (session.governed) {
@@ -319,6 +334,10 @@ export default function (pi: ExtensionAPI, trustedSession?: GrantsSession) {
319
334
  return undefined;
320
335
  });
321
336
 
337
+ pi.on("session_shutdown", async (event) => {
338
+ if (event.reason !== "reload") await closeSessionAutoMode(session);
339
+ });
340
+
322
341
  /**
323
342
  * Reap the herdr panes this agent run opened — ADR-0032.
324
343
  *
@@ -433,8 +452,8 @@ export default function (pi: ExtensionAPI, trustedSession?: GrantsSession) {
433
452
  // Built per invocation and spelled out field by field, rather than passing the session whole: what a
434
453
  // read-only diagnostic may see is a decision, and `GrantsCommandContext` is where it is recorded.
435
454
  handler: async (args, ctx) => {
436
- // Named revocation validates the current definition. Emergency revoke-all needs no resource acquisition.
437
- if (args.trim() !== "revoke --all") await session.ensureDefinitions?.();
455
+ // Auto controls and emergency revoke-all need no definition acquisition; OFF must remain reachable.
456
+ if (args.trim() !== "revoke --all" && args.trim().split(/\s+/)[0] !== "auto") await session.ensureDefinitions?.();
438
457
  return grantsCommand.handler(args, {
439
458
  ...ctx,
440
459
  grants: {
@@ -463,6 +482,13 @@ export default function (pi: ExtensionAPI, trustedSession?: GrantsSession) {
463
482
  }
464
483
  : {}),
465
484
  nativeSessionRoot: session.nativeSessionRoot,
485
+ changeAutoMode: async (enabled: boolean) => {
486
+ const { auto } = await setAutoApproval(session, enabled, "command");
487
+ return `${auto.enabled ? "ON" : "OFF"} (${auto.source}; current session permissions)`;
488
+ },
489
+ autoModeStatus: await getDashboardControlState(session)
490
+ .then(({ auto }) => `${auto.enabled ? "ON" : "OFF"} (${auto.source}; current session permissions)`)
491
+ .catch((error) => `unavailable: ${String(error)}`),
466
492
  catalog: session.catalog,
467
493
  definitions: session.definitions,
468
494
  sessionApprovals: session.sessionApprovals,