pi-daddy 0.43.0 → 0.44.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 +104 -33
- package/README.md +27 -5
- package/THIRD_PARTY_LICENSES/musl-COPYRIGHT.txt +193 -0
- package/THIRD_PARTY_LICENSES/zig-MIT.txt +21 -0
- package/THIRD_PARTY_NOTICES.md +9 -0
- package/contracts/ledger-record/v1/README.md +40 -25
- package/dist/cli.d.ts +2 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +10 -5
- package/dist/cli.js.map +1 -1
- package/dist/executors/activity-session.js +116 -65
- package/dist/executors/activity-session.js.map +1 -1
- package/dist/executors/captured-execution.d.ts +13 -0
- package/dist/executors/captured-execution.d.ts.map +1 -0
- package/dist/executors/captured-execution.js +53 -0
- package/dist/executors/captured-execution.js.map +1 -0
- package/dist/executors/child-final.d.ts +31 -0
- package/dist/executors/child-final.d.ts.map +1 -0
- package/dist/executors/child-final.js +197 -0
- package/dist/executors/child-final.js.map +1 -0
- package/dist/executors/executor.d.ts +2 -1
- package/dist/executors/executor.d.ts.map +1 -1
- package/dist/executors/executor.js +12 -0
- package/dist/executors/executor.js.map +1 -1
- package/dist/executors/owned-worker.d.ts +18 -0
- package/dist/executors/owned-worker.d.ts.map +1 -0
- package/dist/executors/owned-worker.js +295 -0
- package/dist/executors/owned-worker.js.map +1 -0
- package/dist/executors/worker-artifact.d.ts +3 -0
- package/dist/executors/worker-artifact.d.ts.map +1 -0
- package/dist/executors/worker-artifact.js +3 -0
- package/dist/executors/worker-artifact.js.map +1 -0
- package/dist/governance/approval-prompt.d.ts +4 -3
- package/dist/governance/approval-prompt.d.ts.map +1 -1
- package/dist/governance/approval-prompt.js +13 -6
- package/dist/governance/approval-prompt.js.map +1 -1
- package/dist/governance/captured-worker-record.d.ts +9 -0
- package/dist/governance/captured-worker-record.d.ts.map +1 -0
- package/dist/governance/captured-worker-record.js +123 -0
- package/dist/governance/captured-worker-record.js.map +1 -0
- package/dist/governance/lease-record.d.ts +4 -0
- package/dist/governance/lease-record.d.ts.map +1 -1
- package/dist/governance/lease-record.js +19 -2
- package/dist/governance/lease-record.js.map +1 -1
- package/dist/governance/ledger-events.d.ts +5 -5
- package/dist/governance/ledger-events.d.ts.map +1 -1
- package/dist/governance/ledger-v3-validation.js +1 -1
- package/dist/governance/ledger-v3-validation.js.map +1 -1
- package/dist/governance/workspace-acceptance.d.ts +3 -1
- package/dist/governance/workspace-acceptance.d.ts.map +1 -1
- package/dist/governance/workspace-acceptance.js +21 -5
- package/dist/governance/workspace-acceptance.js.map +1 -1
- package/dist/governance/workspace-lease.d.ts.map +1 -1
- package/dist/governance/workspace-lease.js +44 -1
- package/dist/governance/workspace-lease.js.map +1 -1
- package/dist/kernel/authority-text.d.ts +3 -0
- package/dist/kernel/authority-text.d.ts.map +1 -0
- package/dist/kernel/authority-text.js +22 -0
- package/dist/kernel/authority-text.js.map +1 -0
- package/dist/kernel/bounded-read-failures.d.ts +9 -0
- package/dist/kernel/bounded-read-failures.d.ts.map +1 -0
- package/dist/kernel/bounded-read-failures.js +33 -0
- package/dist/kernel/bounded-read-failures.js.map +1 -0
- package/dist/kernel/bounded-read-sync.d.ts +24 -0
- package/dist/kernel/bounded-read-sync.d.ts.map +1 -0
- package/dist/kernel/bounded-read-sync.js +75 -0
- package/dist/kernel/bounded-read-sync.js.map +1 -0
- package/dist/kernel/bounded-read.d.ts +29 -2
- package/dist/kernel/bounded-read.d.ts.map +1 -1
- package/dist/kernel/bounded-read.js +98 -9
- package/dist/kernel/bounded-read.js.map +1 -1
- package/dist/kernel/capacity.d.ts +36 -0
- package/dist/kernel/capacity.d.ts.map +1 -0
- package/dist/kernel/capacity.js +94 -0
- package/dist/kernel/capacity.js.map +1 -0
- package/dist/kernel/captured-worker-contract.d.ts +38 -0
- package/dist/kernel/captured-worker-contract.d.ts.map +1 -0
- package/dist/kernel/captured-worker-contract.js +2 -0
- package/dist/kernel/captured-worker-contract.js.map +1 -0
- package/dist/kernel/catalog.d.ts +12 -3
- package/dist/kernel/catalog.d.ts.map +1 -1
- package/dist/kernel/catalog.js +28 -8
- package/dist/kernel/catalog.js.map +1 -1
- package/dist/kernel/chain.d.ts +1 -0
- package/dist/kernel/chain.d.ts.map +1 -1
- package/dist/kernel/chain.js.map +1 -1
- package/dist/kernel/definitions.d.ts +11 -1
- package/dist/kernel/definitions.d.ts.map +1 -1
- package/dist/kernel/definitions.js +6 -3
- package/dist/kernel/definitions.js.map +1 -1
- package/dist/kernel/fanout.d.ts +5 -25
- package/dist/kernel/fanout.d.ts.map +1 -1
- package/dist/kernel/fanout.js +15 -30
- package/dist/kernel/fanout.js.map +1 -1
- package/dist/kernel/grant-env.d.ts +0 -2
- package/dist/kernel/grant-env.d.ts.map +1 -1
- package/dist/kernel/grant-env.js +0 -1
- package/dist/kernel/grant-env.js.map +1 -1
- package/dist/kernel/model-preflight.d.ts +8 -0
- package/dist/kernel/model-preflight.d.ts.map +1 -1
- package/dist/kernel/model-preflight.js +23 -0
- package/dist/kernel/model-preflight.js.map +1 -1
- package/dist/kernel/selected-definitions.d.ts +15 -0
- package/dist/kernel/selected-definitions.d.ts.map +1 -0
- package/dist/kernel/selected-definitions.js +146 -0
- package/dist/kernel/selected-definitions.js.map +1 -0
- package/dist/kernel/skill-packages.d.ts +4 -2
- package/dist/kernel/skill-packages.d.ts.map +1 -1
- package/dist/kernel/skill-packages.js +34 -41
- package/dist/kernel/skill-packages.js.map +1 -1
- package/dist/kernel/skill-resources.d.ts.map +1 -1
- package/dist/kernel/skill-resources.js +8 -11
- package/dist/kernel/skill-resources.js.map +1 -1
- package/dist/kernel/workspace.d.ts +6 -3
- package/dist/kernel/workspace.d.ts.map +1 -1
- package/dist/kernel/workspace.js +10 -6
- package/dist/kernel/workspace.js.map +1 -1
- package/dist/products/dashboard-cli.js +1 -1
- package/dist/products/dashboard-cli.js.map +1 -1
- package/dist/products/dashboard-render.d.ts +1 -2
- package/dist/products/dashboard-render.d.ts.map +1 -1
- package/dist/products/dashboard-render.js +3 -1
- package/dist/products/dashboard-render.js.map +1 -1
- package/dist/products/dashboard-session-client.d.ts +1 -2
- package/dist/products/dashboard-session-client.d.ts.map +1 -1
- package/dist/products/dashboard-session-client.js.map +1 -1
- package/dist/products/episode-report.d.ts +12 -8
- package/dist/products/episode-report.d.ts.map +1 -1
- package/dist/products/episode-report.js +61 -12
- package/dist/products/episode-report.js.map +1 -1
- package/extensions/approvals.ts +1 -1
- package/extensions/chain-plan.ts +9 -3
- package/extensions/context-staging.ts +30 -35
- package/extensions/dashboard-session-server.ts +1 -2
- package/extensions/definition-describe.ts +44 -0
- package/extensions/definition-runtime.ts +89 -26
- package/extensions/delegate-chain.ts +273 -256
- package/extensions/delegation-activation.ts +1 -1
- package/extensions/delegation.ts +41 -53
- package/extensions/execute-child.ts +167 -134
- package/extensions/fanout-outcome.ts +1 -9
- package/extensions/grants-command.ts +2 -9
- package/extensions/grants.ts +106 -38
- package/extensions/init-command.ts +52 -12
- package/extensions/reload-environment.ts +21 -2
- package/extensions/retired-inputs.ts +7 -0
- package/extensions/run-delegation.ts +212 -265
- package/extensions/session-capacity.ts +53 -0
- package/extensions/session-environment.ts +5 -2
- package/extensions/session-model-prompt.ts +33 -32
- package/extensions/session-report.ts +28 -11
- package/extensions/session.ts +200 -157
- package/extensions/workspace-runtime.ts +2 -1
- package/native/README.md +25 -0
- package/native/linux-x64/worker +0 -0
- package/native/linux-x64/worker.sha256 +1 -0
- package/native/provenance.json +42 -0
- package/native/toolchain.json +18 -0
- package/native/worker.c +209 -0
- package/package.json +15 -7
- package/src/cli.ts +16 -6
- package/src/executors/activity-session.ts +120 -66
- package/src/executors/captured-execution.ts +61 -0
- package/src/executors/child-final.ts +190 -0
- package/src/executors/executor.ts +14 -1
- package/src/executors/owned-worker.ts +322 -0
- package/src/executors/worker-artifact.ts +2 -0
- package/src/governance/approval-prompt.ts +18 -8
- package/src/governance/captured-worker-record.ts +138 -0
- package/src/governance/lease-record.ts +21 -2
- package/src/governance/ledger-events.ts +5 -5
- package/src/governance/ledger-v3-validation.ts +1 -1
- package/src/governance/workspace-acceptance.ts +20 -4
- package/src/governance/workspace-lease.ts +59 -1
- package/src/kernel/authority-text.ts +17 -0
- package/src/kernel/bounded-read-failures.ts +42 -0
- package/src/kernel/bounded-read-sync.ts +87 -0
- package/src/kernel/bounded-read.ts +128 -11
- package/src/kernel/capacity.ts +123 -0
- package/src/kernel/captured-worker-contract.ts +29 -0
- package/src/kernel/catalog.ts +45 -16
- package/src/kernel/chain.ts +1 -0
- package/src/kernel/definitions.ts +11 -2
- package/src/kernel/fanout.ts +17 -32
- package/src/kernel/grant-env.ts +0 -3
- package/src/kernel/model-preflight.ts +29 -0
- package/src/kernel/selected-definitions.ts +156 -0
- package/src/kernel/skill-packages.ts +40 -38
- package/src/kernel/skill-resources.ts +8 -9
- package/src/kernel/workspace.ts +12 -5
- package/src/products/dashboard-cli.ts +1 -1
- package/src/products/dashboard-render.ts +6 -2
- package/src/products/dashboard-session-client.ts +1 -2
- package/src/products/episode-report.ts +80 -17
- package/dist/advisors/advisor.d.ts +0 -90
- package/dist/advisors/advisor.d.ts.map +0 -1
- package/dist/advisors/advisor.js +0 -154
- package/dist/advisors/advisor.js.map +0 -1
- package/dist/advisors/decider.d.ts +0 -88
- package/dist/advisors/decider.d.ts.map +0 -1
- package/dist/advisors/decider.js +0 -29
- package/dist/advisors/decider.js.map +0 -1
- package/dist/advisors/jev.d.ts +0 -41
- package/dist/advisors/jev.d.ts.map +0 -1
- package/dist/advisors/jev.js +0 -139
- package/dist/advisors/jev.js.map +0 -1
- package/dist/advisors/settings.d.ts +0 -49
- package/dist/advisors/settings.d.ts.map +0 -1
- package/dist/advisors/settings.js +0 -99
- package/dist/advisors/settings.js.map +0 -1
- package/dist/governance/episode-cost-gate.d.ts +0 -31
- package/dist/governance/episode-cost-gate.d.ts.map +0 -1
- package/dist/governance/episode-cost-gate.js +0 -112
- package/dist/governance/episode-cost-gate.js.map +0 -1
- package/extensions/advisor-session.ts +0 -67
- package/extensions/effort-advice.ts +0 -112
- package/extensions/pruning-advice.ts +0 -133
- package/src/advisors/advisor.ts +0 -246
- package/src/advisors/decider.ts +0 -74
- package/src/advisors/jev.ts +0 -163
- package/src/advisors/settings.ts +0 -115
- package/src/governance/episode-cost-gate.ts +0 -128
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
/** Per-episode cost threshold state shared by every child started by one session. */
|
|
2
|
-
import { readFile } from "node:fs/promises";
|
|
3
|
-
import { readRecords } from "./record.ts";
|
|
4
|
-
|
|
5
|
-
export const DEFAULT_EPISODE_COST_CEILING = 5;
|
|
6
|
-
|
|
7
|
-
export type EpisodeCostGateAnswer =
|
|
8
|
-
| { cost: number; ceiling: number; outcome: "continued"; newCeiling: number }
|
|
9
|
-
| { cost: number; ceiling: number; outcome: "stopped" };
|
|
10
|
-
|
|
11
|
-
export interface EpisodeCostGateHooks {
|
|
12
|
-
warn(message: string): void;
|
|
13
|
-
pause?(): Promise<unknown> | unknown;
|
|
14
|
-
ask?(): Promise<number | null>;
|
|
15
|
-
resume?(): Promise<unknown> | unknown;
|
|
16
|
-
stop?(): Promise<unknown> | unknown;
|
|
17
|
-
gate(event: EpisodeCostGateAnswer): Promise<unknown> | unknown;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export function episodeCostCeilingFromSettings(value: unknown): number {
|
|
21
|
-
if (!value || typeof value !== "object" || Array.isArray(value)) return DEFAULT_EPISODE_COST_CEILING;
|
|
22
|
-
const ceiling = (value as Record<string, unknown>).episodeCostCeiling;
|
|
23
|
-
return typeof ceiling === "number" && Number.isFinite(ceiling) && ceiling > 0
|
|
24
|
-
? ceiling
|
|
25
|
-
: DEFAULT_EPISODE_COST_CEILING;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export class EpisodeCostGate {
|
|
29
|
-
#ceiling: number;
|
|
30
|
-
#costs = new Map<string, number>();
|
|
31
|
-
#warned = false;
|
|
32
|
-
#usageWarning = false;
|
|
33
|
-
#decision?: Promise<"continue" | "stop">;
|
|
34
|
-
|
|
35
|
-
constructor(ceiling: number) {
|
|
36
|
-
this.#ceiling = ceiling;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
get ceiling(): number {
|
|
40
|
-
return this.#ceiling;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
get cost(): number {
|
|
44
|
-
return [...this.#costs.values()].reduce((sum, value) => sum + value, 0);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
setCeiling(ceiling: number): void {
|
|
48
|
-
if (Number.isFinite(ceiling) && ceiling > 0 && !this.#decision) this.#ceiling = ceiling;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
seedCost(executionId: string, cost: number): void {
|
|
52
|
-
if (Number.isFinite(cost) && cost >= 0) this.#costs.set(executionId, cost);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
async observe(
|
|
56
|
-
executionId: string,
|
|
57
|
-
cost: number | undefined,
|
|
58
|
-
terminal: boolean,
|
|
59
|
-
hooks: EpisodeCostGateHooks,
|
|
60
|
-
): Promise<"continue" | "stop"> {
|
|
61
|
-
if (cost === undefined) {
|
|
62
|
-
if (terminal && !this.#usageWarning) {
|
|
63
|
-
this.#usageWarning = true;
|
|
64
|
-
hooks.warn("pi-daddy: provider reported no token usage; the episode cost gate cannot fire");
|
|
65
|
-
}
|
|
66
|
-
return "continue";
|
|
67
|
-
}
|
|
68
|
-
this.#costs.set(executionId, cost);
|
|
69
|
-
const total = [...this.#costs.values()].reduce((sum, value) => sum + value, 0);
|
|
70
|
-
if (!this.#warned && total >= this.#ceiling / 2) {
|
|
71
|
-
this.#warned = true;
|
|
72
|
-
hooks.warn(`pi-daddy: episode cost reached 50% of the $${this.#ceiling} ceiling`);
|
|
73
|
-
}
|
|
74
|
-
if (total <= this.#ceiling) return "continue";
|
|
75
|
-
if (this.#decision) {
|
|
76
|
-
const decision = await this.#decision;
|
|
77
|
-
if (decision === "stop") await hooks.stop?.();
|
|
78
|
-
return decision;
|
|
79
|
-
}
|
|
80
|
-
this.#decision = this.#decide(total, hooks);
|
|
81
|
-
return this.#decision;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
async #decide(cost: number, hooks: EpisodeCostGateHooks): Promise<"continue" | "stop"> {
|
|
85
|
-
await hooks.pause?.();
|
|
86
|
-
const answer = await hooks.ask?.();
|
|
87
|
-
if (answer !== undefined && answer !== null && Number.isFinite(answer) && answer > cost) {
|
|
88
|
-
const prior = this.#ceiling;
|
|
89
|
-
this.#ceiling = answer;
|
|
90
|
-
try {
|
|
91
|
-
await hooks.gate({ cost, ceiling: prior, outcome: "continued", newCeiling: answer });
|
|
92
|
-
} catch (error) {
|
|
93
|
-
await hooks.stop?.();
|
|
94
|
-
throw error;
|
|
95
|
-
}
|
|
96
|
-
await hooks.resume?.();
|
|
97
|
-
return "continue";
|
|
98
|
-
}
|
|
99
|
-
try {
|
|
100
|
-
await hooks.gate({ cost, ceiling: this.#ceiling, outcome: "stopped" });
|
|
101
|
-
} finally {
|
|
102
|
-
await hooks.stop?.();
|
|
103
|
-
}
|
|
104
|
-
return "stop";
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
export async function loadEpisodeCosts(path: string, episodeId: string): Promise<Map<string, number>> {
|
|
109
|
-
try {
|
|
110
|
-
const parsed = readRecords(await readFile(path, "utf8"));
|
|
111
|
-
if (parsed.damage) return new Map();
|
|
112
|
-
const costs = new Map<string, number>();
|
|
113
|
-
for (const record of parsed.records) {
|
|
114
|
-
const body = record.body as Record<string, unknown>;
|
|
115
|
-
if (body?.event !== "child_lifecycle" || body.episodeId !== episodeId) continue;
|
|
116
|
-
if (body.state !== "completed" && body.state !== "failed") continue;
|
|
117
|
-
const usage = body.usage as { cost?: { total?: unknown } } | undefined;
|
|
118
|
-
const cost = usage?.cost?.total;
|
|
119
|
-
if (typeof body.executionId === "string" && typeof cost === "number" && Number.isFinite(cost) && cost >= 0) {
|
|
120
|
-
costs.set(body.executionId, cost);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
return costs;
|
|
124
|
-
} catch (error) {
|
|
125
|
-
if ((error as NodeJS.ErrnoException).code === "ENOENT") return new Map();
|
|
126
|
-
throw error;
|
|
127
|
-
}
|
|
128
|
-
}
|