niceeval 0.14.2 → 0.14.3-canary.53

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 (94) hide show
  1. package/INDEX.md +13 -6
  2. package/dist/agents/sdk-streams.cjs +6 -1
  3. package/dist/agents/sdk-streams.cjs.map +1 -1
  4. package/dist/agents/sdk-streams.d.cts +3 -2
  5. package/dist/agents/sdk-streams.d.mts +3 -2
  6. package/dist/agents/sdk-streams.d.ts +3 -2
  7. package/dist/agents/ui-message-stream.cjs +3 -1
  8. package/dist/agents/ui-message-stream.cjs.map +1 -1
  9. package/dist/experiment/host/cli/debug-protocol.cjs +257 -0
  10. package/dist/experiment/host/cli/debug-protocol.cjs.map +1 -0
  11. package/dist/experiment/host/cli/debug-protocol.d.cts +13 -0
  12. package/dist/experiment/host/cli/debug-protocol.d.mts +13 -0
  13. package/dist/experiment/host/cli/debug-protocol.d.ts +13 -0
  14. package/dist/experiment/host/cli/debug-protocol.js +8 -0
  15. package/dist/experiment/host/cli/debug-protocol.js.map +1 -0
  16. package/dist/experiment/host/cli/session-protocol.cjs +78 -0
  17. package/dist/experiment/host/cli/session-protocol.cjs.map +1 -0
  18. package/dist/experiment/host/cli/session-protocol.d.cts +10 -0
  19. package/dist/experiment/host/cli/session-protocol.d.mts +10 -0
  20. package/dist/experiment/host/cli/session-protocol.d.ts +10 -0
  21. package/dist/experiment/host/cli/session-protocol.js +12 -0
  22. package/dist/experiment/host/cli/session-protocol.js.map +1 -0
  23. package/dist/experiment/host/index.cjs +9 -1
  24. package/dist/experiment/host/index.cjs.map +1 -1
  25. package/dist/experiment/host/index.d.cts +2 -0
  26. package/dist/experiment/host/index.d.mts +2 -0
  27. package/dist/experiment/host/index.d.ts +2 -0
  28. package/dist/experiment/host/index.js +28 -16
  29. package/dist/experiment/host/index.mjs +28 -16
  30. package/dist/run/cli/contribution.cjs +5 -5
  31. package/dist/run/cli/contribution.cjs.map +1 -1
  32. package/dist/run/host/index.cjs +14 -3
  33. package/dist/run/host/index.cjs.map +1 -1
  34. package/dist/run/host/index.d.cts +2 -2
  35. package/dist/run/host/index.d.mts +2 -2
  36. package/dist/run/host/index.d.ts +2 -2
  37. package/dist/run/host/lifecycle-adapter.cjs +12 -12
  38. package/dist/run/host/lifecycle-adapter.cjs.map +1 -1
  39. package/dist/run/host/runtime.cjs +22 -22
  40. package/dist/run/host/runtime.cjs.map +1 -1
  41. package/dist/run/host/runtime.d.cts +11 -2
  42. package/dist/run/host/runtime.d.mts +11 -2
  43. package/dist/run/host/runtime.d.ts +11 -2
  44. package/dist/run/host/runtime.js +2 -2
  45. package/dist/run/host/types.cjs.map +1 -1
  46. package/dist/run/host/types.d.cts +4 -5
  47. package/dist/run/host/types.d.mts +4 -5
  48. package/dist/run/host/types.d.ts +4 -5
  49. package/dist/runner/assert-first-bridge.cjs +78 -3
  50. package/dist/runner/assert-first-bridge.cjs.map +1 -1
  51. package/dist/runner/assert-first-bridge.d.cts +11 -1
  52. package/dist/runner/assert-first-bridge.d.mts +11 -1
  53. package/dist/runner/assert-first-bridge.d.ts +11 -1
  54. package/dist/runner/attempt.cjs +77 -67
  55. package/dist/runner/attempt.cjs.map +1 -1
  56. package/dist/sandbox/backend.cjs.map +1 -1
  57. package/dist/sandbox/backend.d.cts +2 -2
  58. package/dist/sandbox/backend.d.mts +2 -2
  59. package/dist/sandbox/backend.d.ts +2 -2
  60. package/dist/sandbox/index.cjs.map +1 -1
  61. package/dist/sandbox/index.d.cts +1 -0
  62. package/dist/sandbox/index.d.mts +1 -0
  63. package/dist/sandbox/index.d.ts +1 -0
  64. package/dist/sandbox/layer.cjs.map +1 -1
  65. package/dist/sandbox/layer.d.cts +3 -3
  66. package/dist/sandbox/layer.d.mts +3 -3
  67. package/dist/sandbox/layer.d.ts +3 -3
  68. package/dist/sandbox/runtime.cjs.map +1 -1
  69. package/dist/sandbox/types.cjs.map +1 -1
  70. package/dist/sandbox/types.d.cts +2 -0
  71. package/dist/sandbox/types.d.mts +2 -0
  72. package/dist/sandbox/types.d.ts +2 -0
  73. package/dist/show/render.cjs +1 -0
  74. package/dist/show/render.cjs.map +1 -1
  75. package/dist/terminal/blocks.cjs +3 -5
  76. package/dist/terminal/blocks.cjs.map +1 -1
  77. package/dist/view/app-dist/.vite/manifest.json +3 -76
  78. package/dist/view/app-dist/assets/index-C6GQwHEF.js +63 -0
  79. package/dist/view/app-dist/assets/{quality-cost-scatter-B5wDa_F1.js → quality-cost-scatter-CSiMLelf.js} +5 -5
  80. package/dist/view/app-dist/index.html +1 -2
  81. package/dist/view/server.cjs +4 -3
  82. package/dist/view/server.cjs.map +1 -1
  83. package/docs-site/zh/README.md +2 -2
  84. package/docs-site/zh/tutorials/agent-feedback-loop.mdx +8 -5
  85. package/docs-site/zh/tutorials/agent-onboarding.mdx +5 -3
  86. package/package.json +1 -1
  87. package/dist/view/app-dist/assets/AttemptDialog-76dX1VQq.js +0 -41
  88. package/dist/view/app-dist/assets/AttemptRoute-DRHVh2JA.js +0 -4
  89. package/dist/view/app-dist/assets/ResultsPage-9CSI8dvZ.js +0 -2
  90. package/dist/view/app-dist/assets/RunPage-BUF0REv7.js +0 -1
  91. package/dist/view/app-dist/assets/TableContentView-_Sbg5wDr.js +0 -3
  92. package/dist/view/app-dist/assets/index-BGr_6pGY.js +0 -19
  93. package/dist/view/app-dist/assets/jsx-runtime-BnHLaUks.js +0 -1
  94. package/dist/view/app-dist/assets/useSuspenseQuery-D3W8Uy33.js +0 -1
@@ -5,8 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <meta name="referrer" content="no-referrer" />
7
7
  <title>NiceEval Insight</title>
8
- <script type="module" crossorigin src="/assets/index-BGr_6pGY.js"></script>
9
- <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-BnHLaUks.js">
8
+ <script type="module" crossorigin src="/assets/index-C6GQwHEF.js"></script>
10
9
  <link rel="stylesheet" crossorigin href="/assets/index-pLVwj9I4.css">
11
10
  </head>
12
11
  <body>
@@ -9,7 +9,7 @@ const node_path_1 = require("node:path");
9
9
  const effect_1 = require("effect");
10
10
  const inspection_host_ts_1 = require("./inspection-host.cjs");
11
11
  const http_protocol_ts_1 = require("./http-protocol.cjs");
12
- const SESSION_COOKIE = "niceeval_view_session";
12
+ const SESSION_COOKIE_PREFIX = "niceeval_view_session_";
13
13
  const CONTENT_SECURITY_POLICY = "default-src 'none'; script-src 'self'; connect-src 'self'; style-src-elem 'self' 'sha256-nzTgYzXYDNe6BAHiiI7NNlfK8n/auuOAhh2t92YvuXo='; style-src-attr 'unsafe-inline'; base-uri 'none'; frame-ancestors 'none'";
14
14
  const COMMON_HEADERS = Object.freeze({
15
15
  "cache-control": "private, no-store",
@@ -68,6 +68,7 @@ function makeResources(initial, refreshEnabled) {
68
68
  server: undefined,
69
69
  sockets,
70
70
  credential: (0, node_crypto_1.randomBytes)(32).toString("base64url"),
71
+ sessionCookie: `${SESSION_COOKIE_PREFIX}${(0, node_crypto_1.randomBytes)(16).toString("hex")}`,
71
72
  session: (0, node_crypto_1.randomBytes)(32).toString("base64url"),
72
73
  state: { current: initial, leases: new Map([[initial.generationId, 0]]), retired: new Set() },
73
74
  refreshEnabled,
@@ -323,7 +324,7 @@ function exchangeCredential(resources, request, response) {
323
324
  }
324
325
  resources.credentialConsumed = true;
325
326
  send(response, 204, "", "text/plain; charset=utf-8", {
326
- "set-cookie": `${SESSION_COOKIE}=${resources.session}; Path=/; HttpOnly; SameSite=Strict`,
327
+ "set-cookie": `${resources.sessionCookie}=${resources.session}; Path=/; HttpOnly; SameSite=Strict`,
327
328
  });
328
329
  });
329
330
  request.once("error", () => {
@@ -332,7 +333,7 @@ function exchangeCredential(resources, request, response) {
332
333
  });
333
334
  }
334
335
  function authorizedSession(resources, request) {
335
- const session = cookieValue(request.headers.cookie, SESSION_COOKIE);
336
+ const session = cookieValue(request.headers.cookie, resources.sessionCookie);
336
337
  return session !== undefined && safeEqual(session, resources.session);
337
338
  }
338
339
  function sameOrigin(resources, request, required = false) {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["server.ts"],"names":[],"mappings":";;AAuDA,wCAqCC;AA5FD,6CAA2D;AAC3D,qCAA2C;AAC3C,+CAAyC;AACzC,yCAAiG;AAEjG,yCAAkD;AAClD,mCAAgD;AAEhD,6DAA6D;AAC7D,yDAAkL;AAiClL,MAAM,cAAc,GAAG,uBAAuB,CAAC;AAC/C,MAAM,uBAAuB,GAAG,iNAAiN,CAAC;AAClP,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IACjC,eAAe,EAAE,mBAAmB;IACpC,MAAM,EAAE,UAAU;IAClB,yBAAyB,EAAE,uBAAuB;IAClD,iBAAiB,EAAE,aAAa;IAChC,wBAAwB,EAAE,SAAS;CACtC,CAAC,CAAC;AACH,MAAM,cAAc,GAAG,8QAA8Q,CAAC;AACtS,MAAM,gBAAgB,GAAG,ubAAub,CAAC;AACjd,MAAM,oBAAoB,GAAG,eAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,eAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC1E,8FAA8F;AAC9F,SAAgB,cAAc,CAAC,KAK9B;IACG,OAAO,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACvB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,eAAM,CAAC,cAAc,CAAC,eAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QAC/I,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACzD,SAAS,CAAC,SAAS,GAAG,aAAa,IAAI,EAAE,CAAC;QAC1C,SAAS,CAAC,MAAM,GAAG,UAAU,SAAS,CAAC,SAAS,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,MAAM,CAAC;YACjB,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,QAAQ,EAAE,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC;YACnF,gBAAgB,EAAE,CAAC,UAA0B,EAAQ,EAAE;gBACnD,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;oBACnB,KAAK,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;oBAC7C,OAAO;gBACX,CAAC;gBACD,IAAI,UAAU,CAAC,YAAY,KAAK,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY;oBAChE,UAAU,CAAC,YAAY,KAAK,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY;oBACnE,OAAO;gBACX,IAAI,UAAU,CAAC,oBAAoB,KAAK,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC;oBACnF,IAAI,SAAS,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS;wBACvC,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oBAC1D,SAAS,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;oBACtC,KAAK,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;oBAC7C,OAAO;gBACX,CAAC;gBACD,IAAI,SAAS,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS;oBACvC,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC1D,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;gBACvD,SAAS,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC;YAC3C,CAAC;YACD,KAAK,EAAE,cAAc,CAAC,SAAS,CAAC;SACnC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AACD,SAAS,YAAY,CAAC,MAAc,EAAE,UAAkB,EAAE,MAAyB;IAC/E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,MAAM;QACtB,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC1C,GAAG,CAAC,IAAI,GAAG,UAAU,CAAC;IACtB,OAAO,GAAG,CAAC,IAAI,CAAC;AACpB,CAAC;AACD,SAAS,aAAa,CAAC,OAAuB,EAAE,cAAuB;IACnE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,SAAS,GAAoB;QAC/B,MAAM,EAAE,SAA8B;QACtC,OAAO;QACP,UAAU,EAAE,IAAA,yBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;QACjD,OAAO,EAAE,IAAA,yBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC9C,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE;QAC7F,cAAc;QACd,kBAAkB,EAAE,KAAK;QACzB,MAAM,EAAE,KAAK;QACb,cAAc,EAAE,CAAC;QACjB,OAAO,EAAE,IAAI,GAAG,EAAE;KACrB,CAAC;IACF,SAAS,CAAC,MAAM,GAAG,IAAA,wBAAY,EAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;QAClD,SAAS,CAAC,cAAc,IAAI,CAAC,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACxB,SAAS,CAAC,cAAc,IAAI,CAAC,CAAC;YAC9B,IAAI,SAAS,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;gBACjC,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,OAAO;oBACnC,OAAO,EAAE,CAAC;gBACd,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAC9B,CAAC;QACL,CAAC,CAAC,CAAC;QACH,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;QACzC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,CAAC;AACrB,CAAC;AACD,SAAS,YAAY,CAAC,SAA0B,EAAE,OAAwB,EAAE,QAAwB;IAChG,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1F,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,mBAAmB,CAAC,CAAC;QAC7C,OAAO;IACX,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;QAC/C,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,6BAA6B,CAAC,CAAC;QACvD,OAAO;IACX,CAAC;IACD,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAChC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;QACvC,OAAO;IACX,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,oBAAoB,EAAE,CAAC;QACxC,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACjD,OAAO;IACX,CAAC;IACD,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG,EAAE,CAAC;YAClF,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;QACrG,CAAC;aACI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,yBAAyB,EAAE,CAAC;YAC7G,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,EAAE,gCAAgC,EAAE;gBACrG,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;aAChE,CAAC,CAAC;QACP,CAAC;aACI,CAAC;YACF,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,0BAA0B,CAAC,CAAC;QACxD,CAAC;QACD,OAAO;IACX,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;QAClC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,+BAA+B,CAAC,CAAC;QACzD,OAAO;IACX,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,uBAAuB,EAAE,CAAC;QAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK;YACxB,OAAO,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC7C,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACxE,OAAO;IACX,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,+BAA+B,EAAE,CAAC;QACnD,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM;YACzB,OAAO,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9C,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACrG,OAAO;IACX,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,8BAA8B,EAAE,CAAC;QAClD,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM;YACzB,OAAO,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC;YAC7B,OAAO;QACX,KAAK,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC/C,OAAO;IACX,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,uBAAuB,EAAE,CAAC;QAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM;YACzB,OAAO,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC;YAC7B,OAAO;QACX,KAAK,eAAe,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnD,OAAO;IACX,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QACxD,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,oBAAoB,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACtE,OAAO;IACX,CAAC;IACD,KAAK,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAC/F,IAAI,CAAC,QAAQ,CAAC,WAAW;YACrB,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;;YAEtF,QAAQ,CAAC,OAAO,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACP,CAAC;AACD,SAAS,UAAU,CAAC,SAA0B,EAAE,UAA0B;IACtE,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,YAAY,EAAE,UAAU,CAAC,YAAY;QACrC,oBAAoB,EAAE,UAAU,CAAC,oBAAoB;QACrD,gBAAgB,EAAE,SAAS,CAAC,cAAc;QAC1C,KAAK,EAAE,UAAU,CAAC,YAAY,KAAK,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,IAAI,SAAS,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS;KACrH,CAAC,CAAC;AACP,CAAC;AACD,KAAK,UAAU,WAAW,CAAC,SAA0B,EAAE,OAAwB,EAAE,QAAwB;IACrG,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI,CAAC,EAAE;QACR,OAAO,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,IAAA,gDAA6B,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1D,IAAI,eAAM,CAAC,SAAS,CAAC,OAAO,CAAC;QACzB,OAAO,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;IAC5C,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QACrF,OAAO,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,eAAe,CAAC,uBAAuB,EAAE,iDAAiD,CAAC,CAAC,CAAC;IAChI,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;IACxC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;IACpC,SAAS,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IACtC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5G,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAC9D,CAAC;AACD,KAAK,UAAU,eAAe,CAAC,SAA0B,EAAE,OAAwB,EAAE,QAAwB;IACzG,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI,CAAC,EAAE;QACR,OAAO,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,IAAA,8CAA2B,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxD,IAAI,eAAM,CAAC,SAAS,CAAC,OAAO,CAAC;QACzB,OAAO,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3E,IAAI,UAAU,KAAK,SAAS;QACxB,OAAO,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,eAAe,CAAC,2BAA2B,EAAE,4CAA4C,CAAC,CAAC,CAAC;IAC/H,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACpC,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAA,0CAAqB,EAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAClF,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IACD,MAAM,CAAC;QACH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC;YAClC,IAAI,EAAE,wBAAwB,EAAE,MAAM,EAAE,wDAAwD,EAAE,UAAU,EAAE,OAAO;SACxF,CAAC,CAAC,CAAC;IACxC,CAAC;YACO,CAAC;QACL,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC;AACL,CAAC;AACD,KAAK,UAAU,UAAU,CAAC,UAA0B,EAAE,QAAgB,EAAE,OAAwB,EAAE,QAAwB;IACtH,MAAM,IAAI,GAAG,UAAU,CAAC;IACxB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7E,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAC1C,OAAO;IACX,CAAC;IACD,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE;QACpB,cAAc,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QACpC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QACnC,GAAG,cAAc;KACpB,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC5B,QAAQ,CAAC,GAAG,EAAE,CAAC;QACf,OAAO;IACX,CAAC;IACD,MAAM,MAAM,GAAG,IAAA,0BAAgB,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACzD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AACD,KAAK,UAAU,SAAS,CAAC,OAAe,EAAE,QAAgB,EAAE,MAA0B;IAIlF,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,QAAQ,KAAK,SAAS;QACtB,OAAO,SAAS,CAAC;IACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC9D,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACjD,IAAI,KAAK,KAAK,SAAS;QACnB,OAAO,KAAK,CAAC;IACjB,IAAI,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAA,mBAAO,EAAC,KAAK,CAAC,KAAK,EAAE;QAC9F,OAAO,SAAS,CAAC;IACrB,OAAO,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAC/C,CAAC;AACD,SAAS,gBAAgB,CAAC,QAAgB;IACtC,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACD,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,CAAC;QACH,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAChF,OAAO,SAAS,CAAC;IACrB,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI,CAAC;QAC1E,OAAO,SAAS,CAAC;IACrB,OAAO,QAAQ,CAAC;AACpB,CAAC;AACD,KAAK,UAAU,YAAY,CAAC,OAAe,EAAE,QAAgB;IAIzD,MAAM,IAAI,GAAG,IAAA,mBAAO,EAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAA,mBAAO,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,eAAG,EAAE,CAAC;QACjC,OAAO,SAAS,CAAC;IACrB,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAA,gBAAK,EAAC,IAAI,CAAC,CAAC;QACnC,OAAO,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;YAClD,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC9C,CAAC,CAAC,SAAS,CAAC;IACpB,CAAC;IACD,OAAO,KAAK,EAAE,CAAC;QACX,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,QAAQ;YACtF,OAAO,SAAS,CAAC;QACrB,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC;AACD,SAAS,kBAAkB,CAAC,SAA0B,EAAE,OAAwB,EAAE,QAAwB;IACtG,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC5B,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,oBAAoB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACjE,OAAO;IACX,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;QACxC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,+BAA+B,CAAC,CAAC;QACzD,OAAO;IACX,CAAC;IACD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;QACjC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC;QAC1B,IAAI,KAAK,GAAG,IAAI;YACZ,OAAO,CAAC,OAAO,EAAE,CAAC;;YAElB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;QACrB,IAAI,KAAK,GAAG,IAAI;YACZ,OAAO;QACX,IAAI,KAAc,CAAC;QACnB,IAAI,CAAC;YACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAY,CAAC;QAC1E,CAAC;QACD,MAAM,CAAC;YACH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,+BAA+B,CAAC,CAAC;YACzD,OAAO;QACX,CAAC;QACD,MAAM,OAAO,GAAG,eAAM,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QACvG,IAAI,eAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,+BAA+B,CAAC,CAAC;YACzD,OAAO;QACX,CAAC;QACD,IAAI,SAAS,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/F,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,uCAAuC,CAAC,CAAC;YACjE,OAAO;QACX,CAAC;QACD,SAAS,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACpC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,2BAA2B,EAAE;YACjD,YAAY,EAAE,GAAG,cAAc,IAAI,SAAS,CAAC,OAAO,qCAAqC;SAC5F,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;QACvB,IAAI,CAAC,QAAQ,CAAC,WAAW;YACrB,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,2BAA2B,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACP,CAAC;AACD,SAAS,iBAAiB,CAAC,SAA0B,EAAE,OAAwB;IAC3E,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACpE,OAAO,OAAO,KAAK,SAAS,IAAI,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;AAC1E,CAAC;AACD,SAAS,UAAU,CAAC,SAA0B,EAAE,OAAwB,EAAE,QAAQ,GAAG,KAAK;IACtF,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;IACtC,IAAI,MAAM,KAAK,SAAS;QACpB,OAAO,MAAM,KAAK,SAAS,CAAC,MAAM,CAAC;IACvC,IAAI,QAAQ;QACR,OAAO,KAAK,CAAC;IACjB,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACpD,OAAO,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,MAAM,CAAC;AAC1F,CAAC;AACD,SAAS,UAAU,CAAC,OAAwB;IACxC,IAAI,CAAC;QACD,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,CAAC;QACH,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC;AACD,SAAS,WAAW,CAAC,MAA0B,EAAE,IAAY;IACzD,IAAI,MAAM,KAAK,SAAS;QACpB,OAAO,SAAS,CAAC;IACrB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,SAAS,KAAK,IAAI;YAClB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AACD,SAAS,SAAS,CAAC,IAAY,EAAE,KAAa;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,OAAO,SAAS,CAAC,UAAU,KAAK,UAAU,CAAC,UAAU,IAAI,IAAA,6BAAe,EAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AACpG,CAAC;AACD,SAAS,MAAM,CAAC,MAAc,EAAE,IAAY;IACxC,OAAO,eAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,GAAS,EAAE;YACvB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACzC,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,CAAC,KAAY,EAAQ,EAAE;YACnC,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,eAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,GAAS,EAAE;YAC3B,OAAO,EAAE,CAAC;YACV,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAClD,CAAC,CAAC,eAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,kCAAkC,CAAC,CAAC;gBACtE,CAAC,CAAC,eAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACjC,OAAO,eAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACP,CAAC;AACD,SAAS,cAAc,CAAC,SAA0B;IAC9C,OAAO,eAAM,CAAC,OAAO,CAAC,GAAG,EAAE;QACvB,IAAI,SAAS,CAAC,MAAM;YAChB,OAAO,eAAM,CAAC,IAAI,CAAC;QACvB,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;QACxB,OAAO,eAAM,CAAC,QAAQ,CAAO,CAAC,MAAM,EAAE,EAAE;YACpC,qEAAqE;YACrE,uEAAuE;YACvE,qEAAqE;YACrE,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,MAAM,MAAM,GAAG,GAAS,EAAE;gBACtB,IAAI,SAAS;oBACT,OAAO;gBACX,SAAS,GAAG,IAAI,CAAC;gBACjB,MAAM,WAAW,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC3E,IAAI,SAAS,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC1C,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC7E,CAAC;gBACD,KAAK,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;oBACvC,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,OAAO;wBAClC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACrB,MAAM,CAAC,eAAM,CAAC,IAAI,CAAC,CAAC;gBACxB,CAAC,CAAC,CAAC;YACP,CAAC,CAAC;YACF,IAAI,CAAC;gBACD,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;oBACxB,IAAI,SAAS,CAAC,cAAc,KAAK,CAAC;wBAC9B,MAAM,EAAE,CAAC;;wBAET,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACtC,CAAC,CAAC,CAAC;YACP,CAAC;YACD,MAAM,CAAC;gBACH,MAAM,EAAE,CAAC;YACb,CAAC;YACD,SAAS,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;YACxC,mEAAmE;YACnE,qEAAqE;YACrE,4DAA4D;YAC5D,SAAS,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;YACvC,OAAO,eAAM,CAAC,IAAI,CAAC;QACvB,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AACD,SAAS,cAAc,CAAC,SAA0B,EAAE,EAAU;IAC1D,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,KAAK,EAAE;QAC3C,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;IACnC,IAAI,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,KAAK,EAAE;QAC9C,OAAO,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;IACrC,OAAO,SAAS,CAAC;AACrB,CAAC;AACD,SAAS,YAAY,CAAC,SAA0B,EAAE,UAA0B;IACxE,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACxH,CAAC;AACD,SAAS,YAAY,CAAC,SAA0B,EAAE,UAA0B;IACxE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9F,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAC/D,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAC3C,CAAC;AACD,SAAS,eAAe,CAAC,SAA0B,EAAE,UAA0B;IAC3E,IAAI,UAAU,CAAC,YAAY,KAAK,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY;QAChE,UAAU,CAAC,YAAY,KAAK,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY;QACnE,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QACvD,KAAK,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACjD,CAAC;AACL,CAAC;AACD,SAAS,eAAe,CAAC,SAA0B,EAAE,UAA0B;IAC3E,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACnE,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QACvD,KAAK,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACjD,CAAC;AACL,CAAC;AACD,SAAS,gBAAgB,CAAC,SAA0B,EAAE,UAA0B;IAC5E,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC;QACpD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IACrD,OAAO,UAAU,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AACtD,CAAC;AACD,SAAS,SAAS,CAAC,OAAwB,EAAE,QAAwB;IACjE,IAAI,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,kBAAkB;QACtD,OAAO,IAAI,CAAC;IAChB,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,cAAc,CAAC,gDAAgD,CAAC,CAAC,CAAC;IAC1F,OAAO,KAAK,CAAC;AACjB,CAAC;AASD,SAAS,YAAY,CAAC,OAAwB;IAC1C,OAAO,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;QAC/B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,KAAe,EAAQ,EAAE;YACrC,IAAI,OAAO;gBACP,OAAO;YACX,OAAO,GAAG,IAAI,CAAC;YACf,WAAW,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACjC,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC;YACzB,IAAI,IAAI,GAAG,uCAAoB;gBAC3B,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC;;gBAEvF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;YACrB,IAAI,OAAO;gBACP,OAAO;YACX,IAAI,CAAC;gBACD,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAY,EAAE,CAAC,CAAC;YAC/F,CAAC;YACD,MAAM,CAAC;gBACH,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;YAC1F,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,CAAC,iCAAiC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9H,CAAC,CAAC,CAAC;AACP,CAAC;AACD,SAAS,cAAc,CAAC,MAAc;IAClC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC;AACtH,CAAC;AACD,SAAS,eAAe,CAAC,IAA2D,EAAE,MAAc;IAChG,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAC,CAAC;AAC7E,CAAC;AACD,SAAS,cAAc,CAAC,MAAc;IAClC,OAAO,MAAM,CAAC,OAAO,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC/E,CAAC;AACD,SAAS,gBAAgB,CAAC,QAAwB,EAAE,KAAa;IAC7D,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,oBAAoB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC7D,CAAC;AACD,SAAS,QAAQ,CAAC,QAAwB,EAAE,MAAc,EAAE,KAAc;IACtE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAC,CAAC;AACtE,CAAC;AACD,SAAS,QAAQ,CAAC,QAAwB,EAAE,MAAc,EAAE,IAAY,EAAE,UAA4C,EAAE;IACpH,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,EAAE,OAAO,CAAC,CAAC;AACvE,CAAC;AACD,SAAS,IAAI,CAAC,QAAwB,EAAE,MAAc,EAAE,IAAyB,EAAE,WAAmB,EAAE,UAA4C,EAAE;IAClJ,IAAI,QAAQ,CAAC,SAAS;QAClB,OAAO;IACX,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE;QACvB,cAAc,EAAE,WAAW;QAC3B,gBAAgB,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QAC9F,GAAG,cAAc;QACjB,GAAG,OAAO;KACb,CAAC,CAAC;IACH,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC;AACD,SAAS,SAAS,CAAC,IAAY;IAC3B,QAAQ,IAAA,mBAAO,EAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QAClC,KAAK,OAAO,CAAC,CAAC,OAAO,0BAA0B,CAAC;QAChD,KAAK,MAAM,CAAC,CAAC,OAAO,yBAAyB,CAAC;QAC9C,KAAK,KAAK,CAAC;QACX,KAAK,MAAM,CAAC,CAAC,OAAO,gCAAgC,CAAC;QACrD,KAAK,OAAO,CAAC,CAAC,OAAO,kBAAkB,CAAC;QACxC,KAAK,OAAO,CAAC,CAAC,OAAO,iCAAiC,CAAC;QACvD,KAAK,MAAM,CAAC,CAAC,OAAO,eAAe,CAAC;QACpC,KAAK,MAAM,CAAC,CAAC,OAAO,WAAW,CAAC;QAChC,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO,CAAC,CAAC,OAAO,YAAY,CAAC;QAClC,KAAK,OAAO,CAAC,CAAC,OAAO,YAAY,CAAC;QAClC,KAAK,MAAM,CAAC,CAAC,OAAO,cAAc,CAAC;QACnC,KAAK,QAAQ,CAAC,CAAC,OAAO,YAAY,CAAC;QACnC,OAAO,CAAC,CAAC,OAAO,0BAA0B,CAAC;IAC/C,CAAC;AACL,CAAC;AACD,SAAS,SAAS,CAAC,SAAuC,EAAE,MAAc;IACtE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,oBAA6B,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;AACrF,CAAC","sourcesContent":["import { randomBytes, timingSafeEqual } from \"node:crypto\";\nimport { createReadStream } from \"node:fs\";\nimport { lstat } from \"node:fs/promises\";\nimport { createServer, type IncomingMessage, type Server, type ServerResponse } from \"node:http\";\nimport type { Socket } from \"node:net\";\nimport { extname, resolve, sep } from \"node:path\";\nimport { Effect, Result, Schema } from \"effect\";\nimport type * as Scope from \"effect/Scope\";\nimport { inspectViewGeneration } from \"./inspection-host.ts\";\nimport { VIEW_HTTP_BODY_LIMIT, decodeGenerationCommitRequest, decodeViewInspectionRequest, type ViewGenerationDescriptor, type ViewHttpErrorDocument, } from \"./http-protocol.ts\";\nimport type { ViewGeneration } from \"./revision.ts\";\nexport interface ViewServerError {\n readonly code: \"view-server-failed\";\n readonly operation: \"listen\" | \"close\";\n readonly reason: string;\n}\nexport interface ViewServer {\n readonly origin: string;\n readonly readyUrl: string;\n readonly publishCandidate: (generation: ViewGeneration) => void;\n readonly close: Effect.Effect<void>;\n}\ninterface ServerState {\n current: ViewGeneration;\n candidate?: ViewGeneration;\n readonly leases: Map<string, number>;\n readonly retired: Set<string>;\n}\ninterface ServerResources {\n server: Server;\n readonly sockets: Set<Socket>;\n readonly credential: string;\n readonly session: string;\n readonly state: ServerState;\n readonly refreshEnabled: boolean;\n authority?: string;\n origin?: string;\n credentialConsumed: boolean;\n closed: boolean;\n activeRequests: number;\n readonly drained: Set<() => void>;\n}\nconst SESSION_COOKIE = \"niceeval_view_session\";\nconst CONTENT_SECURITY_POLICY = \"default-src 'none'; script-src 'self'; connect-src 'self'; style-src-elem 'self' 'sha256-nzTgYzXYDNe6BAHiiI7NNlfK8n/auuOAhh2t92YvuXo='; style-src-attr 'unsafe-inline'; base-uri 'none'; frame-ancestors 'none'\";\nconst COMMON_HEADERS = Object.freeze({\n \"cache-control\": \"private, no-store\",\n pragma: \"no-cache\",\n \"content-security-policy\": CONTENT_SECURITY_POLICY,\n \"referrer-policy\": \"no-referrer\",\n \"x-content-type-options\": \"nosniff\",\n});\nconst BOOTSTRAP_HTML = \"<!doctype html><html><head><meta charset=\\\"utf-8\\\"><meta name=\\\"referrer\\\" content=\\\"no-referrer\\\"><title>Opening NiceEval view</title><script src=\\\"/_niceeval/bootstrap.js\\\" defer></script></head><body><main role=\\\"status\\\">Opening NiceEval view…</main></body></html>\";\nconst BOOTSTRAP_SCRIPT = \"(()=>{const credential=location.hash.slice(1);history.replaceState(null,\\\"\\\",location.pathname+location.search);fetch(\\\"/_niceeval/session\\\",{method:\\\"POST\\\",credentials:\\\"same-origin\\\",headers:{\\\"content-type\\\":\\\"application/json\\\"},body:JSON.stringify({credential})}).then(response=>{if(!response.ok)throw new Error(\\\"unauthorized\\\");location.reload()}).catch(()=>{document.body.textContent=\\\"NiceEval view authorization failed\\\"})})()\";\nconst SessionRequestSchema = Schema.Struct({ credential: Schema.String });\n/** Scope-owned, loopback-only transport for Vite assets and a validated Record generation. */\nexport function openViewServer(input: {\n readonly initial: ViewGeneration;\n readonly port: number;\n readonly refreshEnabled?: boolean;\n readonly initialRunIds: readonly string[];\n}): Effect.Effect<ViewServer, ViewServerError, Scope.Scope> {\n return Effect.gen(function* () {\n const resources = yield* Effect.acquireRelease(Effect.sync(() => makeResources(input.initial, input.refreshEnabled === true)), closeResources);\n const port = yield* listen(resources.server, input.port);\n resources.authority = `127.0.0.1:${port}`;\n resources.origin = `http://${resources.authority}`;\n return Object.freeze({\n origin: resources.origin,\n readyUrl: viewEntryUrl(resources.origin, resources.credential, input.initialRunIds),\n publishCandidate: (generation: ViewGeneration): void => {\n if (resources.closed) {\n void retireGeneration(resources, generation);\n return;\n }\n if (generation.generationId === resources.state.current.generationId ||\n generation.generationId === resources.state.candidate?.generationId)\n return;\n if (generation.sourceCutoffIdentity === resources.state.current.sourceCutoffIdentity) {\n if (resources.state.candidate !== undefined)\n retireCandidate(resources, resources.state.candidate);\n resources.state.candidate = undefined;\n void retireGeneration(resources, generation);\n return;\n }\n if (resources.state.candidate !== undefined)\n retireCandidate(resources, resources.state.candidate);\n resources.state.leases.set(generation.generationId, 0);\n resources.state.candidate = generation;\n },\n close: closeResources(resources),\n });\n });\n}\nfunction viewEntryUrl(origin: string, credential: string, runIds: readonly string[]): string {\n const url = new URL(\"/\", origin);\n for (const runId of runIds)\n url.searchParams.append(\"run\", runId);\n url.hash = credential;\n return url.href;\n}\nfunction makeResources(initial: ViewGeneration, refreshEnabled: boolean): ServerResources {\n const sockets = new Set<Socket>();\n const resources: ServerResources = {\n server: undefined as unknown as Server,\n sockets,\n credential: randomBytes(32).toString(\"base64url\"),\n session: randomBytes(32).toString(\"base64url\"),\n state: { current: initial, leases: new Map([[initial.generationId, 0]]), retired: new Set() },\n refreshEnabled,\n credentialConsumed: false,\n closed: false,\n activeRequests: 0,\n drained: new Set(),\n };\n resources.server = createServer((request, response) => {\n resources.activeRequests += 1;\n response.once(\"close\", () => {\n resources.activeRequests -= 1;\n if (resources.activeRequests === 0) {\n for (const resolve of resources.drained)\n resolve();\n resources.drained.clear();\n }\n });\n serveRequest(resources, request, response);\n });\n resources.server.on(\"connection\", (socket) => {\n sockets.add(socket);\n socket.once(\"close\", () => sockets.delete(socket));\n });\n return resources;\n}\nfunction serveRequest(resources: ServerResources, request: IncomingMessage, response: ServerResponse): void {\n if (resources.closed || resources.authority === undefined || resources.origin === undefined) {\n sendText(response, 503, \"view is not ready\");\n return;\n }\n if (request.headers.host !== resources.authority) {\n sendText(response, 403, \"view host is not authorized\");\n return;\n }\n const url = requestUrl(request);\n if (url === undefined) {\n sendText(response, 400, \"bad request\");\n return;\n }\n if (url.pathname === \"/_niceeval/session\") {\n exchangeCredential(resources, request, response);\n return;\n }\n if (!authorizedSession(resources, request)) {\n if ((request.method === \"GET\" || request.method === \"HEAD\") && url.pathname === \"/\") {\n send(response, 200, request.method === \"HEAD\" ? \"\" : BOOTSTRAP_HTML, \"text/html; charset=utf-8\");\n }\n else if ((request.method === \"GET\" || request.method === \"HEAD\") && url.pathname === \"/_niceeval/bootstrap.js\") {\n send(response, 200, request.method === \"HEAD\" ? \"\" : BOOTSTRAP_SCRIPT, \"text/javascript; charset=utf-8\", {\n \"content-length\": String(Buffer.byteLength(BOOTSTRAP_SCRIPT)),\n });\n }\n else {\n sendText(response, 401, \"view session is required\");\n }\n return;\n }\n if (!sameOrigin(resources, request)) {\n sendText(response, 403, \"view origin is not authorized\");\n return;\n }\n if (url.pathname === \"/_niceeval/generation\") {\n if (request.method !== \"GET\")\n return methodNotAllowed(response, \"GET\");\n sendJson(response, 200, descriptor(resources, resources.state.current));\n return;\n }\n if (url.pathname === \"/_niceeval/generation/refresh\") {\n if (request.method !== \"POST\")\n return methodNotAllowed(response, \"POST\");\n sendJson(response, 200, descriptor(resources, resources.state.candidate ?? resources.state.current));\n return;\n }\n if (url.pathname === \"/_niceeval/generation/commit\") {\n if (request.method !== \"POST\")\n return methodNotAllowed(response, \"POST\");\n if (!exactJson(request, response))\n return;\n void serveCommit(resources, request, response);\n return;\n }\n if (url.pathname === \"/_niceeval/inspection\") {\n if (request.method !== \"POST\")\n return methodNotAllowed(response, \"POST\");\n if (!exactJson(request, response))\n return;\n void serveInspection(resources, request, response);\n return;\n }\n if (request.method !== \"GET\" && request.method !== \"HEAD\") {\n sendText(response, 405, \"method not allowed\", { allow: \"GET, HEAD\" });\n return;\n }\n void serveAsset(resources.state.current, url.pathname, request, response).catch((cause: unknown) => {\n if (!response.headersSent)\n sendText(response, 500, cause instanceof Error ? cause.message : \"view asset failed\");\n else\n response.destroy(cause instanceof Error ? cause : undefined);\n });\n}\nfunction descriptor(resources: ServerResources, generation: ViewGeneration): ViewGenerationDescriptor {\n return Object.freeze({\n generationId: generation.generationId,\n sourceCutoffIdentity: generation.sourceCutoffIdentity,\n refreshSupported: resources.refreshEnabled,\n stale: generation.generationId === resources.state.current.generationId && resources.state.candidate !== undefined,\n });\n}\nasync function serveCommit(resources: ServerResources, request: IncomingMessage, response: ServerResponse): Promise<void> {\n const body = await readJsonBody(request);\n if (!body.ok)\n return sendJson(response, body.status, body.error);\n const decoded = decodeGenerationCommitRequest(body.value);\n if (Result.isFailure(decoded))\n return sendJson(response, 400, requestInvalid(decoded.failure));\n const candidate = resources.state.candidate;\n if (candidate === undefined || candidate.generationId !== decoded.success.generationId) {\n return sendJson(response, 409, generationError(\"view-generation-stale\", \"The requested candidate is no longer available.\"));\n }\n const retired = resources.state.current;\n resources.state.current = candidate;\n resources.state.candidate = undefined;\n resources.state.leases.set(candidate.generationId, resources.state.leases.get(candidate.generationId) ?? 0);\n retireIfDrained(resources, retired);\n sendJson(response, 200, descriptor(resources, candidate));\n}\nasync function serveInspection(resources: ServerResources, request: IncomingMessage, response: ServerResponse): Promise<void> {\n const body = await readJsonBody(request);\n if (!body.ok)\n return sendJson(response, body.status, body.error);\n const decoded = decodeViewInspectionRequest(body.value);\n if (Result.isFailure(decoded))\n return sendJson(response, 400, requestInvalid(decoded.failure));\n const generation = findGeneration(resources, decoded.success.generationId);\n if (generation === undefined)\n return sendJson(response, 404, generationError(\"view-generation-not-found\", \"The requested generation is not available.\"));\n acquireLease(resources, generation);\n try {\n const document = await inspectViewGeneration(generation, decoded.success.request);\n sendJson(response, 200, document);\n }\n catch {\n sendJson(response, 500, Object.freeze({\n code: \"view-inspection-failed\", reason: \"Inspection could not be completed for this generation.\", correction: \"retry\",\n } satisfies ViewHttpErrorDocument));\n }\n finally {\n releaseLease(resources, generation);\n }\n}\nasync function serveAsset(generation: ViewGeneration, pathname: string, request: IncomingMessage, response: ServerResponse): Promise<void> {\n const data = generation;\n const file = await assetFile(data.appRoot, pathname, request.headers.accept);\n if (file === undefined) {\n sendText(response, 404, \"page not found\");\n return;\n }\n response.writeHead(200, {\n \"content-type\": mediaType(file.path),\n \"content-length\": String(file.size),\n ...COMMON_HEADERS,\n });\n if (request.method === \"HEAD\") {\n response.end();\n return;\n }\n const stream = createReadStream(file.path);\n stream.once(\"error\", (cause) => response.destroy(cause));\n stream.pipe(response);\n}\nasync function assetFile(appRoot: string, pathname: string, accept: string | undefined): Promise<{\n readonly path: string;\n readonly size: number;\n} | undefined> {\n const relative = safeRelativePath(pathname);\n if (relative === undefined)\n return undefined;\n const exact = relative.length === 0 ? \"index.html\" : relative;\n const found = await regularAsset(appRoot, exact);\n if (found !== undefined)\n return found;\n if (accept?.includes(\"text/html\") !== true || exact.startsWith(\"assets/\") || extname(exact) !== \"\")\n return undefined;\n return regularAsset(appRoot, \"index.html\");\n}\nfunction safeRelativePath(pathname: string): string | undefined {\n let decoded: string;\n try {\n decoded = decodeURIComponent(pathname);\n }\n catch {\n return undefined;\n }\n if (!decoded.startsWith(\"/\") || decoded.includes(\"\\\\\") || decoded.includes(\"\\u0000\"))\n return undefined;\n const relative = decoded.slice(1);\n if (relative.split(\"/\").some((segment) => segment === \".\" || segment === \"..\"))\n return undefined;\n return relative;\n}\nasync function regularAsset(appRoot: string, relative: string): Promise<{\n readonly path: string;\n readonly size: number;\n} | undefined> {\n const root = resolve(appRoot);\n const path = resolve(root, relative);\n if (!path.startsWith(`${root}${sep}`))\n return undefined;\n try {\n const metadata = await lstat(path);\n return metadata.isFile() && !metadata.isSymbolicLink()\n ? Object.freeze({ path, size: metadata.size })\n : undefined;\n }\n catch (cause) {\n if (typeof cause === \"object\" && cause !== null && Reflect.get(cause, \"code\") === \"ENOENT\")\n return undefined;\n throw cause;\n }\n}\nfunction exchangeCredential(resources: ServerResources, request: IncomingMessage, response: ServerResponse): void {\n if (request.method !== \"POST\") {\n sendText(response, 405, \"method not allowed\", { allow: \"POST\" });\n return;\n }\n if (!sameOrigin(resources, request, true)) {\n sendText(response, 403, \"view origin is not authorized\");\n return;\n }\n let bytes = 0;\n const chunks: Buffer[] = [];\n request.on(\"data\", (chunk: Buffer) => {\n bytes += chunk.byteLength;\n if (bytes > 1024)\n request.destroy();\n else\n chunks.push(chunk);\n });\n request.once(\"end\", () => {\n if (bytes > 1024)\n return;\n let value: unknown;\n try {\n value = JSON.parse(Buffer.concat(chunks).toString(\"utf8\")) as unknown;\n }\n catch {\n sendText(response, 400, \"credential request is invalid\");\n return;\n }\n const decoded = Schema.decodeUnknownResult(SessionRequestSchema, { onExcessProperty: \"error\" })(value);\n if (Result.isFailure(decoded)) {\n sendText(response, 400, \"credential request is invalid\");\n return;\n }\n if (resources.credentialConsumed || !safeEqual(decoded.success.credential, resources.credential)) {\n sendText(response, 401, \"credential is invalid or already used\");\n return;\n }\n resources.credentialConsumed = true;\n send(response, 204, \"\", \"text/plain; charset=utf-8\", {\n \"set-cookie\": `${SESSION_COOKIE}=${resources.session}; Path=/; HttpOnly; SameSite=Strict`,\n });\n });\n request.once(\"error\", () => {\n if (!response.headersSent)\n sendText(response, 400, \"credential request failed\");\n });\n}\nfunction authorizedSession(resources: ServerResources, request: IncomingMessage): boolean {\n const session = cookieValue(request.headers.cookie, SESSION_COOKIE);\n return session !== undefined && safeEqual(session, resources.session);\n}\nfunction sameOrigin(resources: ServerResources, request: IncomingMessage, required = false): boolean {\n const origin = request.headers.origin;\n if (origin !== undefined)\n return origin === resources.origin;\n if (required)\n return false;\n const fetchSite = request.headers[\"sec-fetch-site\"];\n return fetchSite === undefined || fetchSite === \"same-origin\" || fetchSite === \"none\";\n}\nfunction requestUrl(request: IncomingMessage): URL | undefined {\n try {\n return new URL(request.url ?? \"/\", \"http://127.0.0.1\");\n }\n catch {\n return undefined;\n }\n}\nfunction cookieValue(header: string | undefined, name: string): string | undefined {\n if (header === undefined)\n return undefined;\n for (const entry of header.split(\";\")) {\n const [candidate, ...value] = entry.trim().split(\"=\");\n if (candidate === name)\n return value.join(\"=\");\n }\n return undefined;\n}\nfunction safeEqual(left: string, right: string): boolean {\n const leftBytes = Buffer.from(left);\n const rightBytes = Buffer.from(right);\n return leftBytes.byteLength === rightBytes.byteLength && timingSafeEqual(leftBytes, rightBytes);\n}\nfunction listen(server: Server, port: number): Effect.Effect<number, ViewServerError> {\n return Effect.callback((resume) => {\n const cleanup = (): void => {\n server.off(\"error\", onError);\n server.off(\"listening\", onListening);\n };\n const onError = (cause: Error): void => {\n cleanup();\n resume(Effect.fail(viewError(\"listen\", cause.message)));\n };\n const onListening = (): void => {\n cleanup();\n const address = server.address();\n resume(address === null || typeof address === \"string\"\n ? Effect.fail(viewError(\"listen\", \"server did not expose a TCP port\"))\n : Effect.succeed(address.port));\n };\n server.once(\"error\", onError);\n server.once(\"listening\", onListening);\n server.listen(port, \"127.0.0.1\");\n return Effect.sync(cleanup);\n });\n}\nfunction closeResources(resources: ServerResources): Effect.Effect<void> {\n return Effect.suspend(() => {\n if (resources.closed)\n return Effect.void;\n resources.closed = true;\n return Effect.callback<void>((resume) => {\n // `listening` is still false during the small bind-in-flight window.\n // Calling close unconditionally also cancels that pending listener; an\n // ERR_SERVER_NOT_RUNNING callback is an already-closed success here.\n let finishing = false;\n const finish = (): void => {\n if (finishing)\n return;\n finishing = true;\n const retirements = [retireGeneration(resources, resources.state.current)];\n if (resources.state.candidate !== undefined) {\n retirements.push(retireGeneration(resources, resources.state.candidate));\n }\n void Promise.all(retirements).finally(() => {\n for (const socket of resources.sockets)\n socket.destroy();\n resume(Effect.void);\n });\n };\n try {\n resources.server.close(() => {\n if (resources.activeRequests === 0)\n finish();\n else\n resources.drained.add(finish);\n });\n }\n catch {\n finish();\n }\n resources.server.closeIdleConnections();\n // The browser may keep a polling connection alive while the CLI is\n // shutting down. Stop transport immediately; generation leases still\n // drain through each request's `finally` before retirement.\n resources.server.closeAllConnections();\n return Effect.void;\n });\n });\n}\nfunction findGeneration(resources: ServerResources, id: string): ViewGeneration | undefined {\n if (resources.state.current.generationId === id)\n return resources.state.current;\n if (resources.state.candidate?.generationId === id)\n return resources.state.candidate;\n return undefined;\n}\nfunction acquireLease(resources: ServerResources, generation: ViewGeneration): void {\n resources.state.leases.set(generation.generationId, (resources.state.leases.get(generation.generationId) ?? 0) + 1);\n}\nfunction releaseLease(resources: ServerResources, generation: ViewGeneration): void {\n const remaining = Math.max(0, (resources.state.leases.get(generation.generationId) ?? 1) - 1);\n resources.state.leases.set(generation.generationId, remaining);\n retireIfDrained(resources, generation);\n}\nfunction retireIfDrained(resources: ServerResources, generation: ViewGeneration): void {\n if (generation.generationId !== resources.state.current.generationId &&\n generation.generationId !== resources.state.candidate?.generationId &&\n resources.state.leases.get(generation.generationId) === 0) {\n resources.state.leases.delete(generation.generationId);\n void retireGeneration(resources, generation);\n }\n}\nfunction retireCandidate(resources: ServerResources, generation: ViewGeneration): void {\n if ((resources.state.leases.get(generation.generationId) ?? 0) === 0) {\n resources.state.leases.delete(generation.generationId);\n void retireGeneration(resources, generation);\n }\n}\nfunction retireGeneration(resources: ServerResources, generation: ViewGeneration): Promise<void> {\n if (resources.state.retired.has(generation.generationId))\n return Promise.resolve();\n resources.state.retired.add(generation.generationId);\n return generation.retire().catch(() => undefined);\n}\nfunction exactJson(request: IncomingMessage, response: ServerResponse): boolean {\n if (request.headers[\"content-type\"] === \"application/json\")\n return true;\n sendJson(response, 415, requestInvalid(\"Content-Type must be exactly application/json.\"));\n return false;\n}\ntype JsonBody = {\n readonly ok: true;\n readonly value: unknown;\n} | {\n readonly ok: false;\n readonly status: number;\n readonly error: ViewHttpErrorDocument;\n};\nfunction readJsonBody(request: IncomingMessage): Promise<JsonBody> {\n return new Promise((resolveBody) => {\n const chunks: Buffer[] = [];\n let size = 0;\n let settled = false;\n const finish = (value: JsonBody): void => {\n if (settled)\n return;\n settled = true;\n resolveBody(value);\n };\n request.on(\"data\", (chunk: Buffer) => {\n size += chunk.byteLength;\n if (size > VIEW_HTTP_BODY_LIMIT)\n finish({ ok: false, status: 413, error: requestInvalid(\"JSON body exceeds 64 KiB.\") });\n else\n chunks.push(chunk);\n });\n request.once(\"end\", () => {\n if (settled)\n return;\n try {\n finish({ ok: true, value: JSON.parse(Buffer.concat(chunks).toString(\"utf8\")) as unknown });\n }\n catch {\n finish({ ok: false, status: 400, error: requestInvalid(\"Body must be valid JSON.\") });\n }\n });\n request.once(\"error\", () => finish({ ok: false, status: 400, error: requestInvalid(\"Request body could not be read.\") }));\n });\n}\nfunction requestInvalid(reason: string): ViewHttpErrorDocument {\n return Object.freeze({ code: \"view-request-invalid\", reason: sanitizeReason(reason), correction: \"fix-request\" });\n}\nfunction generationError(code: \"view-generation-not-found\" | \"view-generation-stale\", reason: string): ViewHttpErrorDocument {\n return Object.freeze({ code, reason, correction: \"refresh-generation\" });\n}\nfunction sanitizeReason(reason: string): string {\n return reason.replace(/[\\u0000-\\u001f\\u007f-\\u009f]/gu, \" \").slice(0, 512);\n}\nfunction methodNotAllowed(response: ServerResponse, allow: string): void {\n sendText(response, 405, \"method not allowed\", { allow });\n}\nfunction sendJson(response: ServerResponse, status: number, value: unknown): void {\n send(response, status, JSON.stringify(value), \"application/json\");\n}\nfunction sendText(response: ServerResponse, status: number, body: string, headers: Readonly<Record<string, string>> = {}): void {\n send(response, status, body, \"text/plain; charset=utf-8\", headers);\n}\nfunction send(response: ServerResponse, status: number, body: string | Uint8Array, contentType: string, headers: Readonly<Record<string, string>> = {}): void {\n if (response.destroyed)\n return;\n response.writeHead(status, {\n \"content-type\": contentType,\n \"content-length\": String(typeof body === \"string\" ? Buffer.byteLength(body) : body.byteLength),\n ...COMMON_HEADERS,\n ...headers,\n });\n response.end(body);\n}\nfunction mediaType(path: string): string {\n switch (extname(path).toLowerCase()) {\n case \".html\": return \"text/html; charset=utf-8\";\n case \".css\": return \"text/css; charset=utf-8\";\n case \".js\":\n case \".mjs\": return \"text/javascript; charset=utf-8\";\n case \".wasm\": return \"application/wasm\";\n case \".json\": return \"application/json; charset=utf-8\";\n case \".svg\": return \"image/svg+xml\";\n case \".png\": return \"image/png\";\n case \".jpg\":\n case \".jpeg\": return \"image/jpeg\";\n case \".webp\": return \"image/webp\";\n case \".ico\": return \"image/x-icon\";\n case \".woff2\": return \"font/woff2\";\n default: return \"application/octet-stream\";\n }\n}\nfunction viewError(operation: ViewServerError[\"operation\"], reason: string): ViewServerError {\n return Object.freeze({ code: \"view-server-failed\" as const, operation, reason });\n}\n"]}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["server.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomBytes, timingSafeEqual } from \"node:crypto\";\nimport { createReadStream } from \"node:fs\";\nimport { lstat } from \"node:fs/promises\";\nimport { createServer, type IncomingMessage, type Server, type ServerResponse } from \"node:http\";\nimport type { Socket } from \"node:net\";\nimport { extname, resolve, sep } from \"node:path\";\nimport { Effect, Result, Schema } from \"effect\";\nimport type * as Scope from \"effect/Scope\";\nimport { inspectViewGeneration } from \"./inspection-host.ts\";\nimport { VIEW_HTTP_BODY_LIMIT, decodeGenerationCommitRequest, decodeViewInspectionRequest, type ViewGenerationDescriptor, type ViewHttpErrorDocument, } from \"./http-protocol.ts\";\nimport type { ViewGeneration } from \"./revision.ts\";\nexport interface ViewServerError {\n readonly code: \"view-server-failed\";\n readonly operation: \"listen\" | \"close\";\n readonly reason: string;\n}\nexport interface ViewServer {\n readonly origin: string;\n readonly readyUrl: string;\n readonly publishCandidate: (generation: ViewGeneration) => void;\n readonly close: Effect.Effect<void>;\n}\ninterface ServerState {\n current: ViewGeneration;\n candidate?: ViewGeneration;\n readonly leases: Map<string, number>;\n readonly retired: Set<string>;\n}\ninterface ServerResources {\n server: Server;\n readonly sockets: Set<Socket>;\n readonly credential: string;\n readonly sessionCookie: string;\n readonly session: string;\n readonly state: ServerState;\n readonly refreshEnabled: boolean;\n authority?: string;\n origin?: string;\n credentialConsumed: boolean;\n closed: boolean;\n activeRequests: number;\n readonly drained: Set<() => void>;\n}\nconst SESSION_COOKIE_PREFIX = \"niceeval_view_session_\";\nconst CONTENT_SECURITY_POLICY = \"default-src 'none'; script-src 'self'; connect-src 'self'; style-src-elem 'self' 'sha256-nzTgYzXYDNe6BAHiiI7NNlfK8n/auuOAhh2t92YvuXo='; style-src-attr 'unsafe-inline'; base-uri 'none'; frame-ancestors 'none'\";\nconst COMMON_HEADERS = Object.freeze({\n \"cache-control\": \"private, no-store\",\n pragma: \"no-cache\",\n \"content-security-policy\": CONTENT_SECURITY_POLICY,\n \"referrer-policy\": \"no-referrer\",\n \"x-content-type-options\": \"nosniff\",\n});\nconst BOOTSTRAP_HTML = \"<!doctype html><html><head><meta charset=\\\"utf-8\\\"><meta name=\\\"referrer\\\" content=\\\"no-referrer\\\"><title>Opening NiceEval view</title><script src=\\\"/_niceeval/bootstrap.js\\\" defer></script></head><body><main role=\\\"status\\\">Opening NiceEval view…</main></body></html>\";\nconst BOOTSTRAP_SCRIPT = \"(()=>{const credential=location.hash.slice(1);history.replaceState(null,\\\"\\\",location.pathname+location.search);fetch(\\\"/_niceeval/session\\\",{method:\\\"POST\\\",credentials:\\\"same-origin\\\",headers:{\\\"content-type\\\":\\\"application/json\\\"},body:JSON.stringify({credential})}).then(response=>{if(!response.ok)throw new Error(\\\"unauthorized\\\");location.reload()}).catch(()=>{document.body.textContent=\\\"NiceEval view authorization failed\\\"})})()\";\nconst SessionRequestSchema = Schema.Struct({ credential: Schema.String });\n/** Scope-owned, loopback-only transport for Vite assets and a validated Record generation. */\nexport function openViewServer(input: {\n readonly initial: ViewGeneration;\n readonly port: number;\n readonly refreshEnabled?: boolean;\n readonly initialRunIds: readonly string[];\n}): Effect.Effect<ViewServer, ViewServerError, Scope.Scope> {\n return Effect.gen(function* () {\n const resources = yield* Effect.acquireRelease(Effect.sync(() => makeResources(input.initial, input.refreshEnabled === true)), closeResources);\n const port = yield* listen(resources.server, input.port);\n resources.authority = `127.0.0.1:${port}`;\n resources.origin = `http://${resources.authority}`;\n return Object.freeze({\n origin: resources.origin,\n readyUrl: viewEntryUrl(resources.origin, resources.credential, input.initialRunIds),\n publishCandidate: (generation: ViewGeneration): void => {\n if (resources.closed) {\n void retireGeneration(resources, generation);\n return;\n }\n if (generation.generationId === resources.state.current.generationId ||\n generation.generationId === resources.state.candidate?.generationId)\n return;\n if (generation.sourceCutoffIdentity === resources.state.current.sourceCutoffIdentity) {\n if (resources.state.candidate !== undefined)\n retireCandidate(resources, resources.state.candidate);\n resources.state.candidate = undefined;\n void retireGeneration(resources, generation);\n return;\n }\n if (resources.state.candidate !== undefined)\n retireCandidate(resources, resources.state.candidate);\n resources.state.leases.set(generation.generationId, 0);\n resources.state.candidate = generation;\n },\n close: closeResources(resources),\n });\n });\n}\nfunction viewEntryUrl(origin: string, credential: string, runIds: readonly string[]): string {\n const url = new URL(\"/\", origin);\n for (const runId of runIds)\n url.searchParams.append(\"run\", runId);\n url.hash = credential;\n return url.href;\n}\nfunction makeResources(initial: ViewGeneration, refreshEnabled: boolean): ServerResources {\n const sockets = new Set<Socket>();\n const resources: ServerResources = {\n server: undefined as unknown as Server,\n sockets,\n credential: randomBytes(32).toString(\"base64url\"),\n sessionCookie: `${SESSION_COOKIE_PREFIX}${randomBytes(16).toString(\"hex\")}`,\n session: randomBytes(32).toString(\"base64url\"),\n state: { current: initial, leases: new Map([[initial.generationId, 0]]), retired: new Set() },\n refreshEnabled,\n credentialConsumed: false,\n closed: false,\n activeRequests: 0,\n drained: new Set(),\n };\n resources.server = createServer((request, response) => {\n resources.activeRequests += 1;\n response.once(\"close\", () => {\n resources.activeRequests -= 1;\n if (resources.activeRequests === 0) {\n for (const resolve of resources.drained)\n resolve();\n resources.drained.clear();\n }\n });\n serveRequest(resources, request, response);\n });\n resources.server.on(\"connection\", (socket) => {\n sockets.add(socket);\n socket.once(\"close\", () => sockets.delete(socket));\n });\n return resources;\n}\nfunction serveRequest(resources: ServerResources, request: IncomingMessage, response: ServerResponse): void {\n if (resources.closed || resources.authority === undefined || resources.origin === undefined) {\n sendText(response, 503, \"view is not ready\");\n return;\n }\n if (request.headers.host !== resources.authority) {\n sendText(response, 403, \"view host is not authorized\");\n return;\n }\n const url = requestUrl(request);\n if (url === undefined) {\n sendText(response, 400, \"bad request\");\n return;\n }\n if (url.pathname === \"/_niceeval/session\") {\n exchangeCredential(resources, request, response);\n return;\n }\n if (!authorizedSession(resources, request)) {\n if ((request.method === \"GET\" || request.method === \"HEAD\") && url.pathname === \"/\") {\n send(response, 200, request.method === \"HEAD\" ? \"\" : BOOTSTRAP_HTML, \"text/html; charset=utf-8\");\n }\n else if ((request.method === \"GET\" || request.method === \"HEAD\") && url.pathname === \"/_niceeval/bootstrap.js\") {\n send(response, 200, request.method === \"HEAD\" ? \"\" : BOOTSTRAP_SCRIPT, \"text/javascript; charset=utf-8\", {\n \"content-length\": String(Buffer.byteLength(BOOTSTRAP_SCRIPT)),\n });\n }\n else {\n sendText(response, 401, \"view session is required\");\n }\n return;\n }\n if (!sameOrigin(resources, request)) {\n sendText(response, 403, \"view origin is not authorized\");\n return;\n }\n if (url.pathname === \"/_niceeval/generation\") {\n if (request.method !== \"GET\")\n return methodNotAllowed(response, \"GET\");\n sendJson(response, 200, descriptor(resources, resources.state.current));\n return;\n }\n if (url.pathname === \"/_niceeval/generation/refresh\") {\n if (request.method !== \"POST\")\n return methodNotAllowed(response, \"POST\");\n sendJson(response, 200, descriptor(resources, resources.state.candidate ?? resources.state.current));\n return;\n }\n if (url.pathname === \"/_niceeval/generation/commit\") {\n if (request.method !== \"POST\")\n return methodNotAllowed(response, \"POST\");\n if (!exactJson(request, response))\n return;\n void serveCommit(resources, request, response);\n return;\n }\n if (url.pathname === \"/_niceeval/inspection\") {\n if (request.method !== \"POST\")\n return methodNotAllowed(response, \"POST\");\n if (!exactJson(request, response))\n return;\n void serveInspection(resources, request, response);\n return;\n }\n if (request.method !== \"GET\" && request.method !== \"HEAD\") {\n sendText(response, 405, \"method not allowed\", { allow: \"GET, HEAD\" });\n return;\n }\n void serveAsset(resources.state.current, url.pathname, request, response).catch((cause: unknown) => {\n if (!response.headersSent)\n sendText(response, 500, cause instanceof Error ? cause.message : \"view asset failed\");\n else\n response.destroy(cause instanceof Error ? cause : undefined);\n });\n}\nfunction descriptor(resources: ServerResources, generation: ViewGeneration): ViewGenerationDescriptor {\n return Object.freeze({\n generationId: generation.generationId,\n sourceCutoffIdentity: generation.sourceCutoffIdentity,\n refreshSupported: resources.refreshEnabled,\n stale: generation.generationId === resources.state.current.generationId && resources.state.candidate !== undefined,\n });\n}\nasync function serveCommit(resources: ServerResources, request: IncomingMessage, response: ServerResponse): Promise<void> {\n const body = await readJsonBody(request);\n if (!body.ok)\n return sendJson(response, body.status, body.error);\n const decoded = decodeGenerationCommitRequest(body.value);\n if (Result.isFailure(decoded))\n return sendJson(response, 400, requestInvalid(decoded.failure));\n const candidate = resources.state.candidate;\n if (candidate === undefined || candidate.generationId !== decoded.success.generationId) {\n return sendJson(response, 409, generationError(\"view-generation-stale\", \"The requested candidate is no longer available.\"));\n }\n const retired = resources.state.current;\n resources.state.current = candidate;\n resources.state.candidate = undefined;\n resources.state.leases.set(candidate.generationId, resources.state.leases.get(candidate.generationId) ?? 0);\n retireIfDrained(resources, retired);\n sendJson(response, 200, descriptor(resources, candidate));\n}\nasync function serveInspection(resources: ServerResources, request: IncomingMessage, response: ServerResponse): Promise<void> {\n const body = await readJsonBody(request);\n if (!body.ok)\n return sendJson(response, body.status, body.error);\n const decoded = decodeViewInspectionRequest(body.value);\n if (Result.isFailure(decoded))\n return sendJson(response, 400, requestInvalid(decoded.failure));\n const generation = findGeneration(resources, decoded.success.generationId);\n if (generation === undefined)\n return sendJson(response, 404, generationError(\"view-generation-not-found\", \"The requested generation is not available.\"));\n acquireLease(resources, generation);\n try {\n const document = await inspectViewGeneration(generation, decoded.success.request);\n sendJson(response, 200, document);\n }\n catch {\n sendJson(response, 500, Object.freeze({\n code: \"view-inspection-failed\", reason: \"Inspection could not be completed for this generation.\", correction: \"retry\",\n } satisfies ViewHttpErrorDocument));\n }\n finally {\n releaseLease(resources, generation);\n }\n}\nasync function serveAsset(generation: ViewGeneration, pathname: string, request: IncomingMessage, response: ServerResponse): Promise<void> {\n const data = generation;\n const file = await assetFile(data.appRoot, pathname, request.headers.accept);\n if (file === undefined) {\n sendText(response, 404, \"page not found\");\n return;\n }\n response.writeHead(200, {\n \"content-type\": mediaType(file.path),\n \"content-length\": String(file.size),\n ...COMMON_HEADERS,\n });\n if (request.method === \"HEAD\") {\n response.end();\n return;\n }\n const stream = createReadStream(file.path);\n stream.once(\"error\", (cause) => response.destroy(cause));\n stream.pipe(response);\n}\nasync function assetFile(appRoot: string, pathname: string, accept: string | undefined): Promise<{\n readonly path: string;\n readonly size: number;\n} | undefined> {\n const relative = safeRelativePath(pathname);\n if (relative === undefined)\n return undefined;\n const exact = relative.length === 0 ? \"index.html\" : relative;\n const found = await regularAsset(appRoot, exact);\n if (found !== undefined)\n return found;\n if (accept?.includes(\"text/html\") !== true || exact.startsWith(\"assets/\") || extname(exact) !== \"\")\n return undefined;\n return regularAsset(appRoot, \"index.html\");\n}\nfunction safeRelativePath(pathname: string): string | undefined {\n let decoded: string;\n try {\n decoded = decodeURIComponent(pathname);\n }\n catch {\n return undefined;\n }\n if (!decoded.startsWith(\"/\") || decoded.includes(\"\\\\\") || decoded.includes(\"\\u0000\"))\n return undefined;\n const relative = decoded.slice(1);\n if (relative.split(\"/\").some((segment) => segment === \".\" || segment === \"..\"))\n return undefined;\n return relative;\n}\nasync function regularAsset(appRoot: string, relative: string): Promise<{\n readonly path: string;\n readonly size: number;\n} | undefined> {\n const root = resolve(appRoot);\n const path = resolve(root, relative);\n if (!path.startsWith(`${root}${sep}`))\n return undefined;\n try {\n const metadata = await lstat(path);\n return metadata.isFile() && !metadata.isSymbolicLink()\n ? Object.freeze({ path, size: metadata.size })\n : undefined;\n }\n catch (cause) {\n if (typeof cause === \"object\" && cause !== null && Reflect.get(cause, \"code\") === \"ENOENT\")\n return undefined;\n throw cause;\n }\n}\nfunction exchangeCredential(resources: ServerResources, request: IncomingMessage, response: ServerResponse): void {\n if (request.method !== \"POST\") {\n sendText(response, 405, \"method not allowed\", { allow: \"POST\" });\n return;\n }\n if (!sameOrigin(resources, request, true)) {\n sendText(response, 403, \"view origin is not authorized\");\n return;\n }\n let bytes = 0;\n const chunks: Buffer[] = [];\n request.on(\"data\", (chunk: Buffer) => {\n bytes += chunk.byteLength;\n if (bytes > 1024)\n request.destroy();\n else\n chunks.push(chunk);\n });\n request.once(\"end\", () => {\n if (bytes > 1024)\n return;\n let value: unknown;\n try {\n value = JSON.parse(Buffer.concat(chunks).toString(\"utf8\")) as unknown;\n }\n catch {\n sendText(response, 400, \"credential request is invalid\");\n return;\n }\n const decoded = Schema.decodeUnknownResult(SessionRequestSchema, { onExcessProperty: \"error\" })(value);\n if (Result.isFailure(decoded)) {\n sendText(response, 400, \"credential request is invalid\");\n return;\n }\n if (resources.credentialConsumed || !safeEqual(decoded.success.credential, resources.credential)) {\n sendText(response, 401, \"credential is invalid or already used\");\n return;\n }\n resources.credentialConsumed = true;\n send(response, 204, \"\", \"text/plain; charset=utf-8\", {\n \"set-cookie\": `${resources.sessionCookie}=${resources.session}; Path=/; HttpOnly; SameSite=Strict`,\n });\n });\n request.once(\"error\", () => {\n if (!response.headersSent)\n sendText(response, 400, \"credential request failed\");\n });\n}\nfunction authorizedSession(resources: ServerResources, request: IncomingMessage): boolean {\n const session = cookieValue(request.headers.cookie, resources.sessionCookie);\n return session !== undefined && safeEqual(session, resources.session);\n}\nfunction sameOrigin(resources: ServerResources, request: IncomingMessage, required = false): boolean {\n const origin = request.headers.origin;\n if (origin !== undefined)\n return origin === resources.origin;\n if (required)\n return false;\n const fetchSite = request.headers[\"sec-fetch-site\"];\n return fetchSite === undefined || fetchSite === \"same-origin\" || fetchSite === \"none\";\n}\nfunction requestUrl(request: IncomingMessage): URL | undefined {\n try {\n return new URL(request.url ?? \"/\", \"http://127.0.0.1\");\n }\n catch {\n return undefined;\n }\n}\nfunction cookieValue(header: string | undefined, name: string): string | undefined {\n if (header === undefined)\n return undefined;\n for (const entry of header.split(\";\")) {\n const [candidate, ...value] = entry.trim().split(\"=\");\n if (candidate === name)\n return value.join(\"=\");\n }\n return undefined;\n}\nfunction safeEqual(left: string, right: string): boolean {\n const leftBytes = Buffer.from(left);\n const rightBytes = Buffer.from(right);\n return leftBytes.byteLength === rightBytes.byteLength && timingSafeEqual(leftBytes, rightBytes);\n}\nfunction listen(server: Server, port: number): Effect.Effect<number, ViewServerError> {\n return Effect.callback((resume) => {\n const cleanup = (): void => {\n server.off(\"error\", onError);\n server.off(\"listening\", onListening);\n };\n const onError = (cause: Error): void => {\n cleanup();\n resume(Effect.fail(viewError(\"listen\", cause.message)));\n };\n const onListening = (): void => {\n cleanup();\n const address = server.address();\n resume(address === null || typeof address === \"string\"\n ? Effect.fail(viewError(\"listen\", \"server did not expose a TCP port\"))\n : Effect.succeed(address.port));\n };\n server.once(\"error\", onError);\n server.once(\"listening\", onListening);\n server.listen(port, \"127.0.0.1\");\n return Effect.sync(cleanup);\n });\n}\nfunction closeResources(resources: ServerResources): Effect.Effect<void> {\n return Effect.suspend(() => {\n if (resources.closed)\n return Effect.void;\n resources.closed = true;\n return Effect.callback<void>((resume) => {\n // `listening` is still false during the small bind-in-flight window.\n // Calling close unconditionally also cancels that pending listener; an\n // ERR_SERVER_NOT_RUNNING callback is an already-closed success here.\n let finishing = false;\n const finish = (): void => {\n if (finishing)\n return;\n finishing = true;\n const retirements = [retireGeneration(resources, resources.state.current)];\n if (resources.state.candidate !== undefined) {\n retirements.push(retireGeneration(resources, resources.state.candidate));\n }\n void Promise.all(retirements).finally(() => {\n for (const socket of resources.sockets)\n socket.destroy();\n resume(Effect.void);\n });\n };\n try {\n resources.server.close(() => {\n if (resources.activeRequests === 0)\n finish();\n else\n resources.drained.add(finish);\n });\n }\n catch {\n finish();\n }\n resources.server.closeIdleConnections();\n // The browser may keep a polling connection alive while the CLI is\n // shutting down. Stop transport immediately; generation leases still\n // drain through each request's `finally` before retirement.\n resources.server.closeAllConnections();\n return Effect.void;\n });\n });\n}\nfunction findGeneration(resources: ServerResources, id: string): ViewGeneration | undefined {\n if (resources.state.current.generationId === id)\n return resources.state.current;\n if (resources.state.candidate?.generationId === id)\n return resources.state.candidate;\n return undefined;\n}\nfunction acquireLease(resources: ServerResources, generation: ViewGeneration): void {\n resources.state.leases.set(generation.generationId, (resources.state.leases.get(generation.generationId) ?? 0) + 1);\n}\nfunction releaseLease(resources: ServerResources, generation: ViewGeneration): void {\n const remaining = Math.max(0, (resources.state.leases.get(generation.generationId) ?? 1) - 1);\n resources.state.leases.set(generation.generationId, remaining);\n retireIfDrained(resources, generation);\n}\nfunction retireIfDrained(resources: ServerResources, generation: ViewGeneration): void {\n if (generation.generationId !== resources.state.current.generationId &&\n generation.generationId !== resources.state.candidate?.generationId &&\n resources.state.leases.get(generation.generationId) === 0) {\n resources.state.leases.delete(generation.generationId);\n void retireGeneration(resources, generation);\n }\n}\nfunction retireCandidate(resources: ServerResources, generation: ViewGeneration): void {\n if ((resources.state.leases.get(generation.generationId) ?? 0) === 0) {\n resources.state.leases.delete(generation.generationId);\n void retireGeneration(resources, generation);\n }\n}\nfunction retireGeneration(resources: ServerResources, generation: ViewGeneration): Promise<void> {\n if (resources.state.retired.has(generation.generationId))\n return Promise.resolve();\n resources.state.retired.add(generation.generationId);\n return generation.retire().catch(() => undefined);\n}\nfunction exactJson(request: IncomingMessage, response: ServerResponse): boolean {\n if (request.headers[\"content-type\"] === \"application/json\")\n return true;\n sendJson(response, 415, requestInvalid(\"Content-Type must be exactly application/json.\"));\n return false;\n}\ntype JsonBody = {\n readonly ok: true;\n readonly value: unknown;\n} | {\n readonly ok: false;\n readonly status: number;\n readonly error: ViewHttpErrorDocument;\n};\nfunction readJsonBody(request: IncomingMessage): Promise<JsonBody> {\n return new Promise((resolveBody) => {\n const chunks: Buffer[] = [];\n let size = 0;\n let settled = false;\n const finish = (value: JsonBody): void => {\n if (settled)\n return;\n settled = true;\n resolveBody(value);\n };\n request.on(\"data\", (chunk: Buffer) => {\n size += chunk.byteLength;\n if (size > VIEW_HTTP_BODY_LIMIT)\n finish({ ok: false, status: 413, error: requestInvalid(\"JSON body exceeds 64 KiB.\") });\n else\n chunks.push(chunk);\n });\n request.once(\"end\", () => {\n if (settled)\n return;\n try {\n finish({ ok: true, value: JSON.parse(Buffer.concat(chunks).toString(\"utf8\")) as unknown });\n }\n catch {\n finish({ ok: false, status: 400, error: requestInvalid(\"Body must be valid JSON.\") });\n }\n });\n request.once(\"error\", () => finish({ ok: false, status: 400, error: requestInvalid(\"Request body could not be read.\") }));\n });\n}\nfunction requestInvalid(reason: string): ViewHttpErrorDocument {\n return Object.freeze({ code: \"view-request-invalid\", reason: sanitizeReason(reason), correction: \"fix-request\" });\n}\nfunction generationError(code: \"view-generation-not-found\" | \"view-generation-stale\", reason: string): ViewHttpErrorDocument {\n return Object.freeze({ code, reason, correction: \"refresh-generation\" });\n}\nfunction sanitizeReason(reason: string): string {\n return reason.replace(/[\\u0000-\\u001f\\u007f-\\u009f]/gu, \" \").slice(0, 512);\n}\nfunction methodNotAllowed(response: ServerResponse, allow: string): void {\n sendText(response, 405, \"method not allowed\", { allow });\n}\nfunction sendJson(response: ServerResponse, status: number, value: unknown): void {\n send(response, status, JSON.stringify(value), \"application/json\");\n}\nfunction sendText(response: ServerResponse, status: number, body: string, headers: Readonly<Record<string, string>> = {}): void {\n send(response, status, body, \"text/plain; charset=utf-8\", headers);\n}\nfunction send(response: ServerResponse, status: number, body: string | Uint8Array, contentType: string, headers: Readonly<Record<string, string>> = {}): void {\n if (response.destroyed)\n return;\n response.writeHead(status, {\n \"content-type\": contentType,\n \"content-length\": String(typeof body === \"string\" ? Buffer.byteLength(body) : body.byteLength),\n ...COMMON_HEADERS,\n ...headers,\n });\n response.end(body);\n}\nfunction mediaType(path: string): string {\n switch (extname(path).toLowerCase()) {\n case \".html\": return \"text/html; charset=utf-8\";\n case \".css\": return \"text/css; charset=utf-8\";\n case \".js\":\n case \".mjs\": return \"text/javascript; charset=utf-8\";\n case \".wasm\": return \"application/wasm\";\n case \".json\": return \"application/json; charset=utf-8\";\n case \".svg\": return \"image/svg+xml\";\n case \".png\": return \"image/png\";\n case \".jpg\":\n case \".jpeg\": return \"image/jpeg\";\n case \".webp\": return \"image/webp\";\n case \".ico\": return \"image/x-icon\";\n case \".woff2\": return \"font/woff2\";\n default: return \"application/octet-stream\";\n }\n}\nfunction viewError(operation: ViewServerError[\"operation\"], reason: string): ViewServerError {\n return Object.freeze({ code: \"view-server-failed\" as const, operation, reason });\n}\n"]}
@@ -2,7 +2,7 @@
2
2
 
3
3
  `zh/` 按读者此刻的需求组织,不按 NiceEval 的内部模块组织。判断一页放在哪里时,先问读者是在学习、完成任务、查事实、理解原理,还是修复问题。
4
4
 
5
- ## 五种正文类型
5
+ ## 正文目录与体裁
6
6
 
7
7
  | 目录 | 页面类型 | 读者要什么 | 本站边界 |
8
8
  | --- | --- | --- | --- |
@@ -11,7 +11,7 @@
11
11
  | `reference/` | Technical Reference | 快速查准确、完整的事实 | API 签名、字段、类型和 CLI flags 以源码为权威来源 |
12
12
  | `troubleshooting/` | Troubleshooting | 从可见症状定位并修复问题 | 按症状组织,不按内部模块组织 |
13
13
 
14
- `index.mdx` 和 `introduction.mdx` 是站点入口,不硬归入正文类型。`examples/` 是独立资源入口,不属于 Diátaxis 的四种正文类型。
14
+ 正文使用上面四个目录。Tutorial 与 How-to 是两种体裁,共用 `tutorials/` 目录。`index.mdx` 和 `introduction.mdx` 是站点入口,`examples/` 是独立资源入口,都不计入正文目录。
15
15
 
16
16
  Tutorial 和 How-to 都属于用户完成任务时阅读的教程,因此统一放进 `tutorials/`,并在导航中合并到 `Tutorials` 标签。`quickstart.mdx` 负责第一次成功,其余页面负责已有基础后的具体任务。目录合并不改变两种页面的写作边界,也不把 Reference 或 Explanation 内容混进教程。
17
17
 
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  title: "让 Coding Agent 根据结果迭代"
3
3
  sidebarTitle: "Coding Agent 反馈闭环"
4
- description: "让 Coding Agent 读取 receipt 的 runIds,查看结果,再区分被测失败、证据错误与评估用例误判。"
4
+ description: "让 Coding Agent 读取 receipt 的 createdRunIds,查看结果,再区分被测失败、证据错误与评估用例误判。"
5
5
  ---
6
6
 
7
- Coding Agent 可以用命令行完成一次清楚的反馈闭环:阅读安装版本的文档,运行 Experiment,读取最后的 receipt,用 receipt 的 `runIds` 查看结果,再修改程序或评估用例并重新运行。
7
+ Coding Agent 可以用命令行完成一次清楚的反馈闭环:阅读安装版本的文档,运行 Experiment,读取最后的 receipt,用 receipt 的 `createdRunIds` 查看结果,再修改程序或评估用例并重新运行。
8
8
 
9
9
  ## 先读取安装版本的文档
10
10
 
@@ -35,14 +35,15 @@ npx niceeval exp checkout --json | tee .niceeval-invocation.ndjson
35
35
  ```json
36
36
  {
37
37
  "invocationId": "01J8ZK3M6P4T7V9X2C5N8QW0RY",
38
- "runIds": ["01J9ZK3M6P4T7V9X2C5N8QW0RY"],
38
+ "createdRunIds": ["01J9ZK3M6P4T7V9X2C5N8QW0RY"],
39
+ "publicationCutoff": "{...}",
39
40
  "startedAt": "2026-08-09T10:00:00.000Z",
40
41
  "completedAt": "2026-08-09T10:01:00.000Z",
41
42
  "completion": "completed"
42
43
  }
43
44
  ```
44
45
 
45
- Agent 应把最后一条 receipt 当作本次调用的交接信息。它不是持久化的结果协议;业务事实仍要通过 `runIds` 从已发布的 Record 读取。
46
+ Agent 应把最后一条 receipt 当作本次调用的交接信息。`createdRunIds` 穷尽列出成功创建的 Run,`publicationCutoff` 是 opaque 的已发布事实边界;它们不表示任务已经完成。receipt 不是持久化的结果协议;业务事实仍要通过 `createdRunIds` 从已发布的 Record 读取。
46
47
 
47
48
  ## 用 Run ID 审阅结果
48
49
 
@@ -94,8 +95,10 @@ npx niceeval exp checkout --rerun all --json
94
95
 
95
96
  自动采用已有 Attempt 时,`--dry` 会说明原因。carry 与 accept 的理由随目标 Run 保存,并可在结果中查看;详情见[重跑与沿用](/zh/tutorials/rerun-and-cache)。
96
97
 
98
+ 运行完成只表示这次 Invocation 已交接,不表示用户任务已经完成。任务要求完成且已有授权时,先修复执行链错误,再只复验受影响范围。只读请求只做归因,不修改或重跑。业务失败符合任务时保留该结果并如实报告,不要为了变绿改写应用或评估用例。
99
+
97
100
  ## Record 的边界
98
101
 
99
- Record 只保存已发布的事实,发布后不可修改。Agent 需要不同结果时修改程序或评估用例,运行新的 Invocation,再用新 receipt 的 `runIds` 查看。
102
+ Record 只保存已发布的事实,发布后不可修改。Agent 需要不同结果时修改程序或评估用例,运行新的 Invocation,再用新 receipt 的 `createdRunIds` 查看。
100
103
 
101
104
  需要把运行事实交给他人时,复制 [canonical Record](/zh/explanation/record),而不是把当前进程反馈当作分享格式。
@@ -18,9 +18,9 @@ description: "给 Coding Agent 的完整接入流程:探索项目、与用户
18
18
  6. **Judge 用什么**:语义评估(`check({ input, output }, closedQA(...))`)要一个**与被测 Agent 分离的 Judge 模型**,走 OpenAI 兼容的 `/chat/completions` 协议。问用户手上有哪个服务的 key、想用什么 Judge 模型。缺 key 不会静默通过:Judge Assertion 会记为 `unavailable`;它参与 Pass grading,或在计分制评估中配置了 `.score()` / `.orStop()` 时,Attempt 的 grading 不可用。没有 Judge 配置时,先只写精确 Match。
19
19
  7. **是不是 Agent 本体要进 Sandbox**:被测对象是 coding agent CLI、或给 coding agent 写的 Skill/Plugin/Hook/MCP server(要在隔离 workspace 里改文件/跑命令)的话,必须走 Sandbox,不能像 HTTP 服务那样直接 `send`。
20
20
 
21
- 默认建议 `dockerSandbox({ source: { type: "image", image: "node:24-slim" } })`,但**要先跟用户确认**——本机/CI 有没有 Docker、要不要 Vercel Sandbox 或其它远程 Provider。用户没有异议就默认走 Docker。Provider 声明在评估用例或 Experiment 上,没有 CLI flag、项目级默认值或自动探测——见[选择 Sandbox Provider](/zh/tutorials/sandbox-providers)。
21
+ 默认建议 `dockerSandbox({ source: { type: "image", image: "node:24-slim" } })`。任务或现有配置已经指定 Provider 时沿用;只有 Provider、Docker 可用性或远程执行需求仍会影响方案时才问。Provider 声明在评估用例或 Experiment 上,没有 CLI flag、项目级默认值或自动探测——见[选择 Sandbox Provider](/zh/tutorials/sandbox-providers)。
22
22
 
23
- 探完之后,向用户**介绍接入等级**并给出推荐(详见[接入等级](/zh/explanation/tier)):
23
+ 任务尚未指定接入等级时,向用户**介绍接入等级**并给出推荐(详见[接入等级](/zh/explanation/tier)):
24
24
 
25
25
  - **Tier 1(只接 send)**:应用一行不改,全套断言(文本、Judge、多轮、工具、HITL)都在这一档。
26
26
  - **Tier 2(send + OTel)**:应用把 OTel span 也发 NiceEval 一份,在 `niceeval view` 中查看调用瀑布图。已有埋点(第 3 点探到的)就零改动。
@@ -28,7 +28,7 @@ description: "给 Coding Agent 的完整接入流程:探索项目、与用户
28
28
 
29
29
  **默认推荐先 Tier 1 跑通,再升 Tier 2**——尤其当第 3 点探到应用已有 OTel 时,明确告诉用户「升 Tier 2 只是把 span 多发一份,成本接近零」。Tier 3 只在用户明确要做变体对比时提。
30
30
 
31
- 按探明的形态挑对应文档,不要在没读的情况下直接开始写 Adapter:
31
+ 已有明确授权时按探明的形态继续;缺少会改变目标、运行边界、凭证边界或预算的决定时才向用户确认。不要在没读对应页面的情况下直接开始写 Adapter:
32
32
 
33
33
  | 被测对象 | 去读 |
34
34
  |---|---|
@@ -97,6 +97,8 @@ export default defineConfig({
97
97
  - `failed` 表示执行完成,但业务断言没有满足。先查看 Assertion 和同一 Attempt 的公开证据;合法失败不需要改成绿色。
98
98
  - Score Eval 正常完成后仍要查看得分和逐项 Assertion。Overview 中的完成或通过状态不能替代满分判断。
99
99
 
100
+ 在已有授权和预算内,主动修复 `errored` 所在的执行链并只复验受影响范围。只读请求不修改或重跑。目标服务、端口、凭证、数据库或模型服务等真实外部条件缺失时,明确报告阻塞;不要用临时替代物冒充真实目标已经跑通。
101
+
100
102
  需要在终端下钻时,先从当前 Overview 复制动态 Attempt locator,再固定查看同一个 Attempt:
101
103
 
102
104
  ```sh
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "niceeval",
3
- "version": "0.14.2",
3
+ "version": "0.14.3-canary.53",
4
4
  "description": "Agent-native eval tool — eval agents, services, functions, and coding-agent fixtures",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1,41 +0,0 @@
1
- import{a as e,c as t,n,t as r}from"./jsx-runtime-BnHLaUks.js";import{A as i,N as a,k as o}from"./index-BGr_6pGY.js";var s=t(e(),1);typeof window<`u`&&window.document&&window.document.createElement;function c(e,t,{checkForDefaultPrevented:n=!0}={}){return function(r){if(e?.(r),n===!1||!r.defaultPrevented)return t?.(r)}}function l(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function u(...e){return t=>{let n=!1,r=e.map(e=>{let r=l(e,t);return!n&&typeof r==`function`&&(n=!0),r});if(n)return()=>{for(let t=0;t<r.length;t++){let n=r[t];typeof n==`function`?n():l(e[t],null)}}}}function d(...e){return s.useCallback(u(...e),e)}var f=r();function p(e,t=[]){let n=[];function r(t,r){let i=s.createContext(r);i.displayName=t+`Context`;let a=n.length;n=[...n,r];let o=t=>{let{scope:n,children:r,...o}=t,c=n?.[e]?.[a]||i,l=s.useMemo(()=>o,Object.values(o));return(0,f.jsx)(c.Provider,{value:l,children:r})};o.displayName=t+`Provider`;function c(n,o){let c=o?.[e]?.[a]||i,l=s.useContext(c);if(l)return l;if(r!==void 0)return r;throw Error(`\`${n}\` must be used within \`${t}\``)}return[o,c]}let i=()=>{let t=n.map(e=>s.createContext(e));return function(n){let r=n?.[e]||t;return s.useMemo(()=>({[`__scope${e}`]:{...n,[e]:r}}),[n,r])}};return i.scopeName=e,[r,m(i,...t)]}function m(...e){let t=e[0];if(e.length===1)return t;let n=()=>{let n=e.map(e=>({useScope:e(),scopeName:e.scopeName}));return function(e){let r=n.reduce((t,{useScope:n,scopeName:r})=>{let i=n(e)[`__scope${r}`];return{...t,...i}},{});return s.useMemo(()=>({[`__scope${t.scopeName}`]:r}),[r])}};return n.scopeName=t.scopeName,n}var h=globalThis?.document?s.useLayoutEffect:()=>{},g=s.useId||(()=>void 0),_=0;function v(e){let[t,n]=s.useState(g());return h(()=>{e||n(e=>e??String(_++))},[e]),e||(t?`radix-${t}`:``)}var y=s.useInsertionEffect||h;function b({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){let[i,a,o]=ee({defaultProp:t,onChange:n}),c=e!==void 0,l=c?e:i;{let t=s.useRef(e!==void 0);s.useEffect(()=>{let e=t.current;e!==c&&console.warn(`${r} is changing from ${e?`controlled`:`uncontrolled`} to ${c?`controlled`:`uncontrolled`}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),t.current=c},[c,r])}return[l,s.useCallback(t=>{if(c){let n=x(t)?t(e):t;n!==e&&o.current?.(n)}else a(t)},[c,e,a,o])]}function ee({defaultProp:e,onChange:t}){let[n,r]=s.useState(e),i=s.useRef(n),a=s.useRef(t);return y(()=>{a.current=t},[t]),s.useEffect(()=>{i.current!==n&&(a.current?.(n),i.current=n)},[n,i]),[n,r,a]}function x(e){return typeof e==`function`}var S=t(a(),1);function C(e){let t=s.forwardRef((t,n)=>{let{children:r,...i}=t,a=null,o=!1,c=[];ae(r)&&typeof E==`function`&&(r=E(r._payload)),s.Children.forEach(r,e=>{if(re(e)){o=!0;let t=e,n=`child`in t.props?t.props.child:t.props.children;ae(n)&&typeof E==`function`&&(n=E(n._payload)),a=te(t,n),c.push(a?.props?.children)}else c.push(e)}),a?a=s.cloneElement(a,void 0,c):!o&&s.Children.count(r)===1&&s.isValidElement(r)&&(a=r);let l=a?T(a):void 0,u=d(n,l);if(!a){if(r||r===0)throw Error(o?ce(e):se(e));return r}let f=ne(i,a.props??{});return a.type!==s.Fragment&&(f.ref=n?u:l),s.cloneElement(a,f)});return t.displayName=`${e}.Slot`,t}var w=Symbol.for(`radix.slottable`),te=(e,t)=>{if(`child`in e.props){let t=e.props.child;return s.isValidElement(t)?s.cloneElement(t,void 0,e.props.children(t.props.children)):null}return s.isValidElement(t)?t:null};function ne(e,t){let n={...t};for(let r in t){let i=e[r],a=t[r];/^on[A-Z]/.test(r)?i&&a?n[r]=(...e)=>{let t=a(...e);return i(...e),t}:i&&(n[r]=i):r===`style`?n[r]={...i,...a}:r===`className`&&(n[r]=[i,a].filter(Boolean).join(` `))}return{...e,...n}}function T(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}function re(e){return s.isValidElement(e)&&typeof e.type==`function`&&`__radixId`in e.type&&e.type.__radixId===w}var ie=Symbol.for(`react.lazy`);function ae(e){return typeof e==`object`&&!!e&&`$$typeof`in e&&e.$$typeof===ie&&`_payload`in e&&oe(e._payload)}function oe(e){return typeof e==`object`&&!!e&&`then`in e}var se=e=>`${e} failed to slot onto its children. Expected a single React element child or \`Slottable\`.`,ce=e=>`${e} failed to slot onto its \`Slottable\`. Expected \`Slottable\` to receive a single React element child.`,E=s.use,D=[`a`,`button`,`div`,`form`,`h2`,`h3`,`img`,`input`,`label`,`li`,`nav`,`ol`,`p`,`select`,`span`,`svg`,`ul`].reduce((e,t)=>{let n=C(`Primitive.${t}`),r=s.forwardRef((e,r)=>{let{asChild:i,...a}=e,o=i?n:t;return typeof window<`u`&&(window[Symbol.for(`radix-ui`)]=!0),(0,f.jsx)(o,{...a,ref:r})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function le(e,t){e&&S.flushSync(()=>e.dispatchEvent(t))}function O(e){let t=s.useRef(e);return s.useEffect(()=>{t.current=e}),s.useMemo(()=>((...e)=>t.current?.(...e)),[])}function ue(e,t=globalThis?.document){let n=O(e);s.useEffect(()=>{let e=e=>{e.key===`Escape`&&n(e)};return t.addEventListener(`keydown`,e,{capture:!0}),()=>t.removeEventListener(`keydown`,e,{capture:!0})},[n,t])}var de=`DismissableLayer`,fe=`dismissableLayer.update`,pe=`dismissableLayer.pointerDownOutside`,me=`dismissableLayer.focusOutside`,he,ge=s.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set,dismissableSurfaces:new Set}),_e=s.forwardRef((e,t)=>{let{disableOutsidePointerEvents:n=!1,deferPointerDownOutside:r=!1,onEscapeKeyDown:i,onPointerDownOutside:a,onFocusOutside:o,onInteractOutside:l,onDismiss:u,...p}=e,m=s.useContext(ge),[h,g]=s.useState(null),_=h?.ownerDocument??globalThis?.document,[,v]=s.useState({}),y=d(t,e=>g(e)),b=Array.from(m.layers),[ee]=[...m.layersWithOutsidePointerEventsDisabled].slice(-1),x=b.indexOf(ee),S=h?b.indexOf(h):-1,C=m.layersWithOutsidePointerEventsDisabled.size>0,w=S>=x,te=s.useRef(!1),ne=xe(e=>{let t=e.target;if(!(t instanceof Node))return;let n=[...m.branches].some(e=>e.contains(t));!w||n||(a?.(e),l?.(e),e.defaultPrevented||u?.())},{ownerDocument:_,deferPointerDownOutside:r,isDeferredPointerDownOutsideRef:te,dismissableSurfaces:m.dismissableSurfaces}),T=Se(e=>{if(r&&te.current)return;let t=e.target;[...m.branches].some(e=>e.contains(t))||(o?.(e),l?.(e),e.defaultPrevented||u?.())},_);return ue(e=>{S===m.layers.size-1&&(i?.(e),!e.defaultPrevented&&u&&(e.preventDefault(),u()))},_),s.useEffect(()=>{if(h)return n&&(m.layersWithOutsidePointerEventsDisabled.size===0&&(he=_.body.style.pointerEvents,_.body.style.pointerEvents=`none`),m.layersWithOutsidePointerEventsDisabled.add(h)),m.layers.add(h),Ce(),()=>{n&&(m.layersWithOutsidePointerEventsDisabled.delete(h),m.layersWithOutsidePointerEventsDisabled.size===0&&(_.body.style.pointerEvents=he))}},[h,_,n,m]),s.useEffect(()=>()=>{h&&(m.layers.delete(h),m.layersWithOutsidePointerEventsDisabled.delete(h),Ce())},[h,m]),s.useEffect(()=>{let e=()=>v({});return document.addEventListener(fe,e),()=>document.removeEventListener(fe,e)},[]),(0,f.jsx)(D.div,{...p,ref:y,style:{pointerEvents:C?w?`auto`:`none`:void 0,...e.style},onFocusCapture:c(e.onFocusCapture,T.onFocusCapture),onBlurCapture:c(e.onBlurCapture,T.onBlurCapture),onPointerDownCapture:c(e.onPointerDownCapture,ne.onPointerDownCapture)})});_e.displayName=de;var ve=`DismissableLayerBranch`,ye=s.forwardRef((e,t)=>{let n=s.useContext(ge),r=s.useRef(null),i=d(t,r);return s.useEffect(()=>{let e=r.current;if(e)return n.branches.add(e),()=>{n.branches.delete(e)}},[n.branches]),(0,f.jsx)(D.div,{...e,ref:i})});ye.displayName=ve;function be(){let e=s.useContext(ge),[t,n]=s.useState(null);return s.useEffect(()=>{if(t)return e.dismissableSurfaces.add(t),()=>{e.dismissableSurfaces.delete(t)}},[t,e.dismissableSurfaces]),n}function xe(e,t){let{ownerDocument:n=globalThis?.document,deferPointerDownOutside:r=!1,isDeferredPointerDownOutsideRef:i,dismissableSurfaces:a}=t,o=O(e),c=s.useRef(!1),l=s.useRef(!1),u=s.useRef(new Map),d=s.useRef(()=>{});return s.useEffect(()=>{function e(){l.current=!1,i.current=!1,u.current.clear()}function t(){return Array.from(u.current.values()).some(Boolean)}function s(e){if(!l.current)return;let t=e.target;t instanceof Node&&[...a].some(e=>e.contains(t))||u.current.set(e.type,!0),e.type===`click`&&window.setTimeout(()=>{l.current&&d.current()},0)}function f(e){l.current&&u.current.set(e.type,!1)}let p=a=>{if(a.target&&!c.current){let s=function(){n.removeEventListener(`click`,d.current);let r=t();e(),r||we(pe,o,c,{discrete:!0})},c={originalEvent:a};l.current=!0,i.current=r&&a.button===0,u.current.clear(),!r||a.button!==0?s():(n.removeEventListener(`click`,d.current),d.current=s,n.addEventListener(`click`,d.current,{once:!0}))}else n.removeEventListener(`click`,d.current),e();c.current=!1},m=[`pointerup`,`mousedown`,`mouseup`,`touchstart`,`touchend`,`click`];for(let e of m)n.addEventListener(e,s,!0),n.addEventListener(e,f);let h=window.setTimeout(()=>{n.addEventListener(`pointerdown`,p)},0);return()=>{window.clearTimeout(h),n.removeEventListener(`pointerdown`,p),n.removeEventListener(`click`,d.current);for(let e of m)n.removeEventListener(e,s,!0),n.removeEventListener(e,f)}},[n,o,r,i,a]),{onPointerDownCapture:()=>c.current=!0}}function Se(e,t=globalThis?.document){let n=O(e),r=s.useRef(!1);return s.useEffect(()=>{let e=e=>{e.target&&!r.current&&we(me,n,{originalEvent:e},{discrete:!1})};return t.addEventListener(`focusin`,e),()=>t.removeEventListener(`focusin`,e)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function Ce(){let e=new CustomEvent(fe);document.dispatchEvent(e)}function we(e,t,n,{discrete:r}){let i=n.originalEvent.target,a=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&i.addEventListener(e,t,{once:!0}),r?le(i,a):i.dispatchEvent(a)}var Te=`focusScope.autoFocusOnMount`,k=`focusScope.autoFocusOnUnmount`,Ee={bubbles:!1,cancelable:!0},De=`FocusScope`,Oe=s.forwardRef((e,t)=>{let{loop:n=!1,trapped:r=!1,onMountAutoFocus:i,onUnmountAutoFocus:a,...o}=e,[c,l]=s.useState(null),u=O(i),p=O(a),m=s.useRef(null),h=d(t,e=>l(e)),g=s.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;s.useEffect(()=>{if(r){let e=function(e){if(g.paused||!c)return;let t=e.target;c.contains(t)?m.current=t:A(m.current,{select:!0})},t=function(e){if(g.paused||!c)return;let t=e.relatedTarget;t!==null&&(c.contains(t)||A(m.current,{select:!0}))},n=function(e){if(document.activeElement===document.body)for(let t of e)t.removedNodes.length>0&&A(c)};document.addEventListener(`focusin`,e),document.addEventListener(`focusout`,t);let r=new MutationObserver(n);return c&&r.observe(c,{childList:!0,subtree:!0}),()=>{document.removeEventListener(`focusin`,e),document.removeEventListener(`focusout`,t),r.disconnect()}}},[r,c,g.paused]),s.useEffect(()=>{if(c){Fe.add(g);let e=document.activeElement;if(!c.contains(e)){let t=new CustomEvent(Te,Ee);c.addEventListener(Te,u),c.dispatchEvent(t),t.defaultPrevented||(ke(Re(je(c)),{select:!0}),document.activeElement===e&&A(c))}return()=>{c.removeEventListener(Te,u),setTimeout(()=>{let t=new CustomEvent(k,Ee);c.addEventListener(k,p),c.dispatchEvent(t),t.defaultPrevented||A(e??document.body,{select:!0}),c.removeEventListener(k,p),Fe.remove(g)},0)}}},[c,u,p,g]);let _=s.useCallback(e=>{if(!n&&!r||g.paused)return;let t=e.key===`Tab`&&!e.altKey&&!e.ctrlKey&&!e.metaKey,i=document.activeElement;if(t&&i){let t=e.currentTarget,[r,a]=Ae(t);r&&a?!e.shiftKey&&i===a?(e.preventDefault(),n&&A(r,{select:!0})):e.shiftKey&&i===r&&(e.preventDefault(),n&&A(a,{select:!0})):i===t&&e.preventDefault()}},[n,r,g.paused]);return(0,f.jsx)(D.div,{tabIndex:-1,...o,ref:h,onKeyDown:_})});Oe.displayName=De;function ke(e,{select:t=!1}={}){let n=document.activeElement;for(let r of e)if(A(r,{select:t}),document.activeElement!==n)return}function Ae(e){let t=je(e);return[Me(t,e),Me(t.reverse(),e)]}function je(e){let t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:e=>{let t=e.tagName===`INPUT`&&e.type===`hidden`;return e.disabled||e.hidden||t?NodeFilter.FILTER_SKIP:e.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function Me(e,t){for(let n of e)if(!Ne(n,{upTo:t}))return n}function Ne(e,{upTo:t}){if(getComputedStyle(e).visibility===`hidden`)return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display===`none`)return!0;e=e.parentElement}return!1}function Pe(e){return e instanceof HTMLInputElement&&`select`in e}function A(e,{select:t=!1}={}){if(e&&e.focus){let n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&Pe(e)&&t&&e.select()}}var Fe=Ie();function Ie(){let e=[];return{add(t){let n=e[0];t!==n&&n?.pause(),e=Le(e,t),e.unshift(t)},remove(t){e=Le(e,t),e[0]?.resume()}}}function Le(e,t){let n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function Re(e){return e.filter(e=>e.tagName!==`A`)}var ze=`Portal`,Be=s.forwardRef((e,t)=>{let{container:n,...r}=e,[i,a]=s.useState(!1);h(()=>a(!0),[]);let o=n||i&&globalThis?.document?.body;return o?S.createPortal((0,f.jsx)(D.div,{...r,ref:t}),o):null});Be.displayName=ze;function Ve(e,t){return s.useReducer((e,n)=>t[e][n]??e,e)}var j=e=>{let{present:t,children:n}=e,r=He(t),i=typeof n==`function`?n({present:r.isPresent}):s.Children.only(n),a=We(r.ref,Ge(i));return typeof n==`function`||r.isPresent?s.cloneElement(i,{ref:a}):null};j.displayName=`Presence`;function He(e){let[t,n]=s.useState(),r=s.useRef(null),i=s.useRef(e),a=s.useRef(`none`),[o,c]=Ve(e?`mounted`:`unmounted`,{mounted:{UNMOUNT:`unmounted`,ANIMATION_OUT:`unmountSuspended`},unmountSuspended:{MOUNT:`mounted`,ANIMATION_END:`unmounted`},unmounted:{MOUNT:`mounted`}});return s.useEffect(()=>{let e=M(r.current);a.current=o===`mounted`?e:`none`},[o]),h(()=>{let t=r.current,n=i.current;if(n!==e){let r=a.current,o=M(t);e?c(`MOUNT`):o===`none`||t?.display===`none`?c(`UNMOUNT`):c(n&&r!==o?`ANIMATION_OUT`:`UNMOUNT`),i.current=e}},[e,c]),h(()=>{if(t){let e,n=t.ownerDocument.defaultView??window,o=a=>{let o=M(r.current).includes(CSS.escape(a.animationName));if(a.target===t&&o&&(c(`ANIMATION_END`),!i.current)){let r=t.style.animationFillMode;t.style.animationFillMode=`forwards`,e=n.setTimeout(()=>{t.style.animationFillMode===`forwards`&&(t.style.animationFillMode=r)})}},s=e=>{e.target===t&&(a.current=M(r.current))};return t.addEventListener(`animationstart`,s),t.addEventListener(`animationcancel`,o),t.addEventListener(`animationend`,o),()=>{n.clearTimeout(e),t.removeEventListener(`animationstart`,s),t.removeEventListener(`animationcancel`,o),t.removeEventListener(`animationend`,o)}}else c(`ANIMATION_END`)},[t,c]),{isPresent:[`mounted`,`unmountSuspended`].includes(o),ref:s.useCallback(e=>{r.current=e?getComputedStyle(e):null,n(e)},[])}}function Ue(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function We(...e){let t=s.useRef(e);return t.current=e,s.useCallback(e=>{let n=t.current,r=!1,i=n.map(t=>{let n=Ue(t,e);return!r&&typeof n==`function`&&(r=!0),n});if(r)return()=>{for(let e=0;e<i.length;e++){let t=i[e];typeof t==`function`?t():Ue(n[e],null)}}},[])}function M(e){return e?.animationName||`none`}function Ge(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var N=0,P=null;function Ke(){s.useEffect(()=>{P||={start:qe(),end:qe()};let{start:e,end:t}=P;return document.body.firstElementChild!==e&&document.body.insertAdjacentElement(`afterbegin`,e),document.body.lastElementChild!==t&&document.body.insertAdjacentElement(`beforeend`,t),N++,()=>{N===1&&(P?.start.remove(),P?.end.remove(),P=null),N=Math.max(0,N-1)}},[])}function qe(){let e=document.createElement(`span`);return e.setAttribute(`data-radix-focus-guard`,``),e.tabIndex=0,e.style.outline=`none`,e.style.opacity=`0`,e.style.position=`fixed`,e.style.pointerEvents=`none`,e}var F=function(){return F=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n],t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},F.apply(this,arguments)};function Je(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols==`function`)for(var i=0,r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]]);return n}function Ye(e,t,n){if(n||arguments.length===2)for(var r=0,i=t.length,a;r<i;r++)(a||!(r in t))&&(a||=Array.prototype.slice.call(t,0,r),a[r]=t[r]);return e.concat(a||Array.prototype.slice.call(t))}var I=`right-scroll-bar-position`,L=`width-before-scroll-bar`,Xe=`with-scroll-bars-hidden`,Ze=`--removed-body-scroll-bar-size`;function R(e,t){return typeof e==`function`?e(t):e&&(e.current=t),e}function Qe(e,t){var n=(0,s.useState)(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(e){var t=n.value;t!==e&&(n.value=e,n.callback(e,t))}}}})[0];return n.callback=t,n.facade}var $e=typeof window<`u`?s.useLayoutEffect:s.useEffect,et=new WeakMap;function tt(e,t){var n=Qe(t||null,function(t){return e.forEach(function(e){return R(e,t)})});return $e(function(){var t=et.get(n);if(t){var r=new Set(t),i=new Set(e),a=n.current;r.forEach(function(e){i.has(e)||R(e,null)}),i.forEach(function(e){r.has(e)||R(e,a)})}et.set(n,e)},[e]),n}function nt(e){return e}function rt(e,t){t===void 0&&(t=nt);var n=[],r=!1;return{read:function(){if(r)throw Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(e){var i=t(e,r);return n.push(i),function(){n=n.filter(function(e){return e!==i})}},assignSyncMedium:function(e){for(r=!0;n.length;){var t=n;n=[],t.forEach(e)}n={push:function(t){return e(t)},filter:function(){return n}}},assignMedium:function(e){r=!0;var t=[];if(n.length){var i=n;n=[],i.forEach(e),t=n}var a=function(){var n=t;t=[],n.forEach(e)},o=function(){return Promise.resolve().then(a)};o(),n={push:function(e){t.push(e),o()},filter:function(e){return t=t.filter(e),n}}}}}function it(e){e===void 0&&(e={});var t=rt(null);return t.options=F({async:!0,ssr:!1},e),t}var at=function(e){var t=e.sideCar,n=Je(e,[`sideCar`]);if(!t)throw Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw Error(`Sidecar medium not found`);return s.createElement(r,F({},n))};at.isSideCarExport=!0;function ot(e,t){return e.useMedium(t),at}var st=it(),z=function(){},B=s.forwardRef(function(e,t){var n=s.useRef(null),r=s.useState({onScrollCapture:z,onWheelCapture:z,onTouchMoveCapture:z}),i=r[0],a=r[1],o=e.forwardProps,c=e.children,l=e.className,u=e.removeScrollBar,d=e.enabled,f=e.shards,p=e.sideCar,m=e.noRelative,h=e.noIsolation,g=e.inert,_=e.allowPinchZoom,v=e.as,y=v===void 0?`div`:v,b=e.gapMode,ee=Je(e,[`forwardProps`,`children`,`className`,`removeScrollBar`,`enabled`,`shards`,`sideCar`,`noRelative`,`noIsolation`,`inert`,`allowPinchZoom`,`as`,`gapMode`]),x=p,S=tt([n,t]),C=F(F({},ee),i);return s.createElement(s.Fragment,null,d&&s.createElement(x,{sideCar:st,removeScrollBar:u,shards:f,noRelative:m,noIsolation:h,inert:g,setCallbacks:a,allowPinchZoom:!!_,lockRef:n,gapMode:b}),o?s.cloneElement(s.Children.only(c),F(F({},C),{ref:S})):s.createElement(y,F({},C,{className:l,ref:S}),c))});B.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1},B.classNames={fullWidth:L,zeroRight:I};var ct,lt=function(){if(ct)return ct;if(typeof __webpack_nonce__<`u`)return __webpack_nonce__};function ut(){if(!document)return null;var e=document.createElement(`style`);e.type=`text/css`;var t=lt();return t&&e.setAttribute(`nonce`,t),e}function dt(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function ft(e){(document.head||document.getElementsByTagName(`head`)[0]).appendChild(e)}var pt=function(){var e=0,t=null;return{add:function(n){e==0&&(t=ut())&&(dt(t,n),ft(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},mt=function(){var e=pt();return function(t,n){s.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},ht=function(){var e=mt();return function(t){var n=t.styles,r=t.dynamic;return e(n,r),null}},gt={left:0,top:0,right:0,gap:0},V=function(e){return parseInt(e||``,10)||0},_t=function(e){var t=window.getComputedStyle(document.body),n=t[e===`padding`?`paddingLeft`:`marginLeft`],r=t[e===`padding`?`paddingTop`:`marginTop`],i=t[e===`padding`?`paddingRight`:`marginRight`];return[V(n),V(r),V(i)]},vt=function(e){if(e===void 0&&(e=`margin`),typeof window>`u`)return gt;var t=_t(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},yt=ht(),H=`data-scroll-locked`,bt=function(e,t,n,r){var i=e.left,a=e.top,o=e.right,s=e.gap;return n===void 0&&(n=`margin`),`
2
- .${Xe} {
3
- overflow: hidden ${r};
4
- padding-right: ${s}px ${r};
5
- }
6
- body[${H}] {
7
- overflow: hidden ${r};
8
- overscroll-behavior: contain;
9
- ${[t&&`position: relative ${r};`,n===`margin`&&`
10
- padding-left: ${i}px;
11
- padding-top: ${a}px;
12
- padding-right: ${o}px;
13
- margin-left:0;
14
- margin-top:0;
15
- margin-right: ${s}px ${r};
16
- `,n===`padding`&&`padding-right: ${s}px ${r};`].filter(Boolean).join(``)}
17
- }
18
-
19
- .${I} {
20
- right: ${s}px ${r};
21
- }
22
-
23
- .${L} {
24
- margin-right: ${s}px ${r};
25
- }
26
-
27
- .${I} .${I} {
28
- right: 0 ${r};
29
- }
30
-
31
- .${L} .${L} {
32
- margin-right: 0 ${r};
33
- }
34
-
35
- body[${H}] {
36
- ${Ze}: ${s}px;
37
- }
38
- `},xt=function(){var e=parseInt(document.body.getAttribute(`data-scroll-locked`)||`0`,10);return isFinite(e)?e:0},St=function(){s.useEffect(function(){return document.body.setAttribute(H,(xt()+1).toString()),function(){var e=xt()-1;e<=0?document.body.removeAttribute(H):document.body.setAttribute(H,e.toString())}},[])},Ct=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,i=r===void 0?`margin`:r;St();var a=s.useMemo(function(){return vt(i)},[i]);return s.createElement(yt,{styles:bt(a,!t,i,n?``:`!important`)})},wt=!1;if(typeof window<`u`)try{var U=Object.defineProperty({},"passive",{get:function(){return wt=!0,!0}});window.addEventListener(`test`,U,U),window.removeEventListener(`test`,U,U)}catch{wt=!1}var W=wt?{passive:!1}:!1,Tt=function(e){return e.tagName===`TEXTAREA`},Et=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!==`hidden`&&!(n.overflowY===n.overflowX&&!Tt(e)&&n[t]===`visible`)},Dt=function(e){return Et(e,`overflowY`)},Ot=function(e){return Et(e,`overflowX`)},kt=function(e,t){var n=t.ownerDocument,r=t;do{if(typeof ShadowRoot<`u`&&r instanceof ShadowRoot&&(r=r.host),Mt(e,r)){var i=Nt(e,r);if(i[1]>i[2])return!0}r=r.parentNode}while(r&&r!==n.body);return!1},At=function(e){return[e.scrollTop,e.scrollHeight,e.clientHeight]},jt=function(e){return[e.scrollLeft,e.scrollWidth,e.clientWidth]},Mt=function(e,t){return e===`v`?Dt(t):Ot(t)},Nt=function(e,t){return e===`v`?At(t):jt(t)},Pt=function(e,t){return e===`h`&&t===`rtl`?-1:1},Ft=function(e,t,n,r,i){var a=Pt(e,window.getComputedStyle(t).direction),o=a*r,s=n.target,c=t.contains(s),l=!1,u=o>0,d=0,f=0;do{if(!s)break;var p=Nt(e,s),m=p[0],h=p[1]-p[2]-a*m;(m||h)&&Mt(e,s)&&(d+=h,f+=m);var g=s.parentNode;s=g&&g.nodeType===Node.DOCUMENT_FRAGMENT_NODE?g.host:g}while(!c&&s!==document.body||c&&(t.contains(s)||t===s));return(u&&(i&&Math.abs(d)<1||!i&&o>d)||!u&&(i&&Math.abs(f)<1||!i&&-o>f))&&(l=!0),l},G=function(e){return`changedTouches`in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},It=function(e){return[e.deltaX,e.deltaY]},Lt=function(e){return e&&`current`in e?e.current:e},Rt=function(e,t){return e[0]===t[0]&&e[1]===t[1]},zt=function(e){return`
39
- .block-interactivity-${e} {pointer-events: none;}
40
- .allow-interactivity-${e} {pointer-events: all;}
41
- `},Bt=0,K=[];function Vt(e){var t=s.useRef([]),n=s.useRef([0,0]),r=s.useRef(),i=s.useState(Bt++)[0],a=s.useState(ht)[0],o=s.useRef(e);s.useEffect(function(){o.current=e},[e]),s.useEffect(function(){if(e.inert){document.body.classList.add(`block-interactivity-${i}`);var t=Ye([e.lockRef.current],(e.shards||[]).map(Lt),!0).filter(Boolean);return t.forEach(function(e){return e.classList.add(`allow-interactivity-${i}`)}),function(){document.body.classList.remove(`block-interactivity-${i}`),t.forEach(function(e){return e.classList.remove(`allow-interactivity-${i}`)})}}},[e.inert,e.lockRef.current,e.shards]);var c=s.useCallback(function(e,t){if(`touches`in e&&e.touches.length===2||e.type===`wheel`&&e.ctrlKey)return!o.current.allowPinchZoom;var i=G(e),a=n.current,s=`deltaX`in e?e.deltaX:a[0]-i[0],c=`deltaY`in e?e.deltaY:a[1]-i[1],l,u=e.target,d=Math.abs(s)>Math.abs(c)?`h`:`v`;if(`touches`in e&&d===`h`&&u.type===`range`)return!1;var f=window.getSelection(),p=f&&f.anchorNode;if(p&&(p===u||p.contains(u)))return!1;var m=kt(d,u);if(!m)return!0;if(m?l=d:(l=d===`v`?`h`:`v`,m=kt(d,u)),!m)return!1;if(!r.current&&`changedTouches`in e&&(s||c)&&(r.current=l),!l)return!0;var h=r.current||l;return Ft(h,t,e,h===`h`?s:c,!0)},[]),l=s.useCallback(function(e){var n=e;if(!(!K.length||K[K.length-1]!==a)){var r=`deltaY`in n?It(n):G(n),i=t.current.filter(function(e){return e.name===n.type&&(e.target===n.target||n.target===e.shadowParent)&&Rt(e.delta,r)})[0];if(i&&i.should){n.cancelable&&n.preventDefault();return}if(!i){var s=(o.current.shards||[]).map(Lt).filter(Boolean).filter(function(e){return e.contains(n.target)});(s.length>0?c(n,s[0]):!o.current.noIsolation)&&n.cancelable&&n.preventDefault()}}},[]),u=s.useCallback(function(e,n,r,i){var a={name:e,delta:n,target:r,should:i,shadowParent:Ht(r)};t.current.push(a),setTimeout(function(){t.current=t.current.filter(function(e){return e!==a})},1)},[]),d=s.useCallback(function(e){n.current=G(e),r.current=void 0},[]),f=s.useCallback(function(t){u(t.type,It(t),t.target,c(t,e.lockRef.current))},[]),p=s.useCallback(function(t){u(t.type,G(t),t.target,c(t,e.lockRef.current))},[]);s.useEffect(function(){return K.push(a),e.setCallbacks({onScrollCapture:f,onWheelCapture:f,onTouchMoveCapture:p}),document.addEventListener(`wheel`,l,W),document.addEventListener(`touchmove`,l,W),document.addEventListener(`touchstart`,d,W),function(){K=K.filter(function(e){return e!==a}),document.removeEventListener(`wheel`,l,W),document.removeEventListener(`touchmove`,l,W),document.removeEventListener(`touchstart`,d,W)}},[]);var m=e.removeScrollBar,h=e.inert;return s.createElement(s.Fragment,null,h?s.createElement(a,{styles:zt(i)}):null,m?s.createElement(Ct,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function Ht(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}var Ut=ot(st,Vt),Wt=s.forwardRef(function(e,t){return s.createElement(B,F({},e,{ref:t,sideCar:Ut}))});Wt.classNames=B.classNames;var Gt=function(e){return typeof document>`u`?null:(Array.isArray(e)?e[0]:e).ownerDocument.body},q=new WeakMap,J=new WeakMap,Y={},Kt=0,qt=function(e){return e&&(e.host||qt(e.parentNode))},Jt=function(e,t){return t.map(function(t){if(e.contains(t))return t;var n=qt(t);return n&&e.contains(n)?n:(console.error(`aria-hidden`,t,`in not contained inside`,e,`. Doing nothing`),null)}).filter(function(e){return!!e})},Yt=function(e,t,n,r){var i=Jt(t,Array.isArray(e)?e:[e]);Y[n]||(Y[n]=new WeakMap);var a=Y[n],o=[],s=new Set,c=new Set(i),l=function(e){!e||s.has(e)||(s.add(e),l(e.parentNode))};i.forEach(l);var u=function(e){!e||c.has(e)||Array.prototype.forEach.call(e.children,function(e){if(s.has(e))u(e);else try{var t=e.getAttribute(r),i=t!==null&&t!==`false`,c=(q.get(e)||0)+1,l=(a.get(e)||0)+1;q.set(e,c),a.set(e,l),o.push(e),c===1&&i&&J.set(e,!0),l===1&&e.setAttribute(n,`true`),i||e.setAttribute(r,`true`)}catch(t){console.error(`aria-hidden: cannot operate on `,e,t)}})};return u(t),s.clear(),Kt++,function(){o.forEach(function(e){var t=q.get(e)-1,i=a.get(e)-1;q.set(e,t),a.set(e,i),t||(J.has(e)||e.removeAttribute(r),J.delete(e)),i||e.removeAttribute(n)}),Kt--,Kt||(q=new WeakMap,q=new WeakMap,J=new WeakMap,Y={})}},Xt=function(e,t,n){n===void 0&&(n=`data-aria-hidden`);var r=Array.from(Array.isArray(e)?e:[e]),i=t||Gt(e);return i?(r.push.apply(r,Array.from(i.querySelectorAll(`[aria-live], script`))),Yt(r,i,n,`aria-hidden`)):function(){return null}},X=`Dialog`,[Zt,Qt]=p(X),[$t,Z]=Zt(X),en=e=>{let{__scopeDialog:t,children:n,open:r,defaultOpen:i,onOpenChange:a,modal:o=!0}=e,c=s.useRef(null),l=s.useRef(null),[u,d]=b({prop:r,defaultProp:i??!1,onChange:a,caller:X});return(0,f.jsx)($t,{scope:t,triggerRef:c,contentRef:l,contentId:v(),titleId:v(),descriptionId:v(),open:u,onOpenChange:d,onOpenToggle:s.useCallback(()=>d(e=>!e),[d]),modal:o,children:n})};en.displayName=X;var tn=`DialogTrigger`,nn=s.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=Z(tn,n),a=d(t,i.triggerRef);return(0,f.jsx)(D.button,{type:`button`,"aria-haspopup":`dialog`,"aria-expanded":i.open,"aria-controls":i.open?i.contentId:void 0,"data-state":xn(i.open),...r,ref:a,onClick:c(e.onClick,i.onOpenToggle)})});nn.displayName=tn;var rn=`DialogPortal`,[an,on]=Zt(rn,{forceMount:void 0}),sn=e=>{let{__scopeDialog:t,forceMount:n,children:r,container:i}=e,a=Z(rn,t);return(0,f.jsx)(an,{scope:t,forceMount:n,children:s.Children.map(r,e=>(0,f.jsx)(j,{present:n||a.open,children:(0,f.jsx)(Be,{asChild:!0,container:i,children:e})}))})};sn.displayName=rn;var Q=`DialogOverlay`,cn=s.forwardRef((e,t)=>{let n=on(Q,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=Z(Q,e.__scopeDialog);return a.modal?(0,f.jsx)(j,{present:r||a.open,children:(0,f.jsx)(un,{...i,ref:t})}):null});cn.displayName=Q;var ln=C(`DialogOverlay.RemoveScroll`),un=s.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=Z(Q,n),a=d(t,be());return(0,f.jsx)(Wt,{as:ln,allowPinchZoom:!0,shards:[i.contentRef],children:(0,f.jsx)(D.div,{"data-state":xn(i.open),...r,ref:a,style:{pointerEvents:`auto`,...r.style}})})}),$=`DialogContent`,dn=s.forwardRef((e,t)=>{let n=on($,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=Z($,e.__scopeDialog);return(0,f.jsx)(j,{present:r||a.open,children:a.modal?(0,f.jsx)(fn,{...i,ref:t}):(0,f.jsx)(pn,{...i,ref:t})})});dn.displayName=$;var fn=s.forwardRef((e,t)=>{let n=Z($,e.__scopeDialog),r=s.useRef(null),i=d(t,n.contentRef,r);return s.useEffect(()=>{let e=r.current;if(e)return Xt(e)},[]),(0,f.jsx)(mn,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,onCloseAutoFocus:c(e.onCloseAutoFocus,e=>{e.preventDefault(),n.triggerRef.current?.focus()}),onPointerDownOutside:c(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0;(t.button===2||n)&&e.preventDefault()}),onFocusOutside:c(e.onFocusOutside,e=>e.preventDefault())})}),pn=s.forwardRef((e,t)=>{let n=Z($,e.__scopeDialog),r=s.useRef(!1),i=s.useRef(!1);return(0,f.jsx)(mn,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(r.current||n.triggerRef.current?.focus(),t.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(r.current=!0,t.detail.originalEvent.type===`pointerdown`&&(i.current=!0));let a=t.target;n.triggerRef.current?.contains(a)&&t.preventDefault(),t.detail.originalEvent.type===`focusin`&&i.current&&t.preventDefault()}})}),mn=s.forwardRef((e,t)=>{let{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:i,onCloseAutoFocus:a,...o}=e,s=Z($,n);return Ke(),(0,f.jsx)(f.Fragment,{children:(0,f.jsx)(Oe,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:a,children:(0,f.jsx)(_e,{role:`dialog`,id:s.contentId,"aria-describedby":s.descriptionId,"aria-labelledby":s.titleId,"data-state":xn(s.open),...o,ref:t,deferPointerDownOutside:!0,onDismiss:()=>s.onOpenChange(!1)})})})}),hn=`DialogTitle`,gn=s.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=Z(hn,n);return(0,f.jsx)(D.h2,{id:i.titleId,...r,ref:t})});gn.displayName=hn;var _n=`DialogDescription`,vn=s.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=Z(_n,n);return(0,f.jsx)(D.p,{id:i.descriptionId,...r,ref:t})});vn.displayName=_n;var yn=`DialogClose`,bn=s.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=Z(yn,n);return(0,f.jsx)(D.button,{type:`button`,...r,ref:t,onClick:c(e.onClick,()=>i.onOpenChange(!1))})});bn.displayName=yn;function xn(e){return e?`open`:`closed`}function Sn({title:e,children:t}){let{t:r}=n(),a=o(),s=i(),c=a.state?.background,l=()=>c===void 0?s(`/`,{replace:!0}):s(-1);return(0,f.jsx)(en,{open:!0,onOpenChange:e=>{e||l()},children:(0,f.jsxs)(sn,{children:[(0,f.jsx)(cn,{className:`niceeval-view-dialog-overlay`}),(0,f.jsxs)(dn,{className:`niceeval-view-dialog`,children:[(0,f.jsxs)(`div`,{className:`niceeval-view-dialog-head`,children:[(0,f.jsx)(gn,{className:`niceeval-view-dialog-title`,children:e}),(0,f.jsx)(bn,{className:`niceeval-view-dialog-close`,"aria-label":r(`report.close`),children:`×`})]}),(0,f.jsx)(`div`,{className:`niceeval-view-dialog-body niceeval-view-report-slot`,children:t})]})]})})}export{Sn as t};