@descryy/mcp 0.6.0 → 0.7.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 (264) hide show
  1. package/dist/action-handshake.d.ts +8 -75
  2. package/dist/action-handshake.d.ts.map +1 -1
  3. package/dist/action-handshake.js +9 -79
  4. package/dist/action-handshake.js.map +1 -1
  5. package/dist/bin/descry-mcp.d.ts +4 -15
  6. package/dist/bin/descry-mcp.d.ts.map +1 -1
  7. package/dist/bin/descry-mcp.js +12 -42
  8. package/dist/bin/descry-mcp.js.map +1 -1
  9. package/dist/browser/driver.d.ts +121 -224
  10. package/dist/browser/driver.d.ts.map +1 -1
  11. package/dist/browser/driver.js +9 -55
  12. package/dist/browser/driver.js.map +1 -1
  13. package/dist/browser/evidence.d.ts +10 -43
  14. package/dist/browser/evidence.d.ts.map +1 -1
  15. package/dist/browser/evidence.js +20 -54
  16. package/dist/browser/evidence.js.map +1 -1
  17. package/dist/browser/fake-driver.d.ts +12 -19
  18. package/dist/browser/fake-driver.d.ts.map +1 -1
  19. package/dist/browser/fake-driver.js +31 -26
  20. package/dist/browser/fake-driver.js.map +1 -1
  21. package/dist/browser/graph-write.d.ts +4 -45
  22. package/dist/browser/graph-write.d.ts.map +1 -1
  23. package/dist/browser/graph-write.js +8 -53
  24. package/dist/browser/graph-write.js.map +1 -1
  25. package/dist/browser/playwright-driver.d.ts +7 -91
  26. package/dist/browser/playwright-driver.d.ts.map +1 -1
  27. package/dist/browser/playwright-driver.js +59 -197
  28. package/dist/browser/playwright-driver.js.map +1 -1
  29. package/dist/browser/provider.d.ts +5 -34
  30. package/dist/browser/provider.d.ts.map +1 -1
  31. package/dist/browser/provider.js +4 -24
  32. package/dist/browser/provider.js.map +1 -1
  33. package/dist/browser/registry.d.ts +26 -106
  34. package/dist/browser/registry.d.ts.map +1 -1
  35. package/dist/browser/registry.js +20 -77
  36. package/dist/browser/registry.js.map +1 -1
  37. package/dist/browser/scenario-provenance.d.ts +23 -0
  38. package/dist/browser/scenario-provenance.d.ts.map +1 -0
  39. package/dist/browser/scenario-provenance.js +59 -0
  40. package/dist/browser/scenario-provenance.js.map +1 -0
  41. package/dist/browser/scenario-resolve.d.ts +10 -44
  42. package/dist/browser/scenario-resolve.d.ts.map +1 -1
  43. package/dist/browser/scenario-resolve.js +10 -41
  44. package/dist/browser/scenario-resolve.js.map +1 -1
  45. package/dist/browser/scenario-runner.d.ts +12 -70
  46. package/dist/browser/scenario-runner.d.ts.map +1 -1
  47. package/dist/browser/scenario-runner.js +30 -90
  48. package/dist/browser/scenario-runner.js.map +1 -1
  49. package/dist/browser/stack-parser.d.ts +4 -28
  50. package/dist/browser/stack-parser.d.ts.map +1 -1
  51. package/dist/browser/stack-parser.js +12 -39
  52. package/dist/browser/stack-parser.js.map +1 -1
  53. package/dist/browser/tool-support.d.ts +20 -67
  54. package/dist/browser/tool-support.d.ts.map +1 -1
  55. package/dist/browser/tool-support.js +21 -65
  56. package/dist/browser/tool-support.js.map +1 -1
  57. package/dist/browser/url-scheme.d.ts +14 -0
  58. package/dist/browser/url-scheme.d.ts.map +1 -0
  59. package/dist/browser/url-scheme.js +38 -0
  60. package/dist/browser/url-scheme.js.map +1 -0
  61. package/dist/cancellation.d.ts +11 -46
  62. package/dist/cancellation.d.ts.map +1 -1
  63. package/dist/cancellation.js +11 -46
  64. package/dist/cancellation.js.map +1 -1
  65. package/dist/capped.d.ts +9 -33
  66. package/dist/capped.d.ts.map +1 -1
  67. package/dist/capped.js +7 -27
  68. package/dist/capped.js.map +1 -1
  69. package/dist/disclosure-ledger.d.ts +6 -30
  70. package/dist/disclosure-ledger.d.ts.map +1 -1
  71. package/dist/disclosure-ledger.js +4 -26
  72. package/dist/disclosure-ledger.js.map +1 -1
  73. package/dist/index.d.ts +10 -26
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +7 -17
  76. package/dist/index.js.map +1 -1
  77. package/dist/module-trust.d.ts +24 -0
  78. package/dist/module-trust.d.ts.map +1 -0
  79. package/dist/module-trust.js +60 -0
  80. package/dist/module-trust.js.map +1 -0
  81. package/dist/path-confinement.d.ts +31 -0
  82. package/dist/path-confinement.d.ts.map +1 -0
  83. package/dist/path-confinement.js +44 -0
  84. package/dist/path-confinement.js.map +1 -0
  85. package/dist/protocol.d.ts +10 -53
  86. package/dist/protocol.d.ts.map +1 -1
  87. package/dist/protocol.js +14 -60
  88. package/dist/protocol.js.map +1 -1
  89. package/dist/registry.d.ts +37 -58
  90. package/dist/registry.d.ts.map +1 -1
  91. package/dist/registry.js +88 -96
  92. package/dist/registry.js.map +1 -1
  93. package/dist/render.d.ts +89 -13
  94. package/dist/render.d.ts.map +1 -1
  95. package/dist/render.js +111 -16
  96. package/dist/render.js.map +1 -1
  97. package/dist/runtime-registry.d.ts +7 -66
  98. package/dist/runtime-registry.d.ts.map +1 -1
  99. package/dist/runtime-registry.js +39 -114
  100. package/dist/runtime-registry.js.map +1 -1
  101. package/dist/scenarios/index.d.ts +1 -1
  102. package/dist/scenarios/index.d.ts.map +1 -1
  103. package/dist/scenarios/index.js +1 -1
  104. package/dist/scenarios/index.js.map +1 -1
  105. package/dist/scenarios/parse.d.ts +4 -18
  106. package/dist/scenarios/parse.d.ts.map +1 -1
  107. package/dist/scenarios/parse.js +14 -34
  108. package/dist/scenarios/parse.js.map +1 -1
  109. package/dist/scenarios/scenario.d.ts +18 -74
  110. package/dist/scenarios/scenario.d.ts.map +1 -1
  111. package/dist/scenarios/scenario.js +7 -34
  112. package/dist/scenarios/scenario.js.map +1 -1
  113. package/dist/scenarios/storage.d.ts +11 -41
  114. package/dist/scenarios/storage.d.ts.map +1 -1
  115. package/dist/scenarios/storage.js +57 -47
  116. package/dist/scenarios/storage.js.map +1 -1
  117. package/dist/server.d.ts.map +1 -1
  118. package/dist/server.js +69 -19
  119. package/dist/server.js.map +1 -1
  120. package/dist/session.d.ts +90 -259
  121. package/dist/session.d.ts.map +1 -1
  122. package/dist/session.js +136 -250
  123. package/dist/session.js.map +1 -1
  124. package/dist/tools/analyze.d.ts +32 -118
  125. package/dist/tools/analyze.d.ts.map +1 -1
  126. package/dist/tools/analyze.js +65 -186
  127. package/dist/tools/analyze.js.map +1 -1
  128. package/dist/tools/browser-click.d.ts +3 -21
  129. package/dist/tools/browser-click.d.ts.map +1 -1
  130. package/dist/tools/browser-click.js +10 -31
  131. package/dist/tools/browser-click.js.map +1 -1
  132. package/dist/tools/browser-close-session.d.ts +4 -13
  133. package/dist/tools/browser-close-session.d.ts.map +1 -1
  134. package/dist/tools/browser-close-session.js +4 -13
  135. package/dist/tools/browser-close-session.js.map +1 -1
  136. package/dist/tools/browser-fill.d.ts +5 -36
  137. package/dist/tools/browser-fill.d.ts.map +1 -1
  138. package/dist/tools/browser-fill.js +9 -44
  139. package/dist/tools/browser-fill.js.map +1 -1
  140. package/dist/tools/browser-navigate.d.ts +6 -27
  141. package/dist/tools/browser-navigate.d.ts.map +1 -1
  142. package/dist/tools/browser-navigate.js +6 -23
  143. package/dist/tools/browser-navigate.js.map +1 -1
  144. package/dist/tools/browser-run-scenario.d.ts +5 -31
  145. package/dist/tools/browser-run-scenario.d.ts.map +1 -1
  146. package/dist/tools/browser-run-scenario.js +10 -46
  147. package/dist/tools/browser-run-scenario.js.map +1 -1
  148. package/dist/tools/browser-save-scenario.d.ts +3 -28
  149. package/dist/tools/browser-save-scenario.d.ts.map +1 -1
  150. package/dist/tools/browser-save-scenario.js +47 -84
  151. package/dist/tools/browser-save-scenario.js.map +1 -1
  152. package/dist/tools/browser-snapshot.d.ts +6 -39
  153. package/dist/tools/browser-snapshot.d.ts.map +1 -1
  154. package/dist/tools/browser-snapshot.js +4 -31
  155. package/dist/tools/browser-snapshot.js.map +1 -1
  156. package/dist/tools/browser-start-session.d.ts +4 -23
  157. package/dist/tools/browser-start-session.d.ts.map +1 -1
  158. package/dist/tools/browser-start-session.js +145 -56
  159. package/dist/tools/browser-start-session.js.map +1 -1
  160. package/dist/tools/browser-type.d.ts +5 -35
  161. package/dist/tools/browser-type.d.ts.map +1 -1
  162. package/dist/tools/browser-type.js +10 -45
  163. package/dist/tools/browser-type.js.map +1 -1
  164. package/dist/tools/contracts.d.ts +9 -86
  165. package/dist/tools/contracts.d.ts.map +1 -1
  166. package/dist/tools/contracts.js +24 -80
  167. package/dist/tools/contracts.js.map +1 -1
  168. package/dist/tools/cross-pr.d.ts +42 -30
  169. package/dist/tools/cross-pr.d.ts.map +1 -1
  170. package/dist/tools/cross-pr.js +81 -62
  171. package/dist/tools/cross-pr.js.map +1 -1
  172. package/dist/tools/git-diff.d.ts +18 -2
  173. package/dist/tools/git-diff.d.ts.map +1 -1
  174. package/dist/tools/git-diff.js +118 -26
  175. package/dist/tools/git-diff.js.map +1 -1
  176. package/dist/tools/git-history.d.ts +5 -16
  177. package/dist/tools/git-history.d.ts.map +1 -1
  178. package/dist/tools/git-history.js +3 -10
  179. package/dist/tools/git-history.js.map +1 -1
  180. package/dist/tools/history.d.ts +4 -33
  181. package/dist/tools/history.d.ts.map +1 -1
  182. package/dist/tools/history.js +6 -31
  183. package/dist/tools/history.js.map +1 -1
  184. package/dist/tools/impact.d.ts +7 -51
  185. package/dist/tools/impact.d.ts.map +1 -1
  186. package/dist/tools/impact.js +15 -67
  187. package/dist/tools/impact.js.map +1 -1
  188. package/dist/tools/index.d.ts +3 -8
  189. package/dist/tools/index.d.ts.map +1 -1
  190. package/dist/tools/index.js +3 -8
  191. package/dist/tools/index.js.map +1 -1
  192. package/dist/tools/kit.d.ts +66 -113
  193. package/dist/tools/kit.d.ts.map +1 -1
  194. package/dist/tools/kit.js +60 -28
  195. package/dist/tools/kit.js.map +1 -1
  196. package/dist/tools/link-workspace.d.ts +7 -45
  197. package/dist/tools/link-workspace.d.ts.map +1 -1
  198. package/dist/tools/link-workspace.js +10 -48
  199. package/dist/tools/link-workspace.js.map +1 -1
  200. package/dist/tools/lookup.d.ts +4 -14
  201. package/dist/tools/lookup.d.ts.map +1 -1
  202. package/dist/tools/lookup.js +4 -14
  203. package/dist/tools/lookup.js.map +1 -1
  204. package/dist/tools/mark-incident.d.ts +7 -54
  205. package/dist/tools/mark-incident.d.ts.map +1 -1
  206. package/dist/tools/mark-incident.js +15 -68
  207. package/dist/tools/mark-incident.js.map +1 -1
  208. package/dist/tools/observe-runtime.d.ts +27 -210
  209. package/dist/tools/observe-runtime.d.ts.map +1 -1
  210. package/dist/tools/observe-runtime.js +273 -434
  211. package/dist/tools/observe-runtime.js.map +1 -1
  212. package/dist/tools/observe-tests.d.ts +9 -100
  213. package/dist/tools/observe-tests.d.ts.map +1 -1
  214. package/dist/tools/observe-tests.js +74 -152
  215. package/dist/tools/observe-tests.js.map +1 -1
  216. package/dist/tools/pr-analysis.d.ts +18 -2
  217. package/dist/tools/pr-analysis.d.ts.map +1 -1
  218. package/dist/tools/pr-analysis.js +73 -23
  219. package/dist/tools/pr-analysis.js.map +1 -1
  220. package/dist/tools/pre-push.d.ts +74 -16
  221. package/dist/tools/pre-push.d.ts.map +1 -1
  222. package/dist/tools/pre-push.js +152 -51
  223. package/dist/tools/pre-push.js.map +1 -1
  224. package/dist/tools/propagation.d.ts +11 -53
  225. package/dist/tools/propagation.d.ts.map +1 -1
  226. package/dist/tools/propagation.js +17 -58
  227. package/dist/tools/propagation.js.map +1 -1
  228. package/dist/tools/questions.d.ts +13 -63
  229. package/dist/tools/questions.d.ts.map +1 -1
  230. package/dist/tools/questions.js +33 -105
  231. package/dist/tools/questions.js.map +1 -1
  232. package/dist/tools/refusal-fetch.d.ts +4 -40
  233. package/dist/tools/refusal-fetch.d.ts.map +1 -1
  234. package/dist/tools/refusal-fetch.js +4 -40
  235. package/dist/tools/refusal-fetch.js.map +1 -1
  236. package/dist/tools/runtime-incident.d.ts +4 -63
  237. package/dist/tools/runtime-incident.d.ts.map +1 -1
  238. package/dist/tools/runtime-incident.js +10 -87
  239. package/dist/tools/runtime-incident.js.map +1 -1
  240. package/dist/tools/scope.d.ts +7 -25
  241. package/dist/tools/scope.d.ts.map +1 -1
  242. package/dist/tools/scope.js +10 -29
  243. package/dist/tools/scope.js.map +1 -1
  244. package/dist/tools/similar-incidents.d.ts +11 -86
  245. package/dist/tools/similar-incidents.d.ts.map +1 -1
  246. package/dist/tools/similar-incidents.js +7 -71
  247. package/dist/tools/similar-incidents.js.map +1 -1
  248. package/dist/tools/validate.d.ts +29 -70
  249. package/dist/tools/validate.d.ts.map +1 -1
  250. package/dist/tools/validate.js +141 -85
  251. package/dist/tools/validate.js.map +1 -1
  252. package/dist/tools/verification-status.d.ts +9 -64
  253. package/dist/tools/verification-status.d.ts.map +1 -1
  254. package/dist/tools/verification-status.js +9 -62
  255. package/dist/tools/verification-status.js.map +1 -1
  256. package/dist/tools/verify-claim.d.ts +5 -52
  257. package/dist/tools/verify-claim.d.ts.map +1 -1
  258. package/dist/tools/verify-claim.js +6 -56
  259. package/dist/tools/verify-claim.js.map +1 -1
  260. package/dist/transport.d.ts +15 -52
  261. package/dist/transport.d.ts.map +1 -1
  262. package/dist/transport.js +16 -60
  263. package/dist/transport.js.map +1 -1
  264. package/package.json +40 -22
@@ -1,51 +1,21 @@
1
1
  /**
2
- * Where a scenario lives on disk — `DEC-383` §1.
3
- *
4
- * **`descry/scenarios/`, committed, and deliberately not `.descry/`.** The
5
- * obvious home was beside `config.json` and `graph.db`, and it is wrong: §7's
6
- * whole point is a run with no agent in it — a pre-push hook and a CI step —
7
- * and CI runs on a fresh checkout. `.descry/` holds a regenerable graph and a
8
- * config naming absolute adapter paths, which is why it is ignored; a scenario
9
- * stored there works locally, vanishes in CI, and reports nothing rather than
10
- * failing.
11
- *
12
- * The split is by kind, not by prefix: `.descry/` for what Descry can rebuild
13
- * or what is true only on this machine, `descry/` for what a person wrote and a
14
- * reviewer should see in a diff.
15
- *
16
- * One file per scenario, so two branches adding scenarios do not conflict and
17
- * each is reviewable on its own.
2
+ * Scenario storage — `DEC-383` §1. Lives in committed `descry/scenarios/`,
3
+ * never `.descry/` (gitignored, regenerable): §7 needs agent-free runs on
4
+ * a fresh CI checkout, where `.descry/` would vanish and fail silently. One file per scenario avoids merge conflicts.
18
5
  */
19
6
  import { type ScenarioParseResult } from "./parse.ts";
20
7
  import type { Scenario } from "./scenario.ts";
21
8
  export declare function scenariosDirectory(repoPath: string): string;
9
+ /** Not the disk-safe path — `readScenario`/`writeScenario` go through `confinedScenarioPath` below. This one is for display messages naming even a refused name. */
22
10
  export declare function scenarioPath(repoPath: string, name: string): string;
23
- /**
24
- * Every saved scenario's name.
25
- *
26
- * A repository with no scenarios returns `[]` — a fact about the repository,
27
- * not a failure to look. Conflating "none saved" with "could not read" is the
28
- * distinction the five reply states exist to keep, applied one layer down.
29
- */
11
+ /** Thrown when the scenarios directory exists but can't be read (permission error, not-a-directory, ...) — a fact about Descry's ability to look, never about count. Must not collapse to `[]` (C-F2): that would teach a false "nothing saved". */
12
+ export declare class ScenarioListError extends Error {
13
+ constructor(dir: string, cause: unknown);
14
+ }
15
+ /** Every saved scenario's name. ENOENT means "nothing has ever been saved" → `[]`; any other read error (permission, not-a-directory) throws `ScenarioListError` instead — the five-reply-states distinction, one layer down. */
30
16
  export declare function listScenarios(repoPath: string): Promise<readonly string[]>;
31
- /**
32
- * Read one scenario.
33
- *
34
- * Never throws: a missing file, unreadable text and a malformed document are
35
- * all refusals carrying the path, because a caller replaying scenarios in CI
36
- * needs to report which file was wrong rather than die on the first one. The
37
- * message distinguishes *nothing is there* from *something is there and is
38
- * wrong* — conflating them sends someone to debug a file that does not exist.
39
- */
17
+ /** Reads one scenario; never throws — missing file, unreadable text, malformed document are all refusals carrying the path, so a CI replay can report which file was wrong rather than die on the first. */
40
18
  export declare function readScenario(repoPath: string, name: string): Promise<ScenarioParseResult>;
41
- /**
42
- * Write one scenario, refusing to store anything this reader could not read
43
- * back.
44
- *
45
- * The validation on the way out is not redundant with the one on the way in.
46
- * A scenario is written once and read on every push afterwards, so a fault
47
- * saved today surfaces at the worst possible moment — during a check somebody
48
- * is waiting on — and by then the session that could have explained it is gone.
49
- */
19
+ /** Writes one scenario, refusing anything this reader couldn't read back. Validating on the way out isn't redundant — a fault saved today surfaces during a push check, long after the session that could explain it is gone. */
50
20
  export declare function writeScenario(repoPath: string, scenario: Scenario): Promise<void>;
51
21
  //# sourceMappingURL=storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/scenarios/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,EAAoC,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAI9C,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAQhF;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAmB/F;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAOvF"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/scenarios/storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAoC,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAI9C,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,oKAAoK;AACpK,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,oPAAoP;AACpP,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;CAMxC;AA4BD,iOAAiO;AACjO,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAUhF;AAED,4MAA4M;AAC5M,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAwB/F;AAED,iOAAiO;AACjO,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAQvF"}
@@ -1,59 +1,76 @@
1
1
  /**
2
- * Where a scenario lives on disk — `DEC-383` §1.
3
- *
4
- * **`descry/scenarios/`, committed, and deliberately not `.descry/`.** The
5
- * obvious home was beside `config.json` and `graph.db`, and it is wrong: §7's
6
- * whole point is a run with no agent in it — a pre-push hook and a CI step —
7
- * and CI runs on a fresh checkout. `.descry/` holds a regenerable graph and a
8
- * config naming absolute adapter paths, which is why it is ignored; a scenario
9
- * stored there works locally, vanishes in CI, and reports nothing rather than
10
- * failing.
11
- *
12
- * The split is by kind, not by prefix: `.descry/` for what Descry can rebuild
13
- * or what is true only on this machine, `descry/` for what a person wrote and a
14
- * reviewer should see in a diff.
15
- *
16
- * One file per scenario, so two branches adding scenarios do not conflict and
17
- * each is reviewable on its own.
2
+ * Scenario storage — `DEC-383` §1. Lives in committed `descry/scenarios/`,
3
+ * never `.descry/` (gitignored, regenerable): §7 needs agent-free runs on
4
+ * a fresh CI checkout, where `.descry/` would vanish and fail silently. One file per scenario avoids merge conflicts.
18
5
  */
19
6
  import { mkdir, readFile, readdir, writeFile } from "node:fs/promises";
20
- import { join } from "node:path";
7
+ import { join, resolve, sep } from "node:path";
21
8
  import { parseScenario, serializeScenario } from "./parse.js";
22
9
  const SCENARIO_SUFFIX = ".scenario.json";
23
10
  export function scenariosDirectory(repoPath) {
24
11
  return join(repoPath, "descry", "scenarios");
25
12
  }
13
+ /** Not the disk-safe path — `readScenario`/`writeScenario` go through `confinedScenarioPath` below. This one is for display messages naming even a refused name. */
26
14
  export function scenarioPath(repoPath, name) {
27
15
  return join(scenariosDirectory(repoPath), `${name}${SCENARIO_SUFFIX}`);
28
16
  }
29
- /**
30
- * Every saved scenario's name.
31
- *
32
- * A repository with no scenarios returns `[]` — a fact about the repository,
33
- * not a failure to look. Conflating "none saved" with "could not read" is the
34
- * distinction the five reply states exist to keep, applied one layer down.
35
- */
17
+ /** Thrown when the scenarios directory exists but can't be read (permission error, not-a-directory, ...) — a fact about Descry's ability to look, never about count. Must not collapse to `[]` (C-F2): that would teach a false "nothing saved". */
18
+ export class ScenarioListError extends Error {
19
+ constructor(dir, cause) {
20
+ const detail = cause instanceof Error ? cause.message : String(cause);
21
+ super(`could not read ${dir} (${detail})`);
22
+ this.name = "ScenarioListError";
23
+ this.cause = cause;
24
+ }
25
+ }
26
+ /** A-F4: name comes straight from tool args; `join` silently normalises `..`, so an unchecked `"../../../etc/passwd"` (or absolute path) escapes `descry/scenarios/`. Reject the shape here, then `confinedScenarioPath` re-checks containment on the resolved path — belt-and-braces, mirroring descry-desktop's write-finding-export. */
27
+ function invalidScenarioNameReason(name) {
28
+ if (name === "")
29
+ return "a scenario name cannot be empty";
30
+ if (name.includes("/") || name.includes("\\")) {
31
+ return `"${name}" is not a valid scenario name — a name may not contain a path separator`;
32
+ }
33
+ if (name === "." || name === "..") {
34
+ return `"${name}" is not a valid scenario name`;
35
+ }
36
+ return null;
37
+ }
38
+ function confinedScenarioPath(repoPath, name) {
39
+ const invalid = invalidScenarioNameReason(name);
40
+ if (invalid !== null)
41
+ throw new Error(invalid);
42
+ const dir = scenariosDirectory(repoPath);
43
+ const path = join(dir, `${name}${SCENARIO_SUFFIX}`);
44
+ const resolvedDir = resolve(dir) + sep;
45
+ // Belt and braces: if this ever resolves outside the scenarios directory, refuse rather than touch it.
46
+ if (!resolve(path).startsWith(resolvedDir)) {
47
+ throw new Error(`refusing to use a scenario path outside ${dir}`);
48
+ }
49
+ return path;
50
+ }
51
+ /** Every saved scenario's name. ENOENT means "nothing has ever been saved" → `[]`; any other read error (permission, not-a-directory) throws `ScenarioListError` instead — the five-reply-states distinction, one layer down. */
36
52
  export async function listScenarios(repoPath) {
53
+ const dir = scenariosDirectory(repoPath);
37
54
  let entries;
38
55
  try {
39
- entries = await readdir(scenariosDirectory(repoPath));
56
+ entries = await readdir(dir);
40
57
  }
41
- catch {
42
- return [];
58
+ catch (error) {
59
+ if (error.code === "ENOENT")
60
+ return [];
61
+ throw new ScenarioListError(dir, error);
43
62
  }
44
63
  return entries.filter((e) => e.endsWith(SCENARIO_SUFFIX)).map((e) => e.slice(0, -SCENARIO_SUFFIX.length));
45
64
  }
46
- /**
47
- * Read one scenario.
48
- *
49
- * Never throws: a missing file, unreadable text and a malformed document are
50
- * all refusals carrying the path, because a caller replaying scenarios in CI
51
- * needs to report which file was wrong rather than die on the first one. The
52
- * message distinguishes *nothing is there* from *something is there and is
53
- * wrong* — conflating them sends someone to debug a file that does not exist.
54
- */
65
+ /** Reads one scenario; never throws — missing file, unreadable text, malformed document are all refusals carrying the path, so a CI replay can report which file was wrong rather than die on the first. */
55
66
  export async function readScenario(repoPath, name) {
56
- const path = scenarioPath(repoPath, name);
67
+ let path;
68
+ try {
69
+ path = confinedScenarioPath(repoPath, name);
70
+ }
71
+ catch (error) {
72
+ return { valid: false, problems: [error.message] };
73
+ }
57
74
  let text;
58
75
  try {
59
76
  text = await readFile(path, "utf8");
@@ -73,21 +90,14 @@ export async function readScenario(repoPath, name) {
73
90
  return result;
74
91
  return { valid: false, problems: result.problems.map((p) => `${path}: ${p}`) };
75
92
  }
76
- /**
77
- * Write one scenario, refusing to store anything this reader could not read
78
- * back.
79
- *
80
- * The validation on the way out is not redundant with the one on the way in.
81
- * A scenario is written once and read on every push afterwards, so a fault
82
- * saved today surfaces at the worst possible moment — during a check somebody
83
- * is waiting on — and by then the session that could have explained it is gone.
84
- */
93
+ /** Writes one scenario, refusing anything this reader couldn't read back. Validating on the way out isn't redundant — a fault saved today surfaces during a push check, long after the session that could explain it is gone. */
85
94
  export async function writeScenario(repoPath, scenario) {
86
95
  const check = parseScenario(scenario);
87
96
  if (!check.valid) {
88
97
  throw new Error(`refusing to save scenario "${scenario.name}": ${check.problems.join("; ")}`);
89
98
  }
99
+ const path = confinedScenarioPath(repoPath, scenario.name);
90
100
  await mkdir(scenariosDirectory(repoPath), { recursive: true });
91
- await writeFile(scenarioPath(repoPath, scenario.name), serializeScenario(scenario), "utf8");
101
+ await writeFile(path, serializeScenario(scenario), "utf8");
92
102
  }
93
103
  //# sourceMappingURL=storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/scenarios/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAA4B,MAAM,YAAY,CAAC;AAGxF,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAEzC,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,OAAO,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,IAAY;IACzD,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,GAAG,eAAe,EAAE,CAAC,CAAC;AACzE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB;IAClD,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5G,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB,EAAE,IAAY;IAC/D,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC1C,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,sBAAsB,IAAI,kBAAkB,IAAI,EAAE,CAAC,EAAE,CAAC;IAC1F,CAAC;IAED,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,oCAAoC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IAClG,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC;IAChC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;AACjF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB,EAAE,QAAkB;IACtE,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,CAAC,IAAI,MAAM,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChG,CAAC;IACD,MAAM,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;AAC9F,CAAC"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/scenarios/storage.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AA4BH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAYhD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CAC5C;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAYjD;AAED,MAAM,WAAW,SAAS;IACxB,uFAAuF;IACvF,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,wDAAwD;IACxD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AA4DD,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAyTpE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAgCH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAYhD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CAC5C;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAYjD;AAED,MAAM,WAAW,SAAS;IACxB,uFAAuF;IACvF,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,wDAAwD;IACxD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAqED,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAkWpE"}
package/dist/server.js CHANGED
@@ -28,8 +28,9 @@
28
28
  import { randomUUID } from "node:crypto";
29
29
  import { resolveActionDispatch } from "./action-handshake.js";
30
30
  import { fail, isRequest, negotiateVersion, ok, parseMessage, ProtocolError, RPC_INTERNAL_ERROR, RPC_INVALID_PARAMS, RPC_METHOD_NOT_FOUND, } from "./protocol.js";
31
- import { renderAnswer, renderFailed, renderHandshake, renderTimedOut, renderToolError, TOOL_OUTPUT_SCHEMA, } from "./render.js";
31
+ import { renderAnswer, renderFailed, renderHandshake, renderRefusedInput, renderTimedOut, renderToolError, TOOL_OUTPUT_SCHEMA, } from "./render.js";
32
32
  import { createDisclosureLedger } from "./disclosure-ledger.js";
33
+ import { checkConfigDrift, ConfigError } from "./session.js";
33
34
  import { TOOLS, TOOLS_BY_NAME, ToolInputError, } from "./tools/index.js";
34
35
  /** Every call's declared budget (§6). Fixed today; per-trigger budgets are P26/P28 work. */
35
36
  const CALL_BUDGET_MS = 15 * 60 * 1000;
@@ -71,6 +72,15 @@ const SERVER_INSTRUCTIONS = "Descry reads the repository's source into a code gr
71
72
  "both \"nothing matched\" and \"I could not look\" would teach a false fact with no way to " +
72
73
  "detect it — that is why these are distinct. Never read `refused` as \"clean\" or `empty` as " +
73
74
  "\"broken\".\n\n" +
75
+ "**One case is not an answer at all and has its own shape**: a call naming no tool this " +
76
+ "server has — `name` is not a string, or names nothing in the registry — comes back with " +
77
+ "`isError: true` and `{ tool, status: \"error\", message }`, carrying no `state`, no `graph` " +
78
+ "and no `disclosures`. There is no `state` because there is no tool to say `state` about. " +
79
+ "This is narrower than it once was: a *resolved* tool given bad input — a missing required " +
80
+ "field, a value of the wrong type — is a fact about that tool's call and comes back as a " +
81
+ "real `state: \"refused\"` reply instead, with `disclosures` naming what was wrong. Branch " +
82
+ "on `isError` before reading `state` regardless — a caller that only ever sees the second, " +
83
+ "unresolved-tool shape in testing will still be surprised by it in production.\n\n" +
74
84
  "Every reply also carries a `disclosures` list, a `resolutionFloor` and a `reliabilityCap` " +
75
85
  "(A, B or C) inside `graph`. `resolutionFloor` is how much tooling actually ran under the " +
76
86
  "weakest evidence behind the answer, R0 through R4: R0 is syntax only, nothing resolved; R1 " +
@@ -205,9 +215,35 @@ export function createMcpServer(options) {
205
215
  if (tool === undefined) {
206
216
  return renderToolError(name, `no such tool. Available: ${tools.map((t) => t.name).join(", ")}.`);
207
217
  }
218
+ // `tool` is resolved from here on, so any input failure below has a real
219
+ // `ToolDefinition` to render a `state: "refused"` envelope from
220
+ // (`renderRefusedInput`) rather than `renderToolError`'s bare shape —
221
+ // minted here, ahead of the args check, so both that check and a
222
+ // `ToolInputError` thrown later out of `tool.run` share the one
223
+ // `renderOptions()`. Same precedent as B10's `callId`: a call that never
224
+ // reaches `tool.run` still gets one minted (`renderFailed`/`renderTimedOut`
225
+ // already do this for every call but `verify_claim`), and is never passed
226
+ // to `session.recordCallWithId` below, so no gap opens in what a citation
227
+ // can resolve.
228
+ const started = Date.now();
229
+ const callId = name === "verify_claim" ? randomUUID() : session.allocateCallId();
230
+ // 13.3.16 (N2) steps 2-3: checked once per call, ahead of dispatch, so every
231
+ // reply this call produces — ok, refused, failed or timed out — carries the
232
+ // same disclosure and the same `configStale` flag, not only `analyze`'s.
233
+ const configDrift = await checkConfigDrift(session);
234
+ const renderOptions = () => ({
235
+ toolVersion: tool.version,
236
+ toolClass: tool.class,
237
+ toolTier: tool.tier,
238
+ elapsedMs: Date.now() - started,
239
+ limitMs: CALL_BUDGET_MS,
240
+ disclosureLedger,
241
+ callId,
242
+ configDrift,
243
+ });
208
244
  const rawArgs = params["arguments"];
209
245
  if (rawArgs !== undefined && (typeof rawArgs !== "object" || rawArgs === null || Array.isArray(rawArgs))) {
210
- return renderToolError(name, '"arguments" must be an object');
246
+ return renderRefusedInput(name, '"arguments" must be an object', renderOptions());
211
247
  }
212
248
  const args = (rawArgs ?? {});
213
249
  const meta = params["_meta"];
@@ -252,10 +288,10 @@ export function createMcpServer(options) {
252
288
  progress,
253
289
  signal: AbortSignal.any([controller.signal, AbortSignal.timeout(CALL_BUDGET_MS)]),
254
290
  };
255
- const started = Date.now();
256
- // B10: minted before any rendering happens, so every envelope this call
257
- // can produce (handshake, failed, timed-out, or a real answer) carries
258
- // the exact id `recordCallWithId` will file the record under below — a
291
+ // B10: `started`/`callId`/`renderOptions` are minted above, ahead of the
292
+ // `arguments` shape check, so every envelope this call can produce
293
+ // (refused, handshake, failed, timed-out, or a real answer) carries the
294
+ // exact id `recordCallWithId` will file the record under below — a
259
295
  // caller reading `callId` off the reply and citing it in `verify_claim`
260
296
  // is citing the id that call is actually recorded as.
261
297
  //
@@ -267,23 +303,31 @@ export function createMcpServer(options) {
267
303
  // returns. Reusing it here would consume a real id `verify_claim` never
268
304
  // gets recorded under, opening a gap in the sequence a caller relies on
269
305
  // corresponding exactly to recorded calls.
270
- const callId = name === "verify_claim" ? randomUUID() : session.allocateCallId();
271
- const renderOptions = () => ({
272
- toolVersion: tool.version,
273
- toolClass: tool.class,
274
- toolTier: tool.tier,
275
- elapsedMs: Date.now() - started,
276
- limitMs: CALL_BUDGET_MS,
277
- disclosureLedger,
278
- callId,
279
- });
280
306
  try {
281
307
  // §7's two-call handshake. Decided before any real work starts — a mint
282
308
  // has no I/O to time out on — so this sits outside the try/catch's
283
309
  // failure/timeout handling below, which is for `tool.run` alone.
284
310
  const dispatch = await resolveActionDispatch(tool, args, ctx);
285
311
  if (dispatch.kind === "handshake") {
286
- return renderHandshake(name, dispatch.token, dispatch.willDo, renderOptions());
312
+ // Read only here, not folded into `renderOptions()` above: every other
313
+ // call site shares that factory, including refusal paths for a graph
314
+ // in a state `baseStamp()` cannot read (a stale schema version, MK-4) —
315
+ // making it unconditional there made those refusals throw instead of
316
+ // refusing gracefully. A handshake mint has done no I/O yet, so
317
+ // falling back to "no stamp known" on a read failure is exactly
318
+ // `renderHandshake`'s original, already-correct behaviour, not a new
319
+ // silent failure.
320
+ let graphStamp;
321
+ try {
322
+ graphStamp = session.provider().baseStamp();
323
+ }
324
+ catch {
325
+ graphStamp = undefined;
326
+ }
327
+ return renderHandshake(name, dispatch.token, dispatch.willDo, {
328
+ ...renderOptions(),
329
+ ...(graphStamp === undefined ? {} : { graphStamp }),
330
+ });
287
331
  }
288
332
  const outcome = await tool.run(dispatch.args, ctx);
289
333
  // Cancelled while it was running, and it finished anyway — the client
@@ -314,13 +358,19 @@ export function createMcpServer(options) {
314
358
  if (controller.signal.aborted)
315
359
  return null;
316
360
  if (error instanceof ToolInputError)
317
- return renderToolError(name, error.message);
361
+ return renderRefusedInput(name, error.message, renderOptions());
318
362
  if (isAbort(error) || ctx.signal.aborted)
319
363
  return renderTimedOut(name, renderOptions());
320
364
  // Anything else is a bug or an environment failure. It still comes back as
321
365
  // a tool result: an agent can retry or tell the user, whereas a protocol
322
366
  // error just ends the call with nothing it can use.
323
- return renderFailed(name, `${error instanceof Error ? error.message : String(error)}`, renderOptions());
367
+ const failureMessage = error instanceof Error ? error.message : String(error);
368
+ // 13.3.5 Half A: a `ConfigError` is thrown with a full written reason
369
+ // specifically so a caller can read it — giving it the generic
370
+ // "X failed." headline and burying that reason in `disclosures` says
371
+ // less than the error already said. An unexplained fault keeps the
372
+ // opaque default `renderFailed` falls back to.
373
+ return renderFailed(name, failureMessage, renderOptions(), error instanceof ConfigError ? `${name} could not run: ${failureMessage}` : undefined);
324
374
  }
325
375
  finally {
326
376
  pending.delete(id);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EACL,IAAI,EACJ,SAAS,EACT,gBAAgB,EAChB,EAAE,EACF,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,GAGrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,kBAAkB,GAEnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE7D,OAAO,EACL,KAAK,EACL,aAAa,EACb,cAAc,GAGf,MAAM,kBAAkB,CAAC;AAG1B,4FAA4F;AAC5F,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEtC,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,CACL,CAAC,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;QACvD,CAAC,OAAO,YAAY,KAAK,WAAW,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,CACxG,CAAC;AACJ,CAAC;AAgBD;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,CAAC;QACH,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QAC5F,MAAM,KAAK,GAAG,OAAkC,CAAC;QACjD,kEAAkE;QAClE,wEAAwE;QACxE,4DAA4D;QAC5D,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,yBAAyB,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;IACpF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AASD,MAAM,mBAAmB,GACvB,4FAA4F;IAC5F,yFAAyF;IACzF,0CAA0C;IAC1C,qFAAqF;IACrF,6FAA6F;IAC7F,4FAA4F;IAC5F,8FAA8F;IAC9F,4FAA4F;IAC5F,8FAA8F;IAC9F,iBAAiB;IACjB,yFAAyF;IACzF,0FAA0F;IAC1F,8FAA8F;IAC9F,2FAA2F;IAC3F,4FAA4F;IAC5F,0FAA0F;IAC1F,4FAA4F;IAC5F,4FAA4F;IAC5F,mFAAmF;IACnF,4FAA4F;IAC5F,2FAA2F;IAC3F,6FAA6F;IAC7F,8FAA8F;IAC9F,gGAAgG;IAChG,gGAAgG;IAChG,+FAA+F;IAC/F,2FAA2F;IAC3F,8FAA8F;IAC9F,gGAAgG;IAChG,2FAA2F;IAC3F,2FAA2F;IAC3F,qEAAqE;IACrE,6FAA6F;IAC7F,yFAAyF;IACzF,gGAAgG;IAChG,yFAAyF;IACzF,6FAA6F;IAC7F,6EAA6E;IAC7E,+FAA+F;IAC/F,4FAA4F;IAC5F,8FAA8F;IAC9F,0CAA0C;IAC1C,4FAA4F;IAC5F,0FAA0F;IAC1F,2FAA2F;IAC3F,wFAAwF;IACxF,2FAA2F;IAC3F,8FAA8F;IAC9F,uFAAuF;IACvF,uFAAuF;IACvF,oFAAoF;IACpF,8FAA8F;IAC9F,6FAA6F;IAC7F,mDAAmD;IACnD,4FAA4F;IAC5F,yFAAyF;IACzF,+FAA+F;IAC/F,8FAA8F;IAC9F,6FAA6F;IAC7F,+FAA+F;IAC/F,gGAAgG;IAChG,8FAA8F;IAC9F,4FAA4F;IAC5F,8FAA8F;IAC9F,oFAAoF,CAAC;AAEvF,MAAM,UAAU,eAAe,CAAC,OAAyB;IACvD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC;IAC5C,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC;IACjD,kEAAkE;IAClE,sEAAsE;IACtE,MAAM,gBAAgB,GAAG,sBAAsB,EAAE,CAAC;IAClD,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;IACrC,MAAM,WAAW,GACf,OAAO,CAAC,KAAK,KAAK,SAAS;QACzB,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAE9D;;;;;OAKG;IACH,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;IAElD,KAAK,UAAU,aAAa,CAAC,OAAmB,EAAE,SAAoB;QACpE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QAEpC,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,SAAS,CAAC,IAAI,CACZ,EAAE,CAAC,EAAE,EAAE;oBACL,eAAe,EAAE,gBAAgB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;oBAC5D,oEAAoE;oBACpE,gEAAgE;oBAChE,6BAA6B;oBAC7B,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE;oBAC/C,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE;oBACxD,YAAY,EAAE,mBAAmB;iBAClC,CAAC,CACH,CAAC;gBACF,OAAO;YACT,CAAC;YAED,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC3B,OAAO;YACT,CAAC;YAED,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,SAAS,CAAC,IAAI,CACZ,EAAE,CAAC,EAAE,EAAE;oBACL,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;wBAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,kEAAkE;wBAClE,iEAAiE;wBACjE,uDAAuD;wBACvD,kEAAkE;wBAClE,eAAe;wBACf,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,6DAA6D;wBAC7D,gEAAgE;wBAChE,8CAA8C;wBAC9C,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,WAAW,EAAE,IAAI,CAAC,OAAO;wBACzB,8DAA8D;wBAC9D,gEAAgE;wBAChE,uDAAuD;wBACvD,2DAA2D;wBAC3D,YAAY,EAAE,kBAAkB;qBACjC,CAAC,CAAC;iBACJ,CAAC,CACH,CAAC;gBACF,OAAO;YACT,CAAC;YAED,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;gBACrD,kEAAkE;gBAClE,qEAAqE;gBACrE,mBAAmB;gBACnB,IAAI,MAAM,KAAK,IAAI;oBAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;gBACpD,OAAO;YACT,CAAC;YAED;gBACE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,oBAAoB,EAAE,mBAAmB,MAAM,EAAE,CAAC,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,KAAK,UAAU,QAAQ,CACrB,EAAS,EACT,MAA+B,EAC/B,SAAoB;QAEpB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,eAAe,CAAC,YAAY,EAAE,yBAAyB,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,eAAe,CACpB,IAAI,EACJ,4BAA4B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACnE,CAAC;QACJ,CAAC;QAED,yEAAyE;QACzE,gEAAgE;QAChE,sEAAsE;QACtE,iEAAiE;QACjE,gEAAgE;QAChE,yEAAyE;QACzE,4EAA4E;QAC5E,0EAA0E;QAC1E,0EAA0E;QAC1E,eAAe;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QACjF,6EAA6E;QAC7E,4EAA4E;QAC5E,yEAAyE;QACzE,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,CAAC;YAC3B,WAAW,EAAE,IAAI,CAAC,OAAO;YACzB,SAAS,EAAE,IAAI,CAAC,KAAK;YACrB,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;YAC/B,OAAO,EAAE,cAAc;YACvB,gBAAgB;YAChB,MAAM;YACN,WAAW;SACZ,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QACpC,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACzG,OAAO,kBAAkB,CAAC,IAAI,EAAE,+BAA+B,EAAE,aAAa,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAA4B,CAAC;QAExD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7B,MAAM,KAAK,GACT,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;YACvC,CAAC,CAAE,IAAgC,CAAC,eAAe,CAAC;YACpD,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,QAAQ,GACZ,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ;YACpD,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;gBAC1B,SAAS,CAAC,IAAI,CAAC;oBACb,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,wBAAwB;oBAChC,MAAM,EAAE;wBACN,aAAa,EAAE,KAAK;wBACpB,+DAA+D;wBAC/D,gEAAgE;wBAChE,gEAAgE;wBAChE,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC;wBACjC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;wBACzC,OAAO;qBACR;iBACF,CAAC,CAAC;YACL,CAAC;YACH,CAAC,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;QAEf,0EAA0E;QAC1E,oEAAoE;QACpE,EAAE;QACF,wEAAwE;QACxE,wEAAwE;QACxE,2EAA2E;QAC3E,4EAA4E;QAC5E,yEAAyE;QACzE,wEAAwE;QACxE,wEAAwE;QACxE,uEAAuE;QACvE,yDAAyD;QACzD,4EAA4E;QAC5E,0EAA0E;QAC1E,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAC5B,MAAM,GAAG,GAAG;YACV,OAAO;YACP,QAAQ;YACR,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;SAClF,CAAC;QACF,yEAAyE;QACzE,mEAAmE;QACnE,wEAAwE;QACxE,mEAAmE;QACnE,wEAAwE;QACxE,sDAAsD;QACtD,EAAE;QACF,uEAAuE;QACvE,qEAAqE;QACrE,iEAAiE;QACjE,oEAAoE;QACpE,oEAAoE;QACpE,wEAAwE;QACxE,wEAAwE;QACxE,2CAA2C;QAE3C,IAAI,CAAC;YACH,wEAAwE;YACxE,mEAAmE;YACnE,iEAAiE;YACjE,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;YAC9D,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAClC,uEAAuE;gBACvE,qEAAqE;gBACrE,wEAAwE;gBACxE,qEAAqE;gBACrE,gEAAgE;gBAChE,gEAAgE;gBAChE,qEAAqE;gBACrE,kBAAkB;gBAClB,IAAI,UAA2D,CAAC;gBAChE,IAAI,CAAC;oBACH,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC;gBAC9C,CAAC;gBAAC,MAAM,CAAC;oBACP,UAAU,GAAG,SAAS,CAAC;gBACzB,CAAC;gBACD,OAAO,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE;oBAC5D,GAAG,aAAa,EAAE;oBAClB,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;iBACpD,CAAC,CAAC;YACL,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACnD,sEAAsE;YACtE,sEAAsE;YACtE,yEAAyE;YACzE,gEAAgE;YAChE,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAC3C,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;YAC9D,wEAAwE;YACxE,mEAAmE;YACnE,qEAAqE;YACrE,gEAAgE;YAChE,EAAE;YACF,qEAAqE;YACrE,iEAAiE;YACjE,qEAAqE;YACrE,oBAAoB;YACpB,IAAI,IAAI,KAAK,cAAc;gBAAE,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;YACtG,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,0DAA0D;YAC1D,uEAAuE;YACvE,mEAAmE;YACnE,6CAA6C;YAC7C,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAC3C,IAAI,KAAK,YAAY,cAAc;gBAAE,OAAO,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;YACrG,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAO,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;YACvF,2EAA2E;YAC3E,yEAAyE;YACzE,oDAAoD;YACpD,MAAM,cAAc,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9E,sEAAsE;YACtE,+DAA+D;YAC/D,qEAAqE;YACrE,mEAAmE;YACnE,+CAA+C;YAC/C,OAAO,YAAY,CACjB,IAAI,EACJ,cAAc,EACd,aAAa,EAAE,EACf,KAAK,YAAY,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,mBAAmB,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CACtF,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;;;;;;;;OASG;IACH,SAAS,MAAM,CAAC,MAA+B;QAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QACtC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,OAAO,SAAS,KAAK,QAAQ;YAAE,OAAO;QAC3E,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO;QACrC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChC,UAAU,CAAC,KAAK,CACd,IAAI,KAAK,CACP,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,EAAE;YACzC,CAAC,CAAC,wBAAwB,MAAM,EAAE;YAClC,CAAC,CAAC,qBAAqB,CAC1B,CACF,CAAC;IACJ,CAAC;IAED,kEAAkE;IAClE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAiB,CAAC;IACvC,SAAS,QAAQ,CAAC,EAAS;QACzB,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACtC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI,WAAW;YACb,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,SAAoB;YAC/C,IAAI,OAAO,CAAC;YACZ,IAAI,CAAC;gBACH,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;oBACnC,sEAAsE;oBACtE,oEAAoE;oBACpE,mDAAmD;oBACnD,IAAI,KAAK,CAAC,EAAE,KAAK,IAAI;wBAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;oBACjF,OAAO;gBACT,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,IAAI,OAAO,CAAC,MAAM,KAAK,2BAA2B;oBAAE,WAAW,GAAG,IAAI,CAAC;qBAClE,IAAI,OAAO,CAAC,MAAM,KAAK,yBAAyB;oBAAE,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;gBACpF,sEAAsE;gBACtE,+DAA+D;gBAC/D,gEAAgE;gBAChE,sEAAsE;gBACtE,yBAAyB;gBACzB,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC1C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,CAAC,IAAI,CACZ,IAAI,CACF,OAAO,CAAC,EAAE,EACV,KAAK,YAAY,cAAc,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,EACzE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CACF,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}