issue-flow 0.12.0 → 0.14.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 (197) hide show
  1. package/README.md +79 -274
  2. package/dist/agent-OX3KPHE4.js +30 -0
  3. package/dist/{analyze-OEET7KGE.js → analyze-WIND2SEB.js} +31 -16
  4. package/dist/analyze-WIND2SEB.js.map +1 -0
  5. package/dist/{apply-ZIA3C52S.js → apply-JNOI2LR4.js} +18 -7
  6. package/dist/{apply-ZIA3C52S.js.map → apply-JNOI2LR4.js.map} +1 -1
  7. package/dist/bench-B4VZON7E.js +910 -0
  8. package/dist/bench-B4VZON7E.js.map +1 -0
  9. package/dist/{chunk-FADTCQGM.js → chunk-2IQ6M4ZE.js} +94 -32
  10. package/dist/chunk-2IQ6M4ZE.js.map +1 -0
  11. package/dist/chunk-3BWZO4YI.js +141 -0
  12. package/dist/chunk-3BWZO4YI.js.map +1 -0
  13. package/dist/chunk-3WFZETIM.js +163 -0
  14. package/dist/chunk-3WFZETIM.js.map +1 -0
  15. package/dist/chunk-67YIU2VB.js +362 -0
  16. package/dist/chunk-67YIU2VB.js.map +1 -0
  17. package/dist/{chunk-QCPGHBSZ.js → chunk-6BENHR2I.js} +63 -21
  18. package/dist/chunk-6BENHR2I.js.map +1 -0
  19. package/dist/{chunk-BYZDPR7N.js → chunk-6QYMSNVA.js} +194 -235
  20. package/dist/chunk-6QYMSNVA.js.map +1 -0
  21. package/dist/{chunk-Y5ZDJ4PJ.js → chunk-76MMPJ53.js} +20 -10
  22. package/dist/chunk-76MMPJ53.js.map +1 -0
  23. package/dist/chunk-7Z4Y3VKM.js +26 -0
  24. package/dist/chunk-7Z4Y3VKM.js.map +1 -0
  25. package/dist/{chunk-3QHK4YQA.js → chunk-B72RQZBV.js} +346 -119
  26. package/dist/chunk-B72RQZBV.js.map +1 -0
  27. package/dist/chunk-BEZ5BA5U.js +625 -0
  28. package/dist/chunk-BEZ5BA5U.js.map +1 -0
  29. package/dist/chunk-BRCNQXYQ.js +74 -0
  30. package/dist/chunk-BRCNQXYQ.js.map +1 -0
  31. package/dist/chunk-CGKLE6WR.js +1203 -0
  32. package/dist/chunk-CGKLE6WR.js.map +1 -0
  33. package/dist/chunk-CRGIQFUQ.js +83 -0
  34. package/dist/chunk-CRGIQFUQ.js.map +1 -0
  35. package/dist/{chunk-NS6R37II.js → chunk-F6TOYSYY.js} +141 -12
  36. package/dist/chunk-F6TOYSYY.js.map +1 -0
  37. package/dist/chunk-G5EK2XRN.js +25 -0
  38. package/dist/chunk-G5EK2XRN.js.map +1 -0
  39. package/dist/chunk-HAKDLR6N.js +134 -0
  40. package/dist/chunk-HAKDLR6N.js.map +1 -0
  41. package/dist/chunk-J3SOTUVI.js +298 -0
  42. package/dist/chunk-J3SOTUVI.js.map +1 -0
  43. package/dist/chunk-JN6D3MY6.js +30 -0
  44. package/dist/chunk-JN6D3MY6.js.map +1 -0
  45. package/dist/{chunk-LAFNLLQP.js → chunk-KMRFRXIT.js} +5 -5
  46. package/dist/chunk-KT7JKOXB.js +72 -0
  47. package/dist/chunk-KT7JKOXB.js.map +1 -0
  48. package/dist/chunk-L6HSKTQE.js +77 -0
  49. package/dist/chunk-L6HSKTQE.js.map +1 -0
  50. package/dist/chunk-LBGHI4S2.js +1264 -0
  51. package/dist/chunk-LBGHI4S2.js.map +1 -0
  52. package/dist/chunk-LEW4QM74.js +180 -0
  53. package/dist/chunk-LEW4QM74.js.map +1 -0
  54. package/dist/{chunk-FJP3UQGD.js → chunk-LFEQIZLB.js} +115 -20
  55. package/dist/chunk-LFEQIZLB.js.map +1 -0
  56. package/dist/chunk-OOVG2KBY.js +77 -0
  57. package/dist/chunk-OOVG2KBY.js.map +1 -0
  58. package/dist/{chunk-56KS3TFQ.js → chunk-OR43364P.js} +115 -160
  59. package/dist/chunk-OR43364P.js.map +1 -0
  60. package/dist/chunk-P3LRUNC6.js +16 -0
  61. package/dist/chunk-P3LRUNC6.js.map +1 -0
  62. package/dist/{chunk-TSOLWK7Y.js → chunk-PBTA3QQX.js} +8 -7
  63. package/dist/{chunk-TSOLWK7Y.js.map → chunk-PBTA3QQX.js.map} +1 -1
  64. package/dist/{chunk-MJULIKQU.js → chunk-PHW2YV6N.js} +23 -47
  65. package/dist/chunk-PHW2YV6N.js.map +1 -0
  66. package/dist/{chunk-73ATPIYX.js → chunk-PZTWU277.js} +36 -71
  67. package/dist/chunk-PZTWU277.js.map +1 -0
  68. package/dist/{chunk-M5UCXTIT.js → chunk-QD4VOILZ.js} +22 -18
  69. package/dist/chunk-QD4VOILZ.js.map +1 -0
  70. package/dist/chunk-QJ5UZAH5.js +2718 -0
  71. package/dist/chunk-QJ5UZAH5.js.map +1 -0
  72. package/dist/chunk-QK7WUO7A.js +283 -0
  73. package/dist/chunk-QK7WUO7A.js.map +1 -0
  74. package/dist/{chunk-A4SLHOW7.js → chunk-QZVKRDJY.js} +27 -19
  75. package/dist/chunk-QZVKRDJY.js.map +1 -0
  76. package/dist/chunk-REO3PXXO.js +71 -0
  77. package/dist/chunk-REO3PXXO.js.map +1 -0
  78. package/dist/{chunk-EZATO3DW.js → chunk-RVO7L4FX.js} +594 -17
  79. package/dist/chunk-RVO7L4FX.js.map +1 -0
  80. package/dist/{chunk-XQUSIEKA.js → chunk-SZMHCEYV.js} +63 -14
  81. package/dist/chunk-SZMHCEYV.js.map +1 -0
  82. package/dist/chunk-TYRNTSPJ.js +243 -0
  83. package/dist/chunk-TYRNTSPJ.js.map +1 -0
  84. package/dist/chunk-UJ3L2MS7.js +238 -0
  85. package/dist/chunk-UJ3L2MS7.js.map +1 -0
  86. package/dist/chunk-V7MO5EDS.js +120 -0
  87. package/dist/chunk-V7MO5EDS.js.map +1 -0
  88. package/dist/chunk-WB2X37MO.js +415 -0
  89. package/dist/chunk-WB2X37MO.js.map +1 -0
  90. package/dist/{chunk-NTMMF5UD.js → chunk-X44FKNKP.js} +525 -252
  91. package/dist/chunk-X44FKNKP.js.map +1 -0
  92. package/dist/chunk-XEYH6ZZI.js +289 -0
  93. package/dist/chunk-XEYH6ZZI.js.map +1 -0
  94. package/dist/cli.js +267 -44
  95. package/dist/cli.js.map +1 -1
  96. package/dist/{config-PRJGWW7J.js → config-HMFMCY2M.js} +31 -5
  97. package/dist/contract-JH2WBIO6.js +8 -0
  98. package/dist/conventions-NJF2OPVQ.js +146 -0
  99. package/dist/conventions-NJF2OPVQ.js.map +1 -0
  100. package/dist/diagnostics-THH42ZMP.js +23 -0
  101. package/dist/execute-KFNNZZHI.js +35 -0
  102. package/dist/{generate-EGB4KV2B.js → generate-FW5C6NP7.js} +37 -20
  103. package/dist/{generate-EGB4KV2B.js.map → generate-FW5C6NP7.js.map} +1 -1
  104. package/dist/git-W72QQ6GT.js +33 -0
  105. package/dist/init-HTN4V67Q.js +24 -0
  106. package/dist/{operations-BYT626KQ.js → operations-BCFOBH42.js} +27 -15
  107. package/dist/{operations-BYT626KQ.js.map → operations-BCFOBH42.js.map} +1 -1
  108. package/dist/permissions-4AKNQZHK.js +18 -0
  109. package/dist/plan-SIZLGA4V.js +34 -0
  110. package/dist/{policy-6S4GFC76.js → policy-DT6Q6ZVM.js} +20 -6
  111. package/dist/policy-DT6Q6ZVM.js.map +1 -0
  112. package/dist/pr-OMWCGUOW.js +39 -0
  113. package/dist/pr-review-N24CZPKR.js +32 -0
  114. package/dist/pr-review-N24CZPKR.js.map +1 -0
  115. package/dist/prd-5OFTZAHJ.js +33 -0
  116. package/dist/prd-5OFTZAHJ.js.map +1 -0
  117. package/dist/ps-RFORTCUD.js +93 -0
  118. package/dist/ps-RFORTCUD.js.map +1 -0
  119. package/dist/recorder-KCCPMKQG.js +32 -0
  120. package/dist/recorder-KCCPMKQG.js.map +1 -0
  121. package/dist/registry-GLPXOMFG.js +15 -0
  122. package/dist/registry-GLPXOMFG.js.map +1 -0
  123. package/dist/{resume-PPCNQVVV.js → resume-M5RLKP4I.js} +55 -34
  124. package/dist/{resume-PPCNQVVV.js.map → resume-M5RLKP4I.js.map} +1 -1
  125. package/dist/review-YM4JAABY.js +35 -0
  126. package/dist/review-YM4JAABY.js.map +1 -0
  127. package/dist/routing-NNT5WKGX.js +94 -0
  128. package/dist/routing-NNT5WKGX.js.map +1 -0
  129. package/dist/run-PZUKHPQK.js +54 -0
  130. package/dist/run-PZUKHPQK.js.map +1 -0
  131. package/dist/session-publisher-T7EI3CIP.js +11 -0
  132. package/dist/session-publisher-T7EI3CIP.js.map +1 -0
  133. package/dist/{state-manager-2EDVDBAR.js → state-manager-GQH32C44.js} +4 -2
  134. package/dist/state-manager-GQH32C44.js.map +1 -0
  135. package/dist/usage-V2CHE5PY.js +177 -0
  136. package/dist/usage-V2CHE5PY.js.map +1 -0
  137. package/dist/{web-EF5WIIGG.js → web-EA3KGNFN.js} +45 -30
  138. package/dist/web-EA3KGNFN.js.map +1 -0
  139. package/package.json +6 -2
  140. package/prompts/execute.md +7 -8
  141. package/prompts/plan.md +4 -5
  142. package/prompts/pr.md +2 -2
  143. package/web/AGENTS.md +152 -13
  144. package/web/public/app.css +380 -109
  145. package/web/public/app.js +525 -25
  146. package/web/public/index.html +68 -1
  147. package/dist/analyze-OEET7KGE.js.map +0 -1
  148. package/dist/chunk-3QHK4YQA.js.map +0 -1
  149. package/dist/chunk-42PJFMAR.js +0 -605
  150. package/dist/chunk-42PJFMAR.js.map +0 -1
  151. package/dist/chunk-4JSOYE4G.js +0 -368
  152. package/dist/chunk-4JSOYE4G.js.map +0 -1
  153. package/dist/chunk-56KS3TFQ.js.map +0 -1
  154. package/dist/chunk-73ATPIYX.js.map +0 -1
  155. package/dist/chunk-A4SLHOW7.js.map +0 -1
  156. package/dist/chunk-BAUPQXPE.js +0 -173
  157. package/dist/chunk-BAUPQXPE.js.map +0 -1
  158. package/dist/chunk-BYZDPR7N.js.map +0 -1
  159. package/dist/chunk-CD5ULRVC.js +0 -615
  160. package/dist/chunk-CD5ULRVC.js.map +0 -1
  161. package/dist/chunk-DIDUVL6O.js +0 -1365
  162. package/dist/chunk-DIDUVL6O.js.map +0 -1
  163. package/dist/chunk-EZATO3DW.js.map +0 -1
  164. package/dist/chunk-FADTCQGM.js.map +0 -1
  165. package/dist/chunk-FJP3UQGD.js.map +0 -1
  166. package/dist/chunk-LWRSMTTZ.js +0 -18
  167. package/dist/chunk-LWRSMTTZ.js.map +0 -1
  168. package/dist/chunk-M5UCXTIT.js.map +0 -1
  169. package/dist/chunk-M66SJHQQ.js +0 -206
  170. package/dist/chunk-M66SJHQQ.js.map +0 -1
  171. package/dist/chunk-MJULIKQU.js.map +0 -1
  172. package/dist/chunk-NS6R37II.js.map +0 -1
  173. package/dist/chunk-NTMMF5UD.js.map +0 -1
  174. package/dist/chunk-QCPGHBSZ.js.map +0 -1
  175. package/dist/chunk-XQUSIEKA.js.map +0 -1
  176. package/dist/chunk-Y5ZDJ4PJ.js.map +0 -1
  177. package/dist/execute-XBNVL753.js +0 -18
  178. package/dist/init-AJHCXJBP.js +0 -10
  179. package/dist/plan-QOZ3RIO6.js +0 -21
  180. package/dist/policy-6S4GFC76.js.map +0 -1
  181. package/dist/pr-EBBHD2ZX.js +0 -26
  182. package/dist/pr-review-VVMW5PO4.js +0 -20
  183. package/dist/prd-JQSZF7PR.js +0 -21
  184. package/dist/review-3F6MARWH.js +0 -19
  185. package/dist/run-RXE5GDQO.js +0 -36
  186. package/dist/web-EF5WIIGG.js.map +0 -1
  187. /package/dist/{config-PRJGWW7J.js.map → agent-OX3KPHE4.js.map} +0 -0
  188. /package/dist/{chunk-LAFNLLQP.js.map → chunk-KMRFRXIT.js.map} +0 -0
  189. /package/dist/{execute-XBNVL753.js.map → config-HMFMCY2M.js.map} +0 -0
  190. /package/dist/{init-AJHCXJBP.js.map → contract-JH2WBIO6.js.map} +0 -0
  191. /package/dist/{plan-QOZ3RIO6.js.map → diagnostics-THH42ZMP.js.map} +0 -0
  192. /package/dist/{pr-EBBHD2ZX.js.map → execute-KFNNZZHI.js.map} +0 -0
  193. /package/dist/{pr-review-VVMW5PO4.js.map → git-W72QQ6GT.js.map} +0 -0
  194. /package/dist/{prd-JQSZF7PR.js.map → init-HTN4V67Q.js.map} +0 -0
  195. /package/dist/{review-3F6MARWH.js.map → permissions-4AKNQZHK.js.map} +0 -0
  196. /package/dist/{run-RXE5GDQO.js.map → plan-SIZLGA4V.js.map} +0 -0
  197. /package/dist/{state-manager-2EDVDBAR.js.map → pr-OMWCGUOW.js.map} +0 -0
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/verify/contract.ts
4
+ import { existsSync } from "fs";
5
+ import { readFile } from "fs/promises";
6
+ import { join } from "path";
7
+ var DISCOVERABLE = ["typecheck", "lint", "test"];
8
+ async function discoverFromMakefile(cwd) {
9
+ const makePath = join(cwd, "Makefile");
10
+ if (!existsSync(makePath)) return [];
11
+ let text;
12
+ try {
13
+ text = await readFile(makePath, "utf-8");
14
+ } catch {
15
+ return [];
16
+ }
17
+ const checks = [];
18
+ for (const id of DISCOVERABLE) {
19
+ const pattern = new RegExp(`^${id}\\s*:`, "m");
20
+ if (pattern.test(text)) {
21
+ checks.push({ id, run: `make ${id}`, fatal: true });
22
+ }
23
+ }
24
+ return checks;
25
+ }
26
+ async function discoverFromComposer(cwd) {
27
+ const composerPath = join(cwd, "composer.json");
28
+ if (!existsSync(composerPath)) return [];
29
+ try {
30
+ const raw = JSON.parse(await readFile(composerPath, "utf-8"));
31
+ if (!isRecord(raw) || !isRecord(raw.scripts)) return [];
32
+ if (typeof raw.scripts.test === "string") {
33
+ return [{ id: "test", run: "composer test", fatal: true }];
34
+ }
35
+ } catch {
36
+ return [];
37
+ }
38
+ return [];
39
+ }
40
+ function isRecord(value) {
41
+ return typeof value === "object" && value !== null;
42
+ }
43
+ async function resolveContract(input) {
44
+ if (input.declared !== void 0 && input.declared !== null) {
45
+ return { checks: input.declared, source: input.declared.length === 0 ? "empty" : "declared" };
46
+ }
47
+ const fromPackage = await discoverFromPackage(input.cwd);
48
+ if (fromPackage.length > 0) return { checks: fromPackage, source: "discovered" };
49
+ const fromMake = await discoverFromMakefile(input.cwd);
50
+ if (fromMake.length > 0) return { checks: fromMake, source: "discovered" };
51
+ const fromComposer = await discoverFromComposer(input.cwd);
52
+ if (fromComposer.length > 0) return { checks: fromComposer, source: "discovered" };
53
+ return { checks: [], source: "empty" };
54
+ }
55
+ async function discoverFromPackage(cwd) {
56
+ const pkgPath = join(cwd, "package.json");
57
+ if (!existsSync(pkgPath)) return [];
58
+ let scripts = {};
59
+ try {
60
+ const raw = JSON.parse(await readFile(pkgPath, "utf-8"));
61
+ if (isRecord(raw) && isRecord(raw.scripts)) scripts = raw.scripts;
62
+ } catch {
63
+ return [];
64
+ }
65
+ const checks = [];
66
+ for (const id of DISCOVERABLE) {
67
+ if (typeof scripts[id] === "string") {
68
+ checks.push({ id, run: id === "test" ? "npm test" : `npm run ${id}`, fatal: true });
69
+ }
70
+ }
71
+ return checks;
72
+ }
73
+
74
+ export {
75
+ resolveContract
76
+ };
77
+ //# sourceMappingURL=chunk-L6HSKTQE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/verify/contract.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { AcceptanceCheck, AcceptanceContract } from './types.js';\n\nconst DISCOVERABLE = ['typecheck', 'lint', 'test'] as const;\n\nasync function discoverFromMakefile(cwd: string): Promise<AcceptanceCheck[]> {\n const makePath = join(cwd, 'Makefile');\n if (!existsSync(makePath)) return [];\n let text: string;\n try {\n text = await readFile(makePath, 'utf-8');\n } catch {\n return [];\n }\n const checks: AcceptanceCheck[] = [];\n for (const id of DISCOVERABLE) {\n const pattern = new RegExp(`^${id}\\\\s*:`, 'm');\n if (pattern.test(text)) {\n checks.push({ id, run: `make ${id}`, fatal: true });\n }\n }\n return checks;\n}\n\nasync function discoverFromComposer(cwd: string): Promise<AcceptanceCheck[]> {\n const composerPath = join(cwd, 'composer.json');\n if (!existsSync(composerPath)) return [];\n try {\n const raw: unknown = JSON.parse(await readFile(composerPath, 'utf-8'));\n if (!isRecord(raw) || !isRecord(raw.scripts)) return [];\n if (typeof raw.scripts.test === 'string') {\n return [{ id: 'test', run: 'composer test', fatal: true }];\n }\n } catch {\n return [];\n }\n return [];\n}\n\nexport interface ResolveContractInput {\n cwd: string;\n declared?: AcceptanceCheck[] | null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nexport async function resolveContract(input: ResolveContractInput): Promise<AcceptanceContract> {\n if (input.declared !== undefined && input.declared !== null) {\n return { checks: input.declared, source: input.declared.length === 0 ? 'empty' : 'declared' };\n }\n\n const fromPackage = await discoverFromPackage(input.cwd);\n if (fromPackage.length > 0) return { checks: fromPackage, source: 'discovered' };\n const fromMake = await discoverFromMakefile(input.cwd);\n if (fromMake.length > 0) return { checks: fromMake, source: 'discovered' };\n const fromComposer = await discoverFromComposer(input.cwd);\n if (fromComposer.length > 0) return { checks: fromComposer, source: 'discovered' };\n return { checks: [], source: 'empty' };\n}\n\nasync function discoverFromPackage(cwd: string): Promise<AcceptanceCheck[]> {\n const pkgPath = join(cwd, 'package.json');\n if (!existsSync(pkgPath)) return [];\n let scripts: Record<string, unknown> = {};\n try {\n const raw: unknown = JSON.parse(await readFile(pkgPath, 'utf-8'));\n if (isRecord(raw) && isRecord(raw.scripts)) scripts = raw.scripts;\n } catch {\n return [];\n }\n\n const checks: AcceptanceCheck[] = [];\n for (const id of DISCOVERABLE) {\n if (typeof scripts[id] === 'string') {\n checks.push({ id, run: id === 'test' ? 'npm test' : `npm run ${id}`, fatal: true });\n }\n }\n return checks;\n}\n"],"mappings":";;;AAAA,SAAS,kBAAkB;AAC3B,SAAS,gBAAgB;AACzB,SAAS,YAAY;AAGrB,IAAM,eAAe,CAAC,aAAa,QAAQ,MAAM;AAEjD,eAAe,qBAAqB,KAAyC;AAC3E,QAAM,WAAW,KAAK,KAAK,UAAU;AACrC,MAAI,CAAC,WAAW,QAAQ,EAAG,QAAO,CAAC;AACnC,MAAI;AACJ,MAAI;AACF,WAAO,MAAM,SAAS,UAAU,OAAO;AAAA,EACzC,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACA,QAAM,SAA4B,CAAC;AACnC,aAAW,MAAM,cAAc;AAC7B,UAAM,UAAU,IAAI,OAAO,IAAI,EAAE,SAAS,GAAG;AAC7C,QAAI,QAAQ,KAAK,IAAI,GAAG;AACtB,aAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,EAAE,IAAI,OAAO,KAAK,CAAC;AAAA,IACpD;AAAA,EACF;AACA,SAAO;AACT;AAEA,eAAe,qBAAqB,KAAyC;AAC3E,QAAM,eAAe,KAAK,KAAK,eAAe;AAC9C,MAAI,CAAC,WAAW,YAAY,EAAG,QAAO,CAAC;AACvC,MAAI;AACF,UAAM,MAAe,KAAK,MAAM,MAAM,SAAS,cAAc,OAAO,CAAC;AACrE,QAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,OAAO,EAAG,QAAO,CAAC;AACtD,QAAI,OAAO,IAAI,QAAQ,SAAS,UAAU;AACxC,aAAO,CAAC,EAAE,IAAI,QAAQ,KAAK,iBAAiB,OAAO,KAAK,CAAC;AAAA,IAC3D;AAAA,EACF,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACA,SAAO,CAAC;AACV;AAOA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU;AAChD;AAEA,eAAsB,gBAAgB,OAA0D;AAC9F,MAAI,MAAM,aAAa,UAAa,MAAM,aAAa,MAAM;AAC3D,WAAO,EAAE,QAAQ,MAAM,UAAU,QAAQ,MAAM,SAAS,WAAW,IAAI,UAAU,WAAW;AAAA,EAC9F;AAEA,QAAM,cAAc,MAAM,oBAAoB,MAAM,GAAG;AACvD,MAAI,YAAY,SAAS,EAAG,QAAO,EAAE,QAAQ,aAAa,QAAQ,aAAa;AAC/E,QAAM,WAAW,MAAM,qBAAqB,MAAM,GAAG;AACrD,MAAI,SAAS,SAAS,EAAG,QAAO,EAAE,QAAQ,UAAU,QAAQ,aAAa;AACzE,QAAM,eAAe,MAAM,qBAAqB,MAAM,GAAG;AACzD,MAAI,aAAa,SAAS,EAAG,QAAO,EAAE,QAAQ,cAAc,QAAQ,aAAa;AACjF,SAAO,EAAE,QAAQ,CAAC,GAAG,QAAQ,QAAQ;AACvC;AAEA,eAAe,oBAAoB,KAAyC;AAC1E,QAAM,UAAU,KAAK,KAAK,cAAc;AACxC,MAAI,CAAC,WAAW,OAAO,EAAG,QAAO,CAAC;AAClC,MAAI,UAAmC,CAAC;AACxC,MAAI;AACF,UAAM,MAAe,KAAK,MAAM,MAAM,SAAS,SAAS,OAAO,CAAC;AAChE,QAAI,SAAS,GAAG,KAAK,SAAS,IAAI,OAAO,EAAG,WAAU,IAAI;AAAA,EAC5D,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,SAA4B,CAAC;AACnC,aAAW,MAAM,cAAc;AAC7B,QAAI,OAAO,QAAQ,EAAE,MAAM,UAAU;AACnC,aAAO,KAAK,EAAE,IAAI,KAAK,OAAO,SAAS,aAAa,WAAW,EAAE,IAAI,OAAO,KAAK,CAAC;AAAA,IACpF;AAAA,EACF;AACA,SAAO;AACT;","names":[]}