pi-daddy 0.23.0 → 0.24.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 (64) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +12 -6
  3. package/contracts/ledger/v4/README.md +1 -1
  4. package/dist/cli.d.ts +3 -1
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +49 -3
  7. package/dist/cli.js.map +1 -1
  8. package/dist/daily-dashboard-host.d.ts +99 -0
  9. package/dist/daily-dashboard-host.d.ts.map +1 -0
  10. package/dist/daily-dashboard-host.js +71 -0
  11. package/dist/daily-dashboard-host.js.map +1 -0
  12. package/dist/dashboard-cli.d.ts.map +1 -1
  13. package/dist/dashboard-cli.js +9 -2
  14. package/dist/dashboard-cli.js.map +1 -1
  15. package/dist/dashboard-harness.d.ts +3 -0
  16. package/dist/dashboard-harness.d.ts.map +1 -1
  17. package/dist/dashboard-harness.js +14 -0
  18. package/dist/dashboard-harness.js.map +1 -1
  19. package/dist/dashboard-host-contract.d.ts +6 -1
  20. package/dist/dashboard-host-contract.d.ts.map +1 -1
  21. package/dist/dashboard-host-contract.js +1 -1
  22. package/dist/dashboard-host-contract.js.map +1 -1
  23. package/dist/dashboard-host-transport.d.ts +1 -0
  24. package/dist/dashboard-host-transport.d.ts.map +1 -1
  25. package/dist/dashboard-host-transport.js +5 -3
  26. package/dist/dashboard-host-transport.js.map +1 -1
  27. package/dist/dashboard-host.d.ts +54 -0
  28. package/dist/dashboard-host.d.ts.map +1 -1
  29. package/dist/dashboard-host.js +49 -2
  30. package/dist/dashboard-host.js.map +1 -1
  31. package/dist/dashboard-observation.d.ts.map +1 -1
  32. package/dist/dashboard-observation.js +5 -5
  33. package/dist/dashboard-observation.js.map +1 -1
  34. package/dist/experiment-store.d.ts +3 -1
  35. package/dist/experiment-store.d.ts.map +1 -1
  36. package/dist/experiment-store.js +20 -3
  37. package/dist/experiment-store.js.map +1 -1
  38. package/dist/work-command.d.ts +30 -0
  39. package/dist/work-command.d.ts.map +1 -0
  40. package/dist/work-command.js +148 -0
  41. package/dist/work-command.js.map +1 -0
  42. package/extensions/daily-dashboard-session.ts +30 -0
  43. package/extensions/daily-work-session.ts +20 -0
  44. package/extensions/delegation.ts +21 -8
  45. package/extensions/execute-child.ts +10 -1
  46. package/extensions/executor-session.ts +9 -0
  47. package/extensions/grants-command.ts +14 -15
  48. package/extensions/grants-connected-command.ts +19 -0
  49. package/extensions/grants.ts +25 -3
  50. package/extensions/primary-shadow.ts +11 -0
  51. package/extensions/run-delegation.ts +2 -0
  52. package/extensions/session.ts +7 -19
  53. package/extensions/work-runtime.ts +44 -0
  54. package/package.json +1 -1
  55. package/src/cli.ts +41 -4
  56. package/src/daily-dashboard-host.ts +49 -0
  57. package/src/dashboard-cli.ts +7 -2
  58. package/src/dashboard-harness.ts +9 -0
  59. package/src/dashboard-host-contract.ts +4 -1
  60. package/src/dashboard-host-transport.ts +8 -6
  61. package/src/dashboard-host.ts +26 -3
  62. package/src/dashboard-observation.ts +3 -2
  63. package/src/experiment-store.ts +11 -3
  64. package/src/work-command.ts +179 -0
@@ -1 +1 @@
1
- {"version":3,"file":"experiment-store.js","sourceRoot":"","sources":["../src/experiment-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"experiment-store.js","sourceRoot":"","sources":["../src/experiment-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { type RevisionRef, type WorkFrozen, type WorkOccurrencePayload, type WorkProjectionContext } from "./work-ledger.ts";
2
+ export interface DeclaredWorkState {
3
+ readonly version: "pi-daddy-declared-work-v1";
4
+ readonly id: string;
5
+ readonly outcomeDigest: string;
6
+ readonly ledgerPath: string;
7
+ readonly statePath: string;
8
+ readonly grantLedgerPath: string | null;
9
+ readonly selectedSnapshot: NonNullable<WorkProjectionContext["selectedSnapshot"]>;
10
+ readonly scope: RevisionRef;
11
+ readonly intent: RevisionRef;
12
+ readonly obligation: RevisionRef;
13
+ readonly policy: RevisionRef;
14
+ }
15
+ export interface DeclareWorkInput {
16
+ cwd: string;
17
+ id: string;
18
+ outcome: string;
19
+ }
20
+ export declare function loadDeclaredWork(statePath: string): Promise<WorkFrozen<DeclaredWorkState> | null>;
21
+ export declare function declareWork(input: DeclareWorkInput): Promise<WorkFrozen<DeclaredWorkState>>;
22
+ export type DeclaredOccurrenceIdentity = Pick<WorkOccurrencePayload["labels"], "toolCallId" | "taskId" | "workspaceId" | "definitionDigest" | "configurationDigest" | "modelId" | "effortId"> & {
23
+ executionId: string;
24
+ parentExecutionId: string | null;
25
+ childId: string | null;
26
+ variantId: string | null;
27
+ now: Date;
28
+ };
29
+ export declare function appendDeclaredWorkOccurrence(state: WorkFrozen<DeclaredWorkState>, identity: DeclaredOccurrenceIdentity, occurrenceState: WorkOccurrencePayload["state"]): Promise<void>;
30
+ //# sourceMappingURL=work-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-command.d.ts","sourceRoot":"","sources":["../src/work-command.ts"],"names":[],"mappings":"AAGA,OAAO,EAQL,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAE3B,MAAM,kBAAkB,CAAC;AAY1B,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,2BAA2B,CAAC;IAC9C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAClF,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B;AAID,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAiBD,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,CA6BvG;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAoDjG;AAED,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,QAAQ,GAAG,aAAa,GAAG,kBAAkB,GAAG,qBAAqB,GAAG,SAAS,GAAG,UAAU,CAAC,GAAG;IAC9L,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,GAAG,EAAE,IAAI,CAAC;CACX,CAAC;AAEF,wBAAsB,4BAA4B,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,0BAA0B,EAC3H,eAAe,EAAE,qBAAqB,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhE"}
@@ -0,0 +1,148 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
3
+ import { dirname, isAbsolute, join, resolve } from "node:path";
4
+ import { appendWorkLedgerEventOnce, buildWorkOccurrenceEvent, buildWorkRevisionEvent, buildWorkSnapshotEvent, parseWorkLedgerText, projectWorkLedger, } from "./work-ledger.js";
5
+ import { withFileLock } from "./file-lock.js";
6
+ const ID = /^[A-Za-z0-9][A-Za-z0-9._:/@+\-]{0,127}$/;
7
+ const DIGEST = /^[a-f0-9]{64}$/;
8
+ const sha256 = (value) => createHash("sha256").update(value).digest("hex");
9
+ const eventRef = (event) => ({ eventId: event.eventId, digest: event.digest });
10
+ const revisionRef = (event) => {
11
+ const { kind, id, revision, digest } = event.payload.revision;
12
+ return { kind, id, revision, digest };
13
+ };
14
+ function paths(input) {
15
+ const root = resolve(input.cwd);
16
+ return { ledgerPath: join(root, ".pi", "work.jsonl"), statePath: join(root, ".pi", "work-current.json"), grantLedgerPath: null };
17
+ }
18
+ const exactKeys = (value, expected) => {
19
+ const actual = Object.keys(value).sort();
20
+ return actual.length === expected.length && actual.every((key, index) => key === [...expected].sort()[index]);
21
+ };
22
+ const validRef = (value, kind) => {
23
+ if (!value || typeof value !== "object" || !exactKeys(value, ["kind", "id", "revision", "digest"]))
24
+ return false;
25
+ const ref = value;
26
+ return ref.kind === kind && ID.test(ref.id) && Number.isSafeInteger(ref.revision) && ref.revision > 0 && DIGEST.test(ref.digest);
27
+ };
28
+ export async function loadDeclaredWork(statePath) {
29
+ let text;
30
+ try {
31
+ text = await readFile(statePath, "utf8");
32
+ }
33
+ catch (error) {
34
+ if (error.code === "ENOENT")
35
+ return null;
36
+ throw error;
37
+ }
38
+ try {
39
+ const value = JSON.parse(text);
40
+ if (!value || typeof value !== "object" || !exactKeys(value, [
41
+ "version", "id", "outcomeDigest", "ledgerPath", "grantLedgerPath", "selectedSnapshot", "scope", "intent", "obligation", "policy",
42
+ ]) || value.version !== "pi-daddy-declared-work-v1" || !ID.test(value.id) || !DIGEST.test(value.outcomeDigest) ||
43
+ typeof value.ledgerPath !== "string" || !isAbsolute(value.ledgerPath) ||
44
+ (value.grantLedgerPath !== null && (typeof value.grantLedgerPath !== "string" || !isAbsolute(value.grantLedgerPath))) ||
45
+ !validRef(value.scope, "scope") || !validRef(value.intent, "goal") || !validRef(value.obligation, "obligation") || !validRef(value.policy, "policy") ||
46
+ !value.selectedSnapshot || typeof value.selectedSnapshot !== "object" ||
47
+ !exactKeys(value.selectedSnapshot, ["snapshot", "event"]) ||
48
+ !exactKeys(value.selectedSnapshot.snapshot, ["id", "digest"]) || !ID.test(value.selectedSnapshot.snapshot.id) || !DIGEST.test(value.selectedSnapshot.snapshot.digest) ||
49
+ !exactKeys(value.selectedSnapshot.event, ["eventId", "digest"]) || !ID.test(value.selectedSnapshot.event.eventId) || !DIGEST.test(value.selectedSnapshot.event.digest)) {
50
+ throw new Error("shape");
51
+ }
52
+ const expectedLedger = resolve(dirname(statePath), "work.jsonl");
53
+ if (resolve(value.ledgerPath) !== expectedLedger)
54
+ throw new Error("relocated");
55
+ const ledger = await readFile(value.ledgerPath, "utf8");
56
+ const ingestion = parseWorkLedgerText(ledger);
57
+ const projection = projectWorkLedger(ledger, { selectedSnapshot: value.selectedSnapshot, authority: null });
58
+ const obligation = projection.obligations.find(item => item.binding.obligation.digest === value.obligation.digest);
59
+ if (!ingestion.complete || projection.scopeState !== "valid" || !obligation || projection.selectedSnapshot?.digest !== value.selectedSnapshot.snapshot.digest)
60
+ throw new Error("unbound");
61
+ return Object.freeze({ ...value, statePath: resolve(statePath) });
62
+ }
63
+ catch {
64
+ throw new Error("invalid declared work state; no task was selected");
65
+ }
66
+ }
67
+ export async function declareWork(input) {
68
+ if (!input || typeof input !== "object" || Object.keys(input).some(key => !["cwd", "id", "outcome"].includes(key))) {
69
+ throw new TypeError("unsupported work declaration field");
70
+ }
71
+ if (!ID.test(input.id) || typeof input.outcome !== "string" || !input.outcome.trim())
72
+ throw new TypeError("work declaration requires an identifier and non-empty outcome");
73
+ const resolved = paths(input), outcomeDigest = sha256(input.outcome.trim());
74
+ await mkdir(dirname(resolved.ledgerPath), { recursive: true });
75
+ await mkdir(dirname(resolved.statePath), { recursive: true });
76
+ return withFileLock(resolved.statePath, "declared work", async () => {
77
+ const existing = await loadDeclaredWork(resolved.statePath);
78
+ if (existing) {
79
+ if (existing.id === input.id && existing.outcomeDigest === outcomeDigest)
80
+ return existing;
81
+ throw new Error(`declared work id ${input.id} already names a different outcome`);
82
+ }
83
+ const pendingPath = `${resolved.statePath}.pending`;
84
+ let prepared;
85
+ try {
86
+ prepared = JSON.parse(await readFile(pendingPath, "utf8"));
87
+ if (!prepared || Object.keys(prepared).sort().join() !== "createdAt,id,outcomeDigest,version" || prepared.version !== "pi-daddy-work-preparation-v1" || prepared.id !== input.id || prepared.outcomeDigest !== outcomeDigest || Number.isNaN(Date.parse(prepared.createdAt)))
88
+ throw new Error("invalid");
89
+ }
90
+ catch (error) {
91
+ if (error.code !== "ENOENT")
92
+ throw new Error("another or invalid work declaration is pending; no events were replaced");
93
+ prepared = { version: "pi-daddy-work-preparation-v1", id: input.id, outcomeDigest, createdAt: new Date().toISOString() };
94
+ await writeFile(pendingPath, `${JSON.stringify(prepared)}\n`, { encoding: "utf8", mode: 0o600, flag: "wx" });
95
+ }
96
+ const now = new Date(prepared.createdAt);
97
+ const revision = (kind, name, patch = {}) => buildWorkRevisionEvent({ eventId: `work:${input.id}:${name}:1`, now, revision: {
98
+ kind, id: `work:${input.id}:${name}`, revision: 1, scopeId: `work:${input.id}:scope`, predecessor: null,
99
+ contentDigest: sha256(`${name}\0${outcomeDigest}`), parent: null, dependencies: [], ownerId: "local-operator",
100
+ permittedEffects: [], policy: null, ...patch,
101
+ } });
102
+ const scope = revision("scope", "scope"), policy = revision("policy", "policy");
103
+ const intent = revision("goal", "goal", { parent: revisionRef(scope) });
104
+ const obligation = revision("obligation", "obligation", { parent: revisionRef(intent), policy: revisionRef(policy) });
105
+ const binding = { intent: revisionRef(intent), obligation: revisionRef(obligation), artifact: null, policy: revisionRef(policy) };
106
+ const snapshot = buildWorkSnapshotEvent({ eventId: `work:${input.id}:snapshot:1`, now, snapshot: {
107
+ snapshotId: `work:${input.id}:selected`, scope: revisionRef(scope), revisions: [revisionRef(policy), revisionRef(intent), revisionRef(obligation)], bindings: [binding],
108
+ } });
109
+ for (const event of [scope, policy, intent, obligation, snapshot])
110
+ await appendWorkLedgerEventOnce({ path: resolved.ledgerPath, grantLedgerPath: resolved.grantLedgerPath }, event);
111
+ const stored = {
112
+ version: "pi-daddy-declared-work-v1", id: input.id, outcomeDigest, ledgerPath: resolved.ledgerPath, grantLedgerPath: resolved.grantLedgerPath,
113
+ selectedSnapshot: { snapshot: { id: snapshot.payload.snapshot.snapshotId, digest: snapshot.payload.snapshot.digest }, event: eventRef(snapshot) },
114
+ scope: revisionRef(scope), intent: revisionRef(intent), obligation: revisionRef(obligation), policy: revisionRef(policy),
115
+ };
116
+ const temporary = `${resolved.statePath}.${process.pid}.${randomUUID()}.tmp`;
117
+ try {
118
+ await writeFile(temporary, `${JSON.stringify(stored, null, 2)}\n`, { encoding: "utf8", mode: 0o600, flag: "wx" });
119
+ await rename(temporary, resolved.statePath);
120
+ }
121
+ finally {
122
+ await rm(temporary, { force: true });
123
+ }
124
+ await rm(pendingPath);
125
+ return Object.freeze({ ...stored, statePath: resolved.statePath });
126
+ });
127
+ }
128
+ export async function appendDeclaredWorkOccurrence(state, identity, occurrenceState) {
129
+ const { executionId, parentExecutionId, childId, variantId, now, ...rawLabels } = identity;
130
+ const label = (name, value) => value === null ? null : ID.test(value) ? value : `${name}:${sha256(value)}`;
131
+ const labels = {
132
+ toolCallId: label("toolcall", rawLabels.toolCallId), taskId: label("task", rawLabels.taskId),
133
+ workspaceId: label("workspace", rawLabels.workspaceId), definitionDigest: rawLabels.definitionDigest,
134
+ configurationDigest: rawLabels.configurationDigest, modelId: label("model", rawLabels.modelId), effortId: label("effort", rawLabels.effortId),
135
+ };
136
+ const event = buildWorkOccurrenceEvent({
137
+ eventId: `work:${state.id}:attempt:${identity.executionId}:${occurrenceState}`,
138
+ now,
139
+ payload: {
140
+ scope: state.scope, obligation: state.obligation, executionId,
141
+ parentExecutionId, childId, variantId: label("variant", variantId), artifact: null,
142
+ provenance: "observed", state: occurrenceState,
143
+ labels: { sessionId: null, branchLeafId: null, ...labels },
144
+ },
145
+ });
146
+ await appendWorkLedgerEventOnce({ path: state.ledgerPath, grantLedgerPath: state.grantLedgerPath }, event);
147
+ }
148
+ //# sourceMappingURL=work-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-command.js","sourceRoot":"","sources":["../src/work-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { createHash } from "node:crypto";
2
+ import { homedir } from "node:os";
3
+ import { mkdir } from "node:fs/promises";
4
+ import { join } from "node:path";
5
+ import { adoptDashboardHarnessBridge } from "../src/dashboard-harness.ts";
6
+ import { ENV_DASHBOARD_HOST_SOCKET } from "../src/dashboard-host-transport.ts";
7
+ import { startDailyDashboardHost } from "../src/daily-dashboard-host.ts";
8
+ import type { DeclaredWorkState } from "../src/work-command.ts";
9
+ import type { OrdinaryChildren } from "../src/ordinary-children.ts";
10
+
11
+ const BRIDGE=Symbol.for("skill-harness.dashboard-host.v1"),idPattern=/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
12
+ export function dailyDashboardPaths(cwd:string,id:string,home=homedir(),uid=process.getuid?.()??0){const key=createHash("sha256").update(`${cwd}\0${id}`).digest("hex");return {directory:join(home,".local","state","pi-daddy","hosts",key.slice(0,16)),socketDirectory:join("/tmp",`pi-daddy-${uid}`),socketPath:join("/tmp",`pi-daddy-${uid}`,`host-${key.slice(0,20)}.sock`)};}
13
+ export function createDailyDashboardSession(input:{ordinary:()=>OrdinaryChildren;declared:()=>DeclaredWorkState|undefined;cwd:()=>string;env:Record<string,string|undefined>;author:string}){
14
+ let current:null|Awaited<ReturnType<typeof startDailyDashboardHost>>=null,publishedSocket:string|undefined;
15
+ return Object.freeze({
16
+ async run(target:string){
17
+ if(target==="stop"){
18
+ if(!current)return "daily host is not running";await current.close();current=null;if(publishedSocket&&input.env[ENV_DASHBOARD_HOST_SOCKET]===publishedSocket)delete input.env[ENV_DASHBOARD_HOST_SOCKET];publishedSocket=undefined;return "daily host stopped; no child was cancelled";
19
+ }
20
+ if(!idPattern.test(target))throw Error("usage — /grants host <fresh-id> | stop");if(current)throw Error("daily host already running in this session; stop it before selecting another fresh id");
21
+ const declared=input.declared();if(!declared)throw Error("declare current work first with pi-daddy work add, then reload");
22
+ const bridge=(globalThis as Record<PropertyKey,unknown>)[BRIDGE];if(!bridge)throw Error("loaded skill-harness extension bridge unavailable; load the candidate skill-harness extension in this Pi session");
23
+ const paths=dailyDashboardPaths(input.cwd(),target);await mkdir(join(homedir(),".local","state","pi-daddy","hosts"),{recursive:true,mode:0o700});await mkdir(paths.socketDirectory,{recursive:true,mode:0o700});
24
+ current=await startDailyDashboardHost({id:target,cwd:input.cwd(),directory:paths.directory,socketPath:paths.socketPath,declared,ordinary:input.ordinary(),harness:adoptDashboardHarnessBridge(bridge) as never,author:input.author});
25
+ publishedSocket=current.socketPath;input.env[ENV_DASHBOARD_HOST_SOCKET]=publishedSocket;
26
+ return `daily host started at ${publishedSocket}; current declared work/facts were captured. Run /grants dashboard, then use only its listed pause/resume/refresh action keys. Runtime remains unaccepted.`;
27
+ },
28
+ async close(){if(current)await current.close();if(publishedSocket&&input.env[ENV_DASHBOARD_HOST_SOCKET]===publishedSocket)delete input.env[ENV_DASHBOARD_HOST_SOCKET];current=null;publishedSocket=undefined;}
29
+ });
30
+ }
@@ -0,0 +1,20 @@
1
+ import type { DeclaredWorkState } from "../src/work-command.ts";
2
+ import { ENV_DAILY_SELECTION, ENV_DAILY_WORK } from "../src/dashboard-cli.ts";
3
+
4
+ export interface PublishedDailyWork { work?: string; selection?: string }
5
+
6
+ /** Replace only values this extension instance published; an operator override is never deleted. */
7
+ export function replacePublishedDailyWork(
8
+ env: Record<string, string | undefined>,
9
+ published: PublishedDailyWork,
10
+ state: Pick<DeclaredWorkState, "ledgerPath" | "selectedSnapshot"> | undefined,
11
+ ): void {
12
+ if (published.work && env[ENV_DAILY_WORK] === published.work) delete env[ENV_DAILY_WORK];
13
+ if (published.selection && env[ENV_DAILY_SELECTION] === published.selection) delete env[ENV_DAILY_SELECTION];
14
+ delete published.work; delete published.selection;
15
+ if (!state) return;
16
+ published.work = state.ledgerPath;
17
+ published.selection = JSON.stringify(state.selectedSnapshot);
18
+ env[ENV_DAILY_WORK] = published.work;
19
+ env[ENV_DAILY_SELECTION] = published.selection;
20
+ }
@@ -29,6 +29,7 @@ import { isCriticalAssuranceBlock, type DelegationOutcome } from "./execute-chil
29
29
  import { type GrantsSession } from "./session.ts";
30
30
  import { newDelegationOccurrence } from "./execution-occurrence.ts";
31
31
  import { correlationShape as buildCorrelationShape } from "./correlation-shape.ts";
32
+ import { completePrimary } from "./primary-shadow.ts";
32
33
 
33
34
  /**
34
35
  * Wire a set of children to pi's partial-result channel — ADR-0032.
@@ -171,11 +172,16 @@ export function registerDelegationTools(pi: ExtensionAPI, session: GrantsSession
171
172
  access: Type.Union([Type.Literal("read"), Type.Literal("write")]),
172
173
  });
173
174
 
175
+ const thinkingShape = Type.Optional(Type.Union(
176
+ ["off", "minimal", "low", "medium", "high", "xhigh", "max"].map(level => Type.Literal(level)),
177
+ { description: "Requested Pi thinking level; unsupported model/level combinations fail in the child." },
178
+ ));
174
179
  const childShape = Type.Object({
175
180
  task: Type.String({ description: "The task for this sub-agent. It receives only this." }),
176
181
  agent: Type.Optional(Type.String({ description: describeAgent(spawnable()) })),
177
182
  tools: Type.Optional(Type.Array(Type.String(), { description: "Capabilities, when no 'agent' fits." })),
178
183
  model: Type.Optional(Type.String({ description: "Model as provider/id. Defaults to this session's." })),
184
+ thinking: thinkingShape,
179
185
  correlation: Type.Optional(correlationShape),
180
186
  workspace: Type.Optional(workspaceShape),
181
187
  });
@@ -186,6 +192,8 @@ export function registerDelegationTools(pi: ExtensionAPI, session: GrantsSession
186
192
  maxItems: MAX_CHILDREN_PER_CALL,
187
193
  description: "The sub-agents to run concurrently. Each is independent and unaware of the others.",
188
194
  }),
195
+ completion: Type.Optional(Type.Literal("primary", {description:"Return when the selected primary settles; shadows continue under the original owner."})),
196
+ primary: Type.Optional(Type.Integer({minimum:1,maximum:MAX_CHILDREN_PER_CALL,description:"1-based primary child; required with completion=primary."})),
189
197
  });
190
198
 
191
199
  const delegateParams = Type.Object({
@@ -207,6 +215,7 @@ export function registerDelegationTools(pi: ExtensionAPI, session: GrantsSession
207
215
  "Defaults to this session's model, already provider-qualified.",
208
216
  }),
209
217
  ),
218
+ thinking: thinkingShape,
210
219
  correlation: Type.Optional(correlationShape),
211
220
  workspace: Type.Optional(workspaceShape),
212
221
  });
@@ -231,6 +240,7 @@ export function registerDelegationTools(pi: ExtensionAPI, session: GrantsSession
231
240
  agent: params.agent,
232
241
  tools: params.tools,
233
242
  model: params.model,
243
+ thinking: params.thinking,
234
244
  correlation: params.correlation,
235
245
  workspace: params.workspace,
236
246
  },
@@ -288,10 +298,13 @@ export function registerDelegationTools(pi: ExtensionAPI, session: GrantsSession
288
298
  `At most ${MAX_CHILDREN_PER_CALL} children per call, and a session-wide budget bounds the total ` +
289
299
  "across the whole delegation subtree. Children cannot see each other or share context. Use this " +
290
300
  "when independent tasks can proceed in parallel — several reviewers over one diff, say — and read " +
291
- "every child's outcome, because one can be refused while the others succeed.",
301
+ "every child's outcome, because one can be refused while the others succeed. For independent variants, " +
302
+ "completion=primary with a 1-based primary returns that result while shadows remain owned/accounted.",
292
303
  parameters: delegateAllParams,
293
304
  async execute(_toolCallId, params, signal, onUpdate, ctx) {
294
- const children = params.children ?? [];
305
+ const children = params.children ?? [],primaryMode=params.completion==="primary";
306
+ if(primaryMode!==Number.isInteger(params.primary)||primaryMode&&(params.primary!<1||params.primary!>children.length))throw new GovernanceRefusal(refusal("FANOUT_EXCEEDED","primary fan-out requires one in-range 1-based primary"));
307
+ if(primaryMode&&session.variantRuns.size>=128)throw new GovernanceRefusal(refusal("FANOUT_EXCEEDED","primary/shadow accounting capacity exhausted"));
295
308
  const split = splitBudget(session.fanoutBudget, children.length);
296
309
  if (!split.ok) {
297
310
  // Thrown, not returned: a returned `isError` is discarded by pi, so a refusal that came back as a
@@ -310,21 +323,21 @@ export function registerDelegationTools(pi: ExtensionAPI, session: GrantsSession
310
323
  // live and its writer lease is deliberately retained" — a resource-retention notice, not a per-child
311
324
  // failure. Losing it meant nobody was told a lease is held with no owner until the process exits
312
325
  // (R-116).
313
- const infrastructureErrors: unknown[] = [];
314
- const outcomes = await Promise.all(
315
- children.map(async (child, index): Promise<DelegationOutcome> => {
326
+ const infrastructureErrors: unknown[] = [],occurrences=children.map((_,index)=>newDelegationOccurrence(session,index));
327
+ const pending = children.map(async (child, index): Promise<DelegationOutcome> => {
316
328
  try {
317
329
  return await runOneDelegation(
318
330
  session, child,
319
- newDelegationOccurrence(session, index),
331
+ occurrences[index],
320
332
  split.perChild, ctx, signal, { onProgress: progress.sink(index), toolCallId: _toolCallId },
321
333
  );
322
334
  } catch (error) {
323
335
  infrastructureErrors.push(error);
324
336
  return childFailureOutcome(error, session.depth + 1);
325
337
  }
326
- }),
327
- );
338
+ });
339
+ if(primaryMode){const completed=await completePrimary({session,primaryIndex:params.primary!-1,occurrences,pending,settle:progress.settle}),primary=completed.primary;if(!primary.ok){if(isCriticalAssuranceBlock(primary))throw new Error(primary.text);throw totalFanoutFailure([primary],`primary child failed: ${primary.reason}`);}return {content:[{type:"text",text:primary.text||"(no output)"}],details:{primary:params.primary,shadows:children.length-1,primaryExecutionId:completed.runId,shadowSettlement:"retained-by-original-owner",granted:primary.granted,retention:primary.retention}};}
340
+ const outcomes=await Promise.all(pending);
328
341
  progress.settle(outcomes);
329
342
  // The upstream controller's verdict outranks our own infrastructure noise — it is the answer the
330
343
  // caller is waiting for, and ADR-0034 requires it to pass through unchanged. But an infrastructure
@@ -11,6 +11,7 @@ import { HerdrWriterCloseError, runHerdrPane } from "../src/run-herdr.ts";
11
11
  import { GovernanceRefusal, refusal, type StructuredRefusal } from "../src/refusals.ts";
12
12
  import { ENV_HERDR_KEEP_PANE, type GrantsSession } from "./session.ts";
13
13
  import { releaseDelegationWorkspace, type PreparedWorkspace } from "./workspace-runtime.ts";
14
+ import { beginDeclaredWorkAttempt } from "./work-runtime.ts";
14
15
 
15
16
  export interface DelegationOutcome {
16
17
  ok: boolean;
@@ -126,6 +127,10 @@ async function executeChildBody(input: {
126
127
  throw error;
127
128
  }
128
129
  }
130
+ const workAttempt = await beginDeclaredWorkAttempt({
131
+ session, plan, childId, executionId, parentExecutionId, toolCallId: input.toolCallId,
132
+ preparedWorkspace, configuredTimeoutMs, startedAt,
133
+ });
129
134
 
130
135
  // The recorded deadline and executor timer are one fact. Waiting for the strict starting append consumes
131
136
  // the budget; handing the child a fresh full timeout would leave it live after the dashboard truthfully
@@ -152,7 +157,7 @@ async function executeChildBody(input: {
152
157
  if (sessionFlag >= 0) retention.observeSession({ source: "pi-session-file", value: plan.args[sessionFlag + 1] });
153
158
  let releaseReason = "failed";
154
159
  let retainWriterLease = false;
155
- let terminalAttempted = false;
160
+ let terminalAttempted = false, workTerminalAttempted = false;
156
161
  const teardownFailures: string[] = [];
157
162
  let runtimeRecord: Promise<void> | undefined;
158
163
  const recordRunning = (executor: "process" | "herdr", pane?: { id: string; agentName: string }): void => {
@@ -232,6 +237,8 @@ async function executeChildBody(input: {
232
237
  retention.finish({ code: output.code, signal: output.signal ?? null, timedOut: output.timedOut,
233
238
  aborted: output.aborted, truncated: output.truncated, failed: childFailed });
234
239
  releaseReason = output.timedOut ? "timeout" : output.aborted ? "cancelled" : childFailed ? "failed" : "completed";
240
+ if (workAttempt) try { workTerminalAttempted = true; await workAttempt.finish(childFailed ? "failed" : "completed"); }
241
+ catch (error) { teardownFailures.push(`declared work terminal record failed: ${String(error)}`); }
235
242
  if (ledgerPath) {
236
243
  terminalAttempted = true;
237
244
  await appendAfterRuntimeRecord(runtimeRecord, () => appendLedgerEvent(
@@ -315,6 +322,8 @@ async function executeChildBody(input: {
315
322
  return withTeardownNotes(succeeded);
316
323
  } catch (error) {
317
324
  retention.finish({ code: null, signal: null, timedOut: false, aborted: Boolean(signal?.aborted), truncated: false, failed: true });
325
+ if (workAttempt && !workTerminalAttempted) try { workTerminalAttempted = true; await workAttempt.finish("failed"); }
326
+ catch (cause) { teardownFailures.push(`declared work terminal record failed: ${String(cause)}`); }
318
327
  retainWriterLease = Boolean(writerLease && isHerdrWriterCloseFailure(error));
319
328
  if (ledgerPath && !terminalAttempted) {
320
329
  // Best-effort: this records the failure, so it must not REPLACE the failure. A strict append that
@@ -0,0 +1,9 @@
1
+ import { chooseExecutor, needsProbe, ENV_HERDR } from "../src/executor.ts";
2
+ import { probeHerdr } from "../src/herdr-cli.ts";
3
+ import type { GrantsSession } from "./session.ts";
4
+
5
+ /** Settle one executor at session start; a later daemon change never relocates siblings. */
6
+ export async function resolveExecutor(session:GrantsSession):Promise<void>{
7
+ const raw=process.env[ENV_HERDR];
8
+ session.executor=chooseExecutor(raw,needsProbe(raw)?await probeHerdr():null);
9
+ }
@@ -17,6 +17,8 @@ import type { ExecutorChoice } from "../src/executor.ts";
17
17
  import type { Catalog } from "../src/catalog.ts";
18
18
  import type { SkillDefinition } from "../src/definitions.ts";
19
19
  import type { GatedPlan } from "./run-delegation.ts";
20
+ import type { VariantRunAccounting } from "./session.ts";
21
+ import { handleConnectedCommand } from "./grants-connected-command.ts";
20
22
  import { loadApprovals, revokeAll, revokeApproval, type SubjectLookup } from "../src/approval-store.ts";
21
23
  import { verifyLedger } from "../src/ledger.ts";
22
24
 
@@ -62,6 +64,9 @@ export interface GrantsCommandContext {
62
64
  runInit: () => Promise<void>;
63
65
  /** Open or reuse the read-only Herdr dashboard; injected so this diagnostic never becomes enforcement. */
64
66
  openDashboard: () => Promise<{ kind: "opened" | "reused"; paneId: string; visibleBesideCaller: boolean }>;
67
+ /** Explicit same-process production host lifecycle; owns no model call and never cancels a child on stop. */
68
+ runHost: (target: string) => Promise<string>;
69
+ variantRuns: Map<string, VariantRunAccounting>;
65
70
  }
66
71
 
67
72
  /**
@@ -71,18 +76,18 @@ export interface GrantsCommandContext {
71
76
  const PREVIEW_LIMIT = 12;
72
77
 
73
78
  /** The verbs `/grants` answers to. Anything else is refused rather than silently treated as no verb. */
74
- const KNOWN_SUBCOMMANDS: readonly string[] = ["init", "dashboard", "ledger", "approvals", "revoke"];
79
+ const KNOWN_SUBCOMMANDS: readonly string[] = ["init", "host", "variants", "dashboard", "ledger", "approvals", "revoke"];
75
80
 
76
81
  export const grantsCommand = {
77
82
  description:
78
83
  "Show this session's capability grant, delegation depth, and known agent-type ceilings; " +
79
- "/grants dashboard | /grants approvals | /grants ledger | /grants revoke <key>|--all",
84
+ "/grants host <fresh-id>|stop | /grants variants | /grants dashboard | /grants approvals | /grants ledger | /grants revoke <key>|--all",
80
85
  handler: async (args: string, ctx: any) => {
81
86
  // Everything this command may see, named in one place. Previously these were whatever happened to be in
82
87
  // the enclosing closure — which is how a diagnostic came to disagree with the enforcer (R-28).
83
88
  const {
84
89
  cwd, governed, ownGrant, executor, observed, depth, maxDepth, ledgerPath,
85
- catalog, definitions, sessionApprovals, inheritedApprovals, snapshotOf, previewDelegation,
90
+ catalog, definitions, sessionApprovals, inheritedApprovals, snapshotOf, previewDelegation, variantRuns,
86
91
  } = ctx.grants as GrantsCommandContext;
87
92
 
88
93
  const [sub, target] = args.trim().split(/\s+/).filter(Boolean);
@@ -92,18 +97,12 @@ handler: async (args: string, ctx: any) => {
92
97
  return;
93
98
  }
94
99
 
95
- if (sub === "dashboard") {
96
- try {
97
- const opened = await ctx.grants.openDashboard();
98
- ctx.ui.notify(
99
- `grants: dashboard ${opened.kind} in Herdr pane ${opened.paneId} without changing focus` +
100
- (opened.visibleBesideCaller ? "." : " (the existing pane is in another tab)."),
101
- "info",
102
- );
103
- } catch (error) {
104
- ctx.ui.notify(`grants: dashboard unavailable — ${error instanceof Error ? error.message : String(error)}`, "error");
105
- }
106
- return;
100
+ if(await handleConnectedCommand(sub,target,{runHost:ctx.grants.runHost,openDashboard:ctx.grants.openDashboard,ui:ctx.ui}))return;
101
+
102
+ if (sub === "variants") {
103
+ const lines=[`grants: ${variantRuns.size} retained primary/shadow run(s)`];
104
+ for(const run of variantRuns.values())lines.push(` ${run.runId} ${run.state} — primary ${run.primaryExecutionId}; ${run.shadowExecutionIds.length} shadow(s)`+(!run.outcomes?"":` — ${run.outcomes.map(x=>`${x.role}:${x.ok?"completed":"failed"}`).join(", ")}`));
105
+ ctx.ui.notify(lines.join("\n"),"info");return;
107
106
  }
108
107
 
109
108
  if (sub === "ledger") {
@@ -0,0 +1,19 @@
1
+ export interface GrantsConnectedCommandContext {
2
+ runHost:(target:string)=>Promise<string>;
3
+ openDashboard:()=>Promise<{kind:"opened"|"reused";paneId:string;visibleBesideCaller:boolean}>;
4
+ ui:{notify(message:string,level:"info"|"error"):void};
5
+ }
6
+ /** Host lifecycle and pane placement live together; neither belongs in the capability-report renderer. */
7
+ export async function handleConnectedCommand(sub:string|undefined,target:string|undefined,ctx:GrantsConnectedCommandContext):Promise<boolean>{
8
+ if(sub==="host"){
9
+ try{ctx.ui.notify(`grants: ${await ctx.runHost(target??"")}`,"info");}
10
+ catch(error){ctx.ui.notify(`grants: host unavailable — ${error instanceof Error?error.message:String(error)}`,"error");}
11
+ return true;
12
+ }
13
+ if(sub==="dashboard"){
14
+ try{const opened=await ctx.openDashboard();ctx.ui.notify(`grants: dashboard ${opened.kind} in Herdr pane ${opened.paneId} without changing focus`+(opened.visibleBesideCaller?".":" (the existing pane is in another tab)."),"info");}
15
+ catch(error){ctx.ui.notify(`grants: dashboard unavailable — ${error instanceof Error?error.message:String(error)}`,"error");}
16
+ return true;
17
+ }
18
+ return false;
19
+ }