pi-daddy 0.41.1 → 0.43.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 +31 -0
- package/contracts/ledger-record/v1/fixtures/capability-decision.json +3 -1
- package/contracts/ledger-record/v1/fixtures/child-lifecycle.json +25 -0
- package/contracts/ledger-record/v1/fixtures/episode-cost-gate.json +14 -0
- package/contracts/ledger-record/v1/fixtures/episode-outcome.json +12 -0
- package/contracts/ledger-record/v1/fixtures/ledger-record.jsonl +6 -3
- package/contracts/ledger-record/v1/fixtures/session-config.json +14 -0
- package/contracts/ledger-record/v1/governance-event.schema.json +356 -0
- package/dist/advisors/advisor.d.ts +24 -1
- package/dist/advisors/advisor.d.ts.map +1 -1
- package/dist/advisors/advisor.js +19 -1
- package/dist/advisors/advisor.js.map +1 -1
- package/dist/advisors/decider.d.ts +11 -0
- package/dist/advisors/decider.d.ts.map +1 -1
- package/dist/advisors/decider.js.map +1 -1
- package/dist/advisors/jev.d.ts.map +1 -1
- package/dist/advisors/jev.js +32 -1
- package/dist/advisors/jev.js.map +1 -1
- package/dist/cli.d.ts +7 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +87 -1
- package/dist/cli.js.map +1 -1
- package/dist/executors/activity-session.d.ts +13 -0
- package/dist/executors/activity-session.d.ts.map +1 -1
- package/dist/executors/activity-session.js +44 -2
- package/dist/executors/activity-session.js.map +1 -1
- package/dist/governance/episode-cost-gate.d.ts +31 -0
- package/dist/governance/episode-cost-gate.d.ts.map +1 -0
- package/dist/governance/episode-cost-gate.js +112 -0
- package/dist/governance/episode-cost-gate.js.map +1 -0
- package/dist/governance/ledger-events.d.ts +108 -1
- package/dist/governance/ledger-events.d.ts.map +1 -1
- package/dist/governance/ledger-events.js +64 -0
- package/dist/governance/ledger-events.js.map +1 -1
- package/dist/governance/ledger-v3-validation.d.ts.map +1 -1
- package/dist/governance/ledger-v3-validation.js +124 -0
- package/dist/governance/ledger-v3-validation.js.map +1 -1
- package/dist/governance/ledger.d.ts +8 -2
- package/dist/governance/ledger.d.ts.map +1 -1
- package/dist/governance/ledger.js +18 -2
- package/dist/governance/ledger.js.map +1 -1
- package/dist/kernel/definitions.d.ts +5 -0
- package/dist/kernel/definitions.d.ts.map +1 -1
- package/dist/kernel/definitions.js +30 -1
- package/dist/kernel/definitions.js.map +1 -1
- package/dist/kernel/delegate-types.d.ts +4 -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 +20 -5
- package/dist/kernel/delegate.js.map +1 -1
- package/dist/kernel/env-names.d.ts +5 -0
- package/dist/kernel/env-names.d.ts.map +1 -1
- package/dist/kernel/env-names.js +9 -0
- package/dist/kernel/env-names.js.map +1 -1
- package/dist/kernel/grant-env.d.ts +2 -0
- package/dist/kernel/grant-env.d.ts.map +1 -1
- package/dist/kernel/grant-env.js +1 -0
- package/dist/kernel/grant-env.js.map +1 -1
- package/dist/kernel/propagation.d.ts +2 -2
- package/dist/kernel/propagation.d.ts.map +1 -1
- package/dist/kernel/propagation.js +7 -2
- package/dist/kernel/propagation.js.map +1 -1
- package/dist/products/dashboard-cli.d.ts +4 -0
- package/dist/products/dashboard-cli.d.ts.map +1 -1
- package/dist/products/dashboard-cli.js +32 -4
- package/dist/products/dashboard-cli.js.map +1 -1
- package/dist/products/dashboard-handshake.d.ts +8 -0
- package/dist/products/dashboard-handshake.d.ts.map +1 -1
- package/dist/products/dashboard-handshake.js +3 -0
- package/dist/products/dashboard-handshake.js.map +1 -1
- package/dist/products/dashboard-herdr.d.ts +4 -0
- package/dist/products/dashboard-herdr.d.ts.map +1 -1
- package/dist/products/dashboard-herdr.js +10 -2
- package/dist/products/dashboard-herdr.js.map +1 -1
- package/dist/products/dashboard-projection.d.ts.map +1 -1
- package/dist/products/dashboard-projection.js +13 -6
- package/dist/products/dashboard-projection.js.map +1 -1
- package/dist/products/dashboard-render.d.ts +10 -0
- package/dist/products/dashboard-render.d.ts.map +1 -1
- package/dist/products/dashboard-render.js +9 -0
- package/dist/products/dashboard-render.js.map +1 -1
- package/dist/products/dashboard-session-client.d.ts +17 -0
- package/dist/products/dashboard-session-client.d.ts.map +1 -0
- package/dist/products/dashboard-session-client.js +28 -0
- package/dist/products/dashboard-session-client.js.map +1 -0
- package/dist/products/episode-outcomes.d.ts +32 -0
- package/dist/products/episode-outcomes.d.ts.map +1 -0
- package/dist/products/episode-outcomes.js +280 -0
- package/dist/products/episode-outcomes.js.map +1 -0
- package/dist/products/episode-report.d.ts +59 -0
- package/dist/products/episode-report.d.ts.map +1 -0
- package/dist/products/episode-report.js +311 -0
- package/dist/products/episode-report.js.map +1 -0
- package/extensions/chain-ledger.ts +2 -0
- package/extensions/chain-plan.ts +4 -2
- package/extensions/dashboard-session-server.ts +86 -0
- package/extensions/definition-runtime.ts +93 -0
- package/extensions/delegate-chain.ts +31 -2
- package/extensions/delegation-ledger.ts +2 -0
- package/extensions/delegation.ts +24 -0
- package/extensions/effort-advice.ts +12 -0
- package/extensions/execute-child.ts +148 -9
- package/extensions/grants-command.ts +32 -2
- package/extensions/grants.ts +23 -1
- package/extensions/pruning-advice.ts +3 -1
- package/extensions/run-delegation.ts +54 -6
- package/extensions/session-model-prompt.ts +179 -0
- package/extensions/session.ts +104 -3
- package/package.json +1 -1
- package/src/advisors/advisor.ts +45 -2
- package/src/advisors/decider.ts +8 -0
- package/src/advisors/jev.ts +34 -1
- package/src/cli.ts +90 -2
- package/src/executors/activity-session.ts +56 -2
- package/src/governance/episode-cost-gate.ts +128 -0
- package/src/governance/ledger-events.ts +173 -1
- package/src/governance/ledger-v3-validation.ts +146 -0
- package/src/governance/ledger.ts +29 -1
- package/src/kernel/definitions.ts +32 -1
- package/src/kernel/delegate-types.ts +4 -0
- package/src/kernel/delegate.ts +22 -5
- package/src/kernel/env-names.ts +10 -0
- package/src/kernel/grant-env.ts +3 -0
- package/src/kernel/propagation.ts +7 -0
- package/src/products/dashboard-cli.ts +32 -4
- package/src/products/dashboard-handshake.ts +5 -0
- package/src/products/dashboard-herdr.ts +15 -1
- package/src/products/dashboard-projection.ts +13 -6
- package/src/products/dashboard-render.ts +11 -0
- package/src/products/dashboard-session-client.ts +35 -0
- package/src/products/episode-outcomes.ts +317 -0
- package/src/products/episode-report.ts +372 -0
|
@@ -0,0 +1,112 @@
|
|
|
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.js";
|
|
4
|
+
export const DEFAULT_EPISODE_COST_CEILING = 5;
|
|
5
|
+
export function episodeCostCeilingFromSettings(value) {
|
|
6
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
7
|
+
return DEFAULT_EPISODE_COST_CEILING;
|
|
8
|
+
const ceiling = value.episodeCostCeiling;
|
|
9
|
+
return typeof ceiling === "number" && Number.isFinite(ceiling) && ceiling > 0
|
|
10
|
+
? ceiling
|
|
11
|
+
: DEFAULT_EPISODE_COST_CEILING;
|
|
12
|
+
}
|
|
13
|
+
export class EpisodeCostGate {
|
|
14
|
+
#ceiling;
|
|
15
|
+
#costs = new Map();
|
|
16
|
+
#warned = false;
|
|
17
|
+
#usageWarning = false;
|
|
18
|
+
#decision;
|
|
19
|
+
constructor(ceiling) {
|
|
20
|
+
this.#ceiling = ceiling;
|
|
21
|
+
}
|
|
22
|
+
get ceiling() {
|
|
23
|
+
return this.#ceiling;
|
|
24
|
+
}
|
|
25
|
+
get cost() {
|
|
26
|
+
return [...this.#costs.values()].reduce((sum, value) => sum + value, 0);
|
|
27
|
+
}
|
|
28
|
+
setCeiling(ceiling) {
|
|
29
|
+
if (Number.isFinite(ceiling) && ceiling > 0 && !this.#decision)
|
|
30
|
+
this.#ceiling = ceiling;
|
|
31
|
+
}
|
|
32
|
+
seedCost(executionId, cost) {
|
|
33
|
+
if (Number.isFinite(cost) && cost >= 0)
|
|
34
|
+
this.#costs.set(executionId, cost);
|
|
35
|
+
}
|
|
36
|
+
async observe(executionId, cost, terminal, hooks) {
|
|
37
|
+
if (cost === undefined) {
|
|
38
|
+
if (terminal && !this.#usageWarning) {
|
|
39
|
+
this.#usageWarning = true;
|
|
40
|
+
hooks.warn("pi-daddy: provider reported no token usage; the episode cost gate cannot fire");
|
|
41
|
+
}
|
|
42
|
+
return "continue";
|
|
43
|
+
}
|
|
44
|
+
this.#costs.set(executionId, cost);
|
|
45
|
+
const total = [...this.#costs.values()].reduce((sum, value) => sum + value, 0);
|
|
46
|
+
if (!this.#warned && total >= this.#ceiling / 2) {
|
|
47
|
+
this.#warned = true;
|
|
48
|
+
hooks.warn(`pi-daddy: episode cost reached 50% of the $${this.#ceiling} ceiling`);
|
|
49
|
+
}
|
|
50
|
+
if (total <= this.#ceiling)
|
|
51
|
+
return "continue";
|
|
52
|
+
if (this.#decision) {
|
|
53
|
+
const decision = await this.#decision;
|
|
54
|
+
if (decision === "stop")
|
|
55
|
+
await hooks.stop?.();
|
|
56
|
+
return decision;
|
|
57
|
+
}
|
|
58
|
+
this.#decision = this.#decide(total, hooks);
|
|
59
|
+
return this.#decision;
|
|
60
|
+
}
|
|
61
|
+
async #decide(cost, hooks) {
|
|
62
|
+
await hooks.pause?.();
|
|
63
|
+
const answer = await hooks.ask?.();
|
|
64
|
+
if (answer !== undefined && answer !== null && Number.isFinite(answer) && answer > cost) {
|
|
65
|
+
const prior = this.#ceiling;
|
|
66
|
+
this.#ceiling = answer;
|
|
67
|
+
try {
|
|
68
|
+
await hooks.gate({ cost, ceiling: prior, outcome: "continued", newCeiling: answer });
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
await hooks.stop?.();
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
await hooks.resume?.();
|
|
75
|
+
return "continue";
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
await hooks.gate({ cost, ceiling: this.#ceiling, outcome: "stopped" });
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
await hooks.stop?.();
|
|
82
|
+
}
|
|
83
|
+
return "stop";
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export async function loadEpisodeCosts(path, episodeId) {
|
|
87
|
+
try {
|
|
88
|
+
const parsed = readRecords(await readFile(path, "utf8"));
|
|
89
|
+
if (parsed.damage)
|
|
90
|
+
return new Map();
|
|
91
|
+
const costs = new Map();
|
|
92
|
+
for (const record of parsed.records) {
|
|
93
|
+
const body = record.body;
|
|
94
|
+
if (body?.event !== "child_lifecycle" || body.episodeId !== episodeId)
|
|
95
|
+
continue;
|
|
96
|
+
if (body.state !== "completed" && body.state !== "failed")
|
|
97
|
+
continue;
|
|
98
|
+
const usage = body.usage;
|
|
99
|
+
const cost = usage?.cost?.total;
|
|
100
|
+
if (typeof body.executionId === "string" && typeof cost === "number" && Number.isFinite(cost) && cost >= 0) {
|
|
101
|
+
costs.set(body.executionId, cost);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return costs;
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
if (error.code === "ENOENT")
|
|
108
|
+
return new Map();
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=episode-cost-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"episode-cost-gate.js","sourceRoot":"","sources":["../../src/governance/episode-cost-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,13 @@ export type ChildLifecycleState = (typeof CHILD_LIFECYCLE_STATES)[number];
|
|
|
17
17
|
/** The complete Node signal vocabulary accepted by a v3 child-lifecycle event. */
|
|
18
18
|
export declare const CHILD_PROCESS_SIGNALS: readonly ["SIGABRT", "SIGALRM", "SIGBUS", "SIGCHLD", "SIGCONT", "SIGFPE", "SIGHUP", "SIGILL", "SIGINT", "SIGIO", "SIGIOT", "SIGKILL", "SIGPIPE", "SIGPOLL", "SIGPROF", "SIGPWR", "SIGQUIT", "SIGSEGV", "SIGSTKFLT", "SIGSTOP", "SIGSYS", "SIGTERM", "SIGTRAP", "SIGTSTP", "SIGTTIN", "SIGTTOU", "SIGUNUSED", "SIGURG", "SIGUSR1", "SIGUSR2", "SIGVTALRM", "SIGWINCH", "SIGXCPU", "SIGXFSZ", "SIGBREAK", "SIGLOST", "SIGINFO"];
|
|
19
19
|
export type ChildProcessSignal = (typeof CHILD_PROCESS_SIGNALS)[number];
|
|
20
|
+
export interface ChildTokenDetail {
|
|
21
|
+
inputTokens: number | null;
|
|
22
|
+
outputTokens: number | null;
|
|
23
|
+
cacheReadTokens: number | null;
|
|
24
|
+
cacheWriteTokens: number | null;
|
|
25
|
+
reasoningTokens: number | null;
|
|
26
|
+
}
|
|
20
27
|
export interface ChildUsageTotals {
|
|
21
28
|
input: number;
|
|
22
29
|
output: number;
|
|
@@ -81,10 +88,32 @@ export interface ChildLifecycleEvent extends LedgerEventBase {
|
|
|
81
88
|
reason?: string;
|
|
82
89
|
/** The inactivity bound (ms) that governed this child beside the `deadlineAt` ceiling (PR 3e). */
|
|
83
90
|
idleTimeoutMs?: number;
|
|
91
|
+
/** The provider/model selected for the child, confirmed from its persisted assistant message when available. */
|
|
92
|
+
resolvedModel?: {
|
|
93
|
+
provider: string;
|
|
94
|
+
modelId: string;
|
|
95
|
+
} | null;
|
|
96
|
+
modelSource?: "explicit" | "session" | "definition" | "global" | "pi";
|
|
97
|
+
/** The persisted effective level and its selection source, when pi reports one. */
|
|
98
|
+
thinkingLevel?: {
|
|
99
|
+
level: string;
|
|
100
|
+
source: "explicit" | "session" | "advisor" | "definition" | "global" | "pi";
|
|
101
|
+
} | null;
|
|
102
|
+
thinkingSource?: "explicit" | "session" | "advisor" | "definition" | "global" | "pi";
|
|
103
|
+
/** Provider-reported token dimensions; zero is normalised to null rather than invented as reported usage. */
|
|
104
|
+
tokenDetail?: ChildTokenDetail;
|
|
84
105
|
/** Aggregate model usage read from the child's pi session file after it stopped. */
|
|
85
106
|
usage?: ChildUsageTotals;
|
|
107
|
+
/** Number of compaction entries in the child's current turn, when the session file was readable. */
|
|
108
|
+
compactionCount?: number;
|
|
86
109
|
/** Why totals could not be read; a fixed code, never transcript content. */
|
|
87
110
|
usageUnavailable?: "session-missing" | "session-invalid" | "usage-missing";
|
|
111
|
+
/** Child-facing identity variables exported at the process boundary. */
|
|
112
|
+
exportedEnvironment?: string[];
|
|
113
|
+
/** SHA-256 of the complete SKILL.md used by this child. */
|
|
114
|
+
definitionHash?: string;
|
|
115
|
+
/** Installed package version exposed for the definition, when available. */
|
|
116
|
+
definitionPackageVersion?: string;
|
|
88
117
|
}
|
|
89
118
|
export type CapabilityDecisionEvent = GrantRecord & {
|
|
90
119
|
ledgerVersion: typeof LEDGER_VERSION;
|
|
@@ -93,7 +122,73 @@ export type CapabilityDecisionEvent = GrantRecord & {
|
|
|
93
122
|
parentExecutionId: string | null;
|
|
94
123
|
taskDigest: string;
|
|
95
124
|
};
|
|
96
|
-
export
|
|
125
|
+
export interface EpisodeOutcomeEvent extends Omit<LedgerEventBase, "correlation"> {
|
|
126
|
+
ledgerVersion: typeof LEDGER_VERSION;
|
|
127
|
+
event: "episode_outcome";
|
|
128
|
+
episodeId: string;
|
|
129
|
+
commit: string;
|
|
130
|
+
survived: boolean;
|
|
131
|
+
ci: "green" | "red" | "none";
|
|
132
|
+
amended: boolean;
|
|
133
|
+
corrected: boolean;
|
|
134
|
+
label: "positive" | "negative" | "unknown";
|
|
135
|
+
}
|
|
136
|
+
export interface EpisodeCostGateEvent extends Omit<LedgerEventBase, "episodeId" | "correlation"> {
|
|
137
|
+
ledgerVersion: typeof LEDGER_VERSION;
|
|
138
|
+
event: "cost_gate";
|
|
139
|
+
episodeId: string;
|
|
140
|
+
executionId: string;
|
|
141
|
+
parentExecutionId: string | null;
|
|
142
|
+
childId: string;
|
|
143
|
+
gate: "episode_cost";
|
|
144
|
+
cost: number;
|
|
145
|
+
ceiling: number;
|
|
146
|
+
outcome: "continued" | "stopped";
|
|
147
|
+
newCeiling?: number;
|
|
148
|
+
}
|
|
149
|
+
export interface SessionConfigEvent extends Omit<LedgerEventBase, "correlation"> {
|
|
150
|
+
ledgerVersion: typeof LEDGER_VERSION;
|
|
151
|
+
event: "session_config";
|
|
152
|
+
episodeId: string;
|
|
153
|
+
outcome: "kept" | "changed";
|
|
154
|
+
trigger: "first-delegation" | "grants-models";
|
|
155
|
+
overrides: Record<string, {
|
|
156
|
+
model: string;
|
|
157
|
+
thinking: string;
|
|
158
|
+
}>;
|
|
159
|
+
}
|
|
160
|
+
export type RuntimeLedgerEvent = CapabilityDecisionEvent | WorkspaceLeaseEvent | ChildLifecycleEvent | EpisodeCostGateEvent | SessionConfigEvent | EpisodeOutcomeEvent;
|
|
161
|
+
export declare function buildSessionConfigEvent(args: {
|
|
162
|
+
episodeId: string;
|
|
163
|
+
outcome: "kept" | "changed";
|
|
164
|
+
trigger: "first-delegation" | "grants-models";
|
|
165
|
+
overrides: ReadonlyMap<string, {
|
|
166
|
+
model?: string;
|
|
167
|
+
thinking?: string;
|
|
168
|
+
}>;
|
|
169
|
+
now: Date;
|
|
170
|
+
}): SessionConfigEvent;
|
|
171
|
+
export declare function buildEpisodeOutcomeEvent(args: {
|
|
172
|
+
episodeId: string;
|
|
173
|
+
commit: string;
|
|
174
|
+
survived: boolean;
|
|
175
|
+
ci: "green" | "red" | "none";
|
|
176
|
+
amended: boolean;
|
|
177
|
+
corrected: boolean;
|
|
178
|
+
label: "positive" | "negative" | "unknown";
|
|
179
|
+
now: Date;
|
|
180
|
+
}): EpisodeOutcomeEvent;
|
|
181
|
+
export declare function buildEpisodeCostGateEvent(args: {
|
|
182
|
+
episodeId: string;
|
|
183
|
+
executionId: string;
|
|
184
|
+
parentExecutionId: string | null;
|
|
185
|
+
childId: string;
|
|
186
|
+
cost: number;
|
|
187
|
+
ceiling: number;
|
|
188
|
+
outcome: "continued" | "stopped";
|
|
189
|
+
newCeiling?: number;
|
|
190
|
+
now: Date;
|
|
191
|
+
}): EpisodeCostGateEvent;
|
|
97
192
|
export declare function buildWorkspaceLeaseEvent(args: {
|
|
98
193
|
episodeId?: string;
|
|
99
194
|
executionId: string;
|
|
@@ -126,8 +221,20 @@ export declare function buildChildLifecycleEvent(args: {
|
|
|
126
221
|
aborted?: boolean;
|
|
127
222
|
truncated?: boolean;
|
|
128
223
|
reason?: string;
|
|
224
|
+
resolvedModel?: {
|
|
225
|
+
provider: string;
|
|
226
|
+
modelId: string;
|
|
227
|
+
};
|
|
228
|
+
modelSource?: "explicit" | "session" | "definition" | "global" | "pi";
|
|
229
|
+
effectiveThinkingLevel?: string;
|
|
230
|
+
thinkingSource?: "explicit" | "session" | "advisor" | "definition" | "global" | "pi";
|
|
231
|
+
tokenDetail?: ChildTokenDetail;
|
|
129
232
|
usage?: ChildUsageTotals;
|
|
233
|
+
compactionCount?: number;
|
|
130
234
|
usageUnavailable?: "session-missing" | "session-invalid" | "usage-missing";
|
|
235
|
+
exportedEnvironment?: readonly string[];
|
|
236
|
+
definitionHash?: string;
|
|
237
|
+
definitionPackageVersion?: string;
|
|
131
238
|
correlation?: CorrelationMetadata;
|
|
132
239
|
now: Date;
|
|
133
240
|
}): ChildLifecycleEvent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger-events.d.ts","sourceRoot":"","sources":["../../src/governance/ledger-events.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ledger-events.d.ts","sourceRoot":"","sources":["../../src/governance/ledger-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -73,6 +73,48 @@ export const WORKSPACE_LEASE_OUTCOMES = [
|
|
|
73
73
|
"timeout",
|
|
74
74
|
"recovered",
|
|
75
75
|
];
|
|
76
|
+
export function buildSessionConfigEvent(args) {
|
|
77
|
+
return assertLedgerV3Wire({
|
|
78
|
+
ledgerVersion: LEDGER_VERSION,
|
|
79
|
+
event: "session_config",
|
|
80
|
+
ts: args.now.toISOString(),
|
|
81
|
+
episodeId: args.episodeId,
|
|
82
|
+
outcome: args.outcome,
|
|
83
|
+
trigger: args.trigger,
|
|
84
|
+
overrides: Object.fromEntries([...args.overrides].map(([name, value]) => [name, { model: value.model, thinking: value.thinking }])),
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
export function buildEpisodeOutcomeEvent(args) {
|
|
88
|
+
return assertLedgerV3Wire({
|
|
89
|
+
ledgerVersion: LEDGER_VERSION,
|
|
90
|
+
event: "episode_outcome",
|
|
91
|
+
ts: args.now.toISOString(),
|
|
92
|
+
episodeId: args.episodeId,
|
|
93
|
+
commit: args.commit,
|
|
94
|
+
survived: args.survived,
|
|
95
|
+
ci: args.ci,
|
|
96
|
+
amended: args.amended,
|
|
97
|
+
corrected: args.corrected,
|
|
98
|
+
label: args.label,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
export function buildEpisodeCostGateEvent(args) {
|
|
102
|
+
assertEventIdentity(args);
|
|
103
|
+
return assertLedgerV3Wire({
|
|
104
|
+
ledgerVersion: LEDGER_VERSION,
|
|
105
|
+
event: "cost_gate",
|
|
106
|
+
ts: args.now.toISOString(),
|
|
107
|
+
episodeId: args.episodeId,
|
|
108
|
+
executionId: args.executionId,
|
|
109
|
+
parentExecutionId: args.parentExecutionId,
|
|
110
|
+
childId: args.childId,
|
|
111
|
+
gate: "episode_cost",
|
|
112
|
+
cost: args.cost,
|
|
113
|
+
ceiling: args.ceiling,
|
|
114
|
+
outcome: args.outcome,
|
|
115
|
+
...(args.newCeiling !== undefined ? { newCeiling: args.newCeiling } : {}),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
76
118
|
export function buildWorkspaceLeaseEvent(args) {
|
|
77
119
|
assertEventIdentity(args);
|
|
78
120
|
return assertLedgerV3Wire({
|
|
@@ -99,6 +141,9 @@ export function buildWorkspaceLeaseEvent(args) {
|
|
|
99
141
|
}
|
|
100
142
|
export function buildChildLifecycleEvent(args) {
|
|
101
143
|
assertEventIdentity(args);
|
|
144
|
+
if (args.definitionHash && !/^[a-f0-9]{64}$/i.test(args.definitionHash)) {
|
|
145
|
+
throw new TypeError("definitionHash must be a SHA-256 hex digest");
|
|
146
|
+
}
|
|
102
147
|
return assertLedgerV3Wire({
|
|
103
148
|
ledgerVersion: LEDGER_VERSION,
|
|
104
149
|
event: "child_lifecycle",
|
|
@@ -119,8 +164,27 @@ export function buildChildLifecycleEvent(args) {
|
|
|
119
164
|
...(args.aborted ? { aborted: true } : {}),
|
|
120
165
|
...(args.truncated ? { truncated: true } : {}),
|
|
121
166
|
...(args.reason ? { reason: args.reason } : {}),
|
|
167
|
+
resolvedModel: args.resolvedModel ? structuredClone(args.resolvedModel) : null,
|
|
168
|
+
...(args.modelSource ? { modelSource: args.modelSource } : {}),
|
|
169
|
+
thinkingLevel: args.effectiveThinkingLevel && args.thinkingSource
|
|
170
|
+
? { level: args.effectiveThinkingLevel, source: args.thinkingSource }
|
|
171
|
+
: null,
|
|
172
|
+
...(args.thinkingSource ? { thinkingSource: args.thinkingSource } : {}),
|
|
173
|
+
tokenDetail: args.tokenDetail
|
|
174
|
+
? structuredClone(args.tokenDetail)
|
|
175
|
+
: {
|
|
176
|
+
inputTokens: null,
|
|
177
|
+
outputTokens: null,
|
|
178
|
+
cacheReadTokens: null,
|
|
179
|
+
cacheWriteTokens: null,
|
|
180
|
+
reasoningTokens: null,
|
|
181
|
+
},
|
|
122
182
|
...(args.usage ? { usage: structuredClone(args.usage) } : {}),
|
|
183
|
+
...(args.compactionCount !== undefined ? { compactionCount: args.compactionCount } : {}),
|
|
123
184
|
...(args.usageUnavailable ? { usageUnavailable: args.usageUnavailable } : {}),
|
|
185
|
+
...(args.exportedEnvironment ? { exportedEnvironment: [...args.exportedEnvironment] } : {}),
|
|
186
|
+
...(args.definitionHash ? { definitionHash: args.definitionHash } : {}),
|
|
187
|
+
...(args.definitionPackageVersion ? { definitionPackageVersion: args.definitionPackageVersion } : {}),
|
|
124
188
|
...(args.correlation ? { correlation: structuredClone(args.correlation) } : {}),
|
|
125
189
|
});
|
|
126
190
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger-events.js","sourceRoot":"","sources":["../../src/governance/ledger-events.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,cAAc,EAA0C,MAAM,aAAa,CAAC;AAIrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAU,CAAC;AAG7D,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAU,CAAC;AAG3E,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAU,CAAC;AAG9F,kFAAkF;AAClF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,SAAS;IACT,SAAS;IACT,QAAQ;IACR,SAAS;IACT,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,QAAQ;IACR,SAAS;IACT,SAAS;IACT,WAAW;IACX,SAAS;IACT,QAAQ;IACR,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,WAAW;IACX,QAAQ;IACR,SAAS;IACT,SAAS;IACT,WAAW;IACX,UAAU;IACV,SAAS;IACT,SAAS;IACT,UAAU;IACV,SAAS;IACT,SAAS;CACmC,CAAC;
|
|
1
|
+
{"version":3,"file":"ledger-events.js","sourceRoot":"","sources":["../../src/governance/ledger-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger-v3-validation.d.ts","sourceRoot":"","sources":["../../src/governance/ledger-v3-validation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ledger-v3-validation.d.ts","sourceRoot":"","sources":["../../src/governance/ledger-v3-validation.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAErD;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,EAAE,WAAW,CAAC,MAAM,CAA+C,CAAC;AAC3G,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAExE;AAkLD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAItE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEhE;AAKD,2GAA2G;AAC3G,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAkB3D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,EAAE,CAE/D;AAsSD,6EAA6E;AAC7E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAgC1E;AAED,mFAAmF;AACnF,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAWhE"}
|
|
@@ -3,6 +3,8 @@ import { isExecutionId } from "../kernel/execution-id.js";
|
|
|
3
3
|
import { isEpisodeId } from "../kernel/episode-id.js";
|
|
4
4
|
import { REFUSAL_CODES } from "../kernel/refusals.js";
|
|
5
5
|
import { isLedgerCapabilityIdentifier, isLedgerDisplayIdentifier } from "../kernel/ledger-identifiers.js";
|
|
6
|
+
import { CHILD_ATTRIBUTION_ENV_KEYS } from "../kernel/env-names.js";
|
|
7
|
+
import { isDefinitionPackageVersion } from "../kernel/definitions.js";
|
|
6
8
|
/**
|
|
7
9
|
* Event kinds that 0.30.0 and earlier wrote and 0.31.0 no longer builds (the check runner and workflow facts were
|
|
8
10
|
* deleted). A ledger is append-only, so a line written then is still a valid line now: readers accept these
|
|
@@ -98,6 +100,8 @@ const FIELDS = {
|
|
|
98
100
|
"humanDenied",
|
|
99
101
|
"gateOutcome",
|
|
100
102
|
"definitionDigest",
|
|
103
|
+
"definitionHash",
|
|
104
|
+
"definitionPackageVersion",
|
|
101
105
|
"handoff",
|
|
102
106
|
"executor",
|
|
103
107
|
"taskFrom",
|
|
@@ -123,6 +127,33 @@ const FIELDS = {
|
|
|
123
127
|
"refusal",
|
|
124
128
|
"correlation",
|
|
125
129
|
]),
|
|
130
|
+
cost_gate: new Set([
|
|
131
|
+
"ledgerVersion",
|
|
132
|
+
"event",
|
|
133
|
+
"ts",
|
|
134
|
+
"episodeId",
|
|
135
|
+
"executionId",
|
|
136
|
+
"parentExecutionId",
|
|
137
|
+
"childId",
|
|
138
|
+
"gate",
|
|
139
|
+
"cost",
|
|
140
|
+
"ceiling",
|
|
141
|
+
"outcome",
|
|
142
|
+
"newCeiling",
|
|
143
|
+
]),
|
|
144
|
+
session_config: new Set(["ledgerVersion", "event", "ts", "episodeId", "outcome", "trigger", "overrides"]),
|
|
145
|
+
episode_outcome: new Set([
|
|
146
|
+
"ledgerVersion",
|
|
147
|
+
"event",
|
|
148
|
+
"ts",
|
|
149
|
+
"episodeId",
|
|
150
|
+
"commit",
|
|
151
|
+
"survived",
|
|
152
|
+
"ci",
|
|
153
|
+
"amended",
|
|
154
|
+
"corrected",
|
|
155
|
+
"label",
|
|
156
|
+
]),
|
|
126
157
|
child_lifecycle: new Set([
|
|
127
158
|
"ledgerVersion",
|
|
128
159
|
"event",
|
|
@@ -141,8 +172,17 @@ const FIELDS = {
|
|
|
141
172
|
"reason",
|
|
142
173
|
"deadlineAt",
|
|
143
174
|
"idleTimeoutMs",
|
|
175
|
+
"resolvedModel",
|
|
176
|
+
"modelSource",
|
|
177
|
+
"thinkingLevel",
|
|
178
|
+
"thinkingSource",
|
|
179
|
+
"tokenDetail",
|
|
144
180
|
"usage",
|
|
181
|
+
"compactionCount",
|
|
145
182
|
"usageUnavailable",
|
|
183
|
+
"exportedEnvironment",
|
|
184
|
+
"definitionHash",
|
|
185
|
+
"definitionPackageVersion",
|
|
146
186
|
"herdrPaneId",
|
|
147
187
|
"herdrAgentName",
|
|
148
188
|
"correlation",
|
|
@@ -269,6 +309,8 @@ function validateCapabilityDecision(event) {
|
|
|
269
309
|
!optional(event, "humanDenied", (value) => value === true) ||
|
|
270
310
|
!optional(event, "gateOutcome", (value) => GATE_OUTCOMES.has(String(value))) ||
|
|
271
311
|
!optional(event, "definitionDigest", validDefinitionDigest) ||
|
|
312
|
+
!optional(event, "definitionHash", (value) => SHA256_RE.test(String(value))) ||
|
|
313
|
+
!optional(event, "definitionPackageVersion", isDefinitionPackageVersion) ||
|
|
272
314
|
!optional(event, "taskFrom", isLedgerDisplayIdentifier) ||
|
|
273
315
|
!optional(event, "taskFromExecutionId", isExecutionId) ||
|
|
274
316
|
!optional(event, "correlation", validCorrelation) ||
|
|
@@ -307,6 +349,62 @@ function validUsage(value) {
|
|
|
307
349
|
return false;
|
|
308
350
|
return ["input", "output", "cacheRead", "cacheWrite", "total"].every((field) => typeof cost[field] === "number" && Number.isFinite(cost[field]) && cost[field] >= 0);
|
|
309
351
|
}
|
|
352
|
+
function validResolvedModel(value) {
|
|
353
|
+
return (value === null ||
|
|
354
|
+
(isLedgerObject(value) &&
|
|
355
|
+
Object.keys(value).every((key) => ["provider", "modelId"].includes(key)) &&
|
|
356
|
+
isNonEmptyString(value.provider) &&
|
|
357
|
+
isNonEmptyString(value.modelId)));
|
|
358
|
+
}
|
|
359
|
+
const MODEL_SOURCES = ["explicit", "session", "definition", "global", "pi"];
|
|
360
|
+
const THINKING_SOURCES = [...MODEL_SOURCES, "advisor"];
|
|
361
|
+
function validThinkingLevel(value) {
|
|
362
|
+
return (value === null ||
|
|
363
|
+
(isLedgerObject(value) &&
|
|
364
|
+
Object.keys(value).every((key) => ["level", "source"].includes(key)) &&
|
|
365
|
+
isNonEmptyString(value.level) &&
|
|
366
|
+
THINKING_SOURCES.includes(String(value.source))));
|
|
367
|
+
}
|
|
368
|
+
function validTokenDetail(value) {
|
|
369
|
+
if (!isLedgerObject(value))
|
|
370
|
+
return false;
|
|
371
|
+
const fields = ["inputTokens", "outputTokens", "cacheReadTokens", "cacheWriteTokens", "reasoningTokens"];
|
|
372
|
+
return (Object.keys(value).length === fields.length &&
|
|
373
|
+
fields.every((field) => value[field] === null || (nonNegativeNumber(value[field]) && value[field] > 0)));
|
|
374
|
+
}
|
|
375
|
+
function validExportedEnvironment(value) {
|
|
376
|
+
return (Array.isArray(value) &&
|
|
377
|
+
value.length === CHILD_ATTRIBUTION_ENV_KEYS.length &&
|
|
378
|
+
CHILD_ATTRIBUTION_ENV_KEYS.every((name) => value.filter((entry) => entry === name).length === 1));
|
|
379
|
+
}
|
|
380
|
+
function validateCostGate(event) {
|
|
381
|
+
if (event.gate !== "episode_cost" ||
|
|
382
|
+
!nonNegativeNumber(event.cost) ||
|
|
383
|
+
!nonNegativeNumber(event.ceiling) ||
|
|
384
|
+
event.ceiling <= 0 ||
|
|
385
|
+
!["continued", "stopped"].includes(String(event.outcome))) {
|
|
386
|
+
return "cost gate required fields are invalid";
|
|
387
|
+
}
|
|
388
|
+
if (!optional(event, "newCeiling", (value) => nonNegativeNumber(value) && value > event.cost)) {
|
|
389
|
+
return "cost gate new ceiling is invalid";
|
|
390
|
+
}
|
|
391
|
+
if ((event.outcome === "continued") !== Object.hasOwn(event, "newCeiling")) {
|
|
392
|
+
return "continued cost gate requires exactly one new ceiling";
|
|
393
|
+
}
|
|
394
|
+
return null;
|
|
395
|
+
}
|
|
396
|
+
function validateEpisodeOutcome(event) {
|
|
397
|
+
if (!isTimestamp(event.ts) ||
|
|
398
|
+
!isEpisodeId(event.episodeId) ||
|
|
399
|
+
!/^[a-f0-9]{40}$/i.test(String(event.commit)) ||
|
|
400
|
+
typeof event.survived !== "boolean" ||
|
|
401
|
+
!["green", "red", "none"].includes(String(event.ci)) ||
|
|
402
|
+
typeof event.amended !== "boolean" ||
|
|
403
|
+
typeof event.corrected !== "boolean" ||
|
|
404
|
+
!["positive", "negative", "unknown"].includes(String(event.label)))
|
|
405
|
+
return "episode outcome fields are invalid";
|
|
406
|
+
return null;
|
|
407
|
+
}
|
|
310
408
|
function validateChildLifecycle(event) {
|
|
311
409
|
if (!["starting", "running", "completed", "failed"].includes(String(event.state)) ||
|
|
312
410
|
!EXECUTORS.has(String(event.executor))) {
|
|
@@ -323,8 +421,17 @@ function validateChildLifecycle(event) {
|
|
|
323
421
|
!optional(event, "aborted", (value) => value === true) ||
|
|
324
422
|
!optional(event, "truncated", (value) => value === true) ||
|
|
325
423
|
!optional(event, "reason", (value) => typeof value === "string") ||
|
|
424
|
+
!optional(event, "resolvedModel", validResolvedModel) ||
|
|
425
|
+
!optional(event, "modelSource", (value) => MODEL_SOURCES.includes(String(value))) ||
|
|
426
|
+
!optional(event, "thinkingLevel", validThinkingLevel) ||
|
|
427
|
+
!optional(event, "thinkingSource", (value) => THINKING_SOURCES.includes(String(value))) ||
|
|
428
|
+
!optional(event, "tokenDetail", validTokenDetail) ||
|
|
326
429
|
!optional(event, "usage", validUsage) ||
|
|
430
|
+
!optional(event, "compactionCount", (value) => Number.isInteger(value) && value >= 0) ||
|
|
327
431
|
!optional(event, "usageUnavailable", (value) => ["session-missing", "session-invalid", "usage-missing"].includes(String(value))) ||
|
|
432
|
+
!optional(event, "exportedEnvironment", validExportedEnvironment) ||
|
|
433
|
+
!optional(event, "definitionHash", (value) => SHA256_RE.test(String(value))) ||
|
|
434
|
+
!optional(event, "definitionPackageVersion", isDefinitionPackageVersion) ||
|
|
328
435
|
!optional(event, "correlation", validCorrelation)) {
|
|
329
436
|
return "child lifecycle optional fields are invalid";
|
|
330
437
|
}
|
|
@@ -355,6 +462,21 @@ export function validateLedgerV3Event(event) {
|
|
|
355
462
|
const allowed = FIELDS[kind];
|
|
356
463
|
if (Object.keys(event).some((field) => !allowed.has(field)))
|
|
357
464
|
return "ledger v3 contains an unsupported field";
|
|
465
|
+
if (kind === "session_config") {
|
|
466
|
+
if (!isEpisodeId(event.episodeId) ||
|
|
467
|
+
!["kept", "changed"].includes(String(event.outcome)) ||
|
|
468
|
+
!["first-delegation", "grants-models"].includes(String(event.trigger)) ||
|
|
469
|
+
!isLedgerObject(event.overrides) ||
|
|
470
|
+
!Object.entries(event.overrides).every(([name, value]) => isNonEmptyString(name) &&
|
|
471
|
+
isLedgerObject(value) &&
|
|
472
|
+
Object.keys(value).length === 2 &&
|
|
473
|
+
isNonEmptyString(value.model) &&
|
|
474
|
+
isNonEmptyString(value.thinking)))
|
|
475
|
+
return "session config fields are invalid";
|
|
476
|
+
return null;
|
|
477
|
+
}
|
|
478
|
+
if (kind === "episode_outcome")
|
|
479
|
+
return validateEpisodeOutcome(event);
|
|
358
480
|
const base = validateBase(event);
|
|
359
481
|
if (base)
|
|
360
482
|
return base;
|
|
@@ -362,6 +484,8 @@ export function validateLedgerV3Event(event) {
|
|
|
362
484
|
return validateCapabilityDecision(event);
|
|
363
485
|
if (kind === "workspace_lease")
|
|
364
486
|
return validateWorkspaceLease(event);
|
|
487
|
+
if (kind === "cost_gate")
|
|
488
|
+
return validateCostGate(event);
|
|
365
489
|
return validateChildLifecycle(event);
|
|
366
490
|
}
|
|
367
491
|
/** Ensure a public builder cannot emit bytes the closed v3 reader would reject. */
|