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.
- package/CHANGELOG.md +8 -0
- package/README.md +41 -11
- package/contracts/ledger-record/v1/governance-event.schema.json +65 -3
- package/dist/governance/approval-prompt.d.ts +4 -0
- package/dist/governance/approval-prompt.d.ts.map +1 -1
- package/dist/governance/approval-prompt.js +59 -4
- package/dist/governance/approval-prompt.js.map +1 -1
- package/dist/governance/auto-mode-policy.d.ts +11 -0
- package/dist/governance/auto-mode-policy.d.ts.map +1 -0
- package/dist/governance/auto-mode-policy.js +309 -0
- package/dist/governance/auto-mode-policy.js.map +1 -0
- package/dist/governance/execution-retention.d.ts +3 -0
- package/dist/governance/execution-retention.d.ts.map +1 -1
- package/dist/governance/execution-retention.js +30 -0
- package/dist/governance/execution-retention.js.map +1 -1
- package/dist/governance/ledger-events.d.ts +14 -1
- package/dist/governance/ledger-events.d.ts.map +1 -1
- package/dist/governance/ledger-events.js +13 -0
- package/dist/governance/ledger-events.js.map +1 -1
- package/dist/governance/ledger-report.d.ts.map +1 -1
- package/dist/governance/ledger-report.js +5 -3
- package/dist/governance/ledger-report.js.map +1 -1
- package/dist/governance/ledger-v3-validation.d.ts.map +1 -1
- package/dist/governance/ledger-v3-validation.js +17 -3
- package/dist/governance/ledger-v3-validation.js.map +1 -1
- package/dist/governance/ledger.d.ts +1 -1
- package/dist/governance/ledger.d.ts.map +1 -1
- package/dist/governance/ledger.js +1 -1
- package/dist/governance/ledger.js.map +1 -1
- package/dist/kernel/approval.d.ts +1 -1
- package/dist/kernel/approval.d.ts.map +1 -1
- package/dist/kernel/approval.js +1 -1
- package/dist/kernel/approval.js.map +1 -1
- package/dist/kernel/auto-mode.d.ts +35 -0
- package/dist/kernel/auto-mode.d.ts.map +1 -0
- package/dist/kernel/auto-mode.js +29 -0
- package/dist/kernel/auto-mode.js.map +1 -0
- package/dist/kernel/delegate-types.d.ts +2 -0
- package/dist/kernel/delegate-types.d.ts.map +1 -1
- package/dist/kernel/delegate-types.js.map +1 -1
- package/dist/kernel/delegate.d.ts.map +1 -1
- package/dist/kernel/delegate.js +2 -2
- package/dist/kernel/delegate.js.map +1 -1
- package/dist/kernel/env-names.d.ts +2 -0
- package/dist/kernel/env-names.d.ts.map +1 -1
- package/dist/kernel/env-names.js +4 -0
- package/dist/kernel/env-names.js.map +1 -1
- package/dist/kernel/propagation.d.ts +5 -1
- package/dist/kernel/propagation.d.ts.map +1 -1
- package/dist/kernel/propagation.js +8 -2
- package/dist/kernel/propagation.js.map +1 -1
- package/dist/products/dashboard-cli.d.ts +6 -0
- package/dist/products/dashboard-cli.d.ts.map +1 -1
- package/dist/products/dashboard-cli.js +248 -52
- package/dist/products/dashboard-cli.js.map +1 -1
- package/dist/products/dashboard-display-controls.d.ts +2 -1
- package/dist/products/dashboard-display-controls.d.ts.map +1 -1
- package/dist/products/dashboard-display-controls.js +61 -0
- package/dist/products/dashboard-display-controls.js.map +1 -1
- package/dist/products/dashboard-render.d.ts +2 -0
- package/dist/products/dashboard-render.d.ts.map +1 -1
- package/dist/products/dashboard-render.js +2 -2
- package/dist/products/dashboard-render.js.map +1 -1
- package/dist/products/dashboard-screen.d.ts +52 -0
- package/dist/products/dashboard-screen.d.ts.map +1 -0
- package/dist/products/dashboard-screen.js +262 -0
- package/dist/products/dashboard-screen.js.map +1 -0
- package/dist/products/dashboard-session-client.d.ts +34 -2
- package/dist/products/dashboard-session-client.d.ts.map +1 -1
- package/dist/products/dashboard-session-client.js +51 -0
- package/dist/products/dashboard-session-client.js.map +1 -1
- package/dist/products/ecosystem-versions.d.ts +19 -0
- package/dist/products/ecosystem-versions.d.ts.map +1 -0
- package/dist/products/ecosystem-versions.js +2 -0
- package/dist/products/ecosystem-versions.js.map +1 -0
- package/extensions/approvals.ts +3 -2
- package/extensions/dashboard-session-server.ts +32 -4
- package/extensions/delegate-chain.ts +2 -0
- package/extensions/delegation-ledger.ts +10 -6
- package/extensions/ecosystem-versions.ts +166 -0
- package/extensions/grants-command.ts +33 -3
- package/extensions/grants.ts +28 -2
- package/extensions/reload-environment.ts +16 -1
- package/extensions/run-delegation.ts +49 -3
- package/extensions/session-auto-mode.ts +132 -0
- package/extensions/session.ts +47 -37
- package/package.json +2 -2
- package/src/governance/approval-prompt.ts +62 -4
- package/src/governance/auto-mode-policy.ts +297 -0
- package/src/governance/execution-retention.ts +24 -0
- package/src/governance/ledger-events.ts +22 -1
- package/src/governance/ledger-report.ts +5 -3
- package/src/governance/ledger-v3-validation.ts +17 -3
- package/src/governance/ledger.ts +1 -0
- package/src/kernel/approval.ts +1 -1
- package/src/kernel/auto-mode.ts +56 -0
- package/src/kernel/delegate-types.ts +2 -0
- package/src/kernel/delegate.ts +2 -1
- package/src/kernel/env-names.ts +4 -0
- package/src/kernel/propagation.ts +11 -2
- package/src/products/dashboard-cli.ts +255 -53
- package/src/products/dashboard-display-controls.ts +52 -0
- package/src/products/dashboard-render.ts +2 -2
- package/src/products/dashboard-screen.ts +339 -0
- package/src/products/dashboard-session-client.ts +60 -1
- 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
|
|
26
|
+
export type DashboardSessionAction = {
|
|
11
27
|
action: "get";
|
|
12
28
|
} | {
|
|
13
29
|
action: "set";
|
|
14
30
|
edits: string;
|
|
15
|
-
}
|
|
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":"
|
|
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":"
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"ecosystem-versions.js","sourceRoot":"","sources":["../../src/products/ecosystem-versions.ts"],"names":[],"mappings":""}
|
package/extensions/approvals.ts
CHANGED
|
@@ -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(); //
|
|
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)
|
|
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
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
|
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` +
|
package/extensions/grants.ts
CHANGED
|
@@ -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
|
-
//
|
|
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,
|