perttool 0.5.4 → 0.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 (57) hide show
  1. package/CHANGELOG.md +54 -1
  2. package/README.md +60 -20
  3. package/dist/application/advance-history.d.ts +46 -0
  4. package/dist/application/advance-history.d.ts.map +1 -0
  5. package/dist/application/advance-history.js +254 -0
  6. package/dist/application/advance-history.js.map +1 -0
  7. package/dist/application/contract6-mutation.d.ts +3 -2
  8. package/dist/application/contract6-mutation.d.ts.map +1 -1
  9. package/dist/application/contract6-mutation.js +2 -1
  10. package/dist/application/contract6-mutation.js.map +1 -1
  11. package/dist/application/contract6-projection.d.ts +2 -1
  12. package/dist/application/contract6-projection.d.ts.map +1 -1
  13. package/dist/application/contract6-projection.js +31 -1
  14. package/dist/application/contract6-projection.js.map +1 -1
  15. package/dist/application/target-actuals-write.d.ts +2 -1
  16. package/dist/application/target-actuals-write.d.ts.map +1 -1
  17. package/dist/application/target-actuals-write.js.map +1 -1
  18. package/dist/cli.js +78 -15
  19. package/dist/cli.js.map +1 -1
  20. package/dist/command/actuals-discovery.d.ts.map +1 -1
  21. package/dist/command/actuals-discovery.js +50 -4
  22. package/dist/command/actuals-discovery.js.map +1 -1
  23. package/dist/governance/authority.d.ts +1 -0
  24. package/dist/governance/authority.d.ts.map +1 -1
  25. package/dist/governance/authority.js +24 -2
  26. package/dist/governance/authority.js.map +1 -1
  27. package/dist/help/registry.d.ts.map +1 -1
  28. package/dist/help/registry.js +11 -1
  29. package/dist/help/registry.js.map +1 -1
  30. package/dist/help/target-governance-guide.js +2 -2
  31. package/dist/help/target-governance-guide.js.map +1 -1
  32. package/dist/history/advance-history.d.ts +44 -0
  33. package/dist/history/advance-history.d.ts.map +1 -0
  34. package/dist/history/advance-history.js +379 -0
  35. package/dist/history/advance-history.js.map +1 -0
  36. package/dist/history/git-probe.d.ts +40 -0
  37. package/dist/history/git-probe.d.ts.map +1 -1
  38. package/dist/history/git-probe.js +330 -0
  39. package/dist/history/git-probe.js.map +1 -1
  40. package/dist/index.d.ts +3 -1
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +1 -0
  43. package/dist/index.js.map +1 -1
  44. package/dist/mutation/advance-deletion.d.ts +14 -0
  45. package/dist/mutation/advance-deletion.d.ts.map +1 -0
  46. package/dist/mutation/advance-deletion.js +53 -0
  47. package/dist/mutation/advance-deletion.js.map +1 -0
  48. package/dist/mutation/advance.d.ts.map +1 -1
  49. package/dist/mutation/advance.js +8 -25
  50. package/dist/mutation/advance.js.map +1 -1
  51. package/dist/schema/registry.d.ts.map +1 -1
  52. package/dist/schema/registry.js +1 -0
  53. package/dist/schema/registry.js.map +1 -1
  54. package/dist/version.d.ts +1 -1
  55. package/dist/version.js +1 -1
  56. package/package.json +1 -1
  57. package/schemas/Perttool.AdvanceResult.v1.schema.json +254 -0
@@ -0,0 +1,379 @@
1
+ import { compareStableStrings, } from "../model/diagnostics.js";
2
+ import { fieldNamed } from "../model/syntax.js";
3
+ import { advanceOwnedTerminalSeparatorStart, planAdvanceDeclarationDeletions, } from "../mutation/advance-deletion.js";
4
+ import { deleteDeclarationEdit, splitPhysicalLines, } from "../mutation/source.js";
5
+ export const ADVANCE_HISTORY_SAFETY_MODEL_VERSION = 1;
6
+ function selected(declaration, selection) {
7
+ switch (declaration.kind) {
8
+ case "task":
9
+ return selection.removedTaskIds.includes(declaration.id);
10
+ case "gate":
11
+ return selection.removedGateIds.includes(declaration.id);
12
+ case "milestone":
13
+ return selection.removedMilestoneIds.includes(declaration.id);
14
+ case "work_event":
15
+ return selection.removedWorkEventIds.includes(declaration.id);
16
+ default:
17
+ return false;
18
+ }
19
+ }
20
+ function recordOrder(left, right) {
21
+ return (left.startOffset - right.startOffset ||
22
+ left.endOffset - right.endOffset ||
23
+ compareStableStrings(left.entityKind, right.entityKind) ||
24
+ compareStableStrings(left.entityId, right.entityId) ||
25
+ compareStableStrings(left.field, right.field));
26
+ }
27
+ export function deriveAdvanceDestructiveRecords(text, document, selection) {
28
+ if (document.text !== text) {
29
+ throw new Error("advance destructive record source does not match document");
30
+ }
31
+ const declarationDeletions = new Map(planAdvanceDeclarationDeletions(text, document, (declaration) => selected(declaration, selection)).map(({ declaration, edit }) => [declaration, edit]));
32
+ const records = [];
33
+ for (const declaration of document.declarations) {
34
+ if (selected(declaration, selection)) {
35
+ const edit = declarationDeletions.get(declaration);
36
+ if (edit === undefined) {
37
+ throw new Error("advance destructive selection has no deletion edit");
38
+ }
39
+ records.push({
40
+ entityKind: declaration.kind,
41
+ entityId: declaration.id,
42
+ field: "declaration",
43
+ startOffset: edit.startOffset,
44
+ endOffset: edit.endOffset,
45
+ });
46
+ }
47
+ if (declaration.kind === "milestone" &&
48
+ selection.stateChangedMilestoneIds.includes(declaration.id)) {
49
+ const state = fieldNamed(declaration, "state");
50
+ if (state !== undefined) {
51
+ records.push({
52
+ entityKind: "milestone",
53
+ entityId: declaration.id,
54
+ field: "state",
55
+ startOffset: state.valueSpan.start.offset,
56
+ endOffset: state.valueSpan.end.offset,
57
+ });
58
+ }
59
+ }
60
+ }
61
+ const replacedStateIds = selection.stateChangedMilestoneIds.flatMap((id) => {
62
+ const matches = document.declarations.filter(({ kind, id: candidateId }) => kind === "milestone" && candidateId === id);
63
+ if (matches.length !== 1) {
64
+ throw new Error(`advance state selection has no unique milestone ${id}`);
65
+ }
66
+ return fieldNamed(matches[0], "state") === undefined ? [] : [id];
67
+ });
68
+ const expected = [
69
+ ...selection.removedTaskIds.map((id) => `task:${id}:declaration`),
70
+ ...selection.removedGateIds.map((id) => `gate:${id}:declaration`),
71
+ ...selection.removedMilestoneIds.map((id) => `milestone:${id}:declaration`),
72
+ ...selection.removedWorkEventIds.map((id) => `work_event:${id}:declaration`),
73
+ ...replacedStateIds.map((id) => `milestone:${id}:state`),
74
+ ].sort(compareStableStrings);
75
+ const actual = records
76
+ .map(({ entityKind, entityId, field }) => `${entityKind}:${entityId}:${field}`)
77
+ .sort(compareStableStrings);
78
+ if (JSON.stringify(actual) !== JSON.stringify(expected)) {
79
+ throw new Error("advance destructive selection has missing or duplicate entities");
80
+ }
81
+ return Object.freeze(records.sort(recordOrder));
82
+ }
83
+ function myersOperations(before, after) {
84
+ const maximum = before.length + after.length;
85
+ let frontier = new Map([[1, 0]]);
86
+ const trace = [];
87
+ for (let distance = 0; distance <= maximum; distance += 1) {
88
+ const next = new Map();
89
+ for (let diagonal = -distance; diagonal <= distance; diagonal += 2) {
90
+ const deletion = frontier.get(diagonal - 1);
91
+ const insertion = frontier.get(diagonal + 1);
92
+ let x;
93
+ if (diagonal === -distance ||
94
+ (diagonal !== distance &&
95
+ (deletion ?? Number.NEGATIVE_INFINITY) <
96
+ (insertion ?? Number.NEGATIVE_INFINITY))) {
97
+ x = insertion ?? 0;
98
+ }
99
+ else {
100
+ x = (deletion ?? -1) + 1;
101
+ }
102
+ let y = x - diagonal;
103
+ while (x < before.length &&
104
+ y < after.length &&
105
+ before[x] === after[y]) {
106
+ x += 1;
107
+ y += 1;
108
+ }
109
+ next.set(diagonal, x);
110
+ if (x >= before.length && y >= after.length) {
111
+ trace.push(next);
112
+ const reversed = [];
113
+ let currentX = before.length;
114
+ let currentY = after.length;
115
+ for (let step = distance; step > 0; step -= 1) {
116
+ const previous = trace[step - 1];
117
+ const currentDiagonal = currentX - currentY;
118
+ const previousDeletion = previous.get(currentDiagonal - 1);
119
+ const previousInsertion = previous.get(currentDiagonal + 1);
120
+ const previousDiagonal = currentDiagonal === -step ||
121
+ (currentDiagonal !== step &&
122
+ (previousDeletion ?? Number.NEGATIVE_INFINITY) <
123
+ (previousInsertion ?? Number.NEGATIVE_INFINITY))
124
+ ? currentDiagonal + 1
125
+ : currentDiagonal - 1;
126
+ const previousX = previous.get(previousDiagonal);
127
+ if (previousX === undefined) {
128
+ throw new Error("raw-byte Myers trace is incomplete");
129
+ }
130
+ const previousY = previousX - previousDiagonal;
131
+ while (currentX > previousX && currentY > previousY) {
132
+ reversed.push("equal");
133
+ currentX -= 1;
134
+ currentY -= 1;
135
+ }
136
+ if (currentX === previousX) {
137
+ reversed.push("insert");
138
+ currentY -= 1;
139
+ }
140
+ else {
141
+ reversed.push("delete");
142
+ currentX -= 1;
143
+ }
144
+ }
145
+ while (currentX > 0 && currentY > 0) {
146
+ reversed.push("equal");
147
+ currentX -= 1;
148
+ currentY -= 1;
149
+ }
150
+ return Object.freeze(reversed.reverse());
151
+ }
152
+ }
153
+ trace.push(next);
154
+ frontier = next;
155
+ }
156
+ throw new Error("raw-byte Myers diff did not terminate");
157
+ }
158
+ export function rawByteEditsV1(before, after) {
159
+ let prefix = 0;
160
+ while (prefix < before.length &&
161
+ prefix < after.length &&
162
+ before[prefix] === after[prefix]) {
163
+ prefix += 1;
164
+ }
165
+ let suffix = 0;
166
+ while (suffix < before.length - prefix &&
167
+ suffix < after.length - prefix &&
168
+ before[before.length - suffix - 1] ===
169
+ after[after.length - suffix - 1]) {
170
+ suffix += 1;
171
+ }
172
+ const beforeMiddle = before.subarray(prefix, before.length - suffix);
173
+ const afterMiddle = after.subarray(prefix, after.length - suffix);
174
+ if (beforeMiddle.length === 0 && afterMiddle.length === 0)
175
+ return [];
176
+ const operations = myersOperations(beforeMiddle, afterMiddle);
177
+ const edits = [];
178
+ let oldOffset = prefix;
179
+ let editStart = null;
180
+ let editEnd = prefix;
181
+ let insertedBytes = 0;
182
+ const flush = () => {
183
+ if (editStart === null)
184
+ return;
185
+ edits.push({
186
+ startOffset: editStart,
187
+ endOffset: editEnd,
188
+ insertedBytes,
189
+ });
190
+ editStart = null;
191
+ insertedBytes = 0;
192
+ };
193
+ for (const operation of operations) {
194
+ if (operation === "equal") {
195
+ flush();
196
+ oldOffset += 1;
197
+ editEnd = oldOffset;
198
+ }
199
+ else if (operation === "delete") {
200
+ editStart ??= oldOffset;
201
+ oldOffset += 1;
202
+ editEnd = oldOffset;
203
+ }
204
+ else {
205
+ editStart ??= oldOffset;
206
+ editEnd = oldOffset;
207
+ insertedBytes += 1;
208
+ }
209
+ }
210
+ flush();
211
+ return Object.freeze(edits);
212
+ }
213
+ function hasSplitSurrogate(text, offset) {
214
+ if (offset <= 0 || offset >= text.length)
215
+ return false;
216
+ const previous = text.charCodeAt(offset - 1);
217
+ const next = text.charCodeAt(offset);
218
+ return (previous >= 0xd800 &&
219
+ previous <= 0xdbff &&
220
+ next >= 0xdc00 &&
221
+ next <= 0xdfff);
222
+ }
223
+ function toByteRange(text, range) {
224
+ if (!Number.isSafeInteger(range.startOffset) ||
225
+ !Number.isSafeInteger(range.endOffset) ||
226
+ range.startOffset < 0 ||
227
+ range.startOffset >= range.endOffset ||
228
+ range.endOffset > text.length ||
229
+ hasSplitSurrogate(text, range.startOffset) ||
230
+ hasSplitSurrogate(text, range.endOffset)) {
231
+ return null;
232
+ }
233
+ return {
234
+ startOffset: Buffer.byteLength(text.slice(0, range.startOffset), "utf8"),
235
+ endOffset: Buffer.byteLength(text.slice(0, range.endOffset), "utf8"),
236
+ };
237
+ }
238
+ function baseEntityRange(text, declaration, field) {
239
+ if (field === "declaration") {
240
+ const edit = deleteDeclarationEdit(declaration, splitPhysicalLines(text));
241
+ return {
242
+ startOffset: edit.startOffset,
243
+ endOffset: edit.endOffset,
244
+ };
245
+ }
246
+ if (declaration.kind !== "milestone")
247
+ return null;
248
+ const state = fieldNamed(declaration, "state");
249
+ return state === undefined
250
+ ? null
251
+ : {
252
+ startOffset: state.valueSpan.start.offset,
253
+ endOffset: state.valueSpan.end.offset,
254
+ };
255
+ }
256
+ function matchingDeclarations(document, record) {
257
+ return document.declarations.filter(({ kind, id }) => kind === record.entityKind &&
258
+ id === record.entityId);
259
+ }
260
+ function bytesEqual(left, leftRange, right, rightRange) {
261
+ return Buffer.from(left.subarray(leftRange.startOffset, leftRange.endOffset)).equals(Buffer.from(right.subarray(rightRange.startOffset, rightRange.endOffset)));
262
+ }
263
+ function editOverlaps(edit, range) {
264
+ if (edit.startOffset === edit.endOffset) {
265
+ return (edit.insertedBytes > 0 &&
266
+ edit.startOffset > range.startOffset &&
267
+ edit.startOffset < range.endOffset);
268
+ }
269
+ return (edit.startOffset < range.endOffset &&
270
+ edit.endOffset > range.startOffset);
271
+ }
272
+ function assessment(status, cause, destructiveEntityIds, overlappingEntityIds) {
273
+ return Object.freeze({
274
+ modelVersion: ADVANCE_HISTORY_SAFETY_MODEL_VERSION,
275
+ status,
276
+ cause,
277
+ destructiveEntityIds: Object.freeze([...destructiveEntityIds]),
278
+ overlappingEntityIds: Object.freeze([...overlappingEntityIds]),
279
+ });
280
+ }
281
+ export function assessAdvanceHistorySafety(input) {
282
+ const destructiveEntityIds = [
283
+ ...new Set(input.destructiveRecords.map(({ entityId }) => entityId)),
284
+ ].sort(compareStableStrings);
285
+ if (input.currentDocument.text !== input.currentText ||
286
+ input.headDocument.text !== input.headText ||
287
+ !Buffer.from(input.currentSource).equals(Buffer.from(input.currentText, "utf8")) ||
288
+ !Buffer.from(input.headSource).equals(Buffer.from(input.headText, "utf8"))) {
289
+ return assessment("blocked", "baseline_invalid", destructiveEntityIds, []);
290
+ }
291
+ const recordKeys = input.destructiveRecords.map(({ entityKind, entityId, field }) => `${entityKind}:${entityId}:${field}`);
292
+ if (new Set(recordKeys).size !== recordKeys.length) {
293
+ return assessment("blocked", "correspondence_ambiguous", destructiveEntityIds, []);
294
+ }
295
+ const declarationRecordKeys = new Set(input.destructiveRecords
296
+ .filter(({ field }) => field === "declaration")
297
+ .map(({ entityKind, entityId }) => `${entityKind}:${entityId}`));
298
+ const currentDeclarationRanges = new Map(planAdvanceDeclarationDeletions(input.currentText, input.currentDocument, ({ kind, id }) => declarationRecordKeys.has(`${kind}:${id}`)).map(({ declaration, edit }) => [
299
+ `${declaration.kind}:${declaration.id}`,
300
+ { startOffset: edit.startOffset, endOffset: edit.endOffset },
301
+ ]));
302
+ const indexEdits = rawByteEditsV1(input.headSource, input.indexSource);
303
+ const overlapping = new Set();
304
+ let missing = false;
305
+ let ambiguous = false;
306
+ let invalid = false;
307
+ for (const record of input.destructiveRecords) {
308
+ const currentMatches = matchingDeclarations(input.currentDocument, record);
309
+ const headMatches = matchingDeclarations(input.headDocument, record);
310
+ if (currentMatches.length > 1 || headMatches.length > 1) {
311
+ ambiguous = true;
312
+ continue;
313
+ }
314
+ if (currentMatches.length === 0 || headMatches.length === 0) {
315
+ missing = true;
316
+ continue;
317
+ }
318
+ const currentBaseRange = baseEntityRange(input.currentText, currentMatches[0], record.field);
319
+ const headBaseRange = baseEntityRange(input.headText, headMatches[0], record.field);
320
+ const currentRange = record.field === "declaration"
321
+ ? currentDeclarationRanges.get(`${record.entityKind}:${record.entityId}`) ?? null
322
+ : currentBaseRange;
323
+ if (currentRange === null ||
324
+ currentBaseRange === null ||
325
+ headBaseRange === null ||
326
+ currentRange.startOffset !== record.startOffset ||
327
+ currentRange.endOffset !== record.endOffset) {
328
+ invalid = true;
329
+ continue;
330
+ }
331
+ let headRange = headBaseRange;
332
+ if (record.field === "declaration") {
333
+ const prefix = input.currentText.slice(currentRange.startOffset, currentBaseRange.startOffset);
334
+ const suffix = input.currentText.slice(currentBaseRange.endOffset, currentRange.endOffset);
335
+ const headOwnedPrefixStart = advanceOwnedTerminalSeparatorStart(input.headText, headMatches[0]);
336
+ const headOwnedPrefix = input.headText.slice(headOwnedPrefixStart, headBaseRange.startOffset);
337
+ const headStart = prefix === ""
338
+ ? headBaseRange.startOffset
339
+ : headOwnedPrefixStart;
340
+ const headEnd = suffix === ""
341
+ ? headBaseRange.endOffset
342
+ : input.headText.length;
343
+ if ((prefix !== "" && headOwnedPrefix !== prefix) ||
344
+ (suffix !== "" && input.headText.slice(headBaseRange.endOffset) !== suffix)) {
345
+ overlapping.add(record.entityId);
346
+ continue;
347
+ }
348
+ headRange = { startOffset: headStart, endOffset: headEnd };
349
+ }
350
+ const currentByteRange = toByteRange(input.currentText, currentRange);
351
+ const headByteRange = toByteRange(input.headText, headRange);
352
+ if (currentByteRange === null ||
353
+ headByteRange === null ||
354
+ currentByteRange.endOffset > input.currentSource.length ||
355
+ headByteRange.endOffset > input.headSource.length) {
356
+ invalid = true;
357
+ continue;
358
+ }
359
+ if (!bytesEqual(input.currentSource, currentByteRange, input.headSource, headByteRange) ||
360
+ indexEdits.some((edit) => editOverlaps(edit, headByteRange))) {
361
+ overlapping.add(record.entityId);
362
+ }
363
+ }
364
+ const overlappingEntityIds = [...overlapping].sort(compareStableStrings);
365
+ if (ambiguous) {
366
+ return assessment("blocked", "correspondence_ambiguous", destructiveEntityIds, overlappingEntityIds);
367
+ }
368
+ if (missing) {
369
+ return assessment("blocked", "correspondence_missing", destructiveEntityIds, overlappingEntityIds);
370
+ }
371
+ if (invalid) {
372
+ return assessment("blocked", "baseline_invalid", destructiveEntityIds, overlappingEntityIds);
373
+ }
374
+ if (overlappingEntityIds.length > 0) {
375
+ return assessment("blocked", "destructive_overlap", destructiveEntityIds, overlappingEntityIds);
376
+ }
377
+ return assessment("passed", "baseline_matches", destructiveEntityIds, []);
378
+ }
379
+ //# sourceMappingURL=advance-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advance-history.js","sourceRoot":"","sources":["../../src/history/advance-history.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export declare const GIT_HISTORY_PROBE_MODEL_VERSION: 1;
2
+ export declare const ADVANCE_HISTORY_BASELINE_MODEL_VERSION: 1;
2
3
  export type GitHistoryStatus = "complete" | "incomplete" | "unavailable";
3
4
  export type GitHistoryCause = "no_repository" | "no_head" | "unknown_revision" | "untracked_target" | "ambiguous_path" | "shallow_boundary" | "unsupported_rename" | "head_changed" | "target_changed";
4
5
  export interface GitHistoryAvailability {
@@ -48,9 +49,48 @@ export interface GitHistoryProbeFailure {
48
49
  readonly operation: string;
49
50
  }
50
51
  export type GitHistoryProbeOutcome = GitHistoryProbeResult | GitHistoryProbeFailure;
52
+ export type AdvanceHistoryBaselineCause = "no_repository" | "no_head" | "untracked_target" | "ambiguous_path" | "unmerged_index" | "git_unavailable" | "baseline_read_failed" | "correspondence_missing" | "target_changed" | "head_changed" | "index_changed";
53
+ export interface AdvanceHistoryBaselineRequest {
54
+ readonly targetPath: string;
55
+ readonly expectedSourceDigest?: string;
56
+ }
57
+ export interface AdvanceHistoryBaselineDependencies {
58
+ readonly gitExecutable?: string;
59
+ readonly afterCapture?: () => void | Promise<void>;
60
+ }
61
+ export interface AdvanceHistoryBaselineCapture {
62
+ readonly ok: true;
63
+ readonly modelVersion: typeof ADVANCE_HISTORY_BASELINE_MODEL_VERSION;
64
+ readonly status: "complete" | "unavailable";
65
+ readonly cause: AdvanceHistoryBaselineCause | null;
66
+ readonly operation: string | null;
67
+ readonly objectFormat: "sha1" | "sha256" | null;
68
+ readonly repositorySnapshotId: string | null;
69
+ readonly repositoryRelativePath: string | null;
70
+ readonly headCommitId: string | null;
71
+ readonly headBlobId: string | null;
72
+ readonly indexBlobId: string | null;
73
+ readonly currentSourceDigest: string | null;
74
+ readonly headSourceDigest: string | null;
75
+ readonly indexSourceDigest: string | null;
76
+ readonly sourceModifiedAt: string | null;
77
+ readonly targetDevice: bigint | null;
78
+ readonly targetInode: bigint | null;
79
+ readonly currentSource: Uint8Array | null;
80
+ readonly headSource: Uint8Array | null;
81
+ readonly indexSource: Uint8Array | null;
82
+ }
83
+ export type AdvanceHistoryBaselineRecheckCause = "target_changed" | "head_changed" | "index_changed" | "baseline_read_failed";
84
+ export interface AdvanceHistoryBaselineRecheck {
85
+ readonly ok: boolean;
86
+ readonly cause: AdvanceHistoryBaselineRecheckCause | null;
87
+ readonly operation: string | null;
88
+ }
51
89
  export declare function parseGitCommitMetadata(value: string, objectFormat: "sha1" | "sha256"): {
52
90
  readonly parentCommitIds: readonly string[];
53
91
  readonly recordedAt: string | null;
54
92
  } | null;
55
93
  export declare function probeGitHistory(request: GitHistoryProbeRequest, dependencies?: GitHistoryProbeDependencies): Promise<GitHistoryProbeOutcome>;
94
+ export declare function captureAdvanceHistoryBaseline(request: AdvanceHistoryBaselineRequest, dependencies?: AdvanceHistoryBaselineDependencies): Promise<AdvanceHistoryBaselineCapture>;
95
+ export declare function recheckAdvanceHistoryBaseline(baseline: AdvanceHistoryBaselineCapture, targetPath: string, dependencies?: AdvanceHistoryBaselineDependencies): Promise<AdvanceHistoryBaselineRecheck>;
56
96
  //# sourceMappingURL=git-probe.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"git-probe.d.ts","sourceRoot":"","sources":["../../src/history/git-probe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git-probe.d.ts","sourceRoot":"","sources":["../../src/history/git-probe.ts"],"names":[],"mappings":"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"}