@flyingrobots/graft 0.9.0 → 0.10.1

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 (108) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/README.md +23 -15
  3. package/dist/adapters/colorful-cli-prose-projector.d.ts +13 -0
  4. package/dist/adapters/colorful-cli-prose-projector.d.ts.map +1 -0
  5. package/dist/adapters/colorful-cli-prose-projector.js +89 -0
  6. package/dist/adapters/colorful-cli-prose-projector.js.map +1 -0
  7. package/dist/adapters/fake-echo-kernel-transport.d.ts.map +1 -1
  8. package/dist/adapters/fake-echo-kernel-transport.js +7 -29
  9. package/dist/adapters/fake-echo-kernel-transport.js.map +1 -1
  10. package/dist/adapters/node-process-runner.d.ts.map +1 -1
  11. package/dist/adapters/node-process-runner.js +1 -0
  12. package/dist/adapters/node-process-runner.js.map +1 -1
  13. package/dist/api/index.d.ts +7 -2
  14. package/dist/api/index.d.ts.map +1 -1
  15. package/dist/api/index.js +14 -3
  16. package/dist/api/index.js.map +1 -1
  17. package/dist/cli/main.d.ts.map +1 -1
  18. package/dist/cli/main.js +10 -1
  19. package/dist/cli/main.js.map +1 -1
  20. package/dist/contracts/output-schema-fragments.d.ts +21 -0
  21. package/dist/contracts/output-schema-fragments.d.ts.map +1 -1
  22. package/dist/contracts/output-schema-fragments.js +11 -0
  23. package/dist/contracts/output-schema-fragments.js.map +1 -1
  24. package/dist/contracts/output-schema-mcp.d.ts +7 -0
  25. package/dist/contracts/output-schema-mcp.d.ts.map +1 -1
  26. package/dist/contracts/output-schemas.d.ts.map +1 -1
  27. package/dist/contracts/output-schemas.js +11 -0
  28. package/dist/contracts/output-schemas.js.map +1 -1
  29. package/dist/echo/codec-runtime.d.ts +2 -7
  30. package/dist/echo/codec-runtime.d.ts.map +1 -1
  31. package/dist/echo/codec-runtime.js +2 -7
  32. package/dist/echo/codec-runtime.js.map +1 -1
  33. package/dist/echo/structural-history-client.d.ts.map +1 -1
  34. package/dist/echo/structural-history-client.js +3 -3
  35. package/dist/echo/structural-history-client.js.map +1 -1
  36. package/dist/echo/structural-history-envelope-codec.d.ts +7 -0
  37. package/dist/echo/structural-history-envelope-codec.d.ts.map +1 -1
  38. package/dist/echo/structural-history-envelope-codec.js +7 -0
  39. package/dist/echo/structural-history-envelope-codec.js.map +1 -1
  40. package/dist/echo/structural-reading-generated-model.d.ts +18 -0
  41. package/dist/echo/structural-reading-generated-model.d.ts.map +1 -0
  42. package/dist/echo/structural-reading-generated-model.js +324 -0
  43. package/dist/echo/structural-reading-generated-model.js.map +1 -0
  44. package/dist/generated/graft-structural-history.codec.generated.d.ts +193 -39
  45. package/dist/generated/graft-structural-history.codec.generated.d.ts.map +1 -1
  46. package/dist/generated/graft-structural-history.codec.generated.js +416 -113
  47. package/dist/generated/graft-structural-history.codec.generated.js.map +1 -1
  48. package/dist/generated/graft-structural-history.d.ts +1 -1
  49. package/dist/generated/graft-structural-history.d.ts.map +1 -1
  50. package/dist/mcp/control-plane/types.d.ts +8 -0
  51. package/dist/mcp/control-plane/types.d.ts.map +1 -1
  52. package/dist/mcp/daemon-control-plane.d.ts +2 -1
  53. package/dist/mcp/daemon-control-plane.d.ts.map +1 -1
  54. package/dist/mcp/daemon-control-plane.js +49 -0
  55. package/dist/mcp/daemon-control-plane.js.map +1 -1
  56. package/dist/mcp/repo-workspace.d.ts +1 -1
  57. package/dist/mcp/repo-workspace.d.ts.map +1 -1
  58. package/dist/mcp/repo-workspace.js +5 -0
  59. package/dist/mcp/repo-workspace.js.map +1 -1
  60. package/dist/mcp/tools/changed-since.d.ts.map +1 -1
  61. package/dist/mcp/tools/changed-since.js +24 -10
  62. package/dist/mcp/tools/changed-since.js.map +1 -1
  63. package/dist/mcp/tools/file-outline.d.ts.map +1 -1
  64. package/dist/mcp/tools/file-outline.js +10 -5
  65. package/dist/mcp/tools/file-outline.js.map +1 -1
  66. package/dist/mcp/workspace-registry.d.ts +83 -0
  67. package/dist/mcp/workspace-registry.d.ts.map +1 -0
  68. package/dist/mcp/workspace-registry.js +542 -0
  69. package/dist/mcp/workspace-registry.js.map +1 -0
  70. package/dist/operations/colorful-prose-projection.d.ts +32 -0
  71. package/dist/operations/colorful-prose-projection.d.ts.map +1 -0
  72. package/dist/operations/colorful-prose-projection.js +351 -0
  73. package/dist/operations/colorful-prose-projection.js.map +1 -0
  74. package/dist/operations/file-outline.d.ts +10 -0
  75. package/dist/operations/file-outline.d.ts.map +1 -1
  76. package/dist/operations/file-outline.js +29 -3
  77. package/dist/operations/file-outline.js.map +1 -1
  78. package/dist/operations/repo-workspace.d.ts +4 -0
  79. package/dist/operations/repo-workspace.d.ts.map +1 -1
  80. package/dist/operations/repo-workspace.js +57 -21
  81. package/dist/operations/repo-workspace.js.map +1 -1
  82. package/dist/operations/safe-read.d.ts +2 -0
  83. package/dist/operations/safe-read.d.ts.map +1 -1
  84. package/dist/operations/safe-read.js +20 -0
  85. package/dist/operations/safe-read.js.map +1 -1
  86. package/dist/operations/structured-buffer-model.d.ts +19 -15
  87. package/dist/operations/structured-buffer-model.d.ts.map +1 -1
  88. package/dist/operations/structured-buffer-model.js +6 -4
  89. package/dist/operations/structured-buffer-model.js.map +1 -1
  90. package/dist/operations/structured-buffer-query.d.ts.map +1 -1
  91. package/dist/operations/structured-buffer-query.js +64 -1
  92. package/dist/operations/structured-buffer-query.js.map +1 -1
  93. package/dist/operations/structured-buffer.d.ts +3 -1
  94. package/dist/operations/structured-buffer.d.ts.map +1 -1
  95. package/dist/operations/structured-buffer.js.map +1 -1
  96. package/dist/parser/types.d.ts +1 -1
  97. package/dist/parser/types.d.ts.map +1 -1
  98. package/dist/parser/types.js.map +1 -1
  99. package/dist/ports/process-runner.d.ts +1 -0
  100. package/dist/ports/process-runner.d.ts.map +1 -1
  101. package/dist/ports/structural-history.d.ts +23 -0
  102. package/dist/ports/structural-history.d.ts.map +1 -0
  103. package/dist/ports/structural-history.js +22 -0
  104. package/dist/ports/structural-history.js.map +1 -0
  105. package/dist/warp/structural-reading-adapter.d.ts.map +1 -1
  106. package/dist/warp/structural-reading-adapter.js +5 -1
  107. package/dist/warp/structural-reading-adapter.js.map +1 -1
  108. package/package.json +5 -4
@@ -0,0 +1,324 @@
1
+ // ---------------------------------------------------------------------------
2
+ // StructuralReadingPort ↔ Wesley-generated structural-history model mapping.
3
+ //
4
+ // Pure, deterministic, no I/O. Maps git-warp-backed StructuralReadingResult
5
+ // values onto the generated (StructuralReading, StructuralReadingEvidence,
6
+ // StructuralBasis) triple and back, loss-free.
7
+ //
8
+ // Folding contract: the generated v0.2 schema has no typed columns for the
9
+ // port's translated-substrate residue (GitWarpCommittedBasis projectRoot /
10
+ // base / maxCommits, and the GitWarpEvidence discriminant). That residue is
11
+ // re-expressed verbatim as canonical JSON in the evidence `summary` field, so
12
+ // the (reading, evidence) pair alone reconstructs the port result. The same
13
+ // canonical bytes feed the evidenceId derivation, pinning the id to the
14
+ // persisted residue.
15
+ //
16
+ // Representability limits of the contract: payloads and basis facts must be
17
+ // canonical-JSON-representable (no undefined-valued keys, no non-finite
18
+ // numbers — JSON cannot carry them, so round-trip equality cannot hold for
19
+ // them); a `null` payload is refused on the forward path because the
20
+ // generated `payloadJson: Json | null` reserves null for "absent".
21
+ // `payloadJson` carries the payload object by reference — callers must not
22
+ // mutate a result after mapping it, or payloadDigest will no longer match.
23
+ //
24
+ // This mapping is the git-warp import path. It never emits ECHO_NATIVE:
25
+ // schema invariant `fallback_translated_is_not_native_continuum`.
26
+ //
27
+ // Design packet: docs/design/CORE_structural-reading-port-generated-model-parity.md
28
+ // ---------------------------------------------------------------------------
29
+ import { createHash } from "node:crypto";
30
+ import { CanonicalJsonCodec } from "../adapters/canonical-json.js";
31
+ import { isFallbackTranslatedEvidence, isGitWarpImportedEvidence, toGeneratedStructuralEvidenceKind, } from "../ports/structural-reading.js";
32
+ export class GeneratedModelMappingError extends Error {
33
+ code;
34
+ constructor(code, message) {
35
+ super(message);
36
+ this.name = "GeneratedModelMappingError";
37
+ this.code = code;
38
+ }
39
+ }
40
+ const codec = new CanonicalJsonCodec();
41
+ function sha256Hex(canonicalJson) {
42
+ return createHash("sha256").update(canonicalJson).digest("hex");
43
+ }
44
+ function deriveId(entity, facts) {
45
+ return `${entity}:${sha256Hex(codec.encode(facts))}`;
46
+ }
47
+ function normalizeBasisString(value) {
48
+ const normalized = value?.trim();
49
+ return normalized === undefined || normalized.length === 0 ? null : normalized;
50
+ }
51
+ function toGeneratedStructuralBasisKind(basis) {
52
+ if (basis.commitId !== null) {
53
+ return "GIT_COMMIT";
54
+ }
55
+ if (basis.refName !== null) {
56
+ return "GIT_REF";
57
+ }
58
+ return "UNPINNED_COMMITTED";
59
+ }
60
+ const ECHO_NATIVE_REFUSAL_MESSAGE = "The git-warp import mapping refuses to emit ECHO_NATIVE evidence: schema " +
61
+ "invariant fallback_translated_is_not_native_continuum requires native " +
62
+ "continuum witnesses to originate from Echo, never from translated substrates.";
63
+ function invertRecord(record) {
64
+ const inverted = {};
65
+ for (const [key, value] of Object.entries(record)) {
66
+ inverted[value] = key;
67
+ }
68
+ return inverted;
69
+ }
70
+ const READING_KIND_TO_GENERATED = {
71
+ "symbol-reference-count": "SYMBOL_REFERENCE_COUNT",
72
+ "dead-symbols": "DEAD_SYMBOLS",
73
+ };
74
+ const READING_KIND_FROM_GENERATED = invertRecord(READING_KIND_TO_GENERATED);
75
+ const FRESHNESS_TO_GENERATED = {
76
+ current: "CURRENT",
77
+ stale: "STALE",
78
+ incomparable: "INCOMPARABLE",
79
+ };
80
+ const FRESHNESS_FROM_GENERATED = invertRecord(FRESHNESS_TO_GENERATED);
81
+ const POSTURE_TO_GENERATED = {
82
+ complete: "COMPLETE",
83
+ partial: "PARTIAL",
84
+ plural: "PLURAL",
85
+ "budget-limited": "BUDGET_LIMITED",
86
+ "rights-limited": "RIGHTS_LIMITED",
87
+ unavailable: "UNAVAILABLE",
88
+ };
89
+ const POSTURE_FROM_GENERATED = invertRecord(POSTURE_TO_GENERATED);
90
+ const EVIDENCE_LABEL_FROM_GENERATED = {
91
+ GIT_WARP_IMPORTED: "git-warp-imported",
92
+ FALLBACK_TRANSLATED: "fallback-translated",
93
+ };
94
+ function requireTranslatedSubstrateEvidence(result) {
95
+ const evidence = result.evidence;
96
+ if (isGitWarpImportedEvidence(evidence) || isFallbackTranslatedEvidence(evidence)) {
97
+ return evidence;
98
+ }
99
+ const candidate = evidence;
100
+ if (candidate.kind === "continuum-native" ||
101
+ candidate.evidenceLabel === "echo-native" ||
102
+ candidate.nativeContinuumWitness === true) {
103
+ throw new GeneratedModelMappingError("ECHO_NATIVE_REFUSED", ECHO_NATIVE_REFUSAL_MESSAGE);
104
+ }
105
+ throw new GeneratedModelMappingError("UNSUPPORTED_EVIDENCE_LABEL", "Evidence is not a recognized git-warp translated-substrate shape " +
106
+ `(label ${String(candidate.evidenceLabel)}).`);
107
+ }
108
+ function isOptionalString(value) {
109
+ return value === undefined || typeof value === "string";
110
+ }
111
+ function isOptionalNumber(value) {
112
+ return value === undefined || typeof value === "number";
113
+ }
114
+ function parseTranslatedSubstrateFacts(summary) {
115
+ const malformed = (detail) => new GeneratedModelMappingError("MALFORMED_EVIDENCE_SUMMARY", "Evidence summary does not carry canonical-JSON translated-substrate facts " +
116
+ `({ basis: GitWarpCommittedBasis, evidence: GitWarpEvidence }): ${detail}.`);
117
+ let parsed;
118
+ try {
119
+ parsed = JSON.parse(summary);
120
+ }
121
+ catch {
122
+ throw malformed("summary is not JSON");
123
+ }
124
+ if (typeof parsed !== "object" || parsed === null) {
125
+ throw malformed("summary is not an object");
126
+ }
127
+ const candidate = parsed;
128
+ const basis = candidate.basis;
129
+ if (basis?.kind !== "git-committed-history" ||
130
+ typeof basis.projectRoot !== "string" ||
131
+ !isOptionalString(basis.ref) ||
132
+ !isOptionalString(basis.base) ||
133
+ !isOptionalString(basis.head) ||
134
+ !isOptionalNumber(basis.maxCommits)) {
135
+ throw malformed("basis facts are not a GitWarpCommittedBasis");
136
+ }
137
+ const evidence = candidate.evidence;
138
+ const validEvidence = (evidence?.kind === "symbol-reference-count" &&
139
+ (evidence.source === "warp-graph" || evidence.source === "committed-import-scan") &&
140
+ typeof evidence.symbolName === "string" &&
141
+ typeof evidence.filePath === "string") ||
142
+ (evidence?.kind === "dead-symbols" &&
143
+ evidence.source === "warp-graph" &&
144
+ isOptionalNumber(evidence.maxCommits));
145
+ if (!validEvidence) {
146
+ throw malformed("evidence facts are not a GitWarpEvidence");
147
+ }
148
+ return {
149
+ basis: candidate.basis,
150
+ evidence: candidate.evidence,
151
+ };
152
+ }
153
+ function validatePayloadShape(kind, payload) {
154
+ const malformed = (detail) => new GeneratedModelMappingError("MALFORMED_PAYLOAD", `payloadJson is not a valid ${kind} payload: ${detail}.`);
155
+ if (typeof payload !== "object" || payload === null) {
156
+ throw malformed("payload is not an object");
157
+ }
158
+ if (kind === "symbol-reference-count") {
159
+ const candidate = payload;
160
+ if (typeof candidate.symbol !== "string" ||
161
+ typeof candidate.referenceCount !== "number" ||
162
+ !Array.isArray(candidate.referencingFiles) ||
163
+ !candidate.referencingFiles.every((file) => typeof file === "string")) {
164
+ throw malformed("expected { symbol, referenceCount, referencingFiles[] }");
165
+ }
166
+ return;
167
+ }
168
+ const candidate = payload;
169
+ if (!Array.isArray(candidate.symbols) ||
170
+ typeof candidate.total !== "number" ||
171
+ !candidate.symbols.every((symbol) => {
172
+ const entry = symbol;
173
+ return (typeof entry.name === "string" &&
174
+ typeof entry.kind === "string" &&
175
+ typeof entry.filePath === "string" &&
176
+ typeof entry.exported === "boolean" &&
177
+ typeof entry.removedInCommit === "string");
178
+ })) {
179
+ throw malformed("expected { symbols: DeadSymbolReadingPayload[], total }");
180
+ }
181
+ }
182
+ export function toGeneratedStructuralReading(result, ctx) {
183
+ const sourceEvidence = requireTranslatedSubstrateEvidence(result);
184
+ const readingKind = READING_KIND_TO_GENERATED[result.kind];
185
+ if (readingKind === undefined) {
186
+ throw new GeneratedModelMappingError("UNSUPPORTED_READING_KIND", `The generated mapping has no reading kind for ${result.kind}.`);
187
+ }
188
+ const freshness = FRESHNESS_TO_GENERATED[result.freshness];
189
+ if (freshness === undefined) {
190
+ throw new GeneratedModelMappingError("UNSUPPORTED_FRESHNESS", `The generated mapping has no freshness for ${result.freshness}.`);
191
+ }
192
+ const residualPosture = POSTURE_TO_GENERATED[result.residualPosture];
193
+ if (residualPosture === undefined) {
194
+ throw new GeneratedModelMappingError("UNSUPPORTED_RESIDUAL_POSTURE", `The generated mapping has no residual posture for ${result.residualPosture}.`);
195
+ }
196
+ if (sourceEvidence.evidence.kind !== result.kind) {
197
+ throw new GeneratedModelMappingError("EVIDENCE_MISMATCH", `Reading kind ${result.kind} disagrees with evidence facts kind ` +
198
+ `${sourceEvidence.evidence.kind}.`);
199
+ }
200
+ if (result.payload === null) {
201
+ throw new GeneratedModelMappingError("UNSERIALIZABLE_PAYLOAD", "A null payload cannot enter the generated model: payloadJson null is " +
202
+ "reserved for absent payloads, so the round-trip would not be loss-free.");
203
+ }
204
+ const payloadCanonicalJson = codec.encode(result.payload);
205
+ if (payloadCanonicalJson === undefined) {
206
+ throw new GeneratedModelMappingError("UNSERIALIZABLE_PAYLOAD", "The payload is not canonical-JSON-representable.");
207
+ }
208
+ const payloadDigest = sha256Hex(payloadCanonicalJson);
209
+ const basisFacts = sourceEvidence.basis;
210
+ const residueCanonicalJson = codec.encode({
211
+ basis: basisFacts,
212
+ evidence: sourceEvidence.evidence,
213
+ });
214
+ const basisId = deriveId("basis", {
215
+ repositoryId: ctx.repositoryId,
216
+ basis: basisFacts,
217
+ });
218
+ const evidenceId = deriveId("evidence", {
219
+ repositoryId: ctx.repositoryId,
220
+ basisId,
221
+ evidenceLabel: sourceEvidence.evidenceLabel,
222
+ residue: residueCanonicalJson,
223
+ });
224
+ const commitId = normalizeBasisString(basisFacts.head);
225
+ const refName = normalizeBasisString(basisFacts.ref);
226
+ const readingId = deriveId("reading", {
227
+ repositoryId: ctx.repositoryId,
228
+ basisId,
229
+ evidenceId,
230
+ readingKind: result.kind,
231
+ freshness: result.freshness,
232
+ residualPosture: result.residualPosture,
233
+ payloadDigest,
234
+ });
235
+ const basis = {
236
+ basisId,
237
+ repositoryId: ctx.repositoryId,
238
+ basisKind: toGeneratedStructuralBasisKind({ commitId, refName }),
239
+ commitId,
240
+ refName,
241
+ echoHeadId: null,
242
+ importBatchId: null,
243
+ summary: `git-warp committed-history basis for ${basisFacts.projectRoot}`,
244
+ };
245
+ const evidence = {
246
+ evidenceId,
247
+ evidenceKind: toGeneratedStructuralEvidenceKind(sourceEvidence.evidenceLabel),
248
+ substrate: "GIT_WARP",
249
+ basisId,
250
+ sourceRef: refName,
251
+ migrationBatchId: null,
252
+ nativeContinuumWitness: false,
253
+ parity: "NOT_CHECKED",
254
+ summary: residueCanonicalJson,
255
+ };
256
+ const reading = {
257
+ readingId,
258
+ repositoryId: ctx.repositoryId,
259
+ basisId,
260
+ evidenceId,
261
+ readingKind,
262
+ freshness,
263
+ residualPosture,
264
+ payloadDigest: payloadDigest,
265
+ payloadJson: result.payload,
266
+ summary: `${result.kind} reading via git-warp (${sourceEvidence.evidenceLabel})`,
267
+ };
268
+ return { reading, evidence, basis };
269
+ }
270
+ export function fromGeneratedStructuralReading(reading, evidence) {
271
+ if (evidence.evidenceKind === "ECHO_NATIVE" || evidence.nativeContinuumWitness) {
272
+ throw new GeneratedModelMappingError("ECHO_NATIVE_REFUSED", ECHO_NATIVE_REFUSAL_MESSAGE);
273
+ }
274
+ if (evidence.substrate !== "GIT_WARP") {
275
+ throw new GeneratedModelMappingError("UNSUPPORTED_SUBSTRATE", `The git-warp import mapping cannot reconstruct ${evidence.substrate}-substrate evidence.`);
276
+ }
277
+ const evidenceLabel = EVIDENCE_LABEL_FROM_GENERATED[evidence.evidenceKind];
278
+ if (evidenceLabel === undefined) {
279
+ throw new GeneratedModelMappingError("UNSUPPORTED_EVIDENCE_LABEL", `StructuralReadingPort has no git-warp label for generated ${evidence.evidenceKind}.`);
280
+ }
281
+ if (reading.evidenceId !== evidence.evidenceId || reading.basisId !== evidence.basisId) {
282
+ throw new GeneratedModelMappingError("EVIDENCE_MISMATCH", "Reading and evidence do not reference each other " +
283
+ `(reading ${reading.readingId} expects evidence ${reading.evidenceId}).`);
284
+ }
285
+ const kind = READING_KIND_FROM_GENERATED[reading.readingKind];
286
+ if (kind === undefined) {
287
+ throw new GeneratedModelMappingError("UNSUPPORTED_READING_KIND", `StructuralReadingPort has no reading kind for generated ${reading.readingKind}.`);
288
+ }
289
+ const freshness = FRESHNESS_FROM_GENERATED[reading.freshness];
290
+ if (freshness === undefined) {
291
+ throw new GeneratedModelMappingError("UNSUPPORTED_FRESHNESS", `StructuralReadingPort has no freshness for generated ${reading.freshness}.`);
292
+ }
293
+ const residualPosture = POSTURE_FROM_GENERATED[reading.residualPosture];
294
+ if (residualPosture === undefined) {
295
+ throw new GeneratedModelMappingError("UNSUPPORTED_RESIDUAL_POSTURE", `StructuralReadingPort has no residual posture for generated ${reading.residualPosture}.`);
296
+ }
297
+ if (reading.payloadJson === null || reading.payloadJson === undefined) {
298
+ throw new GeneratedModelMappingError("MISSING_PAYLOAD_JSON", `Reading ${reading.readingId} carries no payloadJson; the port result cannot be reconstructed.`);
299
+ }
300
+ const payloadDigest = sha256Hex(codec.encode(reading.payloadJson));
301
+ if (reading.payloadDigest !== payloadDigest) {
302
+ throw new GeneratedModelMappingError("PAYLOAD_DIGEST_MISMATCH", `Reading ${reading.readingId} payloadJson does not match its payloadDigest.`);
303
+ }
304
+ validatePayloadShape(kind, reading.payloadJson);
305
+ const facts = parseTranslatedSubstrateFacts(evidence.summary);
306
+ if (facts.evidence.kind !== kind) {
307
+ throw new GeneratedModelMappingError("EVIDENCE_MISMATCH", `Reading kind ${kind} disagrees with evidence facts kind ${facts.evidence.kind}.`);
308
+ }
309
+ return {
310
+ kind,
311
+ freshness,
312
+ residualPosture,
313
+ payload: reading.payloadJson,
314
+ evidence: {
315
+ kind: "translated-substrate",
316
+ evidenceLabel,
317
+ substrate: "git-warp",
318
+ basis: facts.basis,
319
+ evidence: facts.evidence,
320
+ nativeContinuumWitness: false,
321
+ },
322
+ };
323
+ }
324
+ //# sourceMappingURL=structural-reading-generated-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structural-reading-generated-model.js","sourceRoot":"","sources":["../../src/echo/structural-reading-generated-model.ts"],"names":[],"mappings":"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"}