loopforge 1.3.1 → 1.8.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 (91) hide show
  1. package/README.md +64 -3
  2. package/dist/backends/fs.d.ts +5 -0
  3. package/dist/backends/fs.d.ts.map +1 -1
  4. package/dist/backends/fs.js +66 -16
  5. package/dist/backends/fs.js.map +1 -1
  6. package/dist/builder.d.ts +0 -1
  7. package/dist/builder.d.ts.map +1 -1
  8. package/dist/builder.js +14 -25
  9. package/dist/builder.js.map +1 -1
  10. package/dist/engine.d.ts +28 -5
  11. package/dist/engine.d.ts.map +1 -1
  12. package/dist/engine.js +303 -105
  13. package/dist/engine.js.map +1 -1
  14. package/dist/index.d.ts +9 -12
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +7 -10
  17. package/dist/index.js.map +1 -1
  18. package/dist/loop-compiler.d.ts +28 -2
  19. package/dist/loop-compiler.d.ts.map +1 -1
  20. package/dist/loop-compiler.js +718 -38
  21. package/dist/loop-compiler.js.map +1 -1
  22. package/dist/mcp/server.d.ts.map +1 -1
  23. package/dist/mcp/server.js +6 -4
  24. package/dist/mcp/server.js.map +1 -1
  25. package/dist/mcp/session.d.ts +24 -4
  26. package/dist/mcp/session.d.ts.map +1 -1
  27. package/dist/mcp/session.js +303 -34
  28. package/dist/mcp/session.js.map +1 -1
  29. package/dist/mcp/tools.d.ts +165 -1
  30. package/dist/mcp/tools.d.ts.map +1 -1
  31. package/dist/mcp/tools.js +144 -15
  32. package/dist/mcp/tools.js.map +1 -1
  33. package/dist/memory-bridge.d.ts +47 -0
  34. package/dist/memory-bridge.d.ts.map +1 -0
  35. package/dist/memory-bridge.js +290 -0
  36. package/dist/memory-bridge.js.map +1 -0
  37. package/dist/observability.d.ts +23 -0
  38. package/dist/observability.d.ts.map +1 -0
  39. package/dist/observability.js +29 -0
  40. package/dist/observability.js.map +1 -0
  41. package/dist/policy.d.ts +72 -0
  42. package/dist/policy.d.ts.map +1 -1
  43. package/dist/policy.js +44 -0
  44. package/dist/policy.js.map +1 -1
  45. package/dist/protocol.d.ts +197 -7
  46. package/dist/protocol.d.ts.map +1 -1
  47. package/dist/protocol.js +48 -5
  48. package/dist/protocol.js.map +1 -1
  49. package/dist/runtime.d.ts +19 -0
  50. package/dist/runtime.d.ts.map +1 -1
  51. package/dist/runtime.js +446 -142
  52. package/dist/runtime.js.map +1 -1
  53. package/dist/tests/builder.test.js +1 -25
  54. package/dist/tests/builder.test.js.map +1 -1
  55. package/dist/tests/engine.test.js +213 -38
  56. package/dist/tests/engine.test.js.map +1 -1
  57. package/dist/tests/generate-schema.test.js +4 -4
  58. package/dist/tests/generate-schema.test.js.map +1 -1
  59. package/dist/tests/loop-compiler.test.js +427 -2
  60. package/dist/tests/loop-compiler.test.js.map +1 -1
  61. package/dist/tests/mcp.test.js +166 -79
  62. package/dist/tests/mcp.test.js.map +1 -1
  63. package/dist/tests/memory-bridge.test.d.ts +8 -0
  64. package/dist/tests/memory-bridge.test.d.ts.map +1 -0
  65. package/dist/tests/memory-bridge.test.js +384 -0
  66. package/dist/tests/memory-bridge.test.js.map +1 -0
  67. package/dist/tests/protocol.test.js +14 -5
  68. package/dist/tests/protocol.test.js.map +1 -1
  69. package/dist/tests/verification-gate.test.d.ts +2 -0
  70. package/dist/tests/verification-gate.test.d.ts.map +1 -0
  71. package/dist/tests/verification-gate.test.js +407 -0
  72. package/dist/tests/verification-gate.test.js.map +1 -0
  73. package/dist/verification-gate.d.ts +26 -0
  74. package/dist/verification-gate.d.ts.map +1 -0
  75. package/dist/verification-gate.js +232 -0
  76. package/dist/verification-gate.js.map +1 -0
  77. package/loop_policy.json +31 -0
  78. package/package.json +1 -2
  79. package/skills/perception/SKILL.md +147 -55
  80. package/dist/adapter.d.ts +0 -17
  81. package/dist/adapter.d.ts.map +0 -1
  82. package/dist/adapter.js +0 -228
  83. package/dist/adapter.js.map +0 -1
  84. package/dist/cli.d.ts +0 -7
  85. package/dist/cli.d.ts.map +0 -1
  86. package/dist/cli.js +0 -458
  87. package/dist/cli.js.map +0 -1
  88. package/dist/tests/adapter.test.d.ts +0 -2
  89. package/dist/tests/adapter.test.d.ts.map +0 -1
  90. package/dist/tests/adapter.test.js +0 -104
  91. package/dist/tests/adapter.test.js.map +0 -1
@@ -0,0 +1,407 @@
1
+ /** Tests for verification-gate — Layer 1 cross-round consistency checks. */
2
+ import { describe, it } from "node:test";
3
+ import assert from "node:assert/strict";
4
+ import { makeExecutionEvidence, makeSelfEvaluation, } from "../protocol.js";
5
+ import { verifySelfEvaluation } from "../verification-gate.js";
6
+ // ═══════════════════════════════════════════════════════════════════════════
7
+ // Helpers
8
+ // ═══════════════════════════════════════════════════════════════════════════
9
+ /** Build a minimal SelfEvaluation for testing. */
10
+ function se(overrides = {}) {
11
+ return makeSelfEvaluation({
12
+ success: true,
13
+ output_summary: "Task completed.",
14
+ constraint_violations: [],
15
+ should_continue: true,
16
+ ...overrides,
17
+ });
18
+ }
19
+ /** Build a vault entry with a given round and optional constraint_violations. */
20
+ function vaultRound(round, violations = []) {
21
+ return {
22
+ task_id: `loop:test-loop:r${round}`,
23
+ loop_id: "test-loop",
24
+ loop_lineage: { round, quality_score: 5, task: "test task" },
25
+ constraint_violations: violations,
26
+ };
27
+ }
28
+ // ═══════════════════════════════════════════════════════════════════════════
29
+ // Happy path
30
+ // ═══════════════════════════════════════════════════════════════════════════
31
+ describe("verification-gate — happy path", () => {
32
+ it("trusted verdict when all checks pass with consistent data", () => {
33
+ const curr = se({
34
+ success: false,
35
+ execution_evidence: makeExecutionEvidence({
36
+ files_changed: ["src/foo.ts"],
37
+ test_results: { passed: 3, failed: 1, skipped: 0 },
38
+ success_criteria_met: ["impl"],
39
+ success_criteria_remaining: ["tests"],
40
+ progress_estimate: 0.7,
41
+ }),
42
+ constraint_violations: ["deadline"],
43
+ discovered_constraints: ["new: must handle null"],
44
+ });
45
+ const prev = se({
46
+ success: false,
47
+ execution_evidence: makeExecutionEvidence({
48
+ files_changed: ["src/bar.ts"],
49
+ test_results: { passed: 1, failed: 2, skipped: 0 },
50
+ success_criteria_met: [],
51
+ success_criteria_remaining: ["impl", "tests"],
52
+ progress_estimate: 0.3,
53
+ }),
54
+ constraint_violations: ["missing docs"],
55
+ discovered_constraints: ["must use async"],
56
+ });
57
+ const vault = [vaultRound(1, ["missing docs"])];
58
+ const result = verifySelfEvaluation(curr, 2, vault, prev);
59
+ assert.equal(result.verdict, "trusted");
60
+ assert.equal(result.flags.length, 0);
61
+ });
62
+ it("trusted verdict for first round (no previous data)", () => {
63
+ const curr = se({
64
+ execution_evidence: makeExecutionEvidence({
65
+ progress_estimate: 0.0,
66
+ }),
67
+ });
68
+ const result = verifySelfEvaluation(curr, 1, [], null);
69
+ assert.equal(result.verdict, "trusted");
70
+ assert.equal(result.flags.length, 0);
71
+ });
72
+ });
73
+ // ═══════════════════════════════════════════════════════════════════════════
74
+ // Check 1: Progress regression
75
+ // ═══════════════════════════════════════════════════════════════════════════
76
+ describe("verification-gate — progress regression", () => {
77
+ it("flags when estimate drops > 0.2", () => {
78
+ const curr = se({
79
+ execution_evidence: makeExecutionEvidence({ progress_estimate: 0.3 }),
80
+ });
81
+ const prev = se({
82
+ execution_evidence: makeExecutionEvidence({ progress_estimate: 0.8 }),
83
+ });
84
+ const result = verifySelfEvaluation(curr, 2, [], prev);
85
+ assert.equal(result.verdict, "suspect");
86
+ const flag = result.flags.find((f) => f.check === "progress_regression");
87
+ assert.ok(flag);
88
+ assert.equal(flag.field, "progress_estimate");
89
+ assert.equal(flag.severity, "warn");
90
+ });
91
+ it("does not flag when estimate drops ≤ 0.2", () => {
92
+ const curr = se({
93
+ execution_evidence: makeExecutionEvidence({ progress_estimate: 0.6 }),
94
+ });
95
+ const prev = se({
96
+ execution_evidence: makeExecutionEvidence({ progress_estimate: 0.8 }),
97
+ });
98
+ const result = verifySelfEvaluation(curr, 2, [], prev);
99
+ assert.equal(result.verdict, "trusted");
100
+ });
101
+ it("does not flag when estimate increases", () => {
102
+ const curr = se({
103
+ execution_evidence: makeExecutionEvidence({ progress_estimate: 0.9 }),
104
+ });
105
+ const prev = se({
106
+ execution_evidence: makeExecutionEvidence({ progress_estimate: 0.5 }),
107
+ });
108
+ const result = verifySelfEvaluation(curr, 2, [], prev);
109
+ assert.equal(result.verdict, "trusted");
110
+ });
111
+ it("does not flag when no previous execution evidence", () => {
112
+ const curr = se({
113
+ execution_evidence: makeExecutionEvidence({ progress_estimate: 0.3 }),
114
+ });
115
+ const prev = se({ execution_evidence: undefined });
116
+ const result = verifySelfEvaluation(curr, 2, [], prev);
117
+ assert.equal(result.verdict, "trusted");
118
+ });
119
+ });
120
+ // ═══════════════════════════════════════════════════════════════════════════
121
+ // Check 2: Empty change + all passing
122
+ // ═══════════════════════════════════════════════════════════════════════════
123
+ describe("verification-gate — empty change with passing tests", () => {
124
+ it("flags when no files changed, all tests pass, and success is true", () => {
125
+ const curr = se({
126
+ success: true,
127
+ execution_evidence: makeExecutionEvidence({
128
+ files_changed: [],
129
+ test_results: { passed: 5, failed: 0, skipped: 0 },
130
+ }),
131
+ });
132
+ const result = verifySelfEvaluation(curr, 2, [], null);
133
+ assert.equal(result.verdict, "suspect");
134
+ const flag = result.flags.find((f) => f.check === "empty_change_with_passing");
135
+ assert.ok(flag);
136
+ assert.equal(flag.severity, "warn");
137
+ });
138
+ it("does not flag when tests have failures", () => {
139
+ const curr = se({
140
+ success: false,
141
+ execution_evidence: makeExecutionEvidence({
142
+ files_changed: [],
143
+ test_results: { passed: 3, failed: 1, skipped: 0 },
144
+ }),
145
+ });
146
+ const result = verifySelfEvaluation(curr, 2, [], null);
147
+ assert.equal(result.verdict, "trusted");
148
+ });
149
+ it("does not flag when files were changed", () => {
150
+ const curr = se({
151
+ success: true,
152
+ execution_evidence: makeExecutionEvidence({
153
+ files_changed: ["src/foo.ts"],
154
+ test_results: { passed: 5, failed: 0, skipped: 0 },
155
+ }),
156
+ });
157
+ const result = verifySelfEvaluation(curr, 2, [], null);
158
+ const flag = result.flags.find((f) => f.check === "empty_change_with_passing");
159
+ assert.equal(flag, undefined);
160
+ });
161
+ it("does not flag when success is false", () => {
162
+ const curr = se({
163
+ success: false,
164
+ execution_evidence: makeExecutionEvidence({
165
+ files_changed: [],
166
+ test_results: { passed: 5, failed: 0, skipped: 0 },
167
+ }),
168
+ });
169
+ const result = verifySelfEvaluation(curr, 2, [], null);
170
+ assert.equal(result.verdict, "trusted");
171
+ });
172
+ });
173
+ // ═══════════════════════════════════════════════════════════════════════════
174
+ // Check 3: Success with remaining criteria
175
+ // ═══════════════════════════════════════════════════════════════════════════
176
+ describe("verification-gate — success with remaining criteria", () => {
177
+ it("flags when success=true but criteria remain unmet", () => {
178
+ const curr = se({
179
+ success: true,
180
+ execution_evidence: makeExecutionEvidence({
181
+ success_criteria_met: ["builds"],
182
+ success_criteria_remaining: ["tests pass", "docs updated"],
183
+ }),
184
+ });
185
+ const result = verifySelfEvaluation(curr, 3, [], null);
186
+ assert.equal(result.verdict, "contradicted");
187
+ const flag = result.flags.find((f) => f.check === "success_with_remaining_criteria");
188
+ assert.ok(flag);
189
+ assert.equal(flag.severity, "error");
190
+ assert.ok(flag.detail.includes("tests pass"));
191
+ });
192
+ it("does not flag when success=true and criteria list is empty", () => {
193
+ const curr = se({
194
+ success: true,
195
+ execution_evidence: makeExecutionEvidence({
196
+ success_criteria_met: ["builds", "tests pass"],
197
+ success_criteria_remaining: [],
198
+ }),
199
+ });
200
+ const result = verifySelfEvaluation(curr, 3, [], null);
201
+ assert.equal(result.verdict, "trusted");
202
+ });
203
+ it("does not flag when success is false even with remaining criteria", () => {
204
+ const curr = se({
205
+ success: false,
206
+ execution_evidence: makeExecutionEvidence({
207
+ success_criteria_remaining: ["tests pass"],
208
+ }),
209
+ });
210
+ const result = verifySelfEvaluation(curr, 3, [], null);
211
+ assert.equal(result.verdict, "trusted");
212
+ });
213
+ });
214
+ // ═══════════════════════════════════════════════════════════════════════════
215
+ // Check 4: Duplicate constraint discovery
216
+ // ═══════════════════════════════════════════════════════════════════════════
217
+ describe("verification-gate — duplicate constraint discovery", () => {
218
+ it("flags when discovered constraint was already in previous round", () => {
219
+ const curr = se({
220
+ discovered_constraints: ["must handle null"],
221
+ });
222
+ const prev = se({
223
+ discovered_constraints: ["must handle null"],
224
+ });
225
+ const result = verifySelfEvaluation(curr, 2, [], prev);
226
+ assert.equal(result.verdict, "suspect");
227
+ const flag = result.flags.find((f) => f.check === "duplicate_constraint_discovery");
228
+ assert.ok(flag);
229
+ assert.equal(flag.severity, "warn");
230
+ });
231
+ it("flags when discovered constraint was a previous violation", () => {
232
+ const curr = se({
233
+ discovered_constraints: ["deadline pressure"],
234
+ });
235
+ const prev = se({
236
+ constraint_violations: ["deadline pressure"],
237
+ });
238
+ const result = verifySelfEvaluation(curr, 2, [], prev);
239
+ assert.equal(result.verdict, "suspect");
240
+ });
241
+ it("does not flag when constraint is genuinely new", () => {
242
+ const curr = se({
243
+ discovered_constraints: ["must validate input"],
244
+ });
245
+ const prev = se({
246
+ discovered_constraints: ["must handle null"],
247
+ constraint_violations: ["deadline"],
248
+ });
249
+ const result = verifySelfEvaluation(curr, 2, [], prev);
250
+ assert.equal(result.verdict, "trusted");
251
+ });
252
+ });
253
+ // ═══════════════════════════════════════════════════════════════════════════
254
+ // Check 5: Recurring violation
255
+ // ═══════════════════════════════════════════════════════════════════════════
256
+ describe("verification-gate — recurring violation", () => {
257
+ it("flags when same violation appears 3 consecutive rounds", () => {
258
+ const curr = se({
259
+ constraint_violations: ["deadline", "new issue"],
260
+ });
261
+ const prev = se({
262
+ constraint_violations: ["deadline", "other"],
263
+ });
264
+ // Entry for round 2 (current is round 3) stores violations from round 1
265
+ const vault = [
266
+ vaultRound(2, ["deadline"]), // violations from round 1
267
+ ];
268
+ const result = verifySelfEvaluation(curr, 3, vault, prev);
269
+ assert.equal(result.verdict, "contradicted");
270
+ const flag = result.flags.find((f) => f.check === "recurring_violation");
271
+ assert.ok(flag);
272
+ assert.equal(flag.severity, "error");
273
+ assert.ok(flag.detail.includes("deadline"));
274
+ });
275
+ it("does not flag after only 2 consecutive rounds", () => {
276
+ const curr = se({
277
+ constraint_violations: ["deadline"],
278
+ });
279
+ const prev = se({
280
+ constraint_violations: ["deadline"],
281
+ });
282
+ // Only 2 rounds of data (current + prev) — no vault entry with the 3rd
283
+ const vault = []; // no deeper history
284
+ const result = verifySelfEvaluation(curr, 2, vault, prev);
285
+ // Should be trusted or suspect at most (not contradicted for recurring)
286
+ const flag = result.flags.find((f) => f.check === "recurring_violation");
287
+ assert.equal(flag, undefined);
288
+ });
289
+ it("does not flag when violations differ each round", () => {
290
+ const curr = se({
291
+ constraint_violations: ["issue C"],
292
+ });
293
+ const prev = se({
294
+ constraint_violations: ["issue B"],
295
+ });
296
+ const vault = [vaultRound(2, ["issue A"])]; // round 1 violations
297
+ const result = verifySelfEvaluation(curr, 3, vault, prev);
298
+ const flag = result.flags.find((f) => f.check === "recurring_violation");
299
+ assert.equal(flag, undefined);
300
+ });
301
+ });
302
+ // ═══════════════════════════════════════════════════════════════════════════
303
+ // Check 6: Retract fresh constraint
304
+ // ═══════════════════════════════════════════════════════════════════════════
305
+ describe("verification-gate — retract fresh constraint", () => {
306
+ it("flags when retracting a constraint discovered in previous round", () => {
307
+ const curr = se({
308
+ retracted_constraints: ["must use async"],
309
+ });
310
+ const prev = se({
311
+ discovered_constraints: ["must use async", "must handle null"],
312
+ });
313
+ const result = verifySelfEvaluation(curr, 3, [], prev);
314
+ assert.equal(result.verdict, "suspect");
315
+ const flag = result.flags.find((f) => f.check === "retract_fresh_constraint");
316
+ assert.ok(flag);
317
+ assert.equal(flag.severity, "warn");
318
+ assert.ok(flag.detail.includes("round 2"));
319
+ });
320
+ it("does not flag when retracting an older constraint", () => {
321
+ const curr = se({
322
+ retracted_constraints: ["old constraint"],
323
+ });
324
+ const prev = se({
325
+ discovered_constraints: ["new constraint"],
326
+ });
327
+ const result = verifySelfEvaluation(curr, 3, [], prev);
328
+ assert.equal(result.verdict, "trusted");
329
+ });
330
+ it("does not flag when no previous round exists", () => {
331
+ const curr = se({
332
+ retracted_constraints: ["some constraint"],
333
+ });
334
+ const result = verifySelfEvaluation(curr, 1, [], null);
335
+ assert.equal(result.verdict, "trusted");
336
+ });
337
+ });
338
+ // ═══════════════════════════════════════════════════════════════════════════
339
+ // Verdict aggregation
340
+ // ═══════════════════════════════════════════════════════════════════════════
341
+ describe("verification-gate — verdict aggregation", () => {
342
+ it("single warn flag → suspect", () => {
343
+ const curr = se({
344
+ discovered_constraints: ["must handle null"],
345
+ });
346
+ const prev = se({
347
+ discovered_constraints: ["must handle null"],
348
+ });
349
+ const result = verifySelfEvaluation(curr, 2, [], prev);
350
+ assert.equal(result.verdict, "suspect");
351
+ assert.equal(result.flags.length, 1);
352
+ });
353
+ it("single error flag → contradicted", () => {
354
+ const curr = se({
355
+ success: true,
356
+ execution_evidence: makeExecutionEvidence({
357
+ success_criteria_remaining: ["tests pass"],
358
+ }),
359
+ });
360
+ const result = verifySelfEvaluation(curr, 3, [], null);
361
+ assert.equal(result.verdict, "contradicted");
362
+ assert.equal(result.flags.length, 1);
363
+ });
364
+ it("multiple warn + one error → contradicted (error wins)", () => {
365
+ const curr = se({
366
+ success: true,
367
+ execution_evidence: makeExecutionEvidence({
368
+ files_changed: [],
369
+ test_results: { passed: 3, failed: 0, skipped: 0 },
370
+ success_criteria_remaining: ["tests pass"],
371
+ }),
372
+ discovered_constraints: ["must handle null"],
373
+ });
374
+ const prev = se({
375
+ discovered_constraints: ["must handle null"],
376
+ });
377
+ const result = verifySelfEvaluation(curr, 2, [], prev);
378
+ assert.equal(result.verdict, "contradicted");
379
+ // Should have both the warn and error flags
380
+ assert.ok(result.flags.length >= 2);
381
+ });
382
+ it("all checks pass → trusted", () => {
383
+ const curr = se({
384
+ success: false,
385
+ execution_evidence: makeExecutionEvidence({
386
+ files_changed: ["src/foo.ts"],
387
+ test_results: { passed: 3, failed: 1, skipped: 0 },
388
+ success_criteria_remaining: ["tests"],
389
+ progress_estimate: 0.5,
390
+ }),
391
+ constraint_violations: ["minor"],
392
+ discovered_constraints: ["unique constraint"],
393
+ });
394
+ const prev = se({
395
+ success: false,
396
+ execution_evidence: makeExecutionEvidence({
397
+ progress_estimate: 0.3,
398
+ }),
399
+ constraint_violations: ["other"],
400
+ discovered_constraints: ["different constraint"],
401
+ });
402
+ const result = verifySelfEvaluation(curr, 2, [], prev);
403
+ assert.equal(result.verdict, "trusted");
404
+ assert.equal(result.flags.length, 0);
405
+ });
406
+ });
407
+ //# sourceMappingURL=verification-gate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification-gate.test.js","sourceRoot":"","sources":["../../src/tests/verification-gate.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /** Verification Gate — Layer 1 cross-round consistency checks.
2
+ *
3
+ * Pure-function module. Validates an agent's SelfEvaluation against the
4
+ * loop's own lineage before it enters the compiler.
5
+ *
6
+ * Verdict semantics:
7
+ * - trusted: all checks passed; flags are informational only.
8
+ * - suspect: one or more warn-level flags; flags become warnings in
9
+ * the next prompt so the agent can clarify.
10
+ * - contradicted: one or more error-level flags; the quality score for
11
+ * this round is excluded from the quality trend (NOT
12
+ * modified). Flags become hard constraints — the agent
13
+ * must respond in the next round.
14
+ */
15
+ import type { VaultEntry } from "./backends/interface.js";
16
+ import type { SelfEvaluation, VerificationResult } from "./protocol.js";
17
+ /** Verify a SelfEvaluation against the loop's cross-round lineage.
18
+ *
19
+ * @param selfEval The agent's self-evaluation for the current round.
20
+ * @param currentRound The current round number (1-based).
21
+ * @param vaultEntries Vault entries for this loop (non-feedback only).
22
+ * @param prevSelfEval The agent's self-evaluation from the previous round
23
+ * (null for round 1).
24
+ */
25
+ export declare function verifySelfEvaluation(selfEval: SelfEvaluation, currentRound: number, vaultEntries: VaultEntry[], prevSelfEval?: SelfEvaluation | null): VerificationResult;
26
+ //# sourceMappingURL=verification-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification-gate.d.ts","sourceRoot":"","sources":["../src/verification-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAoB,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAwN1F;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,cAAc,EACxB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,UAAU,EAAE,EAC1B,YAAY,GAAE,cAAc,GAAG,IAAW,GACzC,kBAAkB,CAuCpB"}