@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.
Files changed (76) hide show
  1. package/dist/core/AgentHarness.d.ts +27 -0
  2. package/dist/core/AgentHarness.d.ts.map +1 -1
  3. package/dist/core/AgentHarness.js +43 -0
  4. package/dist/core/AgentHarness.js.map +1 -1
  5. package/dist/mission/budgetContinuation.d.ts +36 -0
  6. package/dist/mission/budgetContinuation.d.ts.map +1 -0
  7. package/dist/mission/budgetContinuation.js +66 -0
  8. package/dist/mission/budgetContinuation.js.map +1 -0
  9. package/dist/runtime/harnessManifest.d.ts +91 -0
  10. package/dist/runtime/harnessManifest.d.ts.map +1 -0
  11. package/dist/runtime/harnessManifest.js +113 -0
  12. package/dist/runtime/harnessManifest.js.map +1 -0
  13. package/dist/runtime/index.d.ts +4 -1
  14. package/dist/runtime/index.d.ts.map +1 -1
  15. package/dist/runtime/index.js +4 -1
  16. package/dist/runtime/index.js.map +1 -1
  17. package/dist/runtime/profiles.d.ts +7 -0
  18. package/dist/runtime/profiles.d.ts.map +1 -1
  19. package/dist/runtime/profiles.js +10 -0
  20. package/dist/runtime/profiles.js.map +1 -1
  21. package/dist/runtime/resourceBudget.d.ts +69 -0
  22. package/dist/runtime/resourceBudget.d.ts.map +1 -0
  23. package/dist/runtime/resourceBudget.js +98 -0
  24. package/dist/runtime/resourceBudget.js.map +1 -0
  25. package/dist/runtime/resourcePolicy.d.ts +56 -0
  26. package/dist/runtime/resourcePolicy.d.ts.map +1 -0
  27. package/dist/runtime/resourcePolicy.js +77 -0
  28. package/dist/runtime/resourcePolicy.js.map +1 -0
  29. package/dist/session/agentAdapter.d.ts +2 -2
  30. package/dist/session/agentAdapter.d.ts.map +1 -1
  31. package/dist/session/agentAdapter.js +10 -2
  32. package/dist/session/agentAdapter.js.map +1 -1
  33. package/dist/session/compaction.d.ts +36 -0
  34. package/dist/session/compaction.d.ts.map +1 -0
  35. package/dist/session/compaction.js +120 -0
  36. package/dist/session/compaction.js.map +1 -0
  37. package/dist/session/compactionState.d.ts +50 -0
  38. package/dist/session/compactionState.d.ts.map +1 -0
  39. package/dist/session/compactionState.js +243 -0
  40. package/dist/session/compactionState.js.map +1 -0
  41. package/dist/session/index.d.ts +2 -0
  42. package/dist/session/index.d.ts.map +1 -1
  43. package/dist/session/index.js +2 -0
  44. package/dist/session/index.js.map +1 -1
  45. package/dist/session/invariants.d.ts +5 -0
  46. package/dist/session/invariants.d.ts.map +1 -1
  47. package/dist/session/invariants.js +152 -0
  48. package/dist/session/invariants.js.map +1 -1
  49. package/dist/session/modelSurface.d.ts +33 -4
  50. package/dist/session/modelSurface.d.ts.map +1 -1
  51. package/dist/session/modelSurface.js +98 -4
  52. package/dist/session/modelSurface.js.map +1 -1
  53. package/dist/session/taskContract.d.ts +104 -0
  54. package/dist/session/taskContract.d.ts.map +1 -0
  55. package/dist/session/taskContract.js +129 -0
  56. package/dist/session/taskContract.js.map +1 -0
  57. package/dist/session/types.d.ts +9 -1
  58. package/dist/session/types.d.ts.map +1 -1
  59. package/dist/session/types.js +17 -0
  60. package/dist/session/types.js.map +1 -1
  61. package/dist/shared/events.d.ts +27 -0
  62. package/dist/shared/events.d.ts.map +1 -1
  63. package/dist/shared/events.js.map +1 -1
  64. package/dist/verification/index.d.ts +1 -0
  65. package/dist/verification/index.d.ts.map +1 -1
  66. package/dist/verification/index.js +1 -0
  67. package/dist/verification/index.js.map +1 -1
  68. package/dist/verification/metrics.d.ts +20 -0
  69. package/dist/verification/metrics.d.ts.map +1 -1
  70. package/dist/verification/metrics.js +18 -0
  71. package/dist/verification/metrics.js.map +1 -1
  72. package/dist/verification/resourceReserveGate.d.ts +39 -0
  73. package/dist/verification/resourceReserveGate.d.ts.map +1 -0
  74. package/dist/verification/resourceReserveGate.js +56 -0
  75. package/dist/verification/resourceReserveGate.js.map +1 -0
  76. package/package.json +1 -1
@@ -0,0 +1,36 @@
1
+ /**
2
+ * session/compaction.ts — durable model-surface replacement (compact the
3
+ * projection, never the ledger).
4
+ *
5
+ * A `session.compacted` event WITH `{fromSeq,toSeq}` shadows that closed
6
+ * interval in `deriveMessages()`. Later coverings swallow earlier
7
+ * checkpoints in their range (chaining). Events without a range stay
8
+ * legacy: the summary is appended, nothing is shadowed.
9
+ */
10
+ import type { SessionEventEnvelope } from './types.js';
11
+ export type CompactionStrategy = 'extractive' | 'llm';
12
+ export type CompactionCheckpointRole = 'user' | 'system';
13
+ export interface CompactedInterval {
14
+ /** Seq of the `session.compacted` event itself (must be > toSeq). */
15
+ seq: number;
16
+ fromSeq: number;
17
+ toSeq: number;
18
+ role: CompactionCheckpointRole;
19
+ content: string;
20
+ strategy?: CompactionStrategy;
21
+ sourceEventSeqs?: number[];
22
+ }
23
+ /**
24
+ * Parse a range-bearing compact event. Returns null for legacy `{summary}`
25
+ * notes (no shadowing) and for malformed ranges.
26
+ */
27
+ export declare function parseCompactedEvent(event: SessionEventEnvelope): CompactedInterval | null;
28
+ /**
29
+ * Effective coverings: later compaction that contains an earlier compact
30
+ * event's seq swallows that checkpoint (nested / chained).
31
+ */
32
+ export declare function coveringCompactions(events: readonly SessionEventEnvelope[]): CompactedInterval[];
33
+ export declare function shadowedSeqSet(coverings: readonly CompactedInterval[]): Set<number>;
34
+ export declare function isSeqShadowed(seq: number, coverings: readonly CompactedInterval[]): boolean;
35
+ export * from './compactionState.js';
36
+ //# sourceMappingURL=compaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../src/session/compaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,KAAK,CAAC;AACtD,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEzD,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,wBAAwB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AA6BD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,oBAAoB,GAAG,iBAAiB,GAAG,IAAI,CAmBzF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,oBAAoB,EAAE,GACtC,iBAAiB,EAAE,CAwCrB;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,iBAAiB,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAMnF;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,iBAAiB,EAAE,GAAG,OAAO,CAE3F;AAED,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * session/compaction.ts — durable model-surface replacement (compact the
3
+ * projection, never the ledger).
4
+ *
5
+ * A `session.compacted` event WITH `{fromSeq,toSeq}` shadows that closed
6
+ * interval in `deriveMessages()`. Later coverings swallow earlier
7
+ * checkpoints in their range (chaining). Events without a range stay
8
+ * legacy: the summary is appended, nothing is shadowed.
9
+ */
10
+ function asPositiveInt(value) {
11
+ return typeof value === 'number' && Number.isInteger(value) && value > 0 ? value : undefined;
12
+ }
13
+ function checkpointContent(data) {
14
+ const cp = data.checkpoint;
15
+ if (cp && typeof cp === 'object') {
16
+ const content = cp.content;
17
+ if (typeof content === 'string')
18
+ return content;
19
+ }
20
+ if (typeof data.summary === 'string')
21
+ return data.summary;
22
+ return '[session compacted]';
23
+ }
24
+ function checkpointRole(data) {
25
+ const cp = data.checkpoint;
26
+ if (cp && typeof cp === 'object') {
27
+ const role = cp.role;
28
+ if (role === 'user' || role === 'system')
29
+ return role;
30
+ }
31
+ return 'system';
32
+ }
33
+ function strategyOf(data) {
34
+ return data.strategy === 'extractive' || data.strategy === 'llm' ? data.strategy : undefined;
35
+ }
36
+ /**
37
+ * Parse a range-bearing compact event. Returns null for legacy `{summary}`
38
+ * notes (no shadowing) and for malformed ranges.
39
+ */
40
+ export function parseCompactedEvent(event) {
41
+ if (event.kind !== 'session.compacted')
42
+ return null;
43
+ const fromSeq = asPositiveInt(event.data.fromSeq);
44
+ const toSeq = asPositiveInt(event.data.toSeq);
45
+ if (fromSeq === undefined || toSeq === undefined || fromSeq > toSeq)
46
+ return null;
47
+ if (event.seq <= toSeq)
48
+ return null;
49
+ const sourceRaw = event.data.sourceEventSeqs;
50
+ const sourceEventSeqs = Array.isArray(sourceRaw)
51
+ ? sourceRaw.filter((n) => typeof n === 'number' && Number.isInteger(n) && n > 0)
52
+ : undefined;
53
+ return {
54
+ seq: event.seq,
55
+ fromSeq,
56
+ toSeq,
57
+ role: checkpointRole(event.data),
58
+ content: checkpointContent(event.data),
59
+ ...(strategyOf(event.data) ? { strategy: strategyOf(event.data) } : {}),
60
+ ...(sourceEventSeqs && sourceEventSeqs.length > 0 ? { sourceEventSeqs } : {}),
61
+ };
62
+ }
63
+ /**
64
+ * Effective coverings: later compaction that contains an earlier compact
65
+ * event's seq swallows that checkpoint (nested / chained).
66
+ */
67
+ export function coveringCompactions(events) {
68
+ const effective = events
69
+ .map(parseCompactedEvent)
70
+ .filter((c) => c !== null)
71
+ .map((c) => ({
72
+ ...c,
73
+ ...(c.sourceEventSeqs ? { sourceEventSeqs: [...c.sourceEventSeqs] } : {}),
74
+ }))
75
+ .sort((a, b) => a.seq - b.seq);
76
+ // Resolve to a fixed point. When a later checkpoint covers the seq of an
77
+ // earlier checkpoint, it inherits the earlier checkpoint's raw interval.
78
+ // Otherwise C2=101..180 swallowing C1(seq=101, range=1..100) would expose
79
+ // raw 1..100 again after C1 disappeared from the visible surface.
80
+ let changed = true;
81
+ while (changed) {
82
+ changed = false;
83
+ for (let i = 0; i < effective.length; i++) {
84
+ const earlier = effective[i];
85
+ let target;
86
+ for (let j = i + 1; j < effective.length; j++) {
87
+ const later = effective[j];
88
+ if (earlier.seq >= later.fromSeq && earlier.seq <= later.toSeq) {
89
+ target = later;
90
+ }
91
+ }
92
+ if (!target)
93
+ continue;
94
+ target.fromSeq = Math.min(target.fromSeq, earlier.fromSeq);
95
+ target.toSeq = Math.max(target.toSeq, earlier.toSeq);
96
+ if (earlier.sourceEventSeqs?.length) {
97
+ target.sourceEventSeqs = [
98
+ ...new Set([...(target.sourceEventSeqs ?? []), ...earlier.sourceEventSeqs]),
99
+ ];
100
+ }
101
+ effective.splice(i, 1);
102
+ changed = true;
103
+ break;
104
+ }
105
+ }
106
+ return effective;
107
+ }
108
+ export function shadowedSeqSet(coverings) {
109
+ const set = new Set();
110
+ for (const c of coverings) {
111
+ for (let s = c.fromSeq; s <= c.toSeq; s++)
112
+ set.add(s);
113
+ }
114
+ return set;
115
+ }
116
+ export function isSeqShadowed(seq, coverings) {
117
+ return coverings.some((c) => seq >= c.fromSeq && seq <= c.toSeq);
118
+ }
119
+ export * from './compactionState.js';
120
+ //# sourceMappingURL=compaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compaction.js","sourceRoot":"","sources":["../../src/session/compaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAkBH,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/F,CAAC;AAED,SAAS,iBAAiB,CAAC,IAA6B;IACtD,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;IAC3B,IAAI,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,OAAO,GAAI,EAA4B,CAAC,OAAO,CAAC;QACtD,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC;IAC1D,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAED,SAAS,cAAc,CAAC,IAA6B;IACnD,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;IAC3B,IAAI,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,IAAI,GAAI,EAAyB,CAAC,IAAI,CAAC;QAC7C,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;IACxD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,UAAU,CAAC,IAA6B;IAC/C,OAAO,IAAI,CAAC,QAAQ,KAAK,YAAY,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAA2B;IAC7D,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB;QAAE,OAAO,IAAI,CAAC;IACpD,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,OAAO,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,GAAG,KAAK;QAAE,OAAO,IAAI,CAAC;IACjF,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;IAC7C,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QAC9C,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7F,CAAC,CAAC,SAAS,CAAC;IACd,OAAO;QACL,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,OAAO;QACP,KAAK;QACL,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;QAChC,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC;QACtC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9E,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAuC;IAEvC,MAAM,SAAS,GAAG,MAAM;SACrB,GAAG,CAAC,mBAAmB,CAAC;SACxB,MAAM,CAAC,CAAC,CAAC,EAA0B,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;SACjD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,GAAG,CAAC;QACJ,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAEjC,yEAAyE;IACzE,yEAAyE;IACzE,0EAA0E;IAC1E,kEAAkE;IAClE,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,OAAO,OAAO,EAAE,CAAC;QACf,OAAO,GAAG,KAAK,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC;YAC9B,IAAI,MAAqC,CAAC;YAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC;gBAC5B,IAAI,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC/D,MAAM,GAAG,KAAK,CAAC;gBACjB,CAAC;YACH,CAAC;YACD,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3D,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACrD,IAAI,OAAO,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;gBACpC,MAAM,CAAC,eAAe,GAAG;oBACvB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;iBAC5E,CAAC;YACJ,CAAC;YACD,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACvB,OAAO,GAAG,IAAI,CAAC;YACf,MAAM;QACR,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAuC;IACpE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE;YAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,SAAuC;IAChF,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,IAAI,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Deterministic state retained across durable session compaction.
3
+ *
4
+ * This metadata is derived from the append-only prefix before narrative
5
+ * summarization, so criteria, failures, evidence and mission state do not
6
+ * depend on a lossy prose summary.
7
+ */
8
+ import type { SessionEventEnvelope } from './types.js';
9
+ export interface CompactionCriterionRef {
10
+ id: string;
11
+ required: boolean;
12
+ status?: string;
13
+ }
14
+ export interface CompactionIssueRef {
15
+ id: string;
16
+ status: string;
17
+ reason?: string;
18
+ }
19
+ export interface RetainedEvidenceRef {
20
+ seq?: number;
21
+ tier?: string;
22
+ ref?: string;
23
+ digest?: string;
24
+ capturedAt?: number;
25
+ }
26
+ export interface CompactionStateSnapshot {
27
+ version: 1;
28
+ activeCriteria: CompactionCriterionRef[];
29
+ unresolvedIssues: CompactionIssueRef[];
30
+ latestVerification?: {
31
+ seq: number;
32
+ verdict?: string;
33
+ summary?: string;
34
+ };
35
+ retainedEvidenceRefs: RetainedEvidenceRef[];
36
+ affectedFiles: string[];
37
+ userConstraints: string[];
38
+ missionState?: {
39
+ phase?: string;
40
+ recommendation?: string;
41
+ blockers?: string[];
42
+ };
43
+ }
44
+ /**
45
+ * Deterministic state retained beside the narrative checkpoint. Only events
46
+ * inside the compacted prefix contribute; later events remain visible raw.
47
+ */
48
+ export declare function buildCompactionStateSnapshot(events: readonly SessionEventEnvelope[], toSeq: number): CompactionStateSnapshot;
49
+ export declare function formatCompactionStateSnapshot(snapshot: CompactionStateSnapshot): string;
50
+ //# sourceMappingURL=compactionState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compactionState.d.ts","sourceRoot":"","sources":["../../src/session/compactionState.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAMvD,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,CAAC,CAAC;IACX,cAAc,EAAE,sBAAsB,EAAE,CAAC;IACzC,gBAAgB,EAAE,kBAAkB,EAAE,CAAC;IACvC,kBAAkB,CAAC,EAAE;QACnB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC5C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAmFD;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,SAAS,oBAAoB,EAAE,EACvC,KAAK,EAAE,MAAM,GACZ,uBAAuB,CA6IzB;AAED,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,uBAAuB,GAAG,MAAM,CAsBvF"}
@@ -0,0 +1,243 @@
1
+ /**
2
+ * Deterministic state retained across durable session compaction.
3
+ *
4
+ * This metadata is derived from the append-only prefix before narrative
5
+ * summarization, so criteria, failures, evidence and mission state do not
6
+ * depend on a lossy prose summary.
7
+ */
8
+ function asPositiveInt(value) {
9
+ return typeof value === 'number' && Number.isInteger(value) && value > 0 ? value : undefined;
10
+ }
11
+ function recordOf(value) {
12
+ return value && typeof value === 'object' && !Array.isArray(value)
13
+ ? value
14
+ : undefined;
15
+ }
16
+ function recordsOf(value) {
17
+ return Array.isArray(value)
18
+ ? value.map(recordOf).filter((v) => v !== undefined)
19
+ : [];
20
+ }
21
+ function stringsOf(value) {
22
+ return Array.isArray(value) ? value.filter((v) => typeof v === 'string') : [];
23
+ }
24
+ function addBounded(target, value, maxLength = 260) {
25
+ const normalized = value.trim().replace(/\\/g, '/');
26
+ if (normalized && normalized.length <= maxLength)
27
+ target.add(normalized);
28
+ }
29
+ function collectPaths(value, target, depth = 0) {
30
+ if (depth > 4 || value === null || value === undefined)
31
+ return;
32
+ if (Array.isArray(value)) {
33
+ for (const item of value)
34
+ collectPaths(item, target, depth + 1);
35
+ return;
36
+ }
37
+ const record = recordOf(value);
38
+ if (record) {
39
+ for (const [key, item] of Object.entries(record)) {
40
+ if (typeof item === 'string' &&
41
+ ['path', 'file', 'filepath', 'filePath', 'file_path', 'target', 'cwd'].includes(key)) {
42
+ addBounded(target, item);
43
+ }
44
+ else {
45
+ collectPaths(item, target, depth + 1);
46
+ }
47
+ }
48
+ return;
49
+ }
50
+ if (typeof value !== 'string')
51
+ return;
52
+ const pathLike = /(?:^|[\s"'])((?:[\w.@-]+[\\/])+[\w.@-]+\.[A-Za-z0-9]{1,10})/g;
53
+ let match;
54
+ while ((match = pathLike.exec(value)) !== null && target.size < 64) {
55
+ addBounded(target, match[1]);
56
+ }
57
+ }
58
+ function evidenceFromResults(results) {
59
+ const seen = new Set();
60
+ const out = [];
61
+ for (const result of results) {
62
+ for (const raw of recordsOf(result.evidence)) {
63
+ const seq = asPositiveInt(raw.seq);
64
+ const tier = typeof raw.tier === 'string' ? raw.tier : undefined;
65
+ const ref = typeof raw.ref === 'string' ? raw.ref : undefined;
66
+ const digest = typeof raw.digest === 'string' ? raw.digest : undefined;
67
+ const capturedAt = typeof raw.capturedAt === 'number' && Number.isInteger(raw.capturedAt)
68
+ ? raw.capturedAt
69
+ : undefined;
70
+ if (seq === undefined && tier === undefined && ref === undefined && digest === undefined)
71
+ continue;
72
+ const key = [seq ?? '', tier ?? '', ref ?? '', digest ?? ''].join('|');
73
+ if (seen.has(key))
74
+ continue;
75
+ seen.add(key);
76
+ out.push({
77
+ ...(seq !== undefined ? { seq } : {}),
78
+ ...(tier !== undefined ? { tier } : {}),
79
+ ...(ref !== undefined ? { ref } : {}),
80
+ ...(digest !== undefined ? { digest } : {}),
81
+ ...(capturedAt !== undefined ? { capturedAt } : {}),
82
+ });
83
+ }
84
+ }
85
+ return out;
86
+ }
87
+ const CONSTRAINT_RE = /\b(must|never|required|only|do not|don't|constraint|vincolo|deve|devono|non\s+deve|senza)\b/i;
88
+ /**
89
+ * Deterministic state retained beside the narrative checkpoint. Only events
90
+ * inside the compacted prefix contribute; later events remain visible raw.
91
+ */
92
+ export function buildCompactionStateSnapshot(events, toSeq) {
93
+ const scoped = events.filter((event) => event.seq <= toSeq);
94
+ const latestVerification = [...scoped].reverse().find((event) => event.kind === 'verification.run');
95
+ const verificationData = latestVerification?.data ?? {};
96
+ const native = recordOf(verificationData.native);
97
+ const results = recordsOf(native?.results ?? verificationData.results);
98
+ const criteriaRaw = recordsOf(native?.criteria ?? verificationData.criteria);
99
+ const statusById = new Map(results
100
+ .filter((result) => typeof result.criterionId === 'string')
101
+ .map((result) => [String(result.criterionId), String(result.status ?? 'unknown')]));
102
+ const evidenceState = recordOf(verificationData.evidence);
103
+ const satisfied = stringsOf(evidenceState?.satisfied);
104
+ const unsatisfiedRaw = recordsOf(evidenceState?.unsatisfied);
105
+ const activeCriteria = criteriaRaw
106
+ .filter((criterion) => typeof criterion.id === 'string')
107
+ .map((criterion) => ({
108
+ id: String(criterion.id),
109
+ required: criterion.required !== false,
110
+ ...(statusById.has(String(criterion.id))
111
+ ? { status: statusById.get(String(criterion.id)) }
112
+ : {}),
113
+ }));
114
+ if (activeCriteria.length === 0) {
115
+ const ids = new Set([
116
+ ...results.map((result) => String(result.criterionId ?? '')).filter(Boolean),
117
+ ...satisfied,
118
+ ...unsatisfiedRaw.map((issue) => String(issue.id ?? '')).filter(Boolean),
119
+ ]);
120
+ for (const id of ids) {
121
+ activeCriteria.push({
122
+ id,
123
+ required: true,
124
+ status: statusById.get(id) ?? (satisfied.includes(id) ? 'pass' : 'unknown'),
125
+ });
126
+ }
127
+ }
128
+ const unresolvedIssues = unsatisfiedRaw.length > 0
129
+ ? unsatisfiedRaw
130
+ .filter((issue) => typeof issue.id === 'string')
131
+ .map((issue) => ({
132
+ id: String(issue.id),
133
+ status: String(issue.status ?? 'unknown'),
134
+ ...(typeof issue.reason === 'string' ? { reason: issue.reason } : {}),
135
+ }))
136
+ : results
137
+ .filter((result) => String(result.status ?? 'unknown') !== 'pass')
138
+ .map((result) => ({
139
+ id: String(result.criterionId ?? 'unknown'),
140
+ status: String(result.status ?? 'unknown'),
141
+ ...(typeof result.detail === 'string' ? { reason: result.detail } : {}),
142
+ }));
143
+ const affectedFiles = new Set();
144
+ for (const event of scoped.slice(-500)) {
145
+ if (event.kind === 'tool.call' || event.kind === 'tool.result' || event.kind === 'verification.evidence') {
146
+ collectPaths(event.data, affectedFiles);
147
+ }
148
+ }
149
+ const userConstraints = new Set();
150
+ for (const event of scoped) {
151
+ if (event.kind !== 'user.message')
152
+ continue;
153
+ for (const constraint of stringsOf(event.data.constraints ?? event.data.userConstraints)) {
154
+ addBounded(userConstraints, constraint, 320);
155
+ }
156
+ const messageText = typeof event.data.text === 'string' ? event.data.text : '';
157
+ for (const line of messageText.split(/\r?\n/)) {
158
+ if (CONSTRAINT_RE.test(line))
159
+ addBounded(userConstraints, line, 320);
160
+ if (userConstraints.size >= 12)
161
+ break;
162
+ }
163
+ }
164
+ const lastMissionPhase = [...scoped].reverse().find((event) => event.kind === 'mission.phase');
165
+ const lastMissionAdvice = [...scoped].reverse().find((event) => event.kind === 'mission.progress');
166
+ const missionState = lastMissionPhase || lastMissionAdvice
167
+ ? {
168
+ ...(typeof lastMissionPhase?.data.phase === 'string'
169
+ ? { phase: lastMissionPhase.data.phase }
170
+ : {}),
171
+ ...(typeof lastMissionAdvice?.data.recommendation === 'string'
172
+ ? { recommendation: lastMissionAdvice.data.recommendation }
173
+ : {}),
174
+ ...(stringsOf(lastMissionAdvice?.data.blockers).length > 0
175
+ ? { blockers: stringsOf(lastMissionAdvice?.data.blockers) }
176
+ : {}),
177
+ }
178
+ : undefined;
179
+ // 2.6 (doc section 14.5): prefer the first-class TaskContract when the
180
+ // session carries one; the regex extraction above stays as fallback.
181
+ const latestContractEvent = [...scoped]
182
+ .reverse()
183
+ .find((event) => event.kind === 'task.contract' || event.kind === 'task.contract_updated');
184
+ const contractRaw = latestContractEvent && typeof latestContractEvent.data.contract === 'object'
185
+ ? latestContractEvent.data.contract
186
+ : undefined;
187
+ const contractConstraints = Array.isArray(contractRaw?.constraints)
188
+ ? contractRaw.constraints
189
+ .filter((c) => c.source === 'user' && c.required === true && typeof c.text === 'string')
190
+ .map((c) => String(c.text))
191
+ : undefined;
192
+ const contractCriteria = Array.isArray(contractRaw?.acceptanceCriteria)
193
+ ? contractRaw.acceptanceCriteria
194
+ .filter((c) => typeof c.id === 'string')
195
+ .map((c) => ({ id: String(c.id), required: c.required === true }))
196
+ : undefined;
197
+ return {
198
+ version: 1,
199
+ activeCriteria: contractCriteria ?? activeCriteria,
200
+ unresolvedIssues,
201
+ ...(latestVerification
202
+ ? {
203
+ latestVerification: {
204
+ seq: latestVerification.seq,
205
+ ...(typeof verificationData.verdict === 'string'
206
+ ? { verdict: verificationData.verdict }
207
+ : {}),
208
+ ...(typeof verificationData.summary === 'string'
209
+ ? { summary: verificationData.summary }
210
+ : {}),
211
+ },
212
+ }
213
+ : {}),
214
+ retainedEvidenceRefs: evidenceFromResults(results),
215
+ affectedFiles: [...affectedFiles].slice(0, 64),
216
+ userConstraints: contractConstraints ?? [...userConstraints].slice(-12),
217
+ ...(missionState ? { missionState } : {}),
218
+ };
219
+ }
220
+ export function formatCompactionStateSnapshot(snapshot) {
221
+ const lines = ['<compaction-state version="1">'];
222
+ if (snapshot.activeCriteria.length > 0) {
223
+ lines.push('activeCriteria: ' + JSON.stringify(snapshot.activeCriteria));
224
+ }
225
+ if (snapshot.unresolvedIssues.length > 0) {
226
+ lines.push('unresolvedIssues: ' + JSON.stringify(snapshot.unresolvedIssues));
227
+ }
228
+ if (snapshot.latestVerification) {
229
+ lines.push('latestVerification: ' + JSON.stringify(snapshot.latestVerification));
230
+ }
231
+ if (snapshot.affectedFiles.length > 0) {
232
+ lines.push('affectedFiles: ' + JSON.stringify(snapshot.affectedFiles));
233
+ }
234
+ if (snapshot.userConstraints.length > 0) {
235
+ lines.push('userConstraints: ' + JSON.stringify(snapshot.userConstraints));
236
+ }
237
+ if (snapshot.missionState) {
238
+ lines.push('missionState: ' + JSON.stringify(snapshot.missionState));
239
+ }
240
+ lines.push('</compaction-state>');
241
+ return lines.join('\n');
242
+ }
243
+ //# sourceMappingURL=compactionState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compactionState.js","sourceRoot":"","sources":["../../src/session/compactionState.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@
7
7
  */
8
8
  export * from './types.js';
9
9
  export * from './modelSurface.js';
10
+ export * from './compaction.js';
10
11
  export * from './agentAdapter.js';
11
12
  export * from './writer.js';
12
13
  export * from './replay.js';
@@ -15,4 +16,5 @@ export * from './lineage.js';
15
16
  export * from './exportSession.js';
16
17
  export * from './invariants.js';
17
18
  export * from './recovery.js';
19
+ export * from './taskContract.js';
18
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC"}
@@ -7,6 +7,7 @@
7
7
  */
8
8
  export * from './types.js';
9
9
  export * from './modelSurface.js';
10
+ export * from './compaction.js';
10
11
  export * from './agentAdapter.js';
11
12
  export * from './writer.js';
12
13
  export * from './replay.js';
@@ -15,4 +16,5 @@ export * from './lineage.js';
15
16
  export * from './exportSession.js';
16
17
  export * from './invariants.js';
17
18
  export * from './recovery.js';
19
+ export * from './taskContract.js';
18
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC"}
@@ -13,4 +13,9 @@ export interface SessionInvariantViolation {
13
13
  }
14
14
  export type SessionInvariantMode = 'minimal' | 'strict';
15
15
  export declare function validateSessionTrace(events: readonly SessionEventEnvelope[], mode?: SessionInvariantMode): SessionInvariantViolation[];
16
+ /**
17
+ * 2.6 Track A/B relational invariants: resource events + task contract
18
+ * (doc section 24.1). Standalone so replay/CI can opt in per surface.
19
+ */
20
+ export declare function validateResourceAndContractEvents(events: readonly SessionEventEnvelope[]): SessionInvariantViolation[];
16
21
  //# sourceMappingURL=invariants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"invariants.d.ts","sourceRoot":"","sources":["../../src/session/invariants.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGvD,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAyBxD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,oBAAoB,EAAE,EACvC,IAAI,GAAE,oBAAgC,GACrC,yBAAyB,EAAE,CAyE7B"}
1
+ {"version":3,"file":"invariants.d.ts","sourceRoot":"","sources":["../../src/session/invariants.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGvD,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAyBxD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,oBAAoB,EAAE,EACvC,IAAI,GAAE,oBAAgC,GACrC,yBAAyB,EAAE,CA2E7B;AAmGD;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,SAAS,oBAAoB,EAAE,GACtC,yBAAyB,EAAE,CAoD7B"}