@superbee/core 0.2.0-pre.31 → 0.2.0-pre.33

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 (120) hide show
  1. package/README.md +7 -0
  2. package/dist/backend.d.ts +3 -1
  3. package/dist/backend.d.ts.map +1 -1
  4. package/dist/backend.js +76 -8
  5. package/dist/backend.js.map +1 -1
  6. package/dist/bundle-health/report.d.ts +5 -0
  7. package/dist/bundle-health/report.d.ts.map +1 -1
  8. package/dist/bundle-health/report.js +17 -1
  9. package/dist/bundle-health/report.js.map +1 -1
  10. package/dist/bundle-ops.d.ts +1 -1
  11. package/dist/bundle-ops.d.ts.map +1 -1
  12. package/dist/bundle-ops.js +2 -2
  13. package/dist/bundle-ops.js.map +1 -1
  14. package/dist/connectors.d.ts +10 -0
  15. package/dist/connectors.d.ts.map +1 -1
  16. package/dist/connectors.js +13 -2
  17. package/dist/connectors.js.map +1 -1
  18. package/dist/document-mutation.d.ts +3 -0
  19. package/dist/document-mutation.d.ts.map +1 -1
  20. package/dist/document-mutation.js +24 -2
  21. package/dist/document-mutation.js.map +1 -1
  22. package/dist/engine.d.ts +3 -1
  23. package/dist/engine.d.ts.map +1 -1
  24. package/dist/engine.js +16 -4
  25. package/dist/engine.js.map +1 -1
  26. package/dist/filesystem-identity.d.ts +9 -7
  27. package/dist/filesystem-identity.d.ts.map +1 -1
  28. package/dist/filesystem-identity.js +58 -5
  29. package/dist/filesystem-identity.js.map +1 -1
  30. package/dist/index.d.ts +4 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +2 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/inventory-guard.d.ts +58 -0
  35. package/dist/inventory-guard.d.ts.map +1 -0
  36. package/dist/inventory-guard.js +169 -0
  37. package/dist/inventory-guard.js.map +1 -0
  38. package/dist/kind-authoring.d.ts.map +1 -1
  39. package/dist/kind-authoring.js +1 -0
  40. package/dist/kind-authoring.js.map +1 -1
  41. package/dist/kind-deprecation.d.ts +32 -0
  42. package/dist/kind-deprecation.d.ts.map +1 -0
  43. package/dist/kind-deprecation.js +141 -0
  44. package/dist/kind-deprecation.js.map +1 -0
  45. package/dist/kinds.d.ts +31 -1
  46. package/dist/kinds.d.ts.map +1 -1
  47. package/dist/kinds.js +13 -0
  48. package/dist/kinds.js.map +1 -1
  49. package/dist/link-types.d.ts +3 -2
  50. package/dist/link-types.d.ts.map +1 -1
  51. package/dist/link-types.js +6 -3
  52. package/dist/link-types.js.map +1 -1
  53. package/dist/memory-backend.d.ts +3 -0
  54. package/dist/memory-backend.d.ts.map +1 -1
  55. package/dist/memory-backend.js +38 -0
  56. package/dist/memory-backend.js.map +1 -1
  57. package/dist/okf-standard-fields.d.ts +3 -0
  58. package/dist/okf-standard-fields.d.ts.map +1 -1
  59. package/dist/okf-standard-fields.js +3 -0
  60. package/dist/okf-standard-fields.js.map +1 -1
  61. package/dist/recipe-lifecycle/evolution.d.ts +13 -1
  62. package/dist/recipe-lifecycle/evolution.d.ts.map +1 -1
  63. package/dist/recipe-lifecycle/evolution.js +88 -9
  64. package/dist/recipe-lifecycle/evolution.js.map +1 -1
  65. package/dist/recipe-lifecycle/index.d.ts +4 -0
  66. package/dist/recipe-lifecycle/index.d.ts.map +1 -1
  67. package/dist/recipe-lifecycle/index.js +2 -0
  68. package/dist/recipe-lifecycle/index.js.map +1 -1
  69. package/dist/recipe-lifecycle/install.d.ts.map +1 -1
  70. package/dist/recipe-lifecycle/install.js +11 -1
  71. package/dist/recipe-lifecycle/install.js.map +1 -1
  72. package/dist/recipe-lifecycle/retirement-apply.d.ts +59 -0
  73. package/dist/recipe-lifecycle/retirement-apply.d.ts.map +1 -0
  74. package/dist/recipe-lifecycle/retirement-apply.js +165 -0
  75. package/dist/recipe-lifecycle/retirement-apply.js.map +1 -0
  76. package/dist/recipe-lifecycle/retirement.d.ts +89 -0
  77. package/dist/recipe-lifecycle/retirement.d.ts.map +1 -0
  78. package/dist/recipe-lifecycle/retirement.js +347 -0
  79. package/dist/recipe-lifecycle/retirement.js.map +1 -0
  80. package/dist/record-overlay/index.d.ts +1 -1
  81. package/dist/record-overlay/index.d.ts.map +1 -1
  82. package/dist/record-overlay/index.js +1 -1
  83. package/dist/record-overlay/index.js.map +1 -1
  84. package/dist/record-overlay/policy.d.ts +5 -0
  85. package/dist/record-overlay/policy.d.ts.map +1 -1
  86. package/dist/record-overlay/policy.js +10 -3
  87. package/dist/record-overlay/policy.js.map +1 -1
  88. package/dist/source-engine/driver.d.ts +40 -0
  89. package/dist/source-engine/driver.d.ts.map +1 -0
  90. package/dist/source-engine/driver.js +392 -0
  91. package/dist/source-engine/driver.js.map +1 -0
  92. package/dist/source-engine/evidence.d.ts +39 -0
  93. package/dist/source-engine/evidence.d.ts.map +1 -0
  94. package/dist/source-engine/evidence.js +54 -0
  95. package/dist/source-engine/evidence.js.map +1 -0
  96. package/dist/source-engine/index.d.ts +7 -0
  97. package/dist/source-engine/index.d.ts.map +1 -1
  98. package/dist/source-engine/index.js +5 -0
  99. package/dist/source-engine/index.js.map +1 -1
  100. package/dist/source-engine/observe.d.ts +1 -9
  101. package/dist/source-engine/observe.d.ts.map +1 -1
  102. package/dist/source-engine/observe.js +14 -374
  103. package/dist/source-engine/observe.js.map +1 -1
  104. package/dist/source-engine/overlay.d.ts +2 -1
  105. package/dist/source-engine/overlay.d.ts.map +1 -1
  106. package/dist/source-engine/overlay.js +3 -3
  107. package/dist/source-engine/overlay.js.map +1 -1
  108. package/dist/source-engine/snapshot.d.ts +104 -0
  109. package/dist/source-engine/snapshot.d.ts.map +1 -0
  110. package/dist/source-engine/snapshot.js +240 -0
  111. package/dist/source-engine/snapshot.js.map +1 -0
  112. package/dist/source-profiles/index.d.ts +1 -1
  113. package/dist/source-profiles/index.js +1 -1
  114. package/dist/storage.d.ts +2 -0
  115. package/dist/storage.d.ts.map +1 -1
  116. package/dist/storage.js +1 -0
  117. package/dist/storage.js.map +1 -1
  118. package/dist/types.d.ts +2 -0
  119. package/dist/types.d.ts.map +1 -1
  120. package/package.json +1 -1
@@ -0,0 +1,392 @@
1
+ /** Internal observation owner shared by network and finite acquisition wrappers. */
2
+ import { changeBetween, mapRecord } from "../connectors.js";
3
+ import { overlayCanonicalJson } from "../record-overlay/canonical.js";
4
+ import { SourceStop } from "./guard.js";
5
+ export const DEFAULT_MISSING_THRESHOLD = 2;
6
+ export const MAX_CURSOR_CHARS = 8192;
7
+ export const MAX_REPLAY_FAILURES = 5;
8
+ export const UNSUPPORTED_CONTENT = "SOURCE_UNSUPPORTED_CONTENT";
9
+ const record = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
10
+ const clip = (text, n) => (text.length > n ? text.slice(0, n - 1) + "…" : text);
11
+ /** JSON data only: finite numbers, plain objects and arrays, no undefined members. */
12
+ export function isJsonData(value, depth = 0) {
13
+ if (depth > 32)
14
+ return false;
15
+ if (value === null || typeof value === "string" || typeof value === "boolean")
16
+ return true;
17
+ if (typeof value === "number")
18
+ return Number.isFinite(value);
19
+ if (Array.isArray(value))
20
+ return value.every((item) => isJsonData(item, depth + 1));
21
+ if (!record(value))
22
+ return false;
23
+ // A plain object from any realm: its prototype is null or a prototype that itself has none.
24
+ const proto = Object.getPrototypeOf(value);
25
+ if (proto !== null && Object.getPrototypeOf(proto) !== null)
26
+ return false;
27
+ return Object.values(value).every((item) => item !== undefined && isJsonData(item, depth + 1));
28
+ }
29
+ /** The page as the engine accepts it, or why not. */
30
+ function pageProblem(page) {
31
+ if (!record(page))
32
+ return "page_invalid";
33
+ if (!Array.isArray(page.records) || typeof page.more !== "boolean" || typeof page.complete !== "boolean")
34
+ return "page_invalid";
35
+ if (page.diagnostics !== undefined && !(Array.isArray(page.diagnostics) && page.diagnostics.every((d) => record(d) && typeof d.code === "string" && typeof d.message === "string")))
36
+ return "page_invalid";
37
+ if (page.validators !== undefined && !(record(page.validators) && Object.values(page.validators).every((v) => typeof v === "string")))
38
+ return "page_invalid";
39
+ const cursor = page.nextCursor === undefined ? null : page.nextCursor;
40
+ if (!isJsonData(cursor) || (overlayCanonicalJson(cursor) ?? "").length > MAX_CURSOR_CHARS)
41
+ return "cursor_invalid";
42
+ return undefined;
43
+ }
44
+ /**
45
+ * Diff one page against the stored records. Within a page the last occurrence of an id wins and is
46
+ * diffed against the stored entry, so every change's `before` is what the overlay last accepted.
47
+ */
48
+ function diffPage(state, page, bound, observedAt) {
49
+ const diagnostics = [];
50
+ const profileDiagnostics = [...(page.diagnostics ?? [])].map((d) => ({ ...d }));
51
+ const last = new Map();
52
+ const seen = new Set();
53
+ let notObjects = 0;
54
+ let duplicates = 0;
55
+ for (const raw of page.records) {
56
+ if (!record(raw)) {
57
+ notObjects += 1;
58
+ continue;
59
+ }
60
+ const mapped = mapRecord(bound.source, raw, bound.kind);
61
+ diagnostics.push(...mapped.diagnostics);
62
+ const id = mapped.external_id;
63
+ if (id === null)
64
+ continue;
65
+ seen.add(id);
66
+ if (last.has(id))
67
+ duplicates += 1;
68
+ last.set(id, mapped);
69
+ }
70
+ if (notObjects)
71
+ profileDiagnostics.push({ code: "RECORD_NOT_OBJECT", message: "records that are not JSON objects were skipped", count: notObjects });
72
+ if (duplicates)
73
+ profileDiagnostics.push({ code: "RECORD_DUPLICATE", message: "a page listed the same record more than once; the last one was used", count: duplicates });
74
+ const changes = [];
75
+ const entries = new Map();
76
+ for (const [id, mapped] of last) {
77
+ const stored = Object.hasOwn(state.records, id) ? state.records[id] : undefined;
78
+ if (mapped.kind === "refused") {
79
+ // Refused but present: still observed, so never missing; its accepted values stay.
80
+ if (stored)
81
+ entries.set(id, { ...stored, missing: 0, seen_at: observedAt, first_missing_at: undefined });
82
+ continue;
83
+ }
84
+ const previous = stored && !stored.gone ? stored.after : null;
85
+ const change = changeBetween(previous, mapped, { external_id: id, change_kind: previous === null ? "new" : "changed" });
86
+ entries.set(id, { after: change.after, digest: change.content_digest, missing: 0, seen_at: observedAt });
87
+ if (previous === null || change.changed_fields.length > 0)
88
+ changes.push(change);
89
+ }
90
+ return { changes, entries, seen, diagnostics, profileDiagnostics };
91
+ }
92
+ /** Disappearances at the end of a complete observation: every present record the pass did not list. */
93
+ function missingAfterComplete(records, seen, threshold, observedAt) {
94
+ const changes = [];
95
+ const entries = new Map();
96
+ for (const [id, entry] of Object.entries(records)) {
97
+ if (entry.gone || seen.has(id))
98
+ continue;
99
+ const missing = entry.missing + 1;
100
+ const firstMissingAt = entry.first_missing_at ?? observedAt;
101
+ if (missing >= threshold) {
102
+ entries.set(id, { ...entry, missing, first_missing_at: firstMissingAt, gone: true });
103
+ changes.push({
104
+ external_id: id, change_kind: "disappeared", changed_fields: [], before: { ...entry.after }, after: null,
105
+ content_digest: entry.digest, missing_count: missing, first_missing_at: firstMissingAt,
106
+ });
107
+ }
108
+ else {
109
+ entries.set(id, { ...entry, missing, first_missing_at: firstMissingAt });
110
+ }
111
+ }
112
+ return { changes, entries };
113
+ }
114
+ /** Drop `undefined` members so the stored state is plain JSON. */
115
+ function entryJson(entry) {
116
+ const { first_missing_at: firstMissingAt, gone, ...rest } = entry;
117
+ return { ...rest, ...(firstMissingAt !== undefined ? { first_missing_at: firstMissingAt } : {}), ...(gone ? { gone } : {}) };
118
+ }
119
+ /** The ids a commit did not write, read defensively. */
120
+ function commitResult(result) {
121
+ const ids = (value) => (Array.isArray(value) ? value.filter((id) => typeof id === "string") : []);
122
+ const retry = new Set(record(result) ? ids(result.retry) : []);
123
+ const hold = new Set((record(result) ? ids(result.hold) : []).filter((id) => !retry.has(id)));
124
+ return { hold, retry };
125
+ }
126
+ export async function driveObservation(options) {
127
+ const { bound, receipt, observedAt, mode, resumed, signal, extraFindings } = options;
128
+ const key = bound.policy.feed;
129
+ let state = options.initial;
130
+ let version = options.version;
131
+ const baseline = version === null;
132
+ let cursor = mode === "complete" ? null : state.cursor;
133
+ const threshold = bound.policy.missing_threshold ?? DEFAULT_MISSING_THRESHOLD;
134
+ const sourceComplete = bound.source.completeness === "complete";
135
+ let stop;
136
+ let stopUrl;
137
+ const errorText = (error) => error instanceof Error ? error.message : String(error);
138
+ /** Store `next` after a commit; false when the store refused it and the run has stopped. */
139
+ const store = async (next) => {
140
+ try {
141
+ version = await options.state.write(key, next, version);
142
+ state = next;
143
+ receipt.pending = Object.keys(next.pending ?? {}).length;
144
+ return true;
145
+ }
146
+ catch (error) {
147
+ const conflict = record(error) && error.code === "MACHINE_STATE_CONFLICT";
148
+ stop = { outcome: "failed", reason: conflict ? "state_conflict" : "state_unwritable", retry: true };
149
+ return false;
150
+ }
151
+ };
152
+ try {
153
+ // Changes an earlier commit asked to retry are planned again before anything is fetched. A
154
+ // record that has since disappeared has nothing left to write, unless the held change is the
155
+ // record coming back.
156
+ const pendingIds = signal.aborted ? [] : Object.keys(state.pending ?? {}).sort();
157
+ if (pendingIds.length) {
158
+ const pending = state.pending;
159
+ const live = pendingIds.filter((id) => !state.records[id]?.gone || pending[id].change.change_kind === "new");
160
+ const changes = live.map((id) => pending[id].change);
161
+ const records = {};
162
+ for (const change of changes)
163
+ records[change.external_id] = { fields: { ...(change.after ?? change.before ?? {}) } };
164
+ let result;
165
+ let failure;
166
+ if (live.length) {
167
+ try {
168
+ result = commitResult(await options.commit({
169
+ feed: key, provider: bound.policy.provider, observed_at: observedAt, page: 0, replay: true, changes, records, baseline: false, complete: false,
170
+ }));
171
+ }
172
+ catch (error) {
173
+ failure = errorText(error);
174
+ }
175
+ }
176
+ const nextRecords = { ...state.records };
177
+ const nextPending = {};
178
+ const dropped = [];
179
+ for (const id of live) {
180
+ const entry = pending[id];
181
+ if (failure !== undefined) {
182
+ // A replay the commit cannot take stays pending, so a later sighting can still supersede
183
+ // it, until it has failed too often.
184
+ const failures = (entry.replay_failures ?? 0) + 1;
185
+ if (failures >= MAX_REPLAY_FAILURES)
186
+ dropped.push(id);
187
+ else
188
+ nextPending[id] = { ...entry, replay_failures: failures };
189
+ }
190
+ else if (result.retry.has(id)) {
191
+ nextPending[id] = entry;
192
+ }
193
+ else if (!result.hold.has(id)) {
194
+ // The record's absence since the hold is newer than the change, so its count stays; a
195
+ // record that comes back starts afresh.
196
+ const current = state.records[id];
197
+ nextRecords[id] = entryJson(current?.gone ? entry.entry : { ...entry.entry, missing: current?.missing ?? 0, first_missing_at: current?.first_missing_at });
198
+ }
199
+ }
200
+ receipt.held += live.filter((id) => failure !== undefined || result.retry.has(id) || result.hold.has(id)).length;
201
+ if (failure !== undefined) {
202
+ extraFindings.push({
203
+ key: `source:${bound.source.name}:replay_failed`,
204
+ title: clip(`Source ${bound.source.name}: a held change could not be planned again`, 140),
205
+ summary: clip(`Replaying ${live.length} pending change${live.length === 1 ? "" : "s"} failed (${failure}); they stay pending and the run went on to read the provider.`, 600),
206
+ priority: "normal",
207
+ facts: { outcome: "failed", reason: "replay_failed" },
208
+ });
209
+ }
210
+ if (dropped.length) {
211
+ extraFindings.push({
212
+ key: `source:${bound.source.name}:replay_dropped`,
213
+ title: clip(`Source ${bound.source.name}: held changes dropped after ${MAX_REPLAY_FAILURES} failed replays`, 140),
214
+ summary: clip(`Dropped ${dropped.length} pending change${dropped.length === 1 ? "" : "s"} (${dropped.slice(0, 3).map((id) => clip(id, 60)).join(", ")}${dropped.length > 3 ? ", …" : ""}); each record is planned again when it is next observed.`, 600),
215
+ priority: "normal",
216
+ facts: { outcome: "failed", reason: "replay_dropped", count: dropped.length },
217
+ });
218
+ }
219
+ const next = { ...state, records: nextRecords };
220
+ if (Object.keys(nextPending).length)
221
+ next.pending = nextPending;
222
+ else
223
+ delete next.pending;
224
+ if (!(await store(next)))
225
+ return;
226
+ }
227
+ if (signal.aborted) {
228
+ stop = { outcome: "deferred", reason: "deadline", retry: true };
229
+ return;
230
+ }
231
+ if (options.replayOnly) {
232
+ receipt.pass.ended = true;
233
+ return;
234
+ }
235
+ const seen = new Set();
236
+ /** The cursors this run has asked for; a page handing one back again has looped. */
237
+ const asked = new Set();
238
+ const lastRequestUrl = () => options.lastUrl?.();
239
+ for (let first = true;; first = false) {
240
+ if (signal.aborted) {
241
+ stop = { outcome: "deferred", reason: "deadline", retry: true };
242
+ break;
243
+ }
244
+ // A resumed pass may restart from its first page, so the cursor it resumes from is not a loop.
245
+ if (cursor !== null && !(first && resumed))
246
+ asked.add(overlayCanonicalJson(cursor));
247
+ let raw;
248
+ try {
249
+ // The deadline bounds profile code too: a page still pending when it passes is discarded.
250
+ raw = await options.acquire({ cursor, resumed: first && resumed, mode, validators: mode === "complete" ? null : state.validators ?? null });
251
+ }
252
+ catch (error) {
253
+ stop = options.stopped?.() ?? (error instanceof SourceStop ? error.stop : undefined);
254
+ if (!stop && signal.aborted)
255
+ stop = { outcome: "deferred", reason: "deadline", retry: true };
256
+ if (!stop) {
257
+ const code = record(error) ? error.code : undefined;
258
+ stop = code === UNSUPPORTED_CONTENT
259
+ ? { outcome: "unsupported_content", retry: false, detail: String(error.detail ?? "") }
260
+ : { outcome: "failed", reason: "profile_error", retry: false, detail: errorText(error) };
261
+ }
262
+ stopUrl = lastRequestUrl();
263
+ break;
264
+ }
265
+ // A stop the profile caught and swallowed still ends the run, and its page is discarded.
266
+ const guardStop = options.stopped?.();
267
+ if (guardStop) {
268
+ stop = guardStop;
269
+ stopUrl = lastRequestUrl();
270
+ break;
271
+ }
272
+ let page;
273
+ try {
274
+ const invalid = pageProblem(raw);
275
+ if (invalid) {
276
+ stop = { outcome: "failed", reason: invalid, retry: false };
277
+ break;
278
+ }
279
+ // One read of the profile's page, as JSON data, so no getter or later mutation reaches the diff.
280
+ page = JSON.parse(JSON.stringify(raw));
281
+ }
282
+ catch (error) {
283
+ stop = { outcome: "failed", reason: "page_invalid", retry: false, detail: errorText(error) };
284
+ break;
285
+ }
286
+ const nextCursor = page.nextCursor ?? null;
287
+ // A page that promises more but hands back no cursor, or one this run already asked for, would
288
+ // read the same pages until the budget runs out.
289
+ if (page.more && (nextCursor === null || asked.has(overlayCanonicalJson(nextCursor)))) {
290
+ stop = { outcome: "failed", reason: "cursor_stuck", retry: false };
291
+ break;
292
+ }
293
+ const diff = diffPage(state, page, bound, observedAt);
294
+ for (const id of diff.seen)
295
+ seen.add(id);
296
+ const ended = !page.more;
297
+ const complete = ended && mode === "complete" && page.complete && sourceComplete;
298
+ const merged = { ...state.records };
299
+ for (const [id, entry] of diff.entries)
300
+ merged[id] = entry;
301
+ const missing = complete ? missingAfterComplete(merged, seen, threshold, observedAt) : { changes: [], entries: new Map() };
302
+ const changes = [...diff.changes, ...missing.changes];
303
+ const byId = new Map(changes.map((change) => [change.external_id, change]));
304
+ // A newer observation of a record, its listing or its absence from a complete pass, supersedes
305
+ // its pending change, whether or not the record was ever stored. Those entries are dropped and
306
+ // stored before the commit, so a crash after the commit never replays a change older than what
307
+ // the commit wrote.
308
+ const unlisted = complete ? Object.keys(state.pending ?? {}).filter((id) => !seen.has(id)) : [];
309
+ const superseded = [...new Set([...diff.seen, ...missing.entries.keys(), ...unlisted])].filter((id) => state.pending !== undefined && Object.hasOwn(state.pending, id));
310
+ if (superseded.length) {
311
+ const remaining = { ...state.pending };
312
+ for (const id of superseded)
313
+ delete remaining[id];
314
+ const pre = { ...state };
315
+ if (Object.keys(remaining).length)
316
+ pre.pending = remaining;
317
+ else
318
+ delete pre.pending;
319
+ if (!(await store(pre)))
320
+ break;
321
+ }
322
+ const records = {};
323
+ for (const change of changes)
324
+ records[change.external_id] = { fields: { ...(change.after ?? change.before ?? {}) } };
325
+ let result;
326
+ try {
327
+ result = commitResult(await options.commit({
328
+ feed: key, provider: bound.policy.provider, observed_at: observedAt, page: receipt.pages + 1, replay: false,
329
+ changes, records, baseline, complete,
330
+ }));
331
+ }
332
+ catch (error) {
333
+ stop = { outcome: "failed", reason: "commit_failed", retry: true, detail: errorText(error) };
334
+ break;
335
+ }
336
+ const notWritten = (id) => byId.has(id) && (result.hold.has(id) || result.retry.has(id));
337
+ // The page committed: now, and only now, its records and cursor are stored.
338
+ const nextRecords = { ...state.records };
339
+ const nextPending = { ...state.pending };
340
+ for (const [id, entry] of [...diff.entries, ...missing.entries]) {
341
+ if (byId.has(id) && result.retry.has(id))
342
+ nextPending[id] = { change: byId.get(id), entry: entryJson(entry), held_at: observedAt };
343
+ else if (!notWritten(id))
344
+ nextRecords[id] = entryJson(entry);
345
+ }
346
+ const next = {
347
+ ...state,
348
+ cursor: nextCursor,
349
+ open: page.more,
350
+ records: nextRecords,
351
+ complete_observations: state.complete_observations + (complete ? 1 : 0),
352
+ ...(complete ? { last_complete_at: observedAt } : {}),
353
+ ...(page.validators ? { validators: { ...page.validators } } : {}),
354
+ };
355
+ if (Object.keys(nextPending).length)
356
+ next.pending = nextPending;
357
+ else
358
+ delete next.pending;
359
+ if (!(await store(next)))
360
+ break;
361
+ receipt.pages += 1;
362
+ receipt.cursor = nextCursor;
363
+ receipt.diagnostics.push(...diff.diagnostics);
364
+ receipt.profile_diagnostics.push(...diff.profileDiagnostics);
365
+ for (const change of changes) {
366
+ if (notWritten(change.external_id)) {
367
+ receipt.held += 1;
368
+ continue;
369
+ }
370
+ const kind = change.change_kind;
371
+ if (Object.hasOwn(receipt.changes, kind))
372
+ receipt.changes[kind] += 1;
373
+ }
374
+ if (ended) {
375
+ receipt.pass.ended = true;
376
+ receipt.pass.complete = complete;
377
+ break;
378
+ }
379
+ if (receipt.pages >= options.pages) {
380
+ stop = { outcome: "deferred", reason: "budget", retry: true };
381
+ break;
382
+ }
383
+ cursor = nextCursor;
384
+ }
385
+ return;
386
+ }
387
+ finally {
388
+ if (stop)
389
+ options.stop(stop, stopUrl);
390
+ }
391
+ }
392
+ //# sourceMappingURL=driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver.js","sourceRoot":"","sources":["../../src/source-engine/driver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /** Caller-associated applicability of original input bytes; independent of document freshness. */
2
+ export interface SnapshotEvidenceIdentity {
3
+ id: string;
4
+ sha256: string;
5
+ }
6
+ export interface SnapshotEvidence {
7
+ v: 1;
8
+ association: "caller_asserted";
9
+ inputs: SnapshotEvidenceIdentity[];
10
+ settings_digest?: string;
11
+ required_identities?: SnapshotEvidenceIdentity[];
12
+ }
13
+ export interface SnapshotEvidenceObservation {
14
+ inputs: Readonly<Record<string, string | null | undefined>>;
15
+ required_identities?: Readonly<Record<string, string | null | undefined>>;
16
+ settings_digest?: string | null;
17
+ }
18
+ export interface SnapshotFreshnessRow {
19
+ dimension: "input" | "required_identity" | "settings";
20
+ id: string;
21
+ status: "equal" | "mismatch" | "unknown";
22
+ }
23
+ export interface SnapshotFreshness {
24
+ status: "current" | "stale" | "unverifiable";
25
+ association: "caller_asserted" | null;
26
+ basis: "declared_original_inputs";
27
+ reason: "all_required_equal" | "known_mismatch" | "missing_dimension" | "no_input_basis";
28
+ rows: SnapshotFreshnessRow[];
29
+ }
30
+ export declare const SNAPSHOT_SHA256: RegExp;
31
+ export declare class SnapshotEvidenceRefusal extends Error {
32
+ readonly code = "SNAPSHOT_EVIDENCE_INVALID";
33
+ constructor();
34
+ }
35
+ /** Closed, bounded portable evidence. Logical IDs select no file or executable. */
36
+ export declare function parseSnapshotEvidence(value: unknown): SnapshotEvidence;
37
+ /** Known mismatches take precedence over unknown dimensions, including an empty input basis. */
38
+ export declare function assessSnapshotFreshness(expected: SnapshotEvidence | undefined, observed: SnapshotEvidenceObservation): SnapshotFreshness;
39
+ //# sourceMappingURL=evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/source-engine/evidence.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,MAAM,WAAW,wBAAwB;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACxE,MAAM,WAAW,gBAAgB;IAC/B,CAAC,EAAE,CAAC,CAAC;IACL,WAAW,EAAE,iBAAiB,CAAC;IAC/B,MAAM,EAAE,wBAAwB,EAAE,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,wBAAwB,EAAE,CAAC;CAClD;AACD,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;IAC5D,mBAAmB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;IAC1E,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AACD,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,OAAO,GAAG,mBAAmB,GAAG,UAAU,CAAC;IACtD,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;CAC1C;AACD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,cAAc,CAAC;IAC7C,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACtC,KAAK,EAAE,0BAA0B,CAAC;IAClC,MAAM,EAAE,oBAAoB,GAAG,gBAAgB,GAAG,mBAAmB,GAAG,gBAAgB,CAAC;IACzF,IAAI,EAAE,oBAAoB,EAAE,CAAC;CAC9B;AACD,eAAO,MAAM,eAAe,QAA0B,CAAC;AAKvD,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,IAAI,+BAA+B;;CAE7C;AACD,mFAAmF;AACnF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAmBtE;AAED,gGAAgG;AAChG,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,EAAE,QAAQ,EAAE,2BAA2B,GAAG,iBAAiB,CAgBxI"}
@@ -0,0 +1,54 @@
1
+ export const SNAPSHOT_SHA256 = /^sha256:[0-9a-f]{64}$/;
2
+ const LABEL = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/;
3
+ const object = (v) => v !== null && typeof v === "object" && !Array.isArray(v);
4
+ const closed = (v, keys) => Object.keys(v).every(k => keys.includes(k));
5
+ export class SnapshotEvidenceRefusal extends Error {
6
+ code = "SNAPSHOT_EVIDENCE_INVALID";
7
+ constructor() { super("snapshot evidence is not a closed v1 caller-associated descriptor"); this.name = "SnapshotEvidenceRefusal"; }
8
+ }
9
+ /** Closed, bounded portable evidence. Logical IDs select no file or executable. */
10
+ export function parseSnapshotEvidence(value) {
11
+ const refuse = () => { throw new SnapshotEvidenceRefusal(); };
12
+ if (!object(value) || !closed(value, ["v", "association", "inputs", "settings_digest", "required_identities"])
13
+ || value.v !== 1 || value.association !== "caller_asserted")
14
+ return refuse();
15
+ const identities = (raw) => {
16
+ if (!Array.isArray(raw) || raw.length > 10_000)
17
+ return refuse();
18
+ const seen = new Set();
19
+ return raw.map(row => {
20
+ if (!object(row) || !closed(row, ["id", "sha256"]) || typeof row.id !== "string" || !LABEL.test(row.id)
21
+ || typeof row.sha256 !== "string" || !SNAPSHOT_SHA256.test(row.sha256) || seen.has(row.id))
22
+ return refuse();
23
+ seen.add(row.id);
24
+ return { id: row.id, sha256: row.sha256 };
25
+ });
26
+ };
27
+ const inputs = identities(value.inputs);
28
+ if (value.settings_digest !== undefined && (typeof value.settings_digest !== "string" || !SNAPSHOT_SHA256.test(value.settings_digest)))
29
+ return refuse();
30
+ return { v: 1, association: "caller_asserted", inputs,
31
+ ...(value.settings_digest !== undefined ? { settings_digest: value.settings_digest } : {}),
32
+ ...(value.required_identities !== undefined ? { required_identities: identities(value.required_identities) } : {}) };
33
+ }
34
+ /** Known mismatches take precedence over unknown dimensions, including an empty input basis. */
35
+ export function assessSnapshotFreshness(expected, observed) {
36
+ const evidence = expected === undefined ? undefined : parseSnapshotEvidence(expected);
37
+ const rows = [];
38
+ const row = (dimension, id, wanted, actual) => {
39
+ rows.push({ dimension, id, status: typeof actual !== "string" || !SNAPSHOT_SHA256.test(actual) ? "unknown" : actual === wanted ? "equal" : "mismatch" });
40
+ };
41
+ for (const input of evidence?.inputs ?? [])
42
+ row("input", input.id, input.sha256, Object.hasOwn(observed.inputs, input.id) ? observed.inputs[input.id] : undefined);
43
+ for (const identity of evidence?.required_identities ?? [])
44
+ row("required_identity", identity.id, identity.sha256, observed.required_identities && Object.hasOwn(observed.required_identities, identity.id) ? observed.required_identities[identity.id] : undefined);
45
+ if (evidence?.settings_digest !== undefined)
46
+ row("settings", "original_settings", evidence.settings_digest, observed.settings_digest);
47
+ const mismatch = rows.some(r => r.status === "mismatch");
48
+ const basis = (evidence?.inputs.length ?? 0) > 0;
49
+ const unknown = rows.some(r => r.status === "unknown");
50
+ return { status: mismatch ? "stale" : !basis || unknown ? "unverifiable" : "current",
51
+ association: evidence?.association ?? null, basis: "declared_original_inputs",
52
+ reason: mismatch ? "known_mismatch" : !basis ? "no_input_basis" : unknown ? "missing_dimension" : "all_required_equal", rows };
53
+ }
54
+ //# sourceMappingURL=evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/source-engine/evidence.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,9 @@
11
11
  * the cursor rule (a cursor is stored only after its page commits), completeness, and the diff into
12
12
  * record-overlay changes, with disappearance only from a complete observation.
13
13
  *
14
+ * Finite local inputs use bindSnapshotSource/decodeSnapshot/admitSnapshot/observeSnapshot;
15
+ * admission precedes reconciliation and the same internal driver owns state transitions.
16
+ *
14
17
  * Storage-neutral and Worker-free: no Node globals or builtins, and nothing here calls `fetch`.
15
18
  */
16
19
  export { canonicalRobotsPath, fetchIdentity, parseRobots, refusedAddress, robotsDecision, robotsRuleMatches, } from "./robots.js";
@@ -23,4 +26,8 @@ export type { MachineState, PendingChange, RecordEntry, SourceState } from "./ma
23
26
  export type { CommitResult, HttpMethod, NormalizedRecord, ObserveContext, ObservePage, ObserveSourceOptions, PageCommit, ProfileDiagnostic, ProfileRequest, ProfileResponse, ProfileTransport, RequestRules, SourceBudget, SourceOutcome, SourceProfile, SourceRequestRow, SourceRunReceipt, SpecResult, StatusRules, Transport, TransportRequest, TransportResult, } from "./types.js";
24
27
  export { createSourceOverlayAdapter, isSourceOverlaySnapshot, MAX_SOURCE_OVERLAY_ENTRIES } from "./overlay.js";
25
28
  export type { SourceOverlayAdapter, SourceOverlayEntry, SourceOverlayOptions, SourceOverlayResult, SourceOverlaySnapshot } from "./overlay.js";
29
+ export { SNAPSHOT_MAX_BYTES, SNAPSHOT_MAX_RECORDS, SNAPSHOT_PROFILE, SNAPSHOT_REFUSAL_CODES, SnapshotRefusal, bindSnapshotSource, decodeSnapshot, admitSnapshot, observeSnapshot } from "./snapshot.js";
30
+ export type { BoundSnapshotSource, SnapshotDocument, DecodedSnapshot, SnapshotRefusalCode, SnapshotCapacityInput, SnapshotCapacityFacts, SnapshotAdmissionOptions, SnapshotAdmission, ObserveSnapshotOptions, SnapshotRunReceipt } from "./snapshot.js";
31
+ export { SnapshotEvidenceRefusal, parseSnapshotEvidence, assessSnapshotFreshness } from "./evidence.js";
32
+ export type { SnapshotEvidenceIdentity, SnapshotEvidence, SnapshotEvidenceObservation, SnapshotFreshnessRow, SnapshotFreshness } from "./evidence.js";
26
33
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/source-engine/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACxF,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACnI,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7F,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAChG,YAAY,EACV,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC/G,YAAY,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/source-engine/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACxF,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACnI,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7F,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAChG,YAAY,EACV,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC/G,YAAY,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC/I,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,eAAe,EAC1G,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC5F,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,qBAAqB,EACrI,wBAAwB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACjH,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxG,YAAY,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
@@ -11,6 +11,9 @@
11
11
  * the cursor rule (a cursor is stored only after its page commits), completeness, and the diff into
12
12
  * record-overlay changes, with disappearance only from a complete observation.
13
13
  *
14
+ * Finite local inputs use bindSnapshotSource/decodeSnapshot/admitSnapshot/observeSnapshot;
15
+ * admission precedes reconciliation and the same internal driver owns state transitions.
16
+ *
14
17
  * Storage-neutral and Worker-free: no Node globals or builtins, and nothing here calls `fetch`.
15
18
  */
16
19
  export { canonicalRobotsPath, fetchIdentity, parseRobots, refusedAddress, robotsDecision, robotsRuleMatches, } from "./robots.js";
@@ -18,4 +21,6 @@ export { DEFAULT_SOURCE_BUDGET, DEFAULT_STATUS_RULES, sourceHostSet } from "./gu
18
21
  export { DEFAULT_MISSING_THRESHOLD, MAX_CURSOR_CHARS, MAX_REPLAY_FAILURES, observeSource, unsupportedContent } from "./observe.js";
19
22
  export { isSourceState, MachineStateConflict, MemoryMachineState } from "./machine-state.js";
20
23
  export { createSourceOverlayAdapter, isSourceOverlaySnapshot, MAX_SOURCE_OVERLAY_ENTRIES } from "./overlay.js";
24
+ export { SNAPSHOT_MAX_BYTES, SNAPSHOT_MAX_RECORDS, SNAPSHOT_PROFILE, SNAPSHOT_REFUSAL_CODES, SnapshotRefusal, bindSnapshotSource, decodeSnapshot, admitSnapshot, observeSnapshot } from "./snapshot.js";
25
+ export { SnapshotEvidenceRefusal, parseSnapshotEvidence, assessSnapshotFreshness } from "./evidence.js";
21
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/source-engine/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAExF,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACnI,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AA0B7F,OAAO,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/source-engine/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAExF,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACnI,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AA0B7F,OAAO,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAE/G,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,eAAe,EAC1G,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAG5F,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC"}
@@ -1,13 +1,5 @@
1
1
  import type { ObserveSourceOptions, SourceRunReceipt } from "./types.js";
2
- /** Complete observations without a record before it is `disappeared`, when the feed names none. */
3
- export declare const DEFAULT_MISSING_THRESHOLD = 2;
4
- /** The largest stored cursor, as canonical JSON characters. */
5
- export declare const MAX_CURSOR_CHARS = 8192;
6
- /**
7
- * Replays of a pending change whose commit threw, after which the change is dropped with a finding:
8
- * the record is planned again when it is next observed.
9
- */
10
- export declare const MAX_REPLAY_FAILURES = 5;
2
+ export { DEFAULT_MISSING_THRESHOLD, MAX_CURSOR_CHARS, MAX_REPLAY_FAILURES } from "./driver.js";
11
3
  /** Thrown by a profile that cannot read a provider's body; the run ends `unsupported_content`. */
12
4
  export declare function unsupportedContent(detail: string): never;
13
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"observe.d.ts","sourceRoot":"","sources":["../../src/source-engine/observe.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAEV,oBAAoB,EAIpB,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAEpB,mGAAmG;AACnG,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC;;;GAGG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAKrC,kGAAkG;AAClG,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAExD;AAiLD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA2VxH"}
1
+ {"version":3,"file":"observe.d.ts","sourceRoot":"","sources":["../../src/source-engine/observe.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,oBAAoB,EAGpB,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAM/F,kGAAkG;AAClG,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAExD;AAoED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAsJxH"}