loopforge 3.7.1 → 3.8.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 (144) hide show
  1. package/README.md +171 -169
  2. package/dist/audit.d.ts +53 -1
  3. package/dist/audit.d.ts.map +1 -1
  4. package/dist/audit.js +106 -22
  5. package/dist/audit.js.map +1 -1
  6. package/dist/canonical-state.d.ts +52 -67
  7. package/dist/canonical-state.d.ts.map +1 -1
  8. package/dist/canonical-state.js +134 -147
  9. package/dist/canonical-state.js.map +1 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +103 -4
  12. package/dist/cli.js.map +1 -1
  13. package/dist/cognitive-facts.d.ts +13 -0
  14. package/dist/cognitive-facts.d.ts.map +1 -1
  15. package/dist/cognitive-facts.js +28 -13
  16. package/dist/cognitive-facts.js.map +1 -1
  17. package/dist/committed-round.d.ts +103 -21
  18. package/dist/committed-round.d.ts.map +1 -1
  19. package/dist/committed-round.js +188 -45
  20. package/dist/committed-round.js.map +1 -1
  21. package/dist/contract-items.d.ts +55 -0
  22. package/dist/contract-items.d.ts.map +1 -0
  23. package/dist/contract-items.js +180 -0
  24. package/dist/contract-items.js.map +1 -0
  25. package/dist/enforcement-gate.d.ts +20 -2
  26. package/dist/enforcement-gate.d.ts.map +1 -1
  27. package/dist/enforcement-gate.js +197 -386
  28. package/dist/enforcement-gate.js.map +1 -1
  29. package/dist/engine.d.ts +1 -1
  30. package/dist/engine.d.ts.map +1 -1
  31. package/dist/engine.js +53 -38
  32. package/dist/engine.js.map +1 -1
  33. package/dist/evidence-claims.d.ts +4 -4
  34. package/dist/evidence-claims.d.ts.map +1 -1
  35. package/dist/evidence-claims.js +16 -14
  36. package/dist/evidence-claims.js.map +1 -1
  37. package/dist/evidence-provider.d.ts +85 -89
  38. package/dist/evidence-provider.d.ts.map +1 -1
  39. package/dist/evidence-provider.js +328 -184
  40. package/dist/evidence-provider.js.map +1 -1
  41. package/dist/explain.d.ts +76 -0
  42. package/dist/explain.d.ts.map +1 -0
  43. package/dist/explain.js +127 -0
  44. package/dist/explain.js.map +1 -0
  45. package/dist/generate-schema.js +152 -16
  46. package/dist/generate-schema.js.map +1 -1
  47. package/dist/index.d.ts +6 -6
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +5 -5
  50. package/dist/index.js.map +1 -1
  51. package/dist/loop-compiler.d.ts +40 -53
  52. package/dist/loop-compiler.d.ts.map +1 -1
  53. package/dist/loop-compiler.js +229 -553
  54. package/dist/loop-compiler.js.map +1 -1
  55. package/dist/loop-extras-parser.d.ts +0 -1
  56. package/dist/loop-extras-parser.d.ts.map +1 -1
  57. package/dist/loop-extras-parser.js +0 -4
  58. package/dist/loop-extras-parser.js.map +1 -1
  59. package/dist/loop-projection.d.ts.map +1 -1
  60. package/dist/loop-projection.js +3 -1
  61. package/dist/loop-projection.js.map +1 -1
  62. package/dist/mcp/round-lifecycle.d.ts +30 -21
  63. package/dist/mcp/round-lifecycle.d.ts.map +1 -1
  64. package/dist/mcp/round-lifecycle.js +47 -103
  65. package/dist/mcp/round-lifecycle.js.map +1 -1
  66. package/dist/mcp/server.d.ts.map +1 -1
  67. package/dist/mcp/server.js +51 -7
  68. package/dist/mcp/server.js.map +1 -1
  69. package/dist/mcp/session.d.ts +39 -23
  70. package/dist/mcp/session.d.ts.map +1 -1
  71. package/dist/mcp/session.js +148 -163
  72. package/dist/mcp/session.js.map +1 -1
  73. package/dist/mcp/submission-boundary.d.ts +89 -0
  74. package/dist/mcp/submission-boundary.d.ts.map +1 -0
  75. package/dist/mcp/submission-boundary.js +203 -0
  76. package/dist/mcp/submission-boundary.js.map +1 -0
  77. package/dist/mcp/tools.d.ts.map +1 -1
  78. package/dist/mcp/tools.js +249 -128
  79. package/dist/mcp/tools.js.map +1 -1
  80. package/dist/policy-metrics.js +2 -2
  81. package/dist/policy-metrics.js.map +1 -1
  82. package/dist/policy.d.ts +55 -93
  83. package/dist/policy.d.ts.map +1 -1
  84. package/dist/policy.js +149 -38
  85. package/dist/policy.js.map +1 -1
  86. package/dist/prompt-assembler.d.ts +1 -32
  87. package/dist/prompt-assembler.d.ts.map +1 -1
  88. package/dist/prompt-assembler.js +282 -435
  89. package/dist/prompt-assembler.js.map +1 -1
  90. package/dist/prompt-policy.d.ts +1 -4
  91. package/dist/prompt-policy.d.ts.map +1 -1
  92. package/dist/prompt-policy.js +6 -7
  93. package/dist/prompt-policy.js.map +1 -1
  94. package/dist/protocol.d.ts +365 -142
  95. package/dist/protocol.d.ts.map +1 -1
  96. package/dist/protocol.js +21 -66
  97. package/dist/protocol.js.map +1 -1
  98. package/dist/replay.js +2 -2
  99. package/dist/replay.js.map +1 -1
  100. package/dist/round-contract.d.ts +69 -57
  101. package/dist/round-contract.d.ts.map +1 -1
  102. package/dist/round-contract.js +104 -64
  103. package/dist/round-contract.js.map +1 -1
  104. package/dist/round-coordinator.d.ts +36 -16
  105. package/dist/round-coordinator.d.ts.map +1 -1
  106. package/dist/round-coordinator.js +166 -102
  107. package/dist/round-coordinator.js.map +1 -1
  108. package/dist/round-driver.d.ts +3 -5
  109. package/dist/round-driver.d.ts.map +1 -1
  110. package/dist/round-driver.js +0 -1
  111. package/dist/round-driver.js.map +1 -1
  112. package/dist/round-facts.d.ts +96 -0
  113. package/dist/round-facts.d.ts.map +1 -0
  114. package/dist/round-facts.js +216 -0
  115. package/dist/round-facts.js.map +1 -0
  116. package/dist/round-transaction.d.ts +19 -9
  117. package/dist/round-transaction.d.ts.map +1 -1
  118. package/dist/round-transaction.js +90 -22
  119. package/dist/round-transaction.js.map +1 -1
  120. package/dist/self-eval.d.ts +87 -9
  121. package/dist/self-eval.d.ts.map +1 -1
  122. package/dist/self-eval.js +396 -27
  123. package/dist/self-eval.js.map +1 -1
  124. package/dist/subgoal-state.d.ts +77 -0
  125. package/dist/subgoal-state.d.ts.map +1 -0
  126. package/dist/subgoal-state.js +198 -0
  127. package/dist/subgoal-state.js.map +1 -0
  128. package/dist/token-utils.d.ts +52 -19
  129. package/dist/token-utils.d.ts.map +1 -1
  130. package/dist/token-utils.js +83 -72
  131. package/dist/token-utils.js.map +1 -1
  132. package/dist/verification-gate.d.ts +14 -31
  133. package/dist/verification-gate.d.ts.map +1 -1
  134. package/dist/verification-gate.js +178 -496
  135. package/dist/verification-gate.js.map +1 -1
  136. package/dist/version.d.ts +1 -1
  137. package/dist/version.js +1 -1
  138. package/dist/workspace.d.ts +9 -0
  139. package/dist/workspace.d.ts.map +1 -1
  140. package/dist/workspace.js +17 -0
  141. package/dist/workspace.js.map +1 -1
  142. package/loop_policy.json +6 -30
  143. package/package.json +1 -1
  144. package/skills/perception/SKILL.md +243 -79
@@ -0,0 +1,180 @@
1
+ /** Round Contract item status — the v3.8 verification skeleton.
2
+ *
3
+ * A contract declares ITEMS; each item binds evidence commands. The agent
4
+ * may only CLAIM `met` / `remaining`; whether an item is `verified`,
5
+ * `contradicted`, or `insufficient` is derived here from committed
6
+ * observations and the in-flight round. Nothing in this module writes state:
7
+ * it is a pure function of the committed round views, the current report,
8
+ * the current observations, and policy.
9
+ */
10
+ const EMPTY_VIEW = {
11
+ contractId: "",
12
+ closure: "open",
13
+ closed_at_round: null,
14
+ items: [],
15
+ verifiedCount: 0,
16
+ contradictedCount: 0,
17
+ insufficientCount: 0,
18
+ };
19
+ function itemClaims(item, slices) {
20
+ const claims = [];
21
+ for (const slice of slices) {
22
+ for (const claim of slice.report?.contract_item_claims ?? []) {
23
+ if (claim.item_id === item.id)
24
+ claims.push({ round: slice.round, outcome: claim.outcome });
25
+ }
26
+ }
27
+ return claims;
28
+ }
29
+ /** The round in which the item was last claimed `met` (null when the latest
30
+ * claim is `remaining` or there is none). */
31
+ function metClaimRound(claims) {
32
+ const last = claims[claims.length - 1];
33
+ return last && last.outcome === "met" ? last.round : null;
34
+ }
35
+ function evaluateCommand(commandId, declaredHash, slices, fromRound, configured) {
36
+ if (!configured) {
37
+ return {
38
+ verdict: "insufficient",
39
+ reason: `command "${commandId}" is no longer configured/enabled — cannot observe it`,
40
+ };
41
+ }
42
+ // v3.8.1: the LATEST observation at or after the claim decides, so the
43
+ // closing round's evidence is the one consulted. Scanning forward let an
44
+ // early pass outlive a later failure: the item stayed `verified`, its
45
+ // contract closed, and a success stop could reach `completed` in a round
46
+ // whose bound command the machine had just observed FAILING.
47
+ for (const slice of [...slices].reverse()) {
48
+ if (slice.round < fromRound)
49
+ continue;
50
+ const observation = slice.observations.find((item) => item.kind === "command" &&
51
+ item.phase === "after" &&
52
+ item.data.commandId === commandId);
53
+ if (!observation || observation.kind !== "command")
54
+ continue;
55
+ const data = observation.data;
56
+ if (declaredHash && data.configHash !== declaredHash) {
57
+ return {
58
+ verdict: "insufficient",
59
+ reason: `command "${commandId}" was reconfigured after declaration (round ${slice.round})`,
60
+ };
61
+ }
62
+ const changed = new Set(slice.observations
63
+ .filter((item) => item.providerId === "git")
64
+ .flatMap((item) => item.files));
65
+ if (observation.status === "passed") {
66
+ // A malformed observation must not crash the derivation the compile
67
+ // path, the projection, the coordinator, explain and audit all share:
68
+ // no entrypoint list means the tamper check simply has nothing to
69
+ // compare, the same posture as a command with no entrypoint files.
70
+ const entrypoints = Array.isArray(data.entrypointFiles) ? data.entrypointFiles : [];
71
+ if (changed.size > 0 && entrypoints.some((file) => changed.has(file))) {
72
+ return {
73
+ verdict: "contradicted",
74
+ reason: `command "${commandId}" passed but its entrypoint changed in round ${slice.round}`,
75
+ };
76
+ }
77
+ return { verdict: "verified", reason: "" };
78
+ }
79
+ if (observation.status === "failed") {
80
+ return {
81
+ verdict: "contradicted",
82
+ reason: `command "${commandId}" failed in round ${slice.round}` +
83
+ (typeof data.exitCode === "number" ? ` (exit ${data.exitCode})` : ""),
84
+ };
85
+ }
86
+ return {
87
+ verdict: "insufficient",
88
+ reason: `command "${commandId}" observed ${observation.status} in round ${slice.round}`,
89
+ };
90
+ }
91
+ return {
92
+ verdict: "insufficient",
93
+ reason: `command "${commandId}" produced no after-phase observation since round ${fromRound}`,
94
+ };
95
+ }
96
+ /** v3.8: Derive every item's status plus the contract's closure. */
97
+ export function deriveContractItemStatuses(input) {
98
+ const contract = input.contract;
99
+ if (!contract)
100
+ return EMPTY_VIEW;
101
+ const slices = [
102
+ ...input.rounds.map((round) => ({
103
+ round: round.round,
104
+ report: round.executionReport,
105
+ observations: round.observationDelta,
106
+ outcome: round.outcome,
107
+ })),
108
+ {
109
+ round: input.currentRound,
110
+ report: input.currentReport,
111
+ observations: input.currentObservations,
112
+ outcome: input.currentOutcome ?? null,
113
+ },
114
+ ].filter((slice) => slice.round < input.currentRound || slice.round === input.currentRound);
115
+ const enabledCommands = new Set(input.commands.filter((command) => command.enabled).map((command) => command.name));
116
+ const items = contract.items.map((item) => {
117
+ const claims = itemClaims(item, slices);
118
+ const metRound = metClaimRound(claims);
119
+ if (metRound === null) {
120
+ return {
121
+ itemId: item.id,
122
+ description: item.description,
123
+ status: "pending",
124
+ status_at_round: null,
125
+ history: [],
126
+ reasons: [],
127
+ };
128
+ }
129
+ const verdicts = item.verify_with.map((commandId) => evaluateCommand(commandId, contract.config_hash_by_command[commandId], slices, metRound, enabledCommands.has(commandId)));
130
+ const reasons = verdicts.map((verdict) => verdict.reason).filter(Boolean);
131
+ let status;
132
+ if (verdicts.some((verdict) => verdict.verdict === "contradicted")) {
133
+ status = "contradicted";
134
+ }
135
+ else if (verdicts.length > 0 && verdicts.every((verdict) => verdict.verdict === "verified")) {
136
+ status = "verified";
137
+ }
138
+ else {
139
+ status = "insufficient";
140
+ }
141
+ return {
142
+ itemId: item.id,
143
+ description: item.description,
144
+ status,
145
+ status_at_round: metRound,
146
+ history: [{ round: metRound, status, refs: item.verify_with }],
147
+ reasons,
148
+ };
149
+ });
150
+ const verifiedCount = items.filter((item) => item.status === "verified").length;
151
+ const contradictedCount = items.filter((item) => item.status === "contradicted").length;
152
+ const insufficientCount = items.filter((item) => item.status === "insufficient").length;
153
+ const committingRound = slices[slices.length - 1];
154
+ const blocked = committingRound?.outcome === "blocked";
155
+ const allVerified = items.length > 0 && verifiedCount === items.length;
156
+ const closure = allVerified ? "verified" : blocked ? "blocked" : "open";
157
+ return {
158
+ contractId: contract.id,
159
+ closure,
160
+ closed_at_round: closure === "open" ? null : committingRound?.round ?? null,
161
+ items,
162
+ verifiedCount,
163
+ contradictedCount,
164
+ insufficientCount,
165
+ };
166
+ }
167
+ /** v3.8: The round-level verification posture. */
168
+ export function roundVerificationStatus(view, report) {
169
+ if (view.contradictedCount > 0)
170
+ return "contradicted";
171
+ if (view.insufficientCount > 0)
172
+ return "insufficient";
173
+ // A success claim with no machine-backed item at all is insufficient too.
174
+ const claims = report?.contract_item_claims ?? [];
175
+ if (claims.some((claim) => claim.outcome === "met") && view.verifiedCount === 0) {
176
+ return "insufficient";
177
+ }
178
+ return "trusted";
179
+ }
180
+ //# sourceMappingURL=contract-items.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-items.js","sourceRoot":"","sources":["../src/contract-items.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,26 @@ export interface BacktrackRecoveryFacts {
43
43
  /** v3.7.1: Falsified assumptions collected from the failed rounds. */
44
44
  wrongAssumptions: string[];
45
45
  }
46
+ /** v3.8.1: the ONE Recovery Brief renderer.
47
+ *
48
+ * The rollback prompt and the state file's Recent tier used to carry two
49
+ * hand-written copies of these lines — differing in punctuation
50
+ * ("the redo is round N" vs "redo round N") and in whether an approach
51
+ * overflow count was shown at all. Two renderers over one rollback meant the
52
+ * two surfaces could describe the same event differently while both claiming
53
+ * to be derived facts. The facts are supplied by the caller: the coordinator
54
+ * from its live walk, the compile path from `decodeBacktrackRecord` on the
55
+ * committed decision. */
56
+ export declare function recoveryBriefLines(input: {
57
+ target: number;
58
+ triggerRule: string;
59
+ failedRounds: string[] | number[];
60
+ approaches: string[];
61
+ wrongAssumptions: string[];
62
+ recoveryRoundId?: string;
63
+ maxApproaches?: number;
64
+ maxAssumptions?: number;
65
+ }): string[];
46
66
  export declare function buildBacktrackPrompt(fromRound: number, toRound: number, triggerRule: string, skippedDiscoveries: string[],
47
67
  /** v2.13: Files changed in the skipped rounds (from evidence snapshots).
48
68
  * Used to show the agent exactly what needs to be reverted. */
@@ -56,8 +76,6 @@ recoveryRoundId?: string,
56
76
  * in-flight attempt only; never rejected payloads. */
57
77
  recovery?: BacktrackRecoveryFacts): string;
58
78
  export declare function enforceRound(selfEval: SelfEvaluation, verifyResult: VerificationResult, currentRound: number, vaultEntries: VaultEntry[], consecutiveRejections?: number,
59
- /** v2.12: Current clarification streak for R7 escalation. */
60
- driftClarificationStreak?: number,
61
79
  /** L4 (v3.7.x): which check rejected the PREVIOUS round. The coordinator
62
80
  * resets consecutiveRejections to 1 whenever the check changes, so the
63
81
  * counter only ever measures one check's streak — this field names that
@@ -1 +1 @@
1
- {"version":3,"file":"enforcement-gate.d.ts","sourceRoot":"","sources":["../src/enforcement-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,eAAe,CAAC;AA4FvB;;iEAEiE;AACjE,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,UAAU,EAAE,EAC1B,QAAQ,EAAE,MAAM,GACf;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAgCxD;AAED;;;sCAGsC;AACtC,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,UAAU,EAAE,GACzB,MAAM,GAAG,IAAI,CAWf;AAED;;;;oDAIoD;AACpD,MAAM,WAAW,sBAAsB;IACrC,sEAAsE;IACtE,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,yEAAyE;IACzE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,sEAAsE;IACtE,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,MAAM,EAAE;AAC5B;gEACgE;AAChE,YAAY,GAAE,MAAM,EAAO;AAC3B;mEACmE;AACnE,OAAO,CAAC,EAAE,MAAM;AAChB,2EAA2E;AAC3E,eAAe,CAAC,EAAE,MAAM;AACxB;uDACuD;AACvD,QAAQ,CAAC,EAAE,sBAAsB,GAChC,MAAM,CAqLR;AAi8BD,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,cAAc,EACxB,YAAY,EAAE,kBAAkB,EAChC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,UAAU,EAAE,EAC1B,qBAAqB,GAAE,MAAU;AACjC,6DAA6D;AAC7D,wBAAwB,GAAE,MAAU;AACpC;;;;uCAIuC;AACvC,kBAAkB,GAAE,MAAW,GAC9B,iBAAiB,CAiGnB;AAED;;;;;;;;;;;;;;sEAcsE;AACtE,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,iBAAiB,EAChC,iBAAiB,GAAE,gBAAgB,EAAO,GACzC,MAAM,CA6CR"}
1
+ {"version":3,"file":"enforcement-gate.d.ts","sourceRoot":"","sources":["../src/enforcement-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,eAAe,CAAC;AA0FvB;;iEAEiE;AACjE,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,UAAU,EAAE,EAC1B,QAAQ,EAAE,MAAM,GACf;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAgCxD;AAED;;;sCAGsC;AACtC,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,UAAU,EAAE,GACzB,MAAM,GAAG,IAAI,CAWf;AAED;;;;oDAIoD;AACpD,MAAM,WAAW,sBAAsB;IACrC,sEAAsE;IACtE,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,yEAAyE;IACzE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,sEAAsE;IACtE,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;;;;;;;0BAS0B;AAC1B,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IAClC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,EAAE,CA6BX;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,MAAM,EAAE;AAC5B;gEACgE;AAChE,YAAY,GAAE,MAAM,EAAO;AAC3B;mEACmE;AACnE,OAAO,CAAC,EAAE,MAAM;AAChB,2EAA2E;AAC3E,eAAe,CAAC,EAAE,MAAM;AACxB;uDACuD;AACvD,QAAQ,CAAC,EAAE,sBAAsB,GAChC,MAAM,CAmKR;AAwrBD,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,cAAc,EACxB,YAAY,EAAE,kBAAkB,EAChC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,UAAU,EAAE,EAC1B,qBAAqB,GAAE,MAAU;AACjC;;;;uCAIuC;AACvC,kBAAkB,GAAE,MAAW,GAC9B,iBAAiB,CAoGnB;AAED;;;;;;;;;;;;;;sEAcsE;AACtE,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,iBAAiB,EAChC,iBAAiB,GAAE,gBAAgB,EAAO,GACzC,MAAM,CA6CR"}