@slicenfer/project-memory-runtime-core 0.3.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 (61) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +12 -0
  3. package/dist/activation/engine.d.ts +27 -0
  4. package/dist/activation/engine.d.ts.map +1 -0
  5. package/dist/activation/engine.js +294 -0
  6. package/dist/activation/engine.js.map +1 -0
  7. package/dist/checkpoints.d.ts +12 -0
  8. package/dist/checkpoints.d.ts.map +1 -0
  9. package/dist/checkpoints.js +94 -0
  10. package/dist/checkpoints.js.map +1 -0
  11. package/dist/compiler/deterministic.d.ts +7 -0
  12. package/dist/compiler/deterministic.d.ts.map +1 -0
  13. package/dist/compiler/deterministic.js +385 -0
  14. package/dist/compiler/deterministic.js.map +1 -0
  15. package/dist/index.d.ts +4 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +4 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/ingestion/service.d.ts +7 -0
  20. package/dist/ingestion/service.d.ts.map +1 -0
  21. package/dist/ingestion/service.js +5 -0
  22. package/dist/ingestion/service.js.map +1 -0
  23. package/dist/recall/packet.d.ts +13 -0
  24. package/dist/recall/packet.d.ts.map +1 -0
  25. package/dist/recall/packet.js +155 -0
  26. package/dist/recall/packet.js.map +1 -0
  27. package/dist/runtime.d.ts +53 -0
  28. package/dist/runtime.d.ts.map +1 -0
  29. package/dist/runtime.js +708 -0
  30. package/dist/runtime.js.map +1 -0
  31. package/dist/scope.d.ts +6 -0
  32. package/dist/scope.d.ts.map +1 -0
  33. package/dist/scope.js +50 -0
  34. package/dist/scope.js.map +1 -0
  35. package/dist/storage/migrations/001_init.sql +113 -0
  36. package/dist/storage/migrations/002_constraints.sql +148 -0
  37. package/dist/storage/migrations/003_event_provenance.sql +36 -0
  38. package/dist/storage/migrations/004_event_capture_path.sql +37 -0
  39. package/dist/storage/migrations/005_activation_indices.sql +15 -0
  40. package/dist/storage/migrations/006_session_checkpoints.sql +54 -0
  41. package/dist/storage/migrations.d.ts +6 -0
  42. package/dist/storage/migrations.d.ts.map +1 -0
  43. package/dist/storage/migrations.js +19 -0
  44. package/dist/storage/migrations.js.map +1 -0
  45. package/dist/storage/sqlite.d.ts +36 -0
  46. package/dist/storage/sqlite.d.ts.map +1 -0
  47. package/dist/storage/sqlite.js +601 -0
  48. package/dist/storage/sqlite.js.map +1 -0
  49. package/dist/types.d.ts +294 -0
  50. package/dist/types.d.ts.map +1 -0
  51. package/dist/types.js +36 -0
  52. package/dist/types.js.map +1 -0
  53. package/dist/utils.d.ts +16 -0
  54. package/dist/utils.d.ts.map +1 -0
  55. package/dist/utils.js +36 -0
  56. package/dist/utils.js.map +1 -0
  57. package/dist/validation.d.ts +24 -0
  58. package/dist/validation.d.ts.map +1 -0
  59. package/dist/validation.js +323 -0
  60. package/dist/validation.js.map +1 -0
  61. package/package.json +52 -0
package/README.md ADDED
@@ -0,0 +1,12 @@
1
+ # Runtime Package
2
+
3
+ Core runtime package for Phase 1.
4
+
5
+ Current scope:
6
+
7
+ - SQLite initialization
8
+ - migration runner
9
+ - idempotent event writes
10
+ - claim / outcome / activation persistence
11
+ - session checkpoint persistence and rehydration verification
12
+ - runtime health and storage stats
@@ -0,0 +1,27 @@
1
+ import type { ActivationLog, Claim, ClaimScope, RecallClaim } from "../types.js";
2
+ export declare function scopeCompatible(claimScope?: ClaimScope, requestedScope?: ClaimScope): boolean;
3
+ export interface RankedClaim {
4
+ claim: Claim;
5
+ rankScore: number;
6
+ activationReasons: string[];
7
+ }
8
+ export interface ActivationResult {
9
+ selected: RecallClaim[];
10
+ dropped: ActivationLog[];
11
+ filtered: ActivationLog[];
12
+ }
13
+ export interface ActivateClaimsOptions {
14
+ projectId: string;
15
+ agentId: string;
16
+ claims: Claim[];
17
+ mode?: "session_brief" | "project_snapshot" | "search";
18
+ scope?: ClaimScope;
19
+ query?: string;
20
+ debug?: boolean;
21
+ now?: string;
22
+ includeResolvedThreads?: boolean;
23
+ maxItems: number;
24
+ maxPerCanonicalKey?: number;
25
+ }
26
+ export declare function activateClaims(options: ActivateClaimsOptions): ActivationResult;
27
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/activation/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,KAAK,EACL,UAAU,EACV,WAAW,EAEZ,MAAM,aAAa,CAAC;AAsDrB,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,UAAU,GAAG,OAAO,CAe7F;AA0GD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,eAAe,GAAG,kBAAkB,GAAG,QAAQ,CAAC;IACvD,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,gBAAgB,CA8I/E"}
@@ -0,0 +1,294 @@
1
+ import { normalizeClaimScope, scopeSignature, scopeSpecificity } from "../scope.js";
2
+ import { nowIso, clamp, hashId, daysBetween } from "../utils.js";
3
+ const DEFAULT_WEIGHTS = {
4
+ relevance: 0.1,
5
+ freshness: 0.1,
6
+ confidence: 0.25,
7
+ importance: 0.05,
8
+ outcome: 0.15,
9
+ scope: 0.3,
10
+ pinBonus: 0.2,
11
+ };
12
+ const FRESHNESS_LAMBDA = {
13
+ fact: 0.01,
14
+ decision: 0.02,
15
+ thread: 0.08,
16
+ };
17
+ function tokenize(text) {
18
+ return text
19
+ .toLowerCase()
20
+ .split(/[^a-z0-9]+/i)
21
+ .map((part) => part.trim())
22
+ .filter(Boolean);
23
+ }
24
+ function claimAnchor(claim) {
25
+ return claim.last_verified_at ?? claim.created_at;
26
+ }
27
+ function freshness(claim, now) {
28
+ const lambda = FRESHNESS_LAMBDA[claim.type];
29
+ return Math.exp(-lambda * daysBetween(claimAnchor(claim), now));
30
+ }
31
+ function activationRecency(claim) {
32
+ if (!claim.last_activated_at)
33
+ return 0;
34
+ return new Date(claim.last_activated_at).getTime();
35
+ }
36
+ function fileScopeMatches(claimFiles, queryFiles) {
37
+ if (!claimFiles?.length)
38
+ return true;
39
+ if (!queryFiles?.length)
40
+ return false;
41
+ return claimFiles.every((claimFile) => queryFiles.includes(claimFile));
42
+ }
43
+ function cwdMatches(claimPrefix, queryPrefix) {
44
+ if (!claimPrefix)
45
+ return true;
46
+ if (!queryPrefix)
47
+ return false;
48
+ return queryPrefix === claimPrefix || queryPrefix.startsWith(`${claimPrefix}/`);
49
+ }
50
+ export function scopeCompatible(claimScope, requestedScope) {
51
+ const normalizedClaimScope = normalizeClaimScope(claimScope);
52
+ const normalizedRequestedScope = normalizeClaimScope(requestedScope);
53
+ if (!normalizedClaimScope)
54
+ return true;
55
+ if (!normalizedRequestedScope)
56
+ return true;
57
+ if (normalizedClaimScope.repo && normalizedClaimScope.repo !== normalizedRequestedScope.repo) {
58
+ return false;
59
+ }
60
+ if (normalizedClaimScope.branch && normalizedClaimScope.branch !== normalizedRequestedScope.branch) {
61
+ return false;
62
+ }
63
+ if (!cwdMatches(normalizedClaimScope.cwd_prefix, normalizedRequestedScope.cwd_prefix))
64
+ return false;
65
+ if (!fileScopeMatches(normalizedClaimScope.files, normalizedRequestedScope.files))
66
+ return false;
67
+ return true;
68
+ }
69
+ function computeScopeMatch(claimScope, requestedScope) {
70
+ const normalizedClaimScope = normalizeClaimScope(claimScope);
71
+ const normalizedRequestedScope = normalizeClaimScope(requestedScope);
72
+ if (!normalizedRequestedScope)
73
+ return normalizedClaimScope ? 0.7 : 1.0;
74
+ if (!normalizedClaimScope)
75
+ return 0.6;
76
+ if (!scopeCompatible(normalizedClaimScope, normalizedRequestedScope))
77
+ return 0;
78
+ const requestedSpecificity = scopeSpecificity(normalizedRequestedScope);
79
+ const claimSpecificity = scopeSpecificity(normalizedClaimScope);
80
+ if (claimSpecificity >= requestedSpecificity)
81
+ return 1.0;
82
+ if (claimSpecificity === 0)
83
+ return 0.6;
84
+ return 0.8;
85
+ }
86
+ function computePinBonus(claim) {
87
+ let bonus = 0;
88
+ if (claim.pinned)
89
+ bonus += 1;
90
+ if (claim.verification_status === "system_verified")
91
+ bonus += 0.75;
92
+ if (claim.verification_status === "user_confirmed")
93
+ bonus += 1;
94
+ if (claim.verification_status === "outcome_verified")
95
+ bonus += 0.5;
96
+ return bonus;
97
+ }
98
+ function computeBaseRelevance(claim, mode = "search") {
99
+ if (mode === "session_brief") {
100
+ if (claim.type === "thread")
101
+ return claim.status === "stale" ? 0.72 : 0.9;
102
+ if (claim.type === "decision")
103
+ return 0.82;
104
+ return claim.status === "stale" ? 0.45 : 0.62;
105
+ }
106
+ if (mode === "project_snapshot") {
107
+ if (claim.type === "thread")
108
+ return claim.status === "stale" ? 0.7 : 0.84;
109
+ if (claim.type === "decision")
110
+ return claim.status === "stale" ? 0.58 : 0.74;
111
+ return claim.status === "stale" ? 0.52 : 0.66;
112
+ }
113
+ return 0.5;
114
+ }
115
+ function computeTextRelevance(claim, query, mode) {
116
+ if (!query)
117
+ return computeBaseRelevance(claim, mode);
118
+ const queryTerms = tokenize(query);
119
+ if (queryTerms.length === 0)
120
+ return computeBaseRelevance(claim, mode);
121
+ const haystack = tokenize(`${claim.canonical_key} ${claim.content} ${claim.type} ${claim.assertion_kind}`);
122
+ if (haystack.length === 0)
123
+ return 0;
124
+ let matches = 0;
125
+ for (const term of queryTerms) {
126
+ if (haystack.includes(term))
127
+ matches += 1;
128
+ }
129
+ return clamp(matches / queryTerms.length, 0, 1);
130
+ }
131
+ function isExpired(claim, now) {
132
+ return Boolean(claim.valid_to && new Date(claim.valid_to).getTime() < new Date(now).getTime());
133
+ }
134
+ function filterClaim(claim, input, now) {
135
+ if (claim.project_id !== input.projectId)
136
+ return { eligible: false, reason: "project_mismatch" };
137
+ if (claim.status === "superseded")
138
+ return { eligible: false, reason: "superseded" };
139
+ if (claim.status === "archived")
140
+ return { eligible: false, reason: "archived" };
141
+ if (isExpired(claim, now))
142
+ return { eligible: false, reason: "expired" };
143
+ if (claim.verification_status === "disputed")
144
+ return { eligible: false, reason: "verification_guard" };
145
+ if (input.mode === "session_brief" && claim.verification_status === "unverified") {
146
+ return { eligible: false, reason: "verification_guard" };
147
+ }
148
+ if (!scopeCompatible(claim.scope, input.scope))
149
+ return { eligible: false, reason: "scope_mismatch" };
150
+ if (!input.includeResolvedThreads && claim.type === "thread" && claim.thread_status === "resolved") {
151
+ return { eligible: false, reason: "archived" };
152
+ }
153
+ return { eligible: true };
154
+ }
155
+ function claimPriorityBucket(claim) {
156
+ if (claim.type === "decision" && claim.pinned)
157
+ return 0;
158
+ if (claim.type === "thread")
159
+ return 1;
160
+ if (claim.verification_status === "system_verified" || claim.verification_status === "user_confirmed") {
161
+ return 2;
162
+ }
163
+ return 3;
164
+ }
165
+ export function activateClaims(options) {
166
+ const now = options.now ?? nowIso();
167
+ const filtered = [];
168
+ const dropped = [];
169
+ const ranked = [];
170
+ for (const claim of options.claims) {
171
+ const filter = filterClaim(claim, {
172
+ projectId: options.projectId,
173
+ scope: options.scope,
174
+ includeResolvedThreads: options.includeResolvedThreads ?? false,
175
+ mode: options.mode,
176
+ }, now);
177
+ if (!filter.eligible) {
178
+ filtered.push({
179
+ id: hashId("flt", options.projectId, claim.id, filter.reason, now),
180
+ ts: now,
181
+ project_id: options.projectId,
182
+ claim_id: claim.id,
183
+ eligibility_result: "filtered",
184
+ suppression_reason: filter.reason,
185
+ });
186
+ continue;
187
+ }
188
+ const relevance = computeTextRelevance(claim, options.query, options.mode);
189
+ const fresh = freshness(claim, now);
190
+ const confidence = claim.confidence;
191
+ const importance = claim.importance;
192
+ const outcome = clamp((claim.outcome_score + 1) / 2, 0, 1);
193
+ const scopeMatch = computeScopeMatch(claim.scope, options.scope);
194
+ const pinBonus = computePinBonus(claim);
195
+ const score = DEFAULT_WEIGHTS.relevance * relevance +
196
+ DEFAULT_WEIGHTS.freshness * fresh +
197
+ DEFAULT_WEIGHTS.confidence * confidence +
198
+ DEFAULT_WEIGHTS.importance * importance +
199
+ DEFAULT_WEIGHTS.outcome * outcome +
200
+ DEFAULT_WEIGHTS.scope * scopeMatch +
201
+ DEFAULT_WEIGHTS.pinBonus * pinBonus;
202
+ const reasons = [
203
+ `relevance:${relevance.toFixed(2)}`,
204
+ `freshness:${fresh.toFixed(2)}`,
205
+ `scope:${scopeMatch.toFixed(2)}`,
206
+ `verification:${claim.verification_status}`,
207
+ ];
208
+ if (claim.pinned)
209
+ reasons.push("pinned");
210
+ if (claim.type === "thread" && claim.thread_status)
211
+ reasons.push(`thread:${claim.thread_status}`);
212
+ if (claim.last_activated_at)
213
+ reasons.push("hot:recently_activated");
214
+ ranked.push({
215
+ claim,
216
+ rankScore: score,
217
+ activationReasons: reasons,
218
+ });
219
+ }
220
+ ranked.sort((a, b) => {
221
+ const bucketDelta = claimPriorityBucket(a.claim) - claimPriorityBucket(b.claim);
222
+ if (bucketDelta !== 0)
223
+ return bucketDelta;
224
+ const specificityDelta = scopeSpecificity(normalizeClaimScope(b.claim.scope)) -
225
+ scopeSpecificity(normalizeClaimScope(a.claim.scope));
226
+ if (specificityDelta !== 0)
227
+ return specificityDelta;
228
+ const scoreDelta = b.rankScore - a.rankScore;
229
+ if (Math.abs(scoreDelta) > 1e-6)
230
+ return scoreDelta;
231
+ return activationRecency(b.claim) - activationRecency(a.claim);
232
+ });
233
+ const selected = [];
234
+ const seenSingletons = new Set();
235
+ const maxPerCanonicalKey = options.maxPerCanonicalKey ?? 1;
236
+ const seenCounts = new Map();
237
+ for (const entry of ranked) {
238
+ const singletonSlot = entry.claim.canonical_key;
239
+ const countKey = entry.claim.cardinality === "singleton"
240
+ ? singletonSlot
241
+ : `${entry.claim.canonical_key}:${scopeSignature(entry.claim.scope)}`;
242
+ const currentCount = seenCounts.get(countKey) ?? 0;
243
+ if (entry.claim.cardinality === "singleton" && seenSingletons.has(singletonSlot)) {
244
+ dropped.push({
245
+ id: hashId("drp", options.projectId, entry.claim.id, "low_rank", now),
246
+ ts: now,
247
+ project_id: options.projectId,
248
+ claim_id: entry.claim.id,
249
+ eligibility_result: "passed",
250
+ suppression_reason: "low_rank",
251
+ rank_score: entry.rankScore,
252
+ packing_decision: "dropped",
253
+ });
254
+ continue;
255
+ }
256
+ if (currentCount >= maxPerCanonicalKey) {
257
+ dropped.push({
258
+ id: hashId("drp", options.projectId, entry.claim.id, "low_rank", now),
259
+ ts: now,
260
+ project_id: options.projectId,
261
+ claim_id: entry.claim.id,
262
+ eligibility_result: "passed",
263
+ suppression_reason: "low_rank",
264
+ rank_score: entry.rankScore,
265
+ packing_decision: "dropped",
266
+ });
267
+ continue;
268
+ }
269
+ if (selected.length >= options.maxItems) {
270
+ dropped.push({
271
+ id: hashId("drp", options.projectId, entry.claim.id, "token_budget", now),
272
+ ts: now,
273
+ project_id: options.projectId,
274
+ claim_id: entry.claim.id,
275
+ eligibility_result: "passed",
276
+ suppression_reason: "token_budget",
277
+ rank_score: entry.rankScore,
278
+ packing_decision: "dropped",
279
+ });
280
+ continue;
281
+ }
282
+ selected.push({
283
+ ...entry.claim,
284
+ recall_rank: selected.length + 1,
285
+ activation_reasons: entry.activationReasons,
286
+ evidence_refs: [...entry.claim.source_event_ids],
287
+ });
288
+ seenCounts.set(countKey, currentCount + 1);
289
+ if (entry.claim.cardinality === "singleton")
290
+ seenSingletons.add(singletonSlot);
291
+ }
292
+ return { selected, dropped, filtered };
293
+ }
294
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/activation/engine.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,eAAe,GAAG;IACtB,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,GAAG;CACL,CAAC;AAEX,MAAM,gBAAgB,GAAkC;IACtD,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,IAAI;CACb,CAAC;AAEF,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,IAAI;SACR,WAAW,EAAE;SACb,KAAK,CAAC,aAAa,CAAC;SACpB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,WAAW,CAAC,KAAY;IAC/B,OAAO,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,UAAU,CAAC;AACpD,CAAC;AAED,SAAS,SAAS,CAAC,KAAY,EAAE,GAAW;IAC1C,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAY;IACrC,IAAI,CAAC,KAAK,CAAC,iBAAiB;QAAE,OAAO,CAAC,CAAC;IACvC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,OAAO,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAgC,EAAE,UAAgC;IAC1F,IAAI,CAAC,UAAU,EAAE,MAAM;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,CAAC,UAAU,EAAE,MAAM;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,UAAU,CAAC,WAA+B,EAAE,WAA+B;IAClF,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAC/B,OAAO,WAAW,KAAK,WAAW,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAAuB,EAAE,cAA2B;IAClF,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAC7D,MAAM,wBAAwB,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAErE,IAAI,CAAC,oBAAoB;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,CAAC,wBAAwB;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,oBAAoB,CAAC,IAAI,IAAI,oBAAoB,CAAC,IAAI,KAAK,wBAAwB,CAAC,IAAI,EAAE,CAAC;QAC7F,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,oBAAoB,CAAC,MAAM,IAAI,oBAAoB,CAAC,MAAM,KAAK,wBAAwB,CAAC,MAAM,EAAE,CAAC;QACnG,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,UAAU,EAAE,wBAAwB,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IACpG,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,KAAK,EAAE,wBAAwB,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAChG,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,UAAkC,EAAE,cAAsC;IACnG,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAC7D,MAAM,wBAAwB,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAErE,IAAI,CAAC,wBAAwB;QAAE,OAAO,oBAAoB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACvE,IAAI,CAAC,oBAAoB;QAAE,OAAO,GAAG,CAAC;IACtC,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE,wBAAwB,CAAC;QAAE,OAAO,CAAC,CAAC;IAE/E,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,wBAAwB,CAAC,CAAC;IACxE,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;IAEhE,IAAI,gBAAgB,IAAI,oBAAoB;QAAE,OAAO,GAAG,CAAC;IACzD,IAAI,gBAAgB,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACvC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CAAC,KAAY;IACnC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,CAAC,MAAM;QAAE,KAAK,IAAI,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,mBAAmB,KAAK,iBAAiB;QAAE,KAAK,IAAI,IAAI,CAAC;IACnE,IAAI,KAAK,CAAC,mBAAmB,KAAK,gBAAgB;QAAE,KAAK,IAAI,CAAC,CAAC;IAC/D,IAAI,KAAK,CAAC,mBAAmB,KAAK,kBAAkB;QAAE,KAAK,IAAI,GAAG,CAAC;IACnE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAY,EACZ,OAAsC,QAAQ;IAE9C,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAC1E,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC;QAC3C,OAAO,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAChD,CAAC;IAED,IAAI,IAAI,KAAK,kBAAkB,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1E,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;YAAE,OAAO,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7E,OAAO,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAChD,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAY,EACZ,KAAyB,EACzB,IAAmC;IAEnC,IAAI,CAAC,KAAK;QAAE,OAAO,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAEtE,MAAM,QAAQ,GAAG,QAAQ,CACvB,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,cAAc,EAAE,CAChF,CAAC;IACF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEpC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,SAAS,CAAC,KAAY,EAAE,GAAW;IAC1C,OAAO,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AACjG,CAAC;AAED,SAAS,WAAW,CAClB,KAAY,EACZ,KAKC,EACD,GAAW;IAEX,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,SAAS;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;IACjG,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IACpF,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAChF,IAAI,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACzE,IAAI,KAAK,CAAC,mBAAmB,KAAK,UAAU;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IACvG,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,mBAAmB,KAAK,YAAY,EAAE,CAAC;QACjF,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACrG,IAAI,CAAC,KAAK,CAAC,sBAAsB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;QACnG,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAY;IACvC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IACxD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,mBAAmB,KAAK,iBAAiB,IAAI,KAAK,CAAC,mBAAmB,KAAK,gBAAgB,EAAE,CAAC;QACtG,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AA4BD,MAAM,UAAU,cAAc,CAAC,OAA8B;IAC3D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,WAAW,CACxB,KAAK,EACL;YACE,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,sBAAsB,EAAE,OAAO,CAAC,sBAAsB,IAAI,KAAK;YAC/D,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,EACD,GAAG,CACJ,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,QAAQ,CAAC,IAAI,CAAC;gBACZ,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;gBAClE,EAAE,EAAE,GAAG;gBACP,UAAU,EAAE,OAAO,CAAC,SAAS;gBAC7B,QAAQ,EAAE,KAAK,CAAC,EAAE;gBAClB,kBAAkB,EAAE,UAAU;gBAC9B,kBAAkB,EAAE,MAAM,CAAC,MAAM;aAClC,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3E,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACpC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACpC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAExC,MAAM,KAAK,GACT,eAAe,CAAC,SAAS,GAAG,SAAS;YACrC,eAAe,CAAC,SAAS,GAAG,KAAK;YACjC,eAAe,CAAC,UAAU,GAAG,UAAU;YACvC,eAAe,CAAC,UAAU,GAAG,UAAU;YACvC,eAAe,CAAC,OAAO,GAAG,OAAO;YACjC,eAAe,CAAC,KAAK,GAAG,UAAU;YAClC,eAAe,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEtC,MAAM,OAAO,GAAG;YACd,aAAa,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACnC,aAAa,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAC/B,SAAS,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAChC,gBAAgB,KAAK,CAAC,mBAAmB,EAAE;SAC5C,CAAC;QACF,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,aAAa;YAAE,OAAO,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;QAClG,IAAI,KAAK,CAAC,iBAAiB;YAAE,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAEpE,MAAM,CAAC,IAAI,CAAC;YACV,KAAK;YACL,SAAS,EAAE,KAAK;YAChB,iBAAiB,EAAE,OAAO;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACnB,MAAM,WAAW,GAAG,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAChF,IAAI,WAAW,KAAK,CAAC;YAAE,OAAO,WAAW,CAAC;QAC1C,MAAM,gBAAgB,GACpB,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACpD,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACvD,IAAI,gBAAgB,KAAK,CAAC;YAAE,OAAO,gBAAgB,CAAC;QACpD,MAAM,UAAU,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;QAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI;YAAE,OAAO,UAAU,CAAC;QACnD,OAAO,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE7C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC;QAChD,MAAM,QAAQ,GACZ,KAAK,CAAC,KAAK,CAAC,WAAW,KAAK,WAAW;YACrC,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,IAAI,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1E,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEnD,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,KAAK,WAAW,IAAI,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YACjF,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC;gBACrE,EAAE,EAAE,GAAG;gBACP,UAAU,EAAE,OAAO,CAAC,SAAS;gBAC7B,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE;gBACxB,kBAAkB,EAAE,QAAQ;gBAC5B,kBAAkB,EAAE,UAAU;gBAC9B,UAAU,EAAE,KAAK,CAAC,SAAS;gBAC3B,gBAAgB,EAAE,SAAS;aAC5B,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,YAAY,IAAI,kBAAkB,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC;gBACrE,EAAE,EAAE,GAAG;gBACP,UAAU,EAAE,OAAO,CAAC,SAAS;gBAC7B,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE;gBACxB,kBAAkB,EAAE,QAAQ;gBAC5B,kBAAkB,EAAE,UAAU;gBAC9B,UAAU,EAAE,KAAK,CAAC,SAAS;gBAC3B,gBAAgB,EAAE,SAAS;aAC5B,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,cAAc,EAAE,GAAG,CAAC;gBACzE,EAAE,EAAE,GAAG;gBACP,UAAU,EAAE,OAAO,CAAC,SAAS;gBAC7B,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE;gBACxB,kBAAkB,EAAE,QAAQ;gBAC5B,kBAAkB,EAAE,cAAc;gBAClC,UAAU,EAAE,KAAK,CAAC,SAAS;gBAC3B,gBAAgB,EAAE,SAAS;aAC5B,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC;YACZ,GAAG,KAAK,CAAC,KAAK;YACd,WAAW,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC;YAChC,kBAAkB,EAAE,KAAK,CAAC,iBAAiB;YAC3C,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC;SACjD,CAAC,CAAC;QACH,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;QAC3C,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,KAAK,WAAW;YAAE,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACjF,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AACzC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { RecallCheckpoint, SessionCheckpoint } from "./types.js";
2
+ export declare function checkpointPacketHash(value: unknown): string;
3
+ export declare function currentRepoHead(cwd?: string): string | undefined;
4
+ export declare function currentBranch(cwd?: string): string | undefined;
5
+ export declare function normalizeCheckpointFilePath(cwd: string | undefined, filePath: string): string;
6
+ export declare function resolveCheckpointFilePath(cwd: string | undefined, filePath: string): string;
7
+ export declare function computeCheckpointFileDigests(cwd: string | undefined, hotFiles: string[]): Record<string, string>;
8
+ export declare function verifyCheckpointFileDigests(cwd: string | undefined, hotFiles: string[], expectedDigests: Record<string, string> | undefined): string[];
9
+ export declare function toRecallCheckpoint(checkpoint: SessionCheckpoint, options?: {
10
+ hideNextAction?: boolean;
11
+ }): RecallCheckpoint;
12
+ //# sourceMappingURL=checkpoints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoints.d.ts","sourceRoot":"","sources":["../src/checkpoints.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAmBtE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE3D;AAED,wBAAgB,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEhE;AAED,wBAAgB,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI9D;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAS7F;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG3F;AAED,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,QAAQ,EAAE,MAAM,EAAE,GACjB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAaxB;AAED,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,QAAQ,EAAE,MAAM,EAAE,EAClB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAClD,MAAM,EAAE,CAaV;AAED,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,iBAAiB,EAC7B,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,GACzC,gBAAgB,CAoBlB"}
@@ -0,0 +1,94 @@
1
+ import { createHash } from "node:crypto";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { execFileSync } from "node:child_process";
5
+ function sha256(value) {
6
+ return createHash("sha256").update(value).digest("hex");
7
+ }
8
+ function runGit(cwd, args) {
9
+ if (!cwd)
10
+ return undefined;
11
+ try {
12
+ return execFileSync("git", ["-C", cwd, ...args], {
13
+ encoding: "utf8",
14
+ stdio: ["ignore", "pipe", "ignore"],
15
+ }).trim();
16
+ }
17
+ catch {
18
+ return undefined;
19
+ }
20
+ }
21
+ export function checkpointPacketHash(value) {
22
+ return sha256(JSON.stringify(value));
23
+ }
24
+ export function currentRepoHead(cwd) {
25
+ return runGit(cwd, ["rev-parse", "HEAD"]);
26
+ }
27
+ export function currentBranch(cwd) {
28
+ const branch = runGit(cwd, ["rev-parse", "--abbrev-ref", "HEAD"]);
29
+ if (!branch || branch === "HEAD")
30
+ return undefined;
31
+ return branch;
32
+ }
33
+ export function normalizeCheckpointFilePath(cwd, filePath) {
34
+ if (!cwd)
35
+ return filePath;
36
+ if (path.isAbsolute(filePath)) {
37
+ const relative = path.relative(cwd, filePath);
38
+ if (relative && !relative.startsWith("..") && !path.isAbsolute(relative)) {
39
+ return relative;
40
+ }
41
+ }
42
+ return filePath;
43
+ }
44
+ export function resolveCheckpointFilePath(cwd, filePath) {
45
+ if (!cwd || path.isAbsolute(filePath))
46
+ return filePath;
47
+ return path.resolve(cwd, filePath);
48
+ }
49
+ export function computeCheckpointFileDigests(cwd, hotFiles) {
50
+ const digests = {};
51
+ for (const filePath of hotFiles) {
52
+ const resolved = resolveCheckpointFilePath(cwd, filePath);
53
+ if (!fs.existsSync(resolved) || !fs.statSync(resolved).isFile()) {
54
+ digests[filePath] = "missing";
55
+ continue;
56
+ }
57
+ digests[filePath] = sha256(fs.readFileSync(resolved));
58
+ }
59
+ return digests;
60
+ }
61
+ export function verifyCheckpointFileDigests(cwd, hotFiles, expectedDigests) {
62
+ if (!expectedDigests)
63
+ return [];
64
+ const changed = [];
65
+ const actualDigests = computeCheckpointFileDigests(cwd, hotFiles);
66
+ for (const filePath of hotFiles) {
67
+ if (actualDigests[filePath] !== expectedDigests[filePath]) {
68
+ changed.push(filePath);
69
+ }
70
+ }
71
+ return changed;
72
+ }
73
+ export function toRecallCheckpoint(checkpoint, options = {}) {
74
+ return {
75
+ id: checkpoint.id,
76
+ created_at: checkpoint.created_at,
77
+ project_id: checkpoint.project_id,
78
+ session_id: checkpoint.session_id,
79
+ workspace_id: checkpoint.workspace_id,
80
+ branch: checkpoint.branch,
81
+ repo_head: checkpoint.repo_head,
82
+ status: checkpoint.status,
83
+ source: checkpoint.source,
84
+ summary: checkpoint.summary,
85
+ current_goal: checkpoint.current_goal,
86
+ next_action: options.hideNextAction ? undefined : checkpoint.next_action,
87
+ blocking_reason: checkpoint.blocking_reason,
88
+ hot_claim_ids: [...checkpoint.hot_claim_ids],
89
+ hot_files: [...checkpoint.hot_files],
90
+ evidence_refs: [...checkpoint.evidence_refs],
91
+ stale_reason: checkpoint.stale_reason,
92
+ };
93
+ }
94
+ //# sourceMappingURL=checkpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoints.js","sourceRoot":"","sources":["../src/checkpoints.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Claim, NormalizedEvent, Outcome } from "../types.js";
2
+ export interface DeterministicExtractionResult {
3
+ claims: Claim[];
4
+ outcomes: Outcome[];
5
+ }
6
+ export declare function extractDeterministicArtifacts(event: NormalizedEvent): DeterministicExtractionResult;
7
+ //# sourceMappingURL=deterministic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deterministic.d.ts","sourceRoot":"","sources":["../../src/compiler/deterministic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAc,eAAe,EAAE,OAAO,EAAkB,MAAM,aAAa,CAAC;AAmZ/F,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,eAAe,GACrB,6BAA6B,CA4D/B"}