@zelari/core 2.4.0 → 2.6.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/dist/core/AgentHarness.d.ts +27 -0
- package/dist/core/AgentHarness.d.ts.map +1 -1
- package/dist/core/AgentHarness.js +43 -0
- package/dist/core/AgentHarness.js.map +1 -1
- package/dist/mission/budgetContinuation.d.ts +36 -0
- package/dist/mission/budgetContinuation.d.ts.map +1 -0
- package/dist/mission/budgetContinuation.js +66 -0
- package/dist/mission/budgetContinuation.js.map +1 -0
- package/dist/runtime/harnessManifest.d.ts +91 -0
- package/dist/runtime/harnessManifest.d.ts.map +1 -0
- package/dist/runtime/harnessManifest.js +113 -0
- package/dist/runtime/harnessManifest.js.map +1 -0
- package/dist/runtime/index.d.ts +4 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +4 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/profiles.d.ts +7 -0
- package/dist/runtime/profiles.d.ts.map +1 -1
- package/dist/runtime/profiles.js +10 -0
- package/dist/runtime/profiles.js.map +1 -1
- package/dist/runtime/resourceBudget.d.ts +69 -0
- package/dist/runtime/resourceBudget.d.ts.map +1 -0
- package/dist/runtime/resourceBudget.js +98 -0
- package/dist/runtime/resourceBudget.js.map +1 -0
- package/dist/runtime/resourcePolicy.d.ts +56 -0
- package/dist/runtime/resourcePolicy.d.ts.map +1 -0
- package/dist/runtime/resourcePolicy.js +77 -0
- package/dist/runtime/resourcePolicy.js.map +1 -0
- package/dist/session/agentAdapter.d.ts +2 -2
- package/dist/session/agentAdapter.d.ts.map +1 -1
- package/dist/session/agentAdapter.js +10 -2
- package/dist/session/agentAdapter.js.map +1 -1
- package/dist/session/compaction.d.ts +36 -0
- package/dist/session/compaction.d.ts.map +1 -0
- package/dist/session/compaction.js +120 -0
- package/dist/session/compaction.js.map +1 -0
- package/dist/session/compactionState.d.ts +50 -0
- package/dist/session/compactionState.d.ts.map +1 -0
- package/dist/session/compactionState.js +243 -0
- package/dist/session/compactionState.js.map +1 -0
- package/dist/session/index.d.ts +2 -0
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +2 -0
- package/dist/session/index.js.map +1 -1
- package/dist/session/invariants.d.ts +5 -0
- package/dist/session/invariants.d.ts.map +1 -1
- package/dist/session/invariants.js +152 -0
- package/dist/session/invariants.js.map +1 -1
- package/dist/session/modelSurface.d.ts +33 -4
- package/dist/session/modelSurface.d.ts.map +1 -1
- package/dist/session/modelSurface.js +98 -4
- package/dist/session/modelSurface.js.map +1 -1
- package/dist/session/taskContract.d.ts +104 -0
- package/dist/session/taskContract.d.ts.map +1 -0
- package/dist/session/taskContract.js +129 -0
- package/dist/session/taskContract.js.map +1 -0
- package/dist/session/types.d.ts +9 -1
- package/dist/session/types.d.ts.map +1 -1
- package/dist/session/types.js +17 -0
- package/dist/session/types.js.map +1 -1
- package/dist/shared/events.d.ts +27 -0
- package/dist/shared/events.d.ts.map +1 -1
- package/dist/shared/events.js.map +1 -1
- package/dist/verification/index.d.ts +1 -0
- package/dist/verification/index.d.ts.map +1 -1
- package/dist/verification/index.js +1 -0
- package/dist/verification/index.js.map +1 -1
- package/dist/verification/metrics.d.ts +20 -0
- package/dist/verification/metrics.d.ts.map +1 -1
- package/dist/verification/metrics.js +18 -0
- package/dist/verification/metrics.js.map +1 -1
- package/dist/verification/resourceReserveGate.d.ts +39 -0
- package/dist/verification/resourceReserveGate.d.ts.map +1 -0
- package/dist/verification/resourceReserveGate.js +56 -0
- package/dist/verification/resourceReserveGate.js.map +1 -0
- package/package.json +1 -1
|
@@ -97,6 +97,158 @@ export function validateSessionTrace(events, mode = 'minimal') {
|
|
|
97
97
|
message: `session.ended seq ${firstEnded.seq} precedes verification.run seq ${firstVerification.seq}`,
|
|
98
98
|
});
|
|
99
99
|
}
|
|
100
|
+
pushCompactionViolations(events, knownSeq, pairs, violations);
|
|
101
|
+
return violations;
|
|
102
|
+
}
|
|
103
|
+
function pushCompactionViolations(events, knownSeq, pairs, violations) {
|
|
104
|
+
for (const e of events) {
|
|
105
|
+
if (e.kind !== 'session.compacted')
|
|
106
|
+
continue;
|
|
107
|
+
const fromSeq = asSeq(e.data.fromSeq);
|
|
108
|
+
const toSeq = asSeq(e.data.toSeq);
|
|
109
|
+
if (fromSeq === undefined && toSeq === undefined)
|
|
110
|
+
continue;
|
|
111
|
+
if (fromSeq === undefined || toSeq === undefined || fromSeq > toSeq) {
|
|
112
|
+
violations.push({
|
|
113
|
+
code: 'COMPACTION_RANGE_INVALID',
|
|
114
|
+
seq: e.seq,
|
|
115
|
+
message: `session.compacted seq ${e.seq} has invalid fromSeq/toSeq`,
|
|
116
|
+
});
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
if (e.seq <= toSeq) {
|
|
120
|
+
violations.push({
|
|
121
|
+
code: 'COMPACTION_EVENT_INSIDE_RANGE',
|
|
122
|
+
seq: e.seq,
|
|
123
|
+
message: `session.compacted seq ${e.seq} must be > toSeq ${toSeq}`,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
if (!knownSeq.has(fromSeq) || !knownSeq.has(toSeq)) {
|
|
127
|
+
violations.push({
|
|
128
|
+
code: 'COMPACTION_BOUNDARY_SEQ_MISSING',
|
|
129
|
+
seq: e.seq,
|
|
130
|
+
message: `session.compacted seq ${e.seq} range endpoints must exist in the trace`,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
const checkpoint = e.data.checkpoint;
|
|
134
|
+
if (!checkpoint ||
|
|
135
|
+
typeof checkpoint !== 'object' ||
|
|
136
|
+
!['user', 'system'].includes(String(checkpoint.role ?? '')) ||
|
|
137
|
+
typeof checkpoint.content !== 'string') {
|
|
138
|
+
violations.push({
|
|
139
|
+
code: 'COMPACTION_CHECKPOINT_INVALID',
|
|
140
|
+
seq: e.seq,
|
|
141
|
+
message: `session.compacted seq ${e.seq} must carry a user/system checkpoint with string content`,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
const sourceRaw = e.data.sourceEventSeqs;
|
|
145
|
+
if (Array.isArray(sourceRaw)) {
|
|
146
|
+
for (const raw of sourceRaw) {
|
|
147
|
+
const s = asSeq(raw);
|
|
148
|
+
if (s === undefined) {
|
|
149
|
+
violations.push({
|
|
150
|
+
code: 'COMPACTION_SOURCE_SEQ_INVALID',
|
|
151
|
+
seq: e.seq,
|
|
152
|
+
message: 'sourceEventSeqs entries must be positive integers',
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
else if (!knownSeq.has(s)) {
|
|
156
|
+
violations.push({
|
|
157
|
+
code: 'COMPACTION_SOURCE_SEQ_MISSING',
|
|
158
|
+
seq: e.seq,
|
|
159
|
+
message: `sourceEventSeqs ${s} is not an event in this trace`,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
else if (s < fromSeq || s > toSeq) {
|
|
163
|
+
violations.push({
|
|
164
|
+
code: 'COMPACTION_SOURCE_SEQ_OUTSIDE_RANGE',
|
|
165
|
+
seq: e.seq,
|
|
166
|
+
message: `sourceEventSeqs ${s} is outside ${fromSeq}..${toSeq}`,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
for (const pair of pairs) {
|
|
172
|
+
const callSeq = pair.call.seq;
|
|
173
|
+
const callInside = callSeq >= fromSeq && callSeq <= toSeq;
|
|
174
|
+
if (!pair.result) {
|
|
175
|
+
if (callInside) {
|
|
176
|
+
violations.push({
|
|
177
|
+
code: 'COMPACTION_ACTIVE_TOOL_CALL',
|
|
178
|
+
seq: e.seq,
|
|
179
|
+
message: `tool.call seq ${callSeq} is compacted before a result or interruption`,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
const resultSeq = pair.result.seq;
|
|
185
|
+
const resultInside = resultSeq >= fromSeq && resultSeq <= toSeq;
|
|
186
|
+
if (callInside !== resultInside) {
|
|
187
|
+
violations.push({
|
|
188
|
+
code: 'COMPACTION_TOOL_PAIR_SPLIT',
|
|
189
|
+
seq: e.seq,
|
|
190
|
+
message: `tool pair ${callSeq}/${resultSeq} is split by range ${fromSeq}..${toSeq}`,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* 2.6 Track A/B relational invariants: resource events + task contract
|
|
198
|
+
* (doc section 24.1). Standalone so replay/CI can opt in per surface.
|
|
199
|
+
*/
|
|
200
|
+
export function validateResourceAndContractEvents(events) {
|
|
201
|
+
const violations = [];
|
|
202
|
+
let lastToolCallsUsed = -1;
|
|
203
|
+
for (const e of events) {
|
|
204
|
+
if (e.kind === 'resource.snapshot') {
|
|
205
|
+
const used = e.data.toolCallsUsed;
|
|
206
|
+
const remaining = e.data.toolCallsRemaining;
|
|
207
|
+
if (typeof used !== 'number' || typeof remaining !== 'number' || used < 0 || remaining < 0) {
|
|
208
|
+
violations.push({ code: 'RESOURCE_SNAPSHOT_INVALID', seq: e.seq, message: 'snapshot must carry non-negative toolCallsUsed/Remaining' });
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
if (used < lastToolCallsUsed) {
|
|
212
|
+
violations.push({ code: 'RESOURCE_USED_MONOTONIC', seq: e.seq, message: `toolCallsUsed went ${lastToolCallsUsed} -> ${used}` });
|
|
213
|
+
}
|
|
214
|
+
lastToolCallsUsed = used;
|
|
215
|
+
const limit = typeof e.data.toolCallsLimit === 'number' ? e.data.toolCallsLimit : used + remaining;
|
|
216
|
+
if (used + remaining !== limit) {
|
|
217
|
+
violations.push({ code: 'RESOURCE_REMAINING_COHERENT', seq: e.seq, message: `used(${used}) + remaining(${remaining}) != limit(${limit})` });
|
|
218
|
+
}
|
|
219
|
+
for (const key of ['verificationReserve', 'repairReserve']) {
|
|
220
|
+
const v = e.data[key];
|
|
221
|
+
if (typeof v === 'number' && v < 0) {
|
|
222
|
+
violations.push({ code: 'RESERVE_NEGATIVE', seq: e.seq, message: `${key} is negative (${v})` });
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
if (e.kind === 'session.harness_manifest') {
|
|
227
|
+
if (typeof e.data.manifestHash !== 'string' || !e.data.manifest) {
|
|
228
|
+
violations.push({ code: 'MANIFEST_PAYLOAD_INVALID', seq: e.seq, message: 'session.harness_manifest needs {manifest, manifestHash}' });
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
let lastVersion = 0;
|
|
233
|
+
for (const e of events) {
|
|
234
|
+
if (e.kind !== 'task.contract' && e.kind !== 'task.contract_updated')
|
|
235
|
+
continue;
|
|
236
|
+
const contract = e.data.contract;
|
|
237
|
+
const version = contract && typeof contract === 'object' ? contract.version : undefined;
|
|
238
|
+
if (typeof version !== 'number' || version < 1) {
|
|
239
|
+
violations.push({ code: 'TASK_CONTRACT_VERSION_MONOTONIC', seq: e.seq, message: 'contract payload must carry a positive version' });
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
if (version <= lastVersion) {
|
|
243
|
+
violations.push({ code: 'TASK_CONTRACT_VERSION_MONOTONIC', seq: e.seq, message: `version ${version} did not increase past ${lastVersion}` });
|
|
244
|
+
}
|
|
245
|
+
lastVersion = version;
|
|
246
|
+
const source = contract && typeof contract === 'object' ? contract.source : undefined;
|
|
247
|
+
const userSeq = source && typeof source === 'object' ? source.userSeq : undefined;
|
|
248
|
+
if (typeof userSeq !== 'number' || userSeq < 1) {
|
|
249
|
+
violations.push({ code: 'TASK_CONTRACT_SOURCE_INVALID', seq: e.seq, message: 'contract.source.userSeq must be a positive event seq' });
|
|
250
|
+
}
|
|
251
|
+
}
|
|
100
252
|
return violations;
|
|
101
253
|
}
|
|
102
254
|
//# sourceMappingURL=invariants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invariants.js","sourceRoot":"","sources":["../../src/session/invariants.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"invariants.js","sourceRoot":"","sources":["../../src/session/invariants.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,16 +2,29 @@
|
|
|
2
2
|
* session/modelSurface.ts — the ONLY path from session events to model history.
|
|
3
3
|
*
|
|
4
4
|
* `isModelSurfaceEvent` decides what counts as model-visible; `deriveMessages`
|
|
5
|
-
* projects surface events into a provider-neutral message list.
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* projects surface events into a provider-neutral message list. Range-bearing
|
|
6
|
+
* `session.compacted` events replace `[fromSeq, toSeq]` (ledger unchanged).
|
|
7
|
+
* The CLI maps these onto its provider-specific request format — nothing else
|
|
8
|
+
* may invent model-visible history (ADR-0016 invariant: model-visible ⟺ logged).
|
|
9
|
+
*
|
|
10
|
+
* 2.6 (doc §10.2): LATEST-ONLY kinds. `resource.snapshot` is model-surface
|
|
11
|
+
* but only its LAST event projects — earlier snapshots stay in the ledger
|
|
12
|
+
* (state) without flooding the context. Every event kind may opt into this
|
|
13
|
+
* projection; today it is exactly {'resource.snapshot'}.
|
|
8
14
|
*/
|
|
9
15
|
import type { SessionEventEnvelope, SessionEventKind } from './types.js';
|
|
10
16
|
/** Event kinds that (may) feed the model input. Everything else is state. */
|
|
11
17
|
export declare const MODEL_SURFACE_KINDS: ReadonlySet<SessionEventKind>;
|
|
18
|
+
/**
|
|
19
|
+
* Surface kinds projected LATEST-ONLY: the highest-seq event of the kind
|
|
20
|
+
* becomes one system message; earlier ones remain in the log (state).
|
|
21
|
+
*/
|
|
22
|
+
export declare const LATEST_ONLY_SURFACE_KINDS: ReadonlySet<SessionEventKind>;
|
|
12
23
|
export declare function isModelSurfaceEvent(event: {
|
|
13
24
|
kind: string;
|
|
14
25
|
}): boolean;
|
|
26
|
+
/** Highest seq per latest-only kind — the sole event of that kind that projects. */
|
|
27
|
+
export declare function latestSurfaceSeqByKind(events: readonly SessionEventEnvelope[]): Map<SessionEventKind, number>;
|
|
15
28
|
/** Provider-neutral derived message with provenance (source event seq). */
|
|
16
29
|
export interface DerivedMessage {
|
|
17
30
|
role: 'user' | 'assistant' | 'system' | 'tool';
|
|
@@ -22,6 +35,10 @@ export interface DerivedMessage {
|
|
|
22
35
|
isError?: boolean;
|
|
23
36
|
/** Seq of the source envelope — provenance for audit/replay. */
|
|
24
37
|
seq: number;
|
|
38
|
+
/** Closed raw interval represented by a durable compact checkpoint. */
|
|
39
|
+
compactedFromSeq?: number;
|
|
40
|
+
compactedToSeq?: number;
|
|
41
|
+
sourceEventSeqs?: number[];
|
|
25
42
|
}
|
|
26
43
|
export interface DeriveMessagesOptions {
|
|
27
44
|
/**
|
|
@@ -31,7 +48,19 @@ export interface DeriveMessagesOptions {
|
|
|
31
48
|
*/
|
|
32
49
|
includeToolCalls?: boolean;
|
|
33
50
|
}
|
|
34
|
-
/**
|
|
51
|
+
/**
|
|
52
|
+
* Human/model-readable RESOURCE STATUS block (doc §10.3) from a snapshot
|
|
53
|
+
* payload. Pure — used by deriveMessages and by the CLI emitter tests.
|
|
54
|
+
*/
|
|
55
|
+
export declare function formatResourceSnapshot(data: Record<string, unknown>): string;
|
|
56
|
+
/**
|
|
57
|
+
* Project surface events into the neutral model history. Deterministic.
|
|
58
|
+
*
|
|
59
|
+
* Range-bearing `session.compacted` events replace `[fromSeq, toSeq]` with
|
|
60
|
+
* the checkpoint (durable shadowing). Compact events without a range stay
|
|
61
|
+
* additive (legacy `{summary}` append). Latest-only kinds project exactly
|
|
62
|
+
* their last event (see LATEST_ONLY_SURFACE_KINDS).
|
|
63
|
+
*/
|
|
35
64
|
export declare function deriveMessages(events: readonly SessionEventEnvelope[], options?: DeriveMessagesOptions): DerivedMessage[];
|
|
36
65
|
/** A tool call paired with its result (when both exist in the log). */
|
|
37
66
|
export interface ToolCallPair {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modelSurface.d.ts","sourceRoot":"","sources":["../../src/session/modelSurface.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"modelSurface.d.ts","sourceRoot":"","sources":["../../src/session/modelSurface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGzE,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,gBAAgB,CAQ5D,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,WAAW,CAAC,gBAAgB,CAAkC,CAAC;AAEvG,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAEpE;AAED,oFAAoF;AACpF,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,oBAAoB,EAAE,GACtC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAQ/B;AAED,2EAA2E;AAC3E,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gEAAgE;IAChE,GAAG,EAAE,MAAM,CAAC;IACZ,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAUD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAe5E;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,oBAAoB,EAAE,EACvC,OAAO,GAAE,qBAA0B,GAClC,cAAc,EAAE,CAiFlB;AAED,uEAAuE;AACvE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,GAAG,YAAY,EAAE,CAoBrF"}
|
|
@@ -2,10 +2,17 @@
|
|
|
2
2
|
* session/modelSurface.ts — the ONLY path from session events to model history.
|
|
3
3
|
*
|
|
4
4
|
* `isModelSurfaceEvent` decides what counts as model-visible; `deriveMessages`
|
|
5
|
-
* projects surface events into a provider-neutral message list.
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* projects surface events into a provider-neutral message list. Range-bearing
|
|
6
|
+
* `session.compacted` events replace `[fromSeq, toSeq]` (ledger unchanged).
|
|
7
|
+
* The CLI maps these onto its provider-specific request format — nothing else
|
|
8
|
+
* may invent model-visible history (ADR-0016 invariant: model-visible ⟺ logged).
|
|
9
|
+
*
|
|
10
|
+
* 2.6 (doc §10.2): LATEST-ONLY kinds. `resource.snapshot` is model-surface
|
|
11
|
+
* but only its LAST event projects — earlier snapshots stay in the ledger
|
|
12
|
+
* (state) without flooding the context. Every event kind may opt into this
|
|
13
|
+
* projection; today it is exactly {'resource.snapshot'}.
|
|
8
14
|
*/
|
|
15
|
+
import { coveringCompactions, isSeqShadowed } from './compaction.js';
|
|
9
16
|
/** Event kinds that (may) feed the model input. Everything else is state. */
|
|
10
17
|
export const MODEL_SURFACE_KINDS = new Set([
|
|
11
18
|
'user.message',
|
|
@@ -13,19 +20,98 @@ export const MODEL_SURFACE_KINDS = new Set([
|
|
|
13
20
|
'tool.call',
|
|
14
21
|
'tool.result',
|
|
15
22
|
'session.compacted',
|
|
23
|
+
// 2.6: budget awareness for the model (latest-only projection below).
|
|
24
|
+
'resource.snapshot',
|
|
16
25
|
]);
|
|
26
|
+
/**
|
|
27
|
+
* Surface kinds projected LATEST-ONLY: the highest-seq event of the kind
|
|
28
|
+
* becomes one system message; earlier ones remain in the log (state).
|
|
29
|
+
*/
|
|
30
|
+
export const LATEST_ONLY_SURFACE_KINDS = new Set(['resource.snapshot']);
|
|
17
31
|
export function isModelSurfaceEvent(event) {
|
|
18
32
|
return MODEL_SURFACE_KINDS.has(event.kind);
|
|
19
33
|
}
|
|
34
|
+
/** Highest seq per latest-only kind — the sole event of that kind that projects. */
|
|
35
|
+
export function latestSurfaceSeqByKind(events) {
|
|
36
|
+
const latest = new Map();
|
|
37
|
+
for (const e of events) {
|
|
38
|
+
if (LATEST_ONLY_SURFACE_KINDS.has(e.kind) && !isSeqShadowed(e.seq, coveringCompactions(events))) {
|
|
39
|
+
latest.set(e.kind, e.seq);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return latest;
|
|
43
|
+
}
|
|
20
44
|
function asString(value) {
|
|
21
45
|
return typeof value === 'string' ? value : undefined;
|
|
22
46
|
}
|
|
23
|
-
|
|
47
|
+
function asNumber(value) {
|
|
48
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Human/model-readable RESOURCE STATUS block (doc §10.3) from a snapshot
|
|
52
|
+
* payload. Pure — used by deriveMessages and by the CLI emitter tests.
|
|
53
|
+
*/
|
|
54
|
+
export function formatResourceSnapshot(data) {
|
|
55
|
+
const used = asNumber(data.toolCallsUsed) ?? 0;
|
|
56
|
+
const remaining = asNumber(data.toolCallsRemaining) ?? 0;
|
|
57
|
+
const lines = [
|
|
58
|
+
'RESOURCE STATUS',
|
|
59
|
+
`Tool calls: ${used} / ${used + remaining}`,
|
|
60
|
+
`Remaining: ${remaining}`,
|
|
61
|
+
];
|
|
62
|
+
const wall = asNumber(data.wallMsRemaining);
|
|
63
|
+
if (wall !== undefined)
|
|
64
|
+
lines.push(`Wall clock remaining: ${Math.max(0, Math.round(wall / 1000))}s`);
|
|
65
|
+
lines.push(`Verification reserve: ${asNumber(data.verificationReserve) ?? 0}`);
|
|
66
|
+
lines.push(`Repair reserve: ${asNumber(data.repairReserve) ?? 0}`);
|
|
67
|
+
if (typeof data.stage === 'string')
|
|
68
|
+
lines.push(`Stage: ${data.stage}`);
|
|
69
|
+
if (typeof data.pressure === 'string')
|
|
70
|
+
lines.push(`Pressure: ${data.pressure}`);
|
|
71
|
+
return lines.join('\n');
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Project surface events into the neutral model history. Deterministic.
|
|
75
|
+
*
|
|
76
|
+
* Range-bearing `session.compacted` events replace `[fromSeq, toSeq]` with
|
|
77
|
+
* the checkpoint (durable shadowing). Compact events without a range stay
|
|
78
|
+
* additive (legacy `{summary}` append). Latest-only kinds project exactly
|
|
79
|
+
* their last event (see LATEST_ONLY_SURFACE_KINDS).
|
|
80
|
+
*/
|
|
24
81
|
export function deriveMessages(events, options = {}) {
|
|
82
|
+
const coverings = coveringCompactions(events);
|
|
83
|
+
const orderedCoverings = [...coverings].sort((a, b) => a.fromSeq - b.fromSeq || a.seq - b.seq);
|
|
84
|
+
const compactBySeq = new Map(coverings.map((c) => [c.seq, c]));
|
|
85
|
+
const latestOfKind = latestSurfaceSeqByKind(events);
|
|
25
86
|
const messages = [];
|
|
87
|
+
let nextCheckpoint = 0;
|
|
88
|
+
const pushCheckpoint = (compact) => {
|
|
89
|
+
messages.push({
|
|
90
|
+
role: compact.role,
|
|
91
|
+
content: compact.content,
|
|
92
|
+
seq: compact.seq,
|
|
93
|
+
compactedFromSeq: compact.fromSeq,
|
|
94
|
+
compactedToSeq: compact.toSeq,
|
|
95
|
+
...(compact.sourceEventSeqs ? { sourceEventSeqs: compact.sourceEventSeqs } : {}),
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
const pushDueCheckpoints = (seq) => {
|
|
99
|
+
while (nextCheckpoint < orderedCoverings.length && orderedCoverings[nextCheckpoint].fromSeq <= seq) {
|
|
100
|
+
pushCheckpoint(orderedCoverings[nextCheckpoint]);
|
|
101
|
+
nextCheckpoint += 1;
|
|
102
|
+
}
|
|
103
|
+
};
|
|
26
104
|
for (const e of events) {
|
|
105
|
+
pushDueCheckpoints(e.seq);
|
|
106
|
+
if (compactBySeq.has(e.seq))
|
|
107
|
+
continue;
|
|
108
|
+
if (isSeqShadowed(e.seq, coverings))
|
|
109
|
+
continue;
|
|
27
110
|
if (!isModelSurfaceEvent(e))
|
|
28
111
|
continue;
|
|
112
|
+
// Latest-only projection: skip superseded snapshots of the same kind.
|
|
113
|
+
if (LATEST_ONLY_SURFACE_KINDS.has(e.kind) && latestOfKind.get(e.kind) !== e.seq)
|
|
114
|
+
continue;
|
|
29
115
|
const d = e.data;
|
|
30
116
|
switch (e.kind) {
|
|
31
117
|
case 'user.message':
|
|
@@ -66,8 +152,16 @@ export function deriveMessages(events, options = {}) {
|
|
|
66
152
|
seq: e.seq,
|
|
67
153
|
});
|
|
68
154
|
break;
|
|
155
|
+
case 'resource.snapshot':
|
|
156
|
+
messages.push({
|
|
157
|
+
role: 'system',
|
|
158
|
+
content: formatResourceSnapshot(d),
|
|
159
|
+
seq: e.seq,
|
|
160
|
+
});
|
|
161
|
+
break;
|
|
69
162
|
}
|
|
70
163
|
}
|
|
164
|
+
pushDueCheckpoints(Number.POSITIVE_INFINITY);
|
|
71
165
|
return messages;
|
|
72
166
|
}
|
|
73
167
|
/** Pair tool.call events with the matching tool.result by callId, in order. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modelSurface.js","sourceRoot":"","sources":["../../src/session/modelSurface.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"modelSurface.js","sourceRoot":"","sources":["../../src/session/modelSurface.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* session/taskContract.ts — first-class task contract (2.6 Track A, doc §14).
|
|
3
|
+
*
|
|
4
|
+
* Goal + constraints + acceptance criteria extracted from user prose into a
|
|
5
|
+
* versioned, append-only structure (`task.contract` / `task.contract_updated`
|
|
6
|
+
* events). Authority is explicit: user > agent-derived. A derived item may
|
|
7
|
+
* never contradict a user constraint, rewrite the goal, or drop a required
|
|
8
|
+
* user criterion. CompactionStateSnapshot prefers the contract; the legacy
|
|
9
|
+
* regex extraction stays as fallback compatibility.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
export declare const TaskConstraintSchema: z.ZodObject<{
|
|
13
|
+
id: z.ZodString;
|
|
14
|
+
text: z.ZodString;
|
|
15
|
+
source: z.ZodEnum<{
|
|
16
|
+
user: "user";
|
|
17
|
+
"agent-derived": "agent-derived";
|
|
18
|
+
}>;
|
|
19
|
+
required: z.ZodBoolean;
|
|
20
|
+
}, z.core.$strip>;
|
|
21
|
+
export type TaskConstraint = z.infer<typeof TaskConstraintSchema>;
|
|
22
|
+
export declare const TaskCriterionSchema: z.ZodObject<{
|
|
23
|
+
id: z.ZodString;
|
|
24
|
+
text: z.ZodString;
|
|
25
|
+
source: z.ZodEnum<{
|
|
26
|
+
user: "user";
|
|
27
|
+
"agent-derived": "agent-derived";
|
|
28
|
+
}>;
|
|
29
|
+
required: z.ZodBoolean;
|
|
30
|
+
verificationHint: z.ZodOptional<z.ZodObject<{
|
|
31
|
+
kind: z.ZodEnum<{
|
|
32
|
+
command: "command";
|
|
33
|
+
manual: "manual";
|
|
34
|
+
tool: "tool";
|
|
35
|
+
semantic: "semantic";
|
|
36
|
+
}>;
|
|
37
|
+
value: z.ZodOptional<z.ZodString>;
|
|
38
|
+
}, z.core.$strip>>;
|
|
39
|
+
}, z.core.$strip>;
|
|
40
|
+
export type TaskCriterion = z.infer<typeof TaskCriterionSchema>;
|
|
41
|
+
export declare const TaskContractSchema: z.ZodObject<{
|
|
42
|
+
version: z.ZodNumber;
|
|
43
|
+
goal: z.ZodString;
|
|
44
|
+
constraints: z.ZodArray<z.ZodObject<{
|
|
45
|
+
id: z.ZodString;
|
|
46
|
+
text: z.ZodString;
|
|
47
|
+
source: z.ZodEnum<{
|
|
48
|
+
user: "user";
|
|
49
|
+
"agent-derived": "agent-derived";
|
|
50
|
+
}>;
|
|
51
|
+
required: z.ZodBoolean;
|
|
52
|
+
}, z.core.$strip>>;
|
|
53
|
+
acceptanceCriteria: z.ZodArray<z.ZodObject<{
|
|
54
|
+
id: z.ZodString;
|
|
55
|
+
text: z.ZodString;
|
|
56
|
+
source: z.ZodEnum<{
|
|
57
|
+
user: "user";
|
|
58
|
+
"agent-derived": "agent-derived";
|
|
59
|
+
}>;
|
|
60
|
+
required: z.ZodBoolean;
|
|
61
|
+
verificationHint: z.ZodOptional<z.ZodObject<{
|
|
62
|
+
kind: z.ZodEnum<{
|
|
63
|
+
command: "command";
|
|
64
|
+
manual: "manual";
|
|
65
|
+
tool: "tool";
|
|
66
|
+
semantic: "semantic";
|
|
67
|
+
}>;
|
|
68
|
+
value: z.ZodOptional<z.ZodString>;
|
|
69
|
+
}, z.core.$strip>>;
|
|
70
|
+
}, z.core.$strip>>;
|
|
71
|
+
source: z.ZodObject<{
|
|
72
|
+
userSeq: z.ZodNumber;
|
|
73
|
+
}, z.core.$strip>;
|
|
74
|
+
}, z.core.$strip>;
|
|
75
|
+
export type TaskContract = z.infer<typeof TaskContractSchema>;
|
|
76
|
+
/** Merge rules: monotone version, user authority, no required-item loss. */
|
|
77
|
+
export interface TaskContractUpdate {
|
|
78
|
+
goal?: string;
|
|
79
|
+
addConstraints?: TaskConstraint[];
|
|
80
|
+
addCriteria?: TaskCriterion[];
|
|
81
|
+
/** Ids the AGENT wants to drop — user-sourced/required items survive. */
|
|
82
|
+
removeConstraintIds?: string[];
|
|
83
|
+
removeCriterionIds?: string[];
|
|
84
|
+
nextUserSeq?: number;
|
|
85
|
+
}
|
|
86
|
+
export declare class TaskContractConflictError extends Error {
|
|
87
|
+
readonly reason: string;
|
|
88
|
+
readonly code = "TASK_CONTRACT_CONFLICT";
|
|
89
|
+
constructor(reason: string);
|
|
90
|
+
}
|
|
91
|
+
/** Apply an update under the authority rules (doc §14.3). Pure. */
|
|
92
|
+
export declare function applyTaskContractUpdate(contract: TaskContract, update: TaskContractUpdate): TaskContract;
|
|
93
|
+
/** Project the contract onto the compaction state shape (§14.5). */
|
|
94
|
+
export declare function contractToCompactionFields(contract: TaskContract): {
|
|
95
|
+
userConstraints: string[];
|
|
96
|
+
activeCriteria: Array<{
|
|
97
|
+
id: string;
|
|
98
|
+
required: boolean;
|
|
99
|
+
}>;
|
|
100
|
+
goal: string;
|
|
101
|
+
};
|
|
102
|
+
/** Derive an initial contract from the first user message (heuristic, CLI-side seed). */
|
|
103
|
+
export declare function deriveInitialContract(userSeq: number, text: string): TaskContract;
|
|
104
|
+
//# sourceMappingURL=taskContract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taskContract.d.ts","sourceRoot":"","sources":["../../src/session/taskContract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,oBAAoB;;;;;;;;iBAK/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;iBAW9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAS7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,4EAA4E;AAC5E,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,cAAc,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,aAAa,EAAE,CAAC;IAC9B,yEAAyE;IACzE,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,yBAA0B,SAAQ,KAAK;IAEtC,QAAQ,CAAC,MAAM,EAAE,MAAM;IADnC,QAAQ,CAAC,IAAI,4BAA4B;gBACpB,MAAM,EAAE,MAAM;CAIpC;AAED,mEAAmE;AACnE,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,kBAAkB,GACzB,YAAY,CAyCd;AAED,oEAAoE;AACpE,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,YAAY,GAAG;IAClE,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACzD,IAAI,EAAE,MAAM,CAAC;CACd,CAMA;AAED,yFAAyF;AACzF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAyBjF"}
|