@recombine-ai/bosun 0.5.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/build/client/_app/immutable/assets/0.DHvyfZ2Z.css +1 -0
  2. package/build/client/_app/immutable/assets/0.DHvyfZ2Z.css.br +0 -0
  3. package/build/client/_app/immutable/assets/0.DHvyfZ2Z.css.gz +0 -0
  4. package/build/client/_app/immutable/chunks/{CXaO9BO2.js → B6g_JkSM.js} +1 -1
  5. package/build/client/_app/immutable/chunks/B6g_JkSM.js.br +0 -0
  6. package/build/client/_app/immutable/chunks/B6g_JkSM.js.gz +0 -0
  7. package/build/client/_app/immutable/chunks/{C232NBSx.js → BcH1VEVU.js} +1 -1
  8. package/build/client/_app/immutable/chunks/BcH1VEVU.js.br +0 -0
  9. package/build/client/_app/immutable/chunks/BcH1VEVU.js.gz +0 -0
  10. package/build/client/_app/immutable/chunks/{BPR9ibgw.js → C0bQ35Gc.js} +1 -1
  11. package/build/client/_app/immutable/chunks/C0bQ35Gc.js.br +0 -0
  12. package/build/client/_app/immutable/chunks/C0bQ35Gc.js.gz +0 -0
  13. package/build/client/_app/immutable/chunks/{C9f-9-Wt.js → CEH18jSl.js} +1 -1
  14. package/build/client/_app/immutable/chunks/CEH18jSl.js.br +0 -0
  15. package/build/client/_app/immutable/chunks/CEH18jSl.js.gz +0 -0
  16. package/build/client/_app/immutable/chunks/{CKb0QqXx.js → CSuN09OQ.js} +1 -1
  17. package/build/client/_app/immutable/chunks/CSuN09OQ.js.br +0 -0
  18. package/build/client/_app/immutable/chunks/CSuN09OQ.js.gz +0 -0
  19. package/build/client/_app/immutable/chunks/DUMGgJTb.js +5 -0
  20. package/build/client/_app/immutable/chunks/DUMGgJTb.js.br +0 -0
  21. package/build/client/_app/immutable/chunks/DUMGgJTb.js.gz +0 -0
  22. package/build/client/_app/immutable/chunks/{BAbuLHvf.js → Deds-Bu4.js} +1 -1
  23. package/build/client/_app/immutable/chunks/Deds-Bu4.js.br +0 -0
  24. package/build/client/_app/immutable/chunks/Deds-Bu4.js.gz +0 -0
  25. package/build/client/_app/immutable/chunks/Dt0j4sZQ.js +2 -0
  26. package/build/client/_app/immutable/chunks/Dt0j4sZQ.js.br +0 -0
  27. package/build/client/_app/immutable/chunks/Dt0j4sZQ.js.gz +0 -0
  28. package/build/client/_app/immutable/chunks/{5mKQEBmA.js → DxquQJx9.js} +1 -1
  29. package/build/client/_app/immutable/chunks/DxquQJx9.js.br +0 -0
  30. package/build/client/_app/immutable/chunks/DxquQJx9.js.gz +0 -0
  31. package/build/client/_app/immutable/chunks/{COR6mdUG.js → V9U6b0dU.js} +1 -1
  32. package/build/client/_app/immutable/chunks/V9U6b0dU.js.br +0 -0
  33. package/build/client/_app/immutable/chunks/V9U6b0dU.js.gz +0 -0
  34. package/build/client/_app/immutable/entry/{app.oAXSW36_.js → app.DKvvDDfZ.js} +2 -2
  35. package/build/client/_app/immutable/entry/app.DKvvDDfZ.js.br +0 -0
  36. package/build/client/_app/immutable/entry/app.DKvvDDfZ.js.gz +0 -0
  37. package/build/client/_app/immutable/entry/start.BqlKjodc.js +1 -0
  38. package/build/client/_app/immutable/entry/start.BqlKjodc.js.br +2 -0
  39. package/build/client/_app/immutable/entry/start.BqlKjodc.js.gz +0 -0
  40. package/build/client/_app/immutable/nodes/{0.BVv0ZVNF.js → 0.CN5KvOdW.js} +1 -1
  41. package/build/client/_app/immutable/nodes/0.CN5KvOdW.js.br +0 -0
  42. package/build/client/_app/immutable/nodes/0.CN5KvOdW.js.gz +0 -0
  43. package/build/client/_app/immutable/nodes/{1.BocieXSV.js → 1.B9DiMnGP.js} +1 -1
  44. package/build/client/_app/immutable/nodes/1.B9DiMnGP.js.br +0 -0
  45. package/build/client/_app/immutable/nodes/1.B9DiMnGP.js.gz +0 -0
  46. package/build/client/_app/immutable/nodes/{15.CSwvVdKE.js → 15.DVTjsvsv.js} +1 -1
  47. package/build/client/_app/immutable/nodes/15.DVTjsvsv.js.br +0 -0
  48. package/build/client/_app/immutable/nodes/15.DVTjsvsv.js.gz +0 -0
  49. package/build/client/_app/immutable/nodes/2.Be6ngYER.js +35 -0
  50. package/build/client/_app/immutable/nodes/2.Be6ngYER.js.br +0 -0
  51. package/build/client/_app/immutable/nodes/2.Be6ngYER.js.gz +0 -0
  52. package/build/client/_app/immutable/nodes/{3.Ck1xHlrV.js → 3.CyJzwuPu.js} +1 -1
  53. package/build/client/_app/immutable/nodes/3.CyJzwuPu.js.br +0 -0
  54. package/build/client/_app/immutable/nodes/3.CyJzwuPu.js.gz +0 -0
  55. package/build/client/_app/immutable/nodes/{4.ChQxJfCA.js → 4.Ln69Bcug.js} +1 -1
  56. package/build/client/_app/immutable/nodes/4.Ln69Bcug.js.br +0 -0
  57. package/build/client/_app/immutable/nodes/4.Ln69Bcug.js.gz +0 -0
  58. package/build/client/_app/immutable/nodes/{5.zSWDxriP.js → 5.CvOWF9PV.js} +1 -1
  59. package/build/client/_app/immutable/nodes/5.CvOWF9PV.js.br +0 -0
  60. package/build/client/_app/immutable/nodes/5.CvOWF9PV.js.gz +0 -0
  61. package/build/client/_app/immutable/nodes/8.W_hIdUQV.js +2 -0
  62. package/build/client/_app/immutable/nodes/8.W_hIdUQV.js.br +0 -0
  63. package/build/client/_app/immutable/nodes/8.W_hIdUQV.js.gz +0 -0
  64. package/build/client/_app/immutable/nodes/{9.DRayViio.js → 9.DBodeuqK.js} +1 -1
  65. package/build/client/_app/immutable/nodes/9.DBodeuqK.js.br +0 -0
  66. package/build/client/_app/immutable/nodes/9.DBodeuqK.js.gz +0 -0
  67. package/build/client/_app/version.json +1 -1
  68. package/build/client/_app/version.json.br +0 -0
  69. package/build/client/_app/version.json.gz +0 -0
  70. package/build/server/chunks/{0-DWCTA9UP.js → 0-DRboob7o.js} +3 -3
  71. package/build/server/chunks/{0-DWCTA9UP.js.map → 0-DRboob7o.js.map} +1 -1
  72. package/build/server/chunks/{1-BQuoNKyB.js → 1-CN0hcf5T.js} +2 -2
  73. package/build/server/chunks/{1-BQuoNKyB.js.map → 1-CN0hcf5T.js.map} +1 -1
  74. package/build/server/chunks/{15-A9aJ00Nj.js → 15-BglDKcWD.js} +3 -3
  75. package/build/server/chunks/{15-A9aJ00Nj.js.map → 15-BglDKcWD.js.map} +1 -1
  76. package/build/server/chunks/{2-Dxx2KPQl.js → 2-BJlFzksb.js} +3 -3
  77. package/build/server/chunks/{2-Dxx2KPQl.js.map → 2-BJlFzksb.js.map} +1 -1
  78. package/build/server/chunks/{3-B1_UzEKm.js → 3-CyyHUkrh.js} +3 -3
  79. package/build/server/chunks/{3-B1_UzEKm.js.map → 3-CyyHUkrh.js.map} +1 -1
  80. package/build/server/chunks/{4-CDrszL6M.js → 4-C6AwWXAp.js} +3 -3
  81. package/build/server/chunks/{4-CDrszL6M.js.map → 4-C6AwWXAp.js.map} +1 -1
  82. package/build/server/chunks/5-BECI2rwz.js +9 -0
  83. package/build/server/chunks/{5-BZLccXTR.js.map → 5-BECI2rwz.js.map} +1 -1
  84. package/build/server/chunks/{8-DKi0Ar-v.js → 8-CFQq9WtG.js} +3 -3
  85. package/build/server/chunks/{8-DKi0Ar-v.js.map → 8-CFQq9WtG.js.map} +1 -1
  86. package/build/server/chunks/{9-Bm1zqhnj.js → 9-CC9KFXZB.js} +2 -2
  87. package/build/server/chunks/{9-Bm1zqhnj.js.map → 9-CC9KFXZB.js.map} +1 -1
  88. package/build/server/chunks/{AgentSidebar-DUAwX8yz.js → AgentSidebar-BHphbGfv.js} +2 -2
  89. package/build/server/chunks/{AgentSidebar-DUAwX8yz.js.map → AgentSidebar-BHphbGfv.js.map} +1 -1
  90. package/build/server/chunks/{ChatStepTrace-BraUG8oN.js → ChatStepTrace-Dy9ryvqZ.js} +18 -5
  91. package/build/server/chunks/ChatStepTrace-Dy9ryvqZ.js.map +1 -0
  92. package/build/server/chunks/{Icon-zMNuTF_-.js → Icon-C98HpfFT.js} +5 -1
  93. package/build/server/chunks/Icon-C98HpfFT.js.map +1 -0
  94. package/build/server/chunks/{_layout.svelte-D7OHpm3Z.js → _layout.svelte-BoUClC-X.js} +3 -3
  95. package/build/server/chunks/{_layout.svelte-D7OHpm3Z.js.map → _layout.svelte-BoUClC-X.js.map} +1 -1
  96. package/build/server/chunks/{_layout.svelte-DccBBHFo.js → _layout.svelte-DfPEqRLq.js} +22 -4
  97. package/build/server/chunks/_layout.svelte-DfPEqRLq.js.map +1 -0
  98. package/build/server/chunks/{_page.svelte-87WiaCHD.js → _page.svelte-CBh9OOQz.js} +3 -3
  99. package/build/server/chunks/{_page.svelte-87WiaCHD.js.map → _page.svelte-CBh9OOQz.js.map} +1 -1
  100. package/build/server/chunks/{_page.svelte-Ct157UWV.js → _page.svelte-DR3jiCLg.js} +3 -3
  101. package/build/server/chunks/{_page.svelte-Ct157UWV.js.map → _page.svelte-DR3jiCLg.js.map} +1 -1
  102. package/build/server/chunks/{_page.svelte-BRsvOt3E.js → _page.svelte-Dl2WmUCF.js} +3 -3
  103. package/build/server/chunks/{_page.svelte-BRsvOt3E.js.map → _page.svelte-Dl2WmUCF.js.map} +1 -1
  104. package/build/server/chunks/{_page.svelte-CaMij-Vg.js → _page.svelte-mAhccGhM.js} +384 -94
  105. package/build/server/chunks/_page.svelte-mAhccGhM.js.map +1 -0
  106. package/build/server/index.js +1 -1
  107. package/build/server/index.js.map +1 -1
  108. package/build/server/manifest.js +10 -10
  109. package/build/server/manifest.js.map +1 -1
  110. package/package.json +1 -1
  111. package/src/backend/lib/get-agent-factories.ts +45 -1
  112. package/src/backend/region/router.ts +7 -20
  113. package/src/backend/roleplay/agents.ts +40 -13
  114. package/src/backend/roleplay/router.ts +158 -3
  115. package/src/backend/roleplay/variants.spec.ts +53 -0
  116. package/src/backend/roleplay/variants.ts +325 -0
  117. package/src/backend/tests/analyze.ts +62 -1
  118. package/src/backend/tests/data.ts +97 -84
  119. package/src/backend/tests/router.ts +19 -49
  120. package/src/backend/tests/suite.ts +50 -6
  121. package/build/client/_app/immutable/assets/0.oanZa5fp.css +0 -1
  122. package/build/client/_app/immutable/assets/0.oanZa5fp.css.br +0 -0
  123. package/build/client/_app/immutable/assets/0.oanZa5fp.css.gz +0 -0
  124. package/build/client/_app/immutable/chunks/5mKQEBmA.js.br +0 -0
  125. package/build/client/_app/immutable/chunks/5mKQEBmA.js.gz +0 -0
  126. package/build/client/_app/immutable/chunks/BAbuLHvf.js.br +0 -0
  127. package/build/client/_app/immutable/chunks/BAbuLHvf.js.gz +0 -0
  128. package/build/client/_app/immutable/chunks/BH51oU1k.js +0 -2
  129. package/build/client/_app/immutable/chunks/BH51oU1k.js.br +0 -0
  130. package/build/client/_app/immutable/chunks/BH51oU1k.js.gz +0 -0
  131. package/build/client/_app/immutable/chunks/BPR9ibgw.js.br +0 -0
  132. package/build/client/_app/immutable/chunks/BPR9ibgw.js.gz +0 -0
  133. package/build/client/_app/immutable/chunks/C232NBSx.js.br +0 -0
  134. package/build/client/_app/immutable/chunks/C232NBSx.js.gz +0 -0
  135. package/build/client/_app/immutable/chunks/C9f-9-Wt.js.br +0 -0
  136. package/build/client/_app/immutable/chunks/C9f-9-Wt.js.gz +0 -0
  137. package/build/client/_app/immutable/chunks/CKb0QqXx.js.br +0 -0
  138. package/build/client/_app/immutable/chunks/CKb0QqXx.js.gz +0 -0
  139. package/build/client/_app/immutable/chunks/COR6mdUG.js.br +0 -0
  140. package/build/client/_app/immutable/chunks/COR6mdUG.js.gz +0 -0
  141. package/build/client/_app/immutable/chunks/CXaO9BO2.js.br +0 -0
  142. package/build/client/_app/immutable/chunks/CXaO9BO2.js.gz +0 -0
  143. package/build/client/_app/immutable/chunks/jPRwMprt.js +0 -5
  144. package/build/client/_app/immutable/chunks/jPRwMprt.js.br +0 -0
  145. package/build/client/_app/immutable/chunks/jPRwMprt.js.gz +0 -0
  146. package/build/client/_app/immutable/entry/app.oAXSW36_.js.br +0 -0
  147. package/build/client/_app/immutable/entry/app.oAXSW36_.js.gz +0 -0
  148. package/build/client/_app/immutable/entry/start.C3H3zN_Q.js +0 -1
  149. package/build/client/_app/immutable/entry/start.C3H3zN_Q.js.br +0 -2
  150. package/build/client/_app/immutable/entry/start.C3H3zN_Q.js.gz +0 -0
  151. package/build/client/_app/immutable/nodes/0.BVv0ZVNF.js.br +0 -0
  152. package/build/client/_app/immutable/nodes/0.BVv0ZVNF.js.gz +0 -0
  153. package/build/client/_app/immutable/nodes/1.BocieXSV.js.br +0 -0
  154. package/build/client/_app/immutable/nodes/1.BocieXSV.js.gz +0 -0
  155. package/build/client/_app/immutable/nodes/15.CSwvVdKE.js.br +0 -0
  156. package/build/client/_app/immutable/nodes/15.CSwvVdKE.js.gz +0 -0
  157. package/build/client/_app/immutable/nodes/2.IJ8N1LYx.js +0 -35
  158. package/build/client/_app/immutable/nodes/2.IJ8N1LYx.js.br +0 -0
  159. package/build/client/_app/immutable/nodes/2.IJ8N1LYx.js.gz +0 -0
  160. package/build/client/_app/immutable/nodes/3.Ck1xHlrV.js.br +0 -0
  161. package/build/client/_app/immutable/nodes/3.Ck1xHlrV.js.gz +0 -0
  162. package/build/client/_app/immutable/nodes/4.ChQxJfCA.js.br +0 -0
  163. package/build/client/_app/immutable/nodes/4.ChQxJfCA.js.gz +0 -0
  164. package/build/client/_app/immutable/nodes/5.zSWDxriP.js.br +0 -0
  165. package/build/client/_app/immutable/nodes/5.zSWDxriP.js.gz +0 -0
  166. package/build/client/_app/immutable/nodes/8.B6qN8uAv.js +0 -2
  167. package/build/client/_app/immutable/nodes/8.B6qN8uAv.js.br +0 -0
  168. package/build/client/_app/immutable/nodes/8.B6qN8uAv.js.gz +0 -0
  169. package/build/client/_app/immutable/nodes/9.DRayViio.js.br +0 -0
  170. package/build/client/_app/immutable/nodes/9.DRayViio.js.gz +0 -0
  171. package/build/server/chunks/5-BZLccXTR.js +0 -9
  172. package/build/server/chunks/ChatStepTrace-BraUG8oN.js.map +0 -1
  173. package/build/server/chunks/Icon-zMNuTF_-.js.map +0 -1
  174. package/build/server/chunks/_layout.svelte-DccBBHFo.js.map +0 -1
  175. package/build/server/chunks/_page.svelte-CaMij-Vg.js.map +0 -1
@@ -21,9 +21,9 @@ import { cancelPromptTests, runPromptTestsManaged } from './academy'
21
21
  import { analyzeRunQuotes } from './analyze'
22
22
  import { findPromptIssues } from './prompt-issues'
23
23
  import type { TrpcContext } from '../lib/trpc-context'
24
- import { getProjectDir, getProjectPackageJson, getRootPath } from '../lib/get-root-path'
25
-
26
- const DEFAULT_REGION_CONFIG_PATH = 'src/region-config.json'
24
+ import { getRootPath } from '../lib/get-root-path'
25
+ import { type BosunAgentMeta } from '../lib/get-agent-factories'
26
+ import { getProjectBosunApi } from '../lib/project-api'
27
27
 
28
28
  async function fileExists(p: string): Promise<boolean> {
29
29
  try {
@@ -41,40 +41,11 @@ async function suiteOrConfigExists(baseDir: string, suiteKey: string): Promise<b
41
41
  return (await fileExists(jsonl)) || (await fileExists(legacyJson)) || (await fileExists(cfg))
42
42
  }
43
43
 
44
- async function resolveRegionConfigPath(): Promise<string> {
45
- const projectDir = await getProjectDir()
46
- const pkg = await getProjectPackageJson()
47
- const configured = pkg?.bosun?.regionConfigPath
48
- const rel = typeof configured === 'string' && configured.trim() ? configured.trim() : null
49
- return path.resolve(projectDir, rel ?? DEFAULT_REGION_CONFIG_PATH)
50
- }
51
-
52
- type RegionMeta = {
53
- defaultRegion: string | null
54
- availableRegions: string[]
55
- }
56
-
57
- async function loadRegionMeta(agent: string): Promise<RegionMeta | null> {
58
- const configPath = await resolveRegionConfigPath()
59
- if (!(await fileExists(configPath))) return null
60
-
61
- const raw = await readFile(configPath, 'utf-8')
62
- const parsed = JSON.parse(raw) as any
63
-
64
- const devConfig = parsed?.config?.development?.[agent]
65
- const agentStrings = parsed?.strings?.[agent]
66
-
67
- const configRegions = devConfig && typeof devConfig === 'object' ? Object.keys(devConfig) : []
68
- const stringRegions =
69
- agentStrings && typeof agentStrings === 'object' ? Object.keys(agentStrings) : []
70
-
71
- const availableRegions = configRegions.filter((r) => stringRegions.includes(r))
72
- const defaultRegion = typeof parsed?.defaultRegion === 'string' ? parsed.defaultRegion : null
73
- return { defaultRegion, availableRegions }
74
- }
75
-
76
- async function migrateLegacySuiteToDefaultRegion(baseDir: string, agent: string): Promise<void> {
77
- const meta = await loadRegionMeta(agent)
44
+ async function migrateLegacySuiteToDefaultRegion(
45
+ baseDir: string,
46
+ agent: string,
47
+ meta: BosunAgentMeta | null
48
+ ): Promise<void> {
78
49
  if (!meta || meta.availableRegions.length === 0) return
79
50
 
80
51
  const defaultRegion =
@@ -134,24 +105,23 @@ async function resolveSuiteSelection(
134
105
  // We never substitute legacy tests for the wrong region.
135
106
  const baseDir = path.dirname(await getRootPath())
136
107
 
137
- const meta = await loadRegionMeta(agentId)
138
- const isRegionScoped = !!meta && meta.availableRegions.length > 0
108
+ const bosunApi = await getProjectBosunApi()
109
+ const meta = bosunApi ? await bosunApi.getAgentMeta(agentId) : null
110
+ const isRegionScoped = meta?.testScope === 'region'
139
111
  if (!isRegionScoped) return { suiteKey: agentId, agentId }
140
112
 
141
- await migrateLegacySuiteToDefaultRegion(baseDir, agentId)
113
+ await migrateLegacySuiteToDefaultRegion(baseDir, agentId, meta)
142
114
 
143
- const resolvedRegion = (region ?? '').trim()
144
- if (!resolvedRegion) {
145
- throw new Error(
146
- `Region is required for tests when regional config is present for agent '${agentId}'.`
147
- )
115
+ if (!bosunApi) {
116
+ throw new Error(`Project does not export bosunApi, cannot resolve suite for '${agentId}'.`)
148
117
  }
149
118
 
150
- if (!meta.availableRegions.includes(resolvedRegion)) {
151
- throw new Error(`Region '${resolvedRegion}' is not configured for agent '${agentId}'.`)
119
+ const resolved = await bosunApi.resolveTestSuite({ agentId, region })
120
+ return {
121
+ suiteKey: resolved.suiteKey,
122
+ agentId,
123
+ region: resolved.resolvedRegion ?? undefined
152
124
  }
153
-
154
- return { suiteKey: `${agentId}.${resolvedRegion}`, agentId, region: resolvedRegion }
155
125
  }
156
126
 
157
127
  export function createTestsRouter(t: TRPCRootObject<TrpcContext, any, any>) {
@@ -1,4 +1,4 @@
1
- import { readFile, writeFile, access, mkdir } from 'node:fs/promises'
1
+ import { readFile, writeFile, access, mkdir, rename, unlink } from 'node:fs/promises'
2
2
  import path from 'node:path'
3
3
  import { getRootPath } from '../lib/get-root-path'
4
4
  import { z } from 'zod'
@@ -34,11 +34,35 @@ export type TestRow = z.infer<typeof TestRowSchema>
34
34
  export type SuiteMeta = z.infer<typeof SuiteMetaSchema>
35
35
  export type TestSuite = z.infer<typeof TestSuiteSchema>
36
36
 
37
+ const suiteMutationQueue = new Map<string, Promise<void>>()
38
+
37
39
  export async function getSuiteFilePath(agent: string): Promise<string> {
38
40
  const base = path.dirname(await getRootPath())
39
41
  return path.resolve(base, `${agent}.tests.jsonl`)
40
42
  }
41
43
 
44
+ export async function withSuiteMutationLock<T>(agent: string, fn: () => Promise<T>): Promise<T> {
45
+ const key = agent
46
+ const previous = suiteMutationQueue.get(key) ?? Promise.resolve()
47
+ let release!: () => void
48
+ const gate = new Promise<void>((resolve) => {
49
+ release = resolve
50
+ })
51
+ const queued = previous.catch(() => {}).then(() => gate)
52
+ suiteMutationQueue.set(key, queued)
53
+
54
+ await previous.catch(() => {})
55
+
56
+ try {
57
+ return await fn()
58
+ } finally {
59
+ release()
60
+ if (suiteMutationQueue.get(key) === queued) {
61
+ suiteMutationQueue.delete(key)
62
+ }
63
+ }
64
+ }
65
+
42
66
  export async function readSuite(agent: string): Promise<TestSuite> {
43
67
  const jsonlPath = await getSuiteFilePath(agent)
44
68
  const jsonPathLegacy = jsonlPath.replace(/\.jsonl$/, '.json')
@@ -64,7 +88,7 @@ export async function readSuite(agent: string): Promise<TestSuite> {
64
88
  return { version: 1, meta: meta || {}, tests: rows }
65
89
  } catch (e) {
66
90
  console.error(e)
67
- throw new Error(`Error loading tests at path '${jsonlPath}'`)
91
+ throw new Error(`Error loading tests at path '${jsonlPath}'`, { cause: e })
68
92
  }
69
93
  }
70
94
 
@@ -73,13 +97,33 @@ export async function writeSuite(agent: string, suite: TestSuite): Promise<void>
73
97
  await mkdir(path.dirname(jsonlPath), { recursive: true })
74
98
  const header = { version: 1, meta: suite.meta || {} }
75
99
  const lines = [JSON.stringify(header), ...suite.tests.map((r) => JSON.stringify(normalizeRow(r)))]
76
- await writeFile(jsonlPath, lines.join('\n') + '\n', 'utf8')
100
+ const body = lines.join('\n') + '\n'
101
+ const dir = path.dirname(jsonlPath)
102
+ const base = path.basename(jsonlPath)
103
+ const tmpPath = path.join(
104
+ dir,
105
+ `.${base}.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`
106
+ )
107
+
108
+ await writeFile(tmpPath, body, 'utf8')
109
+ try {
110
+ await rename(tmpPath, jsonlPath)
111
+ } catch {
112
+ try {
113
+ await unlink(jsonlPath)
114
+ } catch {
115
+ // ignore
116
+ }
117
+ await rename(tmpPath, jsonlPath)
118
+ }
77
119
  }
78
120
 
79
121
  export async function upsertSuiteMeta(agent: string, metaPatch: SuiteMeta): Promise<void> {
80
- const suite = await readSuite(agent).catch(() => ({ version: 1, tests: [] }) as TestSuite)
81
- suite.meta = { ...(suite.meta || {}), ...(metaPatch || {}) }
82
- await writeSuite(agent, suite)
122
+ await withSuiteMutationLock(agent, async () => {
123
+ const suite = await readSuite(agent).catch(() => ({ version: 1, tests: [] }) as TestSuite)
124
+ suite.meta = { ...(suite.meta || {}), ...(metaPatch || {}) }
125
+ await writeSuite(agent, suite)
126
+ })
83
127
  }
84
128
 
85
129
  export function normalizeRow(r: any): TestRow {
@@ -1 +0,0 @@
1
- *,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:DarkerGrotesque,ui-sans-serif,system-ui,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}[type=text],input:where(:not([type])),[type=email],[type=url],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=week],[multiple],textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}[type=text]:focus,input:where(:not([type])):focus,[type=email]:focus,[type=url]:focus,[type=password]:focus,[type=number]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=month]:focus,[type=search]:focus,[type=tel]:focus,[type=time]:focus,[type=week]:focus,[multiple]:focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 2px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}@media (forced-colors: active){[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}@media (forced-colors: active){[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:hover,[type=checkbox]:checked:focus,[type=radio]:checked:hover,[type=radio]:checked:focus{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}@media (forced-colors: active){[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:hover,[type=checkbox]:indeterminate:focus{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-2{top:.5rem;right:.5rem;bottom:.5rem;left:.5rem}.inset-x-0{left:0;right:0}.-left-28{left:-7rem}.bottom-0{bottom:0}.bottom-1{bottom:.25rem}.bottom-2{bottom:.5rem}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:.5rem}.right-0{right:0}.right-2{right:.5rem}.right-6{right:1.5rem}.top-0{top:0}.top-1{top:.25rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-full{top:100%}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.z-popover{z-index:1300}.m-0{margin:0}.m-4{margin:1rem}.m-auto{margin:auto}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.ml-9{margin-left:2.25rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-48{margin-top:12rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-cell{display:table-cell}.table-row{display:table-row}.grid{display:grid}.contents{display:contents}.hidden{display:none}.size-5{width:1.25rem;height:1.25rem}.size-6{width:1.5rem;height:1.5rem}.size-7{width:1.75rem;height:1.75rem}.h-0\.5{height:.125rem}.h-14{height:3.5rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-\[55vh\]{height:55vh}.h-\[65vh\]{height:65vh}.h-\[70vh\]{height:70vh}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.h-xl{height:90px}.max-h-60{max-height:15rem}.max-h-96{max-height:24rem}.max-h-\[28vh\]{max-height:28vh}.max-h-\[35vh\]{max-height:35vh}.max-h-\[60vh\]{max-height:60vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(90vh-7rem\)\]{max-height:calc(90vh - 7rem)}.min-h-0{min-height:0px}.min-h-11{min-height:2.75rem}.min-h-96{min-height:24rem}.min-h-\[260px\]{min-height:260px}.\!w-\[80vw\]{width:80vw!important}.\!w-\[85vw\]{width:85vw!important}.w-1\/3{width:33.333333%}.w-16{width:4rem}.w-2\/3{width:66.666667%}.w-32{width:8rem}.w-36{width:9rem}.w-4{width:1rem}.w-40{width:10rem}.w-44{width:11rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-50vw{width:50vw}.w-56{width:14rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-80{width:20rem}.w-\[95vw\]{width:95vw}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-xl{width:90px}.min-w-0{min-width:0px}.min-w-\[680px\]{min-width:680px}.min-w-fit{min-width:-moz-fit-content;min-width:fit-content}.min-w-full{min-width:100%}.min-w-xl{min-width:90px}.\!max-w-3xl{max-width:48rem!important}.\!max-w-4xl{max-width:56rem!important}.\!max-w-5xl{max-width:64rem!important}.max-w-2xl{max-width:42rem}.max-w-6xl{max-width:72rem}.max-w-\[70\%\]{max-width:70%}.max-w-\[83\%\]{max-width:83%}.max-w-\[90\%\]{max-width:90%}.max-w-\[min\(26rem\,90vw\)\]{max-width:min(26rem,90vw)}.flex-1{flex:1 1 0%}.flex-none{flex:none}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.table-auto{table-layout:auto}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-110{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-text{-webkit-user-select:text;-moz-user-select:text;user-select:text}.resize{resize:both}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[1fr\,2\.25rem\]{grid-template-columns:1fr 2.25rem}.grid-cols-\[2\.25rem\,1fr\]{grid-template-columns:2.25rem 1fr}.grid-cols-\[minmax\(140px\,2fr\)_minmax\(0\,10fr\)_minmax\(0\,11fr\)\]{grid-template-columns:minmax(140px,2fr) minmax(0,10fr) minmax(0,11fr)}.grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.place-items-center{place-items:center}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-0{row-gap:0px}.gap-y-1{row-gap:.25rem}.gap-y-2{row-gap:.5rem}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.justify-self-end{justify-self:end}.justify-self-center{justify-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.text-nowrap{text-wrap:nowrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.\!rounded-none{border-radius:0!important}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:8px}.rounded-md{border-radius:5px}.rounded-none{border-radius:0}.rounded-sm{border-radius:3px}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.\!border{border-width:1px!important}.border{border-width:1px}.border-0{border-width:0px}.border-thin{border-width:.4px}.border-b{border-bottom-width:1px}.border-b-thin{border-bottom-width:.4px}.border-r{border-right-width:1px}.border-r-thin{border-right-width:.4px}.border-t{border-top-width:1px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-none{border-style:none}.\!border-rc-gray-500{--tw-border-opacity: 1 !important;border-color:rgb(75 75 75 / var(--tw-border-opacity, 1))!important}.border-emerald-500{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))}.border-gray-600{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.border-rc-gray-050{border-color:#ffffff1a}.border-rc-gray-110{border-color:#dddddd1a}.border-rc-gray-300{--tw-border-opacity: 1;border-color:rgb(118 118 118 / var(--tw-border-opacity, 1))}.border-rc-gray-300\/40{border-color:#76767666}.border-rc-gray-500{--tw-border-opacity: 1;border-color:rgb(75 75 75 / var(--tw-border-opacity, 1))}.border-rc-gray-600{--tw-border-opacity: 1;border-color:rgb(55 55 55 / var(--tw-border-opacity, 1))}.border-rc-gray-650{--tw-border-opacity: 1;border-color:rgb(38 38 38 / var(--tw-border-opacity, 1))}.border-rc-gray-700{--tw-border-opacity: 1;border-color:rgb(34 34 34 / var(--tw-border-opacity, 1))}.border-rc-gray-700\/60{border-color:#2229}.border-rc-green-450{border-color:#0457431a}.border-rc-red-600{--tw-border-opacity: 1;border-color:rgb(255 102 102 / var(--tw-border-opacity, 1))}.border-red-500{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.border-red-700\/60{border-color:#b91c1c99}.border-transparent{border-color:transparent}.border-r-gray-700\/50{border-right-color:#37415180}.border-r-rc-gray-600{--tw-border-opacity: 1;border-right-color:rgb(55 55 55 / var(--tw-border-opacity, 1))}.\!bg-rc-gray-700{--tw-bg-opacity: 1 !important;background-color:rgb(34 34 34 / var(--tw-bg-opacity, 1))!important}.bg-black\/20{background-color:#0003}.bg-black\/50{background-color:#00000080}.bg-black\/60{background-color:#0009}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-600{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.bg-rc-gray-600{--tw-bg-opacity: 1;background-color:rgb(55 55 55 / var(--tw-bg-opacity, 1))}.bg-rc-gray-700{--tw-bg-opacity: 1;background-color:rgb(34 34 34 / var(--tw-bg-opacity, 1))}.bg-rc-gray-700\/70{background-color:#222222b3}.bg-rc-gray-800{--tw-bg-opacity: 1;background-color:rgb(29 29 29 / var(--tw-bg-opacity, 1))}.bg-rc-gray-800\/40{background-color:#1d1d1d66}.bg-rc-gray-900{--tw-bg-opacity: 1;background-color:rgb(25 25 25 / var(--tw-bg-opacity, 1))}.bg-rc-gray-900\/40{background-color:#19191966}.bg-rc-gray-900\/60{background-color:#19191999}.bg-rc-gray-930{background-color:#00000003}.bg-rc-gray-980{--tw-bg-opacity: 1;background-color:rgb(24 24 24 / var(--tw-bg-opacity, 1))}.bg-rc-green-200{--tw-bg-opacity: 1;background-color:rgb(0 181 138 / var(--tw-bg-opacity, 1))}.bg-rc-green-350{background-color:#09754f99}.bg-rc-green-700{--tw-bg-opacity: 1;background-color:rgb(0 90 69 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-950\/30{background-color:#450a0a4d}.bg-red-950\/40{background-color:#450a0a66}.bg-red-950\/60{background-color:#450a0a99}.bg-transparent{background-color:transparent}.object-contain{-o-object-fit:contain;object-fit:contain}.\!p-2{padding:.5rem!important}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.\!px-3{padding-left:.75rem!important;padding-right:.75rem!important}.\!py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-8{padding-top:2rem;padding-bottom:2rem}.\!pb-1{padding-bottom:.25rem!important}.\!pr-8{padding-right:2rem!important}.\!pt-\[5px\]{padding-top:5px!important}.pb-1{padding-bottom:.25rem}.pb-16{padding-bottom:4rem}.pb-2{padding-bottom:.5rem}.pb-2\.5{padding-bottom:.625rem}.pb-3{padding-bottom:.75rem}.pb-5{padding-bottom:1.25rem}.pb-6{padding-bottom:1.5rem}.pb-xs{padding-bottom:2px}.pl-11{padding-left:2.75rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pr-1{padding-right:.25rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pr-8{padding-right:2rem}.pr-80{padding-right:20rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-40{padding-top:10rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.align-top{vertical-align:top}.align-text-bottom{vertical-align:text-bottom}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:DarkerGrotesque,ui-sans-serif,system-ui,Segoe UI,Roboto,Helvetica,Arial,sans-serif}.text-4xl{font-size:2.25rem;line-height:1.2}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[16px\]{font-size:16px}.text-base{font-size:.875rem;line-height:1.2}.text-lg{font-size:1.125rem;line-height:1.2;letter-spacing:.005em}.text-sm{font-size:.8125rem;line-height:1.25;letter-spacing:.005em}.text-xl{font-size:1.25rem;line-height:.9;letter-spacing:.005em}.text-xs{font-size:.75rem;line-height:1.1;letter-spacing:.01em}.\!font-medium{font-weight:500!important}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-\[1\.2\]{line-height:1.2}.leading-none{line-height:1}.leading-snug{line-height:1.375}.tracking-wide{letter-spacing:.025em}.text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-inherit{color:inherit}.text-rc-blue{--tw-text-opacity: 1;color:rgb(86 156 214 / var(--tw-text-opacity, 1))}.text-rc-gray-100{--tw-text-opacity: 1;color:rgb(221 221 221 / var(--tw-text-opacity, 1))}.text-rc-gray-200{--tw-text-opacity: 1;color:rgb(175 175 175 / var(--tw-text-opacity, 1))}.text-rc-gray-200\/70{color:#afafafb3}.text-rc-gray-300{--tw-text-opacity: 1;color:rgb(118 118 118 / var(--tw-text-opacity, 1))}.text-rc-gray-400{--tw-text-opacity: 1;color:rgb(99 99 99 / var(--tw-text-opacity, 1))}.text-rc-gray-400\/70{color:#636363b3}.text-rc-gray-500{--tw-text-opacity: 1;color:rgb(75 75 75 / var(--tw-text-opacity, 1))}.text-rc-green-200{--tw-text-opacity: 1;color:rgb(0 181 138 / var(--tw-text-opacity, 1))}.text-rc-green-350{color:#09754f99}.text-rc-green-400{--tw-text-opacity: 1;color:rgb(4 87 67 / var(--tw-text-opacity, 1))}.text-rc-red-600{--tw-text-opacity: 1;color:rgb(255 102 102 / var(--tw-text-opacity, 1))}.text-rc-red-800{--tw-text-opacity: 1;color:rgb(255 129 101 / var(--tw-text-opacity, 1))}.text-red-200{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.placeholder-rc-gray-300::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(118 118 118 / var(--tw-placeholder-opacity, 1))}.placeholder-rc-gray-300::placeholder{--tw-placeholder-opacity: 1;color:rgb(118 118 118 / var(--tw-placeholder-opacity, 1))}.\!accent-rc-gray-600{accent-color:#373737!important}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-65{opacity:.65}.opacity-80{opacity:.8}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-inner-white-soft{--tw-shadow: inset 0 0 10px 0 rgba(255,255,255,.1);--tw-shadow-colored: inset 0 0 10px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 0 0 1px rgba(118, 118, 118, .4);--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-red-500\/60{--tw-ring-color: rgb(239 68 68 / .6)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-2xl{--tw-backdrop-blur: blur(40px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-3xl{--tw-backdrop-blur: blur(64px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-md{--tw-backdrop-blur: blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-xl{--tw-backdrop-blur: blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.analysis-quote{border-radius:2px}.analysis-quote-focus{box-shadow:inset 0 0 0 1px #fecacaf2,inset 0 0 0 3px #dc262640;border-radius:2px}.analysis-quote-l1{background:#dc26262e}.analysis-quote-l2{background:#dc26263d}.analysis-quote-l3{background:#dc26264d}.analysis-quote-l4{background:#dc26265c}.analysis-quote-l5{background:#dc26266b}.analysis-quote-l6{background:#dc26267a}.analysis-quote-l7{background:#dc26268a}.analysis-quote-l8{background:#dc262699}.analysis-quote-l9{background:#dc2626a8}.analysis-quote-l10{background:#dc2626b8}.monaco-editor .test-expected-output{color:#00b58a!important}.monaco-editor .test-expected-output-tag{color:#ce9178!important}.placeholder\:text-gray-500::-moz-placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.placeholder\:text-gray-500::placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.last\:border-b-0:last-child{border-bottom-width:0px}.checked\:border-rc-gray-200:checked{--tw-border-opacity: 1;border-color:rgb(175 175 175 / var(--tw-border-opacity, 1))}.checked\:bg-rc-gray-600:checked{--tw-bg-opacity: 1;background-color:rgb(55 55 55 / var(--tw-bg-opacity, 1))}.hover\:border:hover{border-width:1px}.hover\:border-gray-500:hover{--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity, 1))}.hover\:border-rc-gray-200:hover{--tw-border-opacity: 1;border-color:rgb(175 175 175 / var(--tw-border-opacity, 1))}.hover\:border-rc-gray-400:hover{--tw-border-opacity: 1;border-color:rgb(99 99 99 / var(--tw-border-opacity, 1))}.hover\:border-rc-gray-500:hover{--tw-border-opacity: 1;border-color:rgb(75 75 75 / var(--tw-border-opacity, 1))}.hover\:border-rc-green-200:hover{--tw-border-opacity: 1;border-color:rgb(0 181 138 / var(--tw-border-opacity, 1))}.hover\:bg-rc-gray-600:hover{--tw-bg-opacity: 1;background-color:rgb(55 55 55 / var(--tw-bg-opacity, 1))}.hover\:bg-rc-gray-650:hover{--tw-bg-opacity: 1;background-color:rgb(38 38 38 / var(--tw-bg-opacity, 1))}.hover\:bg-rc-gray-700:hover{--tw-bg-opacity: 1;background-color:rgb(34 34 34 / var(--tw-bg-opacity, 1))}.hover\:bg-rc-gray-700\/70:hover{background-color:#222222b3}.hover\:bg-rc-gray-800:hover{--tw-bg-opacity: 1;background-color:rgb(29 29 29 / var(--tw-bg-opacity, 1))}.hover\:bg-rc-gray-800\/40:hover{background-color:#1d1d1d66}.hover\:bg-rc-gray-900:hover{--tw-bg-opacity: 1;background-color:rgb(25 25 25 / var(--tw-bg-opacity, 1))}.hover\:bg-rc-green-250:hover{background-color:#005c3b99}.hover\:bg-double-gradient:hover{background-image:linear-gradient(0deg,#00000003,#00000003),linear-gradient(0deg,#ffffff0d,#ffffff0d)}.hover\:text-gray-100:hover{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.hover\:text-gray-200:hover{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.hover\:text-rc-gray-100:hover{--tw-text-opacity: 1;color:rgb(221 221 221 / var(--tw-text-opacity, 1))}.hover\:text-rc-gray-200:hover{--tw-text-opacity: 1;color:rgb(175 175 175 / var(--tw-text-opacity, 1))}.hover\:text-rc-green-100:hover{--tw-text-opacity: 1;color:rgb(147 255 109 / var(--tw-text-opacity, 1))}.hover\:text-rc-green-250:hover{color:#005c3b99}.hover\:underline:hover{text-decoration-line:underline}.focus\:border-gray-500:focus{--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity, 1))}.focus\:border-rc-gray-300:focus{--tw-border-opacity: 1;border-color:rgb(118 118 118 / var(--tw-border-opacity, 1))}.focus\:border-rc-gray-400:focus{--tw-border-opacity: 1;border-color:rgb(99 99 99 / var(--tw-border-opacity, 1))}.focus\:bg-rc-gray-400:focus{--tw-bg-opacity: 1;background-color:rgb(99 99 99 / var(--tw-bg-opacity, 1))}.focus\:bg-rc-green-200:focus{--tw-bg-opacity: 1;background-color:rgb(0 181 138 / var(--tw-bg-opacity, 1))}.focus\:bg-double-gradient:focus{background-image:linear-gradient(0deg,#00000003,#00000003),linear-gradient(0deg,#ffffff0d,#ffffff0d)}.focus\:text-gray-100:focus{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-0:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-rc-gray-300:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(118 118 118 / var(--tw-ring-opacity, 1))}.focus-visible\:border-rc-gray-400:focus-visible{--tw-border-opacity: 1;border-color:rgb(99 99 99 / var(--tw-border-opacity, 1))}.focus-visible\:shadow-none:focus-visible{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:outline:focus-visible{outline-style:solid}.focus-visible\:outline-2:focus-visible{outline-width:2px}.focus-visible\:-outline-offset-2:focus-visible{outline-offset:-2px}.active\:border-rc-gray-200:active{--tw-border-opacity: 1;border-color:rgb(175 175 175 / var(--tw-border-opacity, 1))}.active\:border-rc-gray-400:active{--tw-border-opacity: 1;border-color:rgb(99 99 99 / var(--tw-border-opacity, 1))}.active\:bg-rc-gray-600:active{--tw-bg-opacity: 1;background-color:rgb(55 55 55 / var(--tw-bg-opacity, 1))}.active\:bg-rc-green-250:active{background-color:#005c3b99}.active\:bg-double-gradient:active{background-image:linear-gradient(0deg,#00000003,#00000003),linear-gradient(0deg,#ffffff0d,#ffffff0d)}.active\:text-gray-100:active{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:hover\:bg-transparent:hover:disabled{background-color:transparent}.disabled\:hover\:text-rc-gray-400:hover:disabled{--tw-text-opacity: 1;color:rgb(99 99 99 / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-rc-gray-200{--tw-text-opacity: 1;color:rgb(175 175 175 / var(--tw-text-opacity, 1))}.aria-selected\:text-rc-green-200[aria-selected=true]{--tw-text-opacity: 1;color:rgb(0 181 138 / var(--tw-text-opacity, 1))}.aria-selected\:after\:absolute[aria-selected=true]:after{content:var(--tw-content);position:absolute}.aria-selected\:after\:inset-x-0[aria-selected=true]:after{content:var(--tw-content);left:0;right:0}.aria-selected\:after\:bottom-0[aria-selected=true]:after{content:var(--tw-content);bottom:0}.aria-selected\:after\:h-0\.5[aria-selected=true]:after{content:var(--tw-content);height:.125rem}.aria-selected\:after\:bg-rc-green-200[aria-selected=true]:after{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(0 181 138 / var(--tw-bg-opacity, 1))}.aria-selected\:after\:content-\[\'\'\][aria-selected=true]:after{--tw-content: "";content:var(--tw-content)}@media (min-width: 640px){.sm\:max-w-\[80\%\]{max-width:80%}.sm\:max-w-\[85\%\]{max-width:85%}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 768px){.md\:max-w-\[70\%\]{max-width:70%}.md\:max-w-\[75\%\]{max-width:75%}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 1024px){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}body{margin:0;padding:0;font-family:DarkerGrotesque,ui-sans-serif,system-ui,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:.875rem;line-height:1.2;font-weight:400;--tw-text-opacity: 1;color:rgb(118 118 118 / var(--tw-text-opacity, 1))}*{margin:0;padding:0;box-sizing:border-box}
@@ -1,2 +0,0 @@
1
- import{I as ie,z as L,J as ae,h as B,a0 as ze,N as De,O as He,P as ve,Q as x,R as q,ak as C,al as pe,am as qe,an as V,ao as Pe,x as F,ap as ce,aq as we,X as Ve,ar as de,as as ge,at as be,au as X,av as Ae,aw as Ue,ax as G,ay as Ye,az as W,aA as U,aB as Ee,aC as xe,aD as Fe,aE as Ke,a2 as me,aF as H,aG as ke,M as Te,aH as Xe,t as Le,aI as Ge,aJ as Je,aK as Qe,aL as he,aM as We,L as te,q as Ze,U as $e,aN as je,aO as ea,A as aa,aP as ra,aQ as ia,aR as ta,aS as sa,aT as fa,aU as la,aV as ua,B as na,aW as oa,aX as va,aY as ca,o as da,a as ha,b as Z,l as _a,ag as pa,d as wa,r as ga,f as ba}from"./DhhcRlSv.js";import"./CWj6FrbW.js";import{i as Aa}from"./DmeFJZBo.js";import{i as Ea,n as ma,c as ka}from"./CFWooaMM.js";import{a as Ta,c as Ie,s as Se}from"./WVoYdfwC.js";import{p as $}from"./UO83B563.js";function Ua(e,r){return r}function La(e,r,a){for(var i=e.items,s=[],u=r.length,l=0;l<u;l++)xe(r[l].e,s,!0);var d=u>0&&s.length===0&&a!==null;if(d){var v=a.parentNode;Fe(v),v.append(a),i.clear(),M(e,r[0].prev,r[u-1].next)}Ke(s,()=>{for(var h=0;h<u;h++){var _=r[h];d||(i.delete(_.k),M(e,_.prev,_.next)),U(_.e,!d)}})}function Ya(e,r,a,i,s,u=null){var l=e,d={flags:r,items:new Map,first:null},v=(r&ke)!==0;if(v){var h=e;l=L?x(H(h)):h.appendChild(we())}L&&ae();var _=null,p=!1,c=new Map,m=ze(()=>{var A=a();return be(A)?A:A==null?[]:ge(A)}),n,g;function o(){Ia(g,n,d,c,l,s,r,i,a),u!==null&&(n.length===0?_?Ae(_):_=V(()=>u(l)):_!==null&&Ue(_,()=>{_=null}))}ie(()=>{g??(g=me),n=B(m);var A=n.length;if(p&&A===0)return;p=A===0;let T=!1;if(L){var I=De(l)===He;I!==(A===0)&&(l=ve(),x(l),q(!1),T=!0)}if(L){for(var b=null,k,t=0;t<A;t++){if(C.nodeType===pe&&C.data===qe){l=C,T=!0,q(!1);break}var f=n[t],w=i(f,t);k=re(C,d,b,null,f,w,t,s,r,a),d.items.set(w,k),b=k}A>0&&x(ve())}if(L)A===0&&u&&(_=V(()=>u(l)));else if(Pe()){var S=new Set,E=F;for(t=0;t<A;t+=1){f=n[t],w=i(f,t);var N=d.items.get(w)??c.get(w);N?r&(G|X)&&ye(N,f,t,r):(k=re(null,d,null,null,f,w,t,s,r,a,!0),c.set(w,k)),S.add(w)}for(const[y,Y]of d.items)S.has(y)||E.skipped_effects.add(Y.e);E.add_callback(o)}else o();T&&q(!0),B(m)}),L&&(l=C)}function Ia(e,r,a,i,s,u,l,d,v){var fe,le,ue,ne;var h=(l&Xe)!==0,_=(l&(G|X))!==0,p=r.length,c=a.items,m=a.first,n=m,g,o=null,A,T=[],I=[],b,k,t,f;if(h)for(f=0;f<p;f+=1)b=r[f],k=d(b,f),t=c.get(k),t!==void 0&&((fe=t.a)==null||fe.measure(),(A??(A=new Set)).add(t));for(f=0;f<p;f+=1){if(b=r[f],k=d(b,f),t=c.get(k),t===void 0){var w=i.get(k);if(w!==void 0){i.delete(k),c.set(k,w);var S=o?o.next:n;M(a,o,w),M(a,w,S),j(w,S,s),o=w}else{var E=n?n.e.nodes_start:s;o=re(E,a,o,o===null?a.first:o.next,b,k,f,u,l,v)}c.set(k,o),T=[],I=[],n=o.next;continue}if(_&&ye(t,b,f,l),t.e.f&W&&(Ae(t.e),h&&((le=t.a)==null||le.unfix(),(A??(A=new Set)).delete(t))),t!==n){if(g!==void 0&&g.has(t)){if(T.length<I.length){var N=I[0],y;o=N.prev;var Y=T[0],J=T[T.length-1];for(y=0;y<T.length;y+=1)j(T[y],N,s);for(y=0;y<I.length;y+=1)g.delete(I[y]);M(a,Y.prev,J.next),M(a,o,Y),M(a,J,N),n=N,o=J,f-=1,T=[],I=[]}else g.delete(t),j(t,n,s),M(a,t.prev,t.next),M(a,t,o===null?a.first:o.next),M(a,o,t),o=t;continue}for(T=[],I=[];n!==null&&n.k!==k;)n.e.f&W||(g??(g=new Set)).add(n),I.push(n),n=n.next;if(n===null)continue;t=n}T.push(t),o=t,n=t.next}if(n!==null||g!==void 0){for(var R=g===void 0?[]:ge(g);n!==null;)n.e.f&W||R.push(n),n=n.next;var Q=R.length;if(Q>0){var Be=l&ke&&p===0?s:null;if(h){for(f=0;f<Q;f+=1)(ue=R[f].a)==null||ue.measure();for(f=0;f<Q;f+=1)(ne=R[f].a)==null||ne.fix()}La(a,R,Be)}}h&&Te(()=>{var oe;if(A!==void 0)for(t of A)(oe=t.a)==null||oe.apply()}),e.first=a.first&&a.first.e,e.last=o&&o.e;for(var Re of i.values())U(Re.e);i.clear()}function ye(e,r,a,i){i&G&&ce(e.v,r),i&X?ce(e.i,a):e.i=a}function re(e,r,a,i,s,u,l,d,v,h,_){var p=(v&G)!==0,c=(v&Ye)===0,m=p?c?Ve(s,!1,!1):de(s):s,n=v&X?de(l):l,g={i:n,v:m,k:u,a:null,e:null,prev:a,next:i};try{if(e===null){var o=document.createDocumentFragment();o.append(e=we())}return g.e=V(()=>d(e,m,n,h),L),g.e.prev=a&&a.e,g.e.next=i&&i.e,a===null?_||(r.first=g):(a.next=g,a.e.next=g.e),i!==null&&(i.prev=g,i.e.prev=g.e),g}finally{}}function j(e,r,a){for(var i=e.next?e.next.e.nodes_start:a,s=r?r.e.nodes_start:a,u=e.e.nodes_start;u!==null&&u!==i;){var l=Ee(u);s.before(u),u=l}}function M(e,r,a){r===null?e.first=a:(r.next=a,r.e.next=a&&a.e),a!==null&&(a.prev=r,a.e.prev=r&&r.e)}function Sa(e,r,a=!1,i=!1,s=!1){var u=e,l="";Le(()=>{var d=me;if(l===(l=r()??"")){L&&ae();return}if(d.nodes_start!==null&&(Ge(d.nodes_start,d.nodes_end),d.nodes_start=d.nodes_end=null),l!==""){if(L){C.data;for(var v=ae(),h=v;v!==null&&(v.nodeType!==pe||v.data!=="");)h=v,v=Ee(v);if(v===null)throw Je(),Qe;he(C,h),u=x(v);return}var _=l+"";a?_=`<svg>${_}</svg>`:i&&(_=`<math>${_}</math>`);var p=We(_);if((a||i)&&(p=H(p)),he(H(p),p.lastChild),a||i)for(;H(p);)u.before(H(p));else u.before(p)}})}function ya(e,r){var a=void 0,i;ie(()=>{a!==(a=r())&&(i&&(U(i),i=null),a&&(i=V(()=>{te(()=>a(e))})))})}function ee(e,r={},a,i){for(var s in a){var u=a[s];r[s]!==u&&(a[s]==null?e.style.removeProperty(s):e.style.setProperty(s,u,i))}}function Ma(e,r,a,i){var s=e.__style;if(L||s!==r){var u=Ta(r,i);(!L||u!==e.getAttribute("style"))&&(u==null?e.removeAttribute("style"):e.style.cssText=u),e.__style=r}else i&&(Array.isArray(i)?(ee(e,a==null?void 0:a[0],i[0]),ee(e,a==null?void 0:a[1],i[1],"important")):ee(e,a,i));return i}function K(e,r,a=!1){if(e.multiple){if(r==null)return;if(!be(r))return je();for(var i of e.options)i.selected=r.includes(P(i));return}for(i of e.options){var s=P(i);if(ea(s,r)){i.selected=!0;return}}(!a||r!==void 0)&&(e.selectedIndex=-1)}function Me(e){var r=new MutationObserver(()=>{K(e,e.__value)});r.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),$e(()=>{r.disconnect()})}function xa(e,r,a=r){var i=new WeakSet,s=!0;Ze(e,"change",u=>{var l=u?"[selected]":":checked",d;if(e.multiple)d=[].map.call(e.querySelectorAll(l),P);else{var v=e.querySelector(l)??e.querySelector("option:not([disabled])");d=v&&P(v)}a(d),F!==null&&i.add(F)}),te(()=>{var u=r();if(e===document.activeElement){var l=aa??F;if(i.has(l))return}if(K(e,u,s),s&&u===void 0){var d=e.querySelector(":checked");d!==null&&(u=P(d),a(u))}e.__value=u,s=!1}),Me(e)}function P(e){return"__value"in e?e.__value:e.value}const z=Symbol("class"),D=Symbol("style"),Ne=Symbol("is custom element"),Ce=Symbol("is html");function Na(e){if(L){var r=!1,a=()=>{if(!r){if(r=!0,e.hasAttribute("value")){var i=e.value;O(e,"value",null),e.value=i}if(e.hasAttribute("checked")){var s=e.checked;O(e,"checked",null),e.checked=s}}};e.__on_r=a,Te(a),ca()}}function Fa(e,r){var a=se(e);a.checked!==(a.checked=r??void 0)&&(e.checked=r)}function Ca(e,r){r?e.hasAttribute("selected")||e.setAttribute("selected",""):e.removeAttribute("selected")}function O(e,r,a,i){var s=se(e);L&&(s[r]=e.getAttribute(r),r==="src"||r==="srcset"||r==="href"&&e.nodeName==="LINK")||s[r]!==(s[r]=a)&&(r==="loading"&&(e[ia]=a),a==null?e.removeAttribute(r):typeof a!="string"&&Oe(e).includes(r)?e[r]=a:e.setAttribute(r,a))}function Oa(e,r,a,i,s=!1,u=!1){if(L&&s&&e.tagName==="INPUT"){var l=e,d=l.type==="checkbox"?"defaultChecked":"defaultValue";d in a||Na(l)}var v=se(e),h=v[Ne],_=!v[Ce];let p=L&&h;p&&q(!1);var c=r||{},m=e.tagName==="OPTION";for(var n in r)n in a||(a[n]=null);a.class?a.class=Ie(a.class):(i||a[z])&&(a.class=null),a[D]&&(a.style??(a.style=null));var g=Oe(e);for(const t in a){let f=a[t];if(m&&t==="value"&&f==null){e.value=e.__value="",c[t]=f;continue}if(t==="class"){var o=e.namespaceURI==="http://www.w3.org/1999/xhtml";Se(e,o,f,i,r==null?void 0:r[z],a[z]),c[t]=f,c[z]=a[z];continue}if(t==="style"){Ma(e,f,r==null?void 0:r[D],a[D]),c[t]=f,c[D]=a[D];continue}var A=c[t];if(!(f===A&&!(f===void 0&&e.hasAttribute(t)))){c[t]=f;var T=t[0]+t[1];if(T!=="$$")if(T==="on"){const w={},S="$$"+t;let E=t.slice(2);var I=ka(E);if(Ea(E)&&(E=E.slice(0,-7),w.capture=!0),!I&&A){if(f!=null)continue;e.removeEventListener(E,c[S],w),c[S]=null}if(f!=null)if(I)e[`__${E}`]=f,na([E]);else{let N=function(y){c[t].call(this,y)};c[S]=ua(E,e,N,w)}else I&&(e[`__${E}`]=void 0)}else if(t==="style")O(e,t,f);else if(t==="autofocus")oa(e,!!f);else if(!h&&(t==="__value"||t==="value"&&f!=null))e.value=e.__value=f;else if(t==="selected"&&m)Ca(e,f);else{var b=t;_||(b=ma(b));var k=b==="defaultValue"||b==="defaultChecked";if(f==null&&!h&&!k)if(v[t]=null,b==="value"||b==="checked"){let w=e;const S=r===void 0;if(b==="value"){let E=w.defaultValue;w.removeAttribute(b),w.defaultValue=E,w.value=w.__value=S?E:null}else{let E=w.defaultChecked;w.removeAttribute(b),w.defaultChecked=E,w.checked=S?E:!1}}else e.removeAttribute(t);else k||g.includes(b)&&(h||typeof f!="string")?(e[b]=f,b in v&&(v[b]=va)):typeof f!="function"&&O(e,b,f)}}}return p&&q(!0),c}function Ka(e,r,a=[],i=[],s,u=!1,l=!1){ra(a,i,d=>{var v=void 0,h={},_=e.nodeName==="SELECT",p=!1;if(ie(()=>{var m=r(...d.map(B)),n=Oa(e,v,m,s,u,l);p&&_&&"value"in m&&K(e,m.value);for(let o of Object.getOwnPropertySymbols(h))m[o]||U(h[o]);for(let o of Object.getOwnPropertySymbols(m)){var g=m[o];o.description===fa&&(!v||g!==v[o])&&(h[o]&&U(h[o]),h[o]=V(()=>ya(e,()=>g))),n[o]=g}v=n}),_){var c=e;te(()=>{K(c,v.value,!0),Me(c)})}p=!0})}function se(e){return e.__attributes??(e.__attributes={[Ne]:e.nodeName.includes("-"),[Ce]:e.namespaceURI===ta})}var _e=new Map;function Oe(e){var r=e.getAttribute("is")||e.nodeName,a=_e.get(r);if(a)return a;_e.set(r,a=[]);for(var i,s=e,u=Element.prototype;u!==s;){i=la(s);for(var l in i)i[l].set&&a.push(l);s=sa(s)}return a}var Ba=pa('<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" stroke-width="1" aria-hidden="true"><!></svg>'),Ra=ba('<div class="flex h-xl w-xl items-center justify-center rounded bg-gray-200 text-xs text-gray-500">?</div>');function Xa(e,r){let a=$(r,"width",3,25),i=$(r,"height",3,25),s=$(r,"class",3,"");const u={paperclip:{viewBox:"0 0 32 32",path:'<image href="/ui/paperclip.svg" width="32" height="32" />'},send:{viewBox:"0 0 32 32",path:'<image href="/ui/send.svg" width="32" height="32" />'},checkmark:{viewBox:"0 0 24 24",path:'<path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z" />'},"chevron-down":{viewBox:"0 0 24 24",path:'<path d="M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z" />'},"chevron-up":{viewBox:"0 0 24 24",path:'<path d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6 1.41 1.41z" />'},"chevron-left":{viewBox:"0 0 24 24",path:'<path d="M14.41 7.41L13 6l-6 6 6 6 1.41-1.41L9.83 12z" />'},"chevron-right":{viewBox:"0 0 24 24",path:'<path d="M9.59 16.59L11 18l6-6-6-6-1.41 1.41L14.17 12z" />'},log:{viewBox:"0 0 24 24",path:'<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm-1-6h2v2h-2v-2zm0-4h2v3h-2v-3z" />'},close:{viewBox:"0 0 24 24",path:`<path d="M6 6L18 18" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/>
2
- <path d="M18 6L6 18" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/>`},copy:{viewBox:"0 0 24 24",path:'<rect x="4" y="4" width="11" height="11" rx="2" ry="2" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" /><rect x="9" y="9" width="11" height="11" rx="2" ry="2" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" />'},undo:{viewBox:"0 0 24 24",path:'<path d="M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6 0 1.09-.29 2.11-.8 3l1.46 1.46C19.54 16.14 20 14.62 20 13c0-4.42-3.58-8-8-8z" />'}};let l=_a(()=>u[r.name]);var d=da(),v=ha(d);{var h=p=>{var c=Ba(),m=wa(c);Sa(m,()=>B(l).path,!0),ga(c),Le(()=>{O(c,"width",a()),O(c,"height",i()),O(c,"viewBox",B(l).viewBox),Se(c,0,Ie(s()))}),Z(p,c)},_=p=>{var c=Ra();Z(p,c)};Aa(v,p=>{B(l)?p(h):p(_,!1)})}Z(e,d)}export{Xa as I,Ka as a,xa as b,Ma as c,Fa as d,Ya as e,Sa as h,Ua as i,Na as r,O as s};
@@ -1,5 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./DLQqXQ6R.js","./C1FmrZbK.js","../assets/editor.BMIWPGx3.css"])))=>i.map(i=>d[i]);
2
- import"./CWj6FrbW.js";import{o as rr,a as ar,s as c}from"./CFWooaMM.js";import{p as Be,h as t,e as Ut,i as it,u as Ke,f as g,d as r,r as e,t as S,b as i,c as qe,B as sr,a as ft,l as b,s as n,n as Rt,k as St,bq as fr,o as xe}from"./DhhcRlSv.js";import{i as y}from"./DmeFJZBo.js";import{s as Wt,c as Ge,t as gr}from"./WVoYdfwC.js";import{M as Xe}from"./COR6mdUG.js";import{T as nr,a as _e}from"./C9f-9-Wt.js";import{B as Qe}from"./BAbuLHvf.js";import{I as or,e as pe,i as ke,s as pr}from"./BH51oU1k.js";import{p as Ye}from"./UO83B563.js";import{_ as ir}from"./C1FmrZbK.js";import{b as lr}from"./L6ABQ5uZ.js";import{g as _r}from"./CXaO9BO2.js";import{c as cr,b as xr}from"./BPR9ibgw.js";import{e as vr,a as ur}from"./CxPv-oiS.js";function dr(Y={}){const o=Y.thresholdPx??4,B=Y.dragCursor??"text";let J=0,D=0,O=!1,$=!1,P=null,K=null;function f(){$=!1,O=!1,P==null||P.style.removeProperty("cursor"),P=null,K==null||K.abort(),K=null}function R(U){if(typeof window>"u"||U.button!==0)return;K==null||K.abort(),K=null,P==null||P.style.removeProperty("cursor"),J=U.clientX,D=U.clientY,O=!1,$=!0,P=U.currentTarget instanceof HTMLElement?U.currentTarget:null;const ot=new AbortController;K=ot;const qt=Zt=>{if(!$||O)return;const Yt=Math.abs(Zt.clientX-J),zt=Math.abs(Zt.clientY-D);Yt+zt<o||(O=!0,P==null||P.style.setProperty("cursor",B))},kt=()=>{$=!1,P==null||P.style.removeProperty("cursor"),P=null,ot.abort(),K===ot&&(K=null)};window.addEventListener("pointermove",qt,{signal:ot.signal}),window.addEventListener("pointerup",kt,{signal:ot.signal}),window.addEventListener("pointercancel",kt,{signal:ot.signal})}function L(U){return U.detail>0&&O}return{onPointerDown:R,shouldSuppressClick:L,cleanup:f}}var hr=g('<div><div class="h-full w-full"></div></div>');function Pe(Y,o){Be(o,!0);let B=Ye(o,"language",3,"json"),J=Ye(o,"class",3,""),D=null,O=null,$=Ut(null),P=Ut(!1);rr(()=>{if(!t($))return;vr();let R=!1;return ir(()=>import("./DLQqXQ6R.js").then(L=>L.e),__vite__mapDeps([0,1,2]),import.meta.url).then(L=>{R||(ur(L),D=L.editor.create(t($),{value:o.value??"",language:B(),theme:"bosun-dark",lineNumbers:"off",readOnly:!0,automaticLayout:!0,minimap:{enabled:!1},scrollBeyondLastLine:!1,wordWrap:"on",overviewRulerBorder:!1,hideCursorInOverviewRuler:!0,matchBrackets:"never",bracketPairColorization:{enabled:!1},guides:{highlightActiveBracketPair:!1,bracketPairs:!1,bracketPairsHorizontal:!1},occurrencesHighlight:"off",selectionHighlight:!1,renderLineHighlight:"none",contextmenu:!1}),O=D.getModel(),it(P,!0))}).catch(L=>{console.error("ReadOnlyMonaco: failed to init",L)}),()=>{R=!0;const L=O;if(O=null,D){try{D.setModel(null)}catch{}D.dispose(),D=null}try{L==null||L.dispose()}catch{}}}),Ke(()=>{if(!D||!t(P))return;const R=o.value??"";D.getValue()!==R&&D.setValue(R)});var K=hr(),f=r(K);lr(f,R=>it($,R),()=>t($)),e(K),S(()=>Wt(K,1,`overflow-hidden rounded-md border border-rc-gray-700 ${J()}`)),i(Y,K),qe()}var br=(Y,o,B)=>{o.shouldSuppressClick(Y)||it(B,!0)},yr=g('<span class="text-[13px] leading-none text-rc-gray-400"> </span>'),wr=g('<div class="rounded-md border border-red-500 bg-red-950/40 p-3 font-mono text-sm text-red-200"> </div>'),Mr=g("<!> <!>",1),Tr=g('<div class="flex flex-col gap-3"><!> <div class="flex flex-wrap items-center justify-between gap-2 text-sm text-rc-gray-200"><div class="flex flex-wrap items-center gap-x-4 gap-y-1"><div><span class="text-rc-gray-400">Timing:</span> </div> <div><span class="text-rc-gray-400">Response time:</span> </div> <div><span class="text-rc-gray-400">URL:</span> </div></div> <!></div> <div><!> <div class="mt-2 h-[55vh]"><!></div></div></div>'),Sr=g('<button type="button" class="flex w-full cursor-pointer select-text items-baseline gap-2 truncate rounded-md bg-transparent px-2 py-1 text-left text-sm text-rc-gray-200 hover:bg-rc-gray-800/40"><!> <!> <span> </span></button> <!>',1);function xs(Y,o){Be(o,!0);let B=Ut(!1),J=Ut("request");const D=dr();ar(D.cleanup);function O(z){try{if(typeof z=="string"){const G=z.trim();if(!G)return"";const Nt=JSON.parse(G);return JSON.stringify(Nt,null,2)}}catch{}try{return JSON.stringify(z??null,null,2)}catch{return String(z)}}function $(z){return new Date(z).toISOString()}function P(z){if(typeof z!="number"||!Number.isFinite(z))return null;const G=new Date(z);if(Number.isNaN(G.getTime()))return null;const Nt=String(G.getHours()).padStart(2,"0"),te=String(G.getMinutes()).padStart(2,"0"),ne=String(G.getSeconds()).padStart(2,"0");return`${Nt}:${te}:${ne}`}const K=b(()=>P(o.trace.createdAt)),f=b(()=>{if(o.trace.error!=null)return o.trace.error;if(!(o.trace.ok===!1||typeof o.trace.status=="number"&&o.trace.status>=400))return;const G=o.trace.response;return G&&typeof G=="object"&&"error"in G&&G.error!=null?G.error:{status:o.trace.status,ok:o.trace.ok}}),R=b(()=>t(f)!=null),L=b(()=>`API: ${o.trace.operationName}`),U=b(()=>o.trace.operationName),ot=b(()=>typeof o.trace.createdAt!="number"?"—":$(o.trace.createdAt));async function qt(){const z=O(o.trace);try{await navigator.clipboard.writeText(z)}catch(G){console.error("Failed to copy",G)}}const kt=b(()=>O({method:o.trace.method,path:o.trace.path,baseUrl:o.trace.baseUrl,request:o.trace.request})),Zt=b(()=>O({status:o.trace.status,ok:o.trace.ok,response:o.trace.response,error:t(f)})),Yt=b(()=>t(f)!=null?O(t(f)):"");var zt=Sr(),lt=ft(zt);lt.__pointerdown=function(...z){var G;(G=D.onPointerDown)==null||G.apply(this,z)},lt.__click=[br,D,B];var Ht=r(lt);{let z=b(()=>t(R)?"close":"checkmark"),G=b(()=>t(R)?"self-center text-red-400":"self-center text-rc-green-200");or(Ht,{get name(){return t(z)},width:18,height:18,get class(){return t(G)}})}var wt=n(Ht,2);{var se=z=>{var G=yr(),Nt=r(G,!0);e(G),S(()=>c(Nt,t(K))),i(z,G)};y(wt,z=>{t(K)&&z(se)})}var $t=n(wt,2),ue=r($t,!0);e($t),e(lt);var he=n(lt,2);{var be=z=>{Xe(z,{get title(){return t(L)},class:"!w-[85vw] !max-w-5xl",get open(){return t(B)},set open(Nt){it(B,Nt,!0)},children:Nt=>{var te=Tr(),ne=r(te);{var oe=gt=>{var Kt=wr(),Lt=r(Kt,!0);e(Kt),S(()=>c(Lt,t(Yt))),i(gt,Kt)};y(ne,gt=>{t(Yt)&&gt(oe)})}var ee=n(ne,2),w=r(ee),W=r(w),dt=n(r(W));e(W);var at=n(W,2),ht=n(r(at));e(at);var bt=n(at,2),pt=n(r(bt));e(bt),e(w);var _t=n(w,2);Qe(_t,{variant:"secondary",size:"small",onclick:qt,children:(gt,Kt)=>{Rt();var Lt=St("Copy raw trace");i(gt,Lt)},$$slots:{default:!0}}),e(ee);var ct=n(ee,2),Tt=r(ct);nr(Tt,{get value(){return t(J)},ariaLabel:"API trace tabs",onChange:({value:gt})=>it(J,gt,!0),children:(gt,Kt)=>{var Lt=Mr(),E=ft(Lt);_e(E,{value:"request",class:"px-3",children:(et,v)=>{Rt();var p=St("Request");i(et,p)},$$slots:{default:!0}});var N=n(E,2);_e(N,{value:"response",class:"px-3",children:(et,v)=>{Rt();var p=St("Response");i(et,p)},$$slots:{default:!0}}),i(gt,Lt)},$$slots:{default:!0}});var jt=n(Tt,2),ie=r(jt);{var Vt=gt=>{Pe(gt,{get value(){return t(kt)},language:"json",class:"h-full"})},me=gt=>{Pe(gt,{get value(){return t(Zt)},language:"json",class:"h-full"})};y(ie,gt=>{t(J)==="request"?gt(Vt):gt(me,!1)})}e(jt),e(ct),e(te),S(gt=>{c(dt,` ${t(ot)??""}`),c(ht,` ${gt??""}`),c(pt,` ${o.trace.path??""}`)},[()=>typeof o.trace.durationMs=="number"?`${Math.round(o.trace.durationMs)}ms`:"—"]),i(Nt,te)},$$slots:{default:!0}})};y(he,z=>{t(B)&&z(be)})}S(()=>{Wt($t,1,Ge(t(R)?"text-red-200":"")),c(ue,t(U))}),i(Y,zt),qe()}sr(["pointerdown","click"]);var kr=g('<div class="mt-2 text-xs text-rc-gray-300"><span class="text-rc-gray-400">Missing:</span> <span class="font-mono"> </span></div>'),Pr=g('<li class="font-mono"> </li>'),Ar=g('<div class="mt-2 rounded border border-red-700/60 bg-red-950/30 p-2 text-xs text-red-200"><div class="font-semibold">Problematic reasons</div> <ul class="mt-1 list-disc pl-5"></ul></div>'),Cr=g('(+<span class="font-mono text-rc-gray-200"> </span> derived)',1),Er=g('(<span class="font-mono"> </span> missing/invalid times)',1),Ir=g('(<span class="font-mono"> </span> not displayed)',1),Nr=g('<div class="mb-2 text-xs text-rc-gray-400">Showing <span class="font-mono text-rc-gray-200"> </span> segments from <span class="font-mono text-rc-gray-200"> </span> spans <!> <!> <!></div>'),Lr=g('<div class="text-sm text-rc-gray-300">No spans available.</div>'),Dr=g('<div class="text-sm text-rc-gray-300">No spans available.</div>'),Or=g('<tr class="border-t border-rc-gray-700/60"><td class="p-2 font-mono"> </td><td class="p-2 font-mono"> </td><td class="p-2 font-mono"> </td><td class="p-2 font-mono"> </td></tr>'),Rr=g('<div class="max-h-[35vh] overflow-auto"><table class="w-full table-auto text-left text-xs text-rc-gray-200"><thead class="sticky top-0 bg-rc-gray-900"><tr class="text-rc-gray-400"><th class="p-2">Name</th><th class="p-2">Duration</th><th class="p-2">Start</th><th class="p-2">End</th></tr></thead><tbody></tbody></table></div>'),Hr=g('<div class="flex items-center justify-between gap-2 rounded bg-rc-gray-800/40 px-2 py-1"><div class="font-mono text-rc-gray-300"> </div> <div class="font-mono"> </div></div>'),Ur=g('<div class="mt-1 text-amber-200"> </div>'),jr=g('<span class="text-amber-200">true</span>'),Fr=g('<span class="text-rc-gray-200">false</span>'),Br=g('<tr class="border-t border-rc-gray-700/60"><td class="whitespace-nowrap p-2 font-mono"><div> </div> <div class="text-rc-gray-400"> </div></td><td class="p-2 font-mono"> </td><td class="p-2 font-mono"><!></td></tr>'),qr=g('<div class="mb-2 text-xs text-rc-gray-300"><div class="flex flex-wrap gap-x-6 gap-y-1"><div><span class="text-rc-gray-400">totalEvents:</span> <span class="font-mono"> </span></div> <div><span class="text-rc-gray-400">droppedEvents:</span> <span class="font-mono"> </span></div></div> <!></div> <div class="max-h-[28vh] overflow-auto"><table class="w-full table-auto text-left text-xs text-rc-gray-200"><thead class="sticky top-0 bg-rc-gray-900"><tr class="text-rc-gray-400"><th class="p-2">At</th><th class="p-2">Source</th><th class="p-2">User?</th></tr></thead><tbody></tbody></table></div>',1),zr=g('<div class="text-sm text-rc-gray-300">No speech-created events captured.</div>'),Vr=g('<div class="mt-1 text-amber-200"> </div>'),Jr=g('<span class="text-amber-200">true</span>'),Wr=g('<span class="text-rc-gray-200">false</span>'),Yr=g('<tr class="border-t border-rc-gray-700/60 align-top"><td class="whitespace-nowrap p-2 font-mono"><div> </div> <div class="text-rc-gray-400"> </div></td><td class="p-2 font-mono"><!></td><td class="p-2 font-mono"> </td><td class="whitespace-pre-wrap break-words p-2 font-mono"> </td></tr>'),Kr=g('<div class="mb-2 text-xs text-rc-gray-300"><div class="flex flex-wrap gap-x-6 gap-y-1"><div><span class="text-rc-gray-400">totalMessages:</span> <span class="font-mono"> </span></div> <div><span class="text-rc-gray-400">droppedMessages:</span> <span class="font-mono"> </span></div> <div><span class="text-rc-gray-400">totalTextChars:</span> <span class="font-mono"> </span></div></div> <!></div> <div class="max-h-[35vh] overflow-auto"><table class="w-full table-auto text-left text-xs text-rc-gray-200"><thead class="sticky top-0 bg-rc-gray-900"><tr class="text-rc-gray-400"><th class="p-2">At</th><th class="p-2">Final</th><th class="p-2">Len</th><th class="p-2">Text</th></tr></thead><tbody></tbody></table></div>',1),Gr=g('<div class="text-sm text-rc-gray-300">No STT transcripts captured.</div>'),Xr=g('<div class="mt-1 text-amber-200"> </div>'),Qr=g('<tr class="border-t border-rc-gray-700/60"><td class="whitespace-nowrap p-2 font-mono"><div> </div> <div class="text-rc-gray-400"> </div></td><td class="p-2 font-mono"> </td><td class="p-2 font-mono"> </td></tr>'),Zr=g('<div class="mb-2 text-xs text-rc-gray-300"><div class="flex flex-wrap gap-x-6 gap-y-1"><div><span class="text-rc-gray-400">totalEvents:</span> <span class="font-mono"> </span></div> <div><span class="text-rc-gray-400">droppedEvents:</span> <span class="font-mono"> </span></div></div> <!></div> <div class="max-h-[28vh] overflow-auto"><table class="w-full table-auto text-left text-xs text-rc-gray-200"><thead class="sticky top-0 bg-rc-gray-900"><tr class="text-rc-gray-400"><th class="p-2">At</th><th class="p-2">From</th><th class="p-2">To</th></tr></thead><tbody></tbody></table></div>',1),$r=g('<div class="text-sm text-rc-gray-300">No user state changes captured.</div>'),ta=g('<div class="mt-1 text-amber-200"> </div>'),ea=g('<span class="text-amber-200">true</span>'),ra=g('<span class="text-rc-gray-200">false</span>'),aa=g('<tr class="border-t border-rc-gray-700/60"><td class="whitespace-nowrap p-2 font-mono"><div> </div> <div class="text-rc-gray-400"> </div></td><td class="p-2 font-mono"> </td><td class="p-2 font-mono"><!></td><td class="p-2 font-mono"> </td><td class="p-2 font-mono"> </td><td class="p-2 font-mono"> </td><td class="p-2 font-mono"> </td></tr>'),sa=g('<div class="mb-2 text-xs text-rc-gray-300"><div class="flex flex-wrap gap-x-6 gap-y-1"><div><span class="text-rc-gray-400">totalEvents:</span> <span class="font-mono"> </span></div> <div><span class="text-rc-gray-400">droppedEvents:</span> <span class="font-mono"> </span></div></div> <!></div> <div class="max-h-[28vh] overflow-auto"><table class="w-full table-auto text-left text-xs text-rc-gray-200"><thead class="sticky top-0 bg-rc-gray-900"><tr class="text-rc-gray-400"><th class="p-2">At</th><th class="p-2">Type</th><th class="p-2">Speaking</th><th class="p-2">P</th><th class="p-2">Speech</th><th class="p-2">Silence</th><th class="p-2">Infer</th></tr></thead><tbody></tbody></table></div>',1),na=g('<div class="text-sm text-rc-gray-300">No VAD events captured.</div>'),oa=g('<div class="mt-1 text-amber-200"> </div>'),ia=g('<span class="text-amber-200">true</span>'),la=g('<span class="text-rc-gray-200">false</span>'),da=g('<tr class="border-t border-rc-gray-700/60"><td class="whitespace-nowrap p-2 font-mono"><div> </div> <div class="text-rc-gray-400"> </div></td><td class="p-2 font-mono"> </td><td class="p-2 font-mono"> </td><td class="p-2 font-mono"> </td><td class="p-2 font-mono"><!></td></tr>'),ca=g('<div class="mb-2 text-xs text-rc-gray-300"><div class="flex flex-wrap gap-x-6 gap-y-1"><div><span class="text-rc-gray-400">totalEvents:</span> <span class="font-mono"> </span></div> <div><span class="text-rc-gray-400">droppedEvents:</span> <span class="font-mono"> </span></div></div> <!></div> <div class="max-h-[28vh] overflow-auto"><table class="w-full table-auto text-left text-xs text-rc-gray-200"><thead class="sticky top-0 bg-rc-gray-900"><tr class="text-rc-gray-400"><th class="p-2">At</th><th class="p-2">P</th><th class="p-2">Thr</th><th class="p-2">Delay</th><th class="p-2">Max?</th></tr></thead><tbody></tbody></table></div>',1),va=g('<div class="text-sm text-rc-gray-300">No EOU model predictions captured.</div>'),ua=g('<div class="mt-1 text-amber-200"> </div>'),ma=g('<tr class="border-t border-rc-gray-700/60"><td class="whitespace-nowrap p-2 font-mono"><div> </div> <div class="text-rc-gray-400"> </div></td><td class="p-2 font-mono"> </td><td class="p-2 font-mono"> </td><td class="p-2 font-mono"> </td><td class="p-2 font-mono"> </td></tr>'),fa=g('<div class="mb-2 text-xs text-rc-gray-300"><div class="flex flex-wrap gap-x-6 gap-y-1"><div><span class="text-rc-gray-400">totalEvents:</span> <span class="font-mono"> </span></div> <div><span class="text-rc-gray-400">droppedEvents:</span> <span class="font-mono"> </span></div></div> <!></div> <div class="max-h-[28vh] overflow-auto"><table class="w-full table-auto text-left text-xs text-rc-gray-200"><thead class="sticky top-0 bg-rc-gray-900"><tr class="text-rc-gray-400"><th class="p-2">At</th><th class="p-2">Last speak</th><th class="p-2">EOU</th><th class="p-2">STT</th><th class="p-2">onUserTurn</th></tr></thead><tbody></tbody></table></div>',1),ga=g('<div class="text-sm text-rc-gray-300">No EOU metrics captured.</div>'),pa=g('<div class="mt-1 text-amber-200"> </div>'),_a=g('<tr class="border-t border-rc-gray-700/60 align-top"><td class="whitespace-nowrap p-2 font-mono"><div> </div> <div class="text-rc-gray-400"> </div></td><td class="p-2 font-mono"> </td><td class="p-2 font-mono"> </td><td class="whitespace-pre-wrap break-words p-2 font-mono"> </td></tr>'),xa=g('<div class="mb-2 text-xs text-rc-gray-300"><div class="flex flex-wrap gap-x-6 gap-y-1"><div><span class="text-rc-gray-400">totalMessages:</span> <span class="font-mono"> </span></div> <div><span class="text-rc-gray-400">droppedMessages:</span> <span class="font-mono"> </span></div> <div><span class="text-rc-gray-400">totalTextChars:</span> <span class="font-mono"> </span></div></div> <!></div> <div class="max-h-[35vh] overflow-auto"><table class="w-full table-auto text-left text-xs text-rc-gray-200"><thead class="sticky top-0 bg-rc-gray-900"><tr class="text-rc-gray-400"><th class="p-2">At</th><th class="p-2">Flush</th><th class="p-2">Len</th><th class="p-2">Text</th></tr></thead><tbody></tbody></table></div>',1),ha=g('<div class="text-sm text-rc-gray-300">No provider-send messages captured.</div>'),ba=g('<div class="flex flex-col gap-4"><div class="rounded-md border border-rc-gray-650 bg-rc-gray-900/60 p-3 text-sm text-rc-gray-100"><div class="flex flex-wrap items-center justify-between gap-2"><div class="font-semibold">LLM-to-audio latency</div> <div class="font-mono"> </div></div> <div class="mt-2 flex flex-wrap gap-x-6 gap-y-2 text-xs text-rc-gray-300"><div><span class="text-rc-gray-400">Problematic:</span> <span> </span></div> <div><span class="text-rc-gray-400">Interrupted:</span> <span> </span></div></div> <!> <!></div> <div class="rounded-md border border-rc-gray-650 bg-rc-gray-900/60 p-3"><div class="mb-2 text-sm font-semibold text-rc-gray-100">Timeline</div> <!> <!> <div><div class="min-w-[680px] rounded bg-rc-gray-800/40 p-2"><div class="bosun-vis-timeline min-h-[260px] w-full"></div></div></div></div> <div class="rounded-md border border-rc-gray-650 bg-rc-gray-900/60 p-3"><div class="mb-2 text-sm font-semibold text-rc-gray-100">Spans</div> <!></div> <div class="rounded-md border border-rc-gray-650 bg-rc-gray-900/60 p-3"><div class="mb-2 text-sm font-semibold text-rc-gray-100">Raw timing</div> <div class="grid grid-cols-1 gap-1 text-xs text-rc-gray-200 md:grid-cols-2"></div></div> <div class="rounded-md border border-rc-gray-650 bg-rc-gray-900/60 p-3"><div class="mb-2 text-sm font-semibold text-rc-gray-100">Speech created (LiveKit)</div> <!></div> <div class="rounded-md border border-rc-gray-650 bg-rc-gray-900/60 p-3"><div class="mb-2 text-sm font-semibold text-rc-gray-100">STT transcripts</div> <!></div> <div class="rounded-md border border-rc-gray-650 bg-rc-gray-900/60 p-3"><div class="mb-2 text-sm font-semibold text-rc-gray-100">User state changes (VAD proxy)</div> <!></div> <div class="rounded-md border border-rc-gray-650 bg-rc-gray-900/60 p-3"><div class="mb-2 text-sm font-semibold text-rc-gray-100">VAD events</div> <!></div> <div class="rounded-md border border-rc-gray-650 bg-rc-gray-900/60 p-3"><div class="mb-2 text-sm font-semibold text-rc-gray-100">EOU model decisions</div> <!></div> <div class="rounded-md border border-rc-gray-650 bg-rc-gray-900/60 p-3"><div class="mb-2 text-sm font-semibold text-rc-gray-100">EOU metrics</div> <!></div> <div class="rounded-md border border-rc-gray-650 bg-rc-gray-900/60 p-3"><div class="mb-2 text-sm font-semibold text-rc-gray-100">TTS provider sends</div> <!></div></div>');function ya(Y,o){Be(o,!0);let B=Ut(null),J=null,D=Ut(!1),O=null;const $=b(()=>{var s;const a=(s=o.metrics)==null?void 0:s.spans;return Array.isArray(a)?a:[]}),P=b(()=>{var a;return((a=o.metrics)==null?void 0:a.summary)??{}}),K=b(()=>{var a;return((a=o.metrics)==null?void 0:a.timing)??{}}),f=b(()=>{var a;return((a=o.metrics)==null?void 0:a.debug)??{}});function R(a){return typeof a=="number"&&Number.isFinite(a)?a:null}function L(a){const s=R(a);return s==null?"—":`${Math.round(s)} ms`}function U(a){const s=new Date(a);return Number.isNaN(s.getTime())?String(a):s.toISOString()}function ot(a,s,d,m){return{name:a,startTimeUnixMs:s,endTimeUnixMs:d,durationMs:Math.max(0,d-s),startTimeIso:U(s),endTimeIso:U(d),attributes:m}}const qt=b(()=>{var A,T,rt,st;if(t($).some(nt=>{const tt=typeof(nt==null?void 0:nt.name)=="string"?nt.name:"";return tt==="stt.endpointing"||tt==="stt.transcription"||tt==="stt.turn_commit"||tt==="stt.until_turn_committed"})||!1)return[];const s=(T=(A=t(f))==null?void 0:A.eouMetrics)==null?void 0:T.events,d=Array.isArray(s)?s:[],m=R((rt=t(K))==null?void 0:rt.userSpeechEndAtMs),u=R((st=t(K))==null?void 0:st.userTurnCommittedAtMs),_=(()=>{if(!d.length)return null;let nt=null,tt=Number.POSITIVE_INFINITY;for(const Mt of d){if(!Mt||typeof Mt!="object")continue;const mt=R(Mt.lastSpeakingAtMs);if(mt==null)continue;let yt=Number.POSITIVE_INFINITY;if(m!=null)yt=Math.abs(mt-m);else if(u!=null){const Ct=R(Mt.onUserTurnCompletedDelayMs);yt=Ct!=null?Math.abs(mt+Ct-u):Math.abs(mt-u)}else yt=-(R(Mt.atMs)??mt);yt<tt&&(nt=Mt,tt=yt)}return nt??d[d.length-1]??null})(),M=R(_==null?void 0:_.lastSpeakingAtMs)??m;if(M==null)return[];const j=R(_==null?void 0:_.endOfUtteranceDelayMs),Q=R(_==null?void 0:_.transcriptionDelayMs),Z=R(_==null?void 0:_.onUserTurnCompletedDelayMs),H=j!=null?M+j:null,I=Q!=null?M+Q:null,V=u??(Z!=null?M+Z:null),q={"bosun.component":"stt","bosun.explain":"Derived from LiveKit EOUMetrics"};typeof(_==null?void 0:_.speechId)=="string"&&_.speechId&&(q["bosun.speechId"]=_.speechId);const x=[];H!=null&&H>M&&x.push(ot("stt.endpointing",M,H,{...q,"bosun.label":"EOU delay","bosun.description":"Silence window before ending the user turn"}));const l=H!=null&&I!=null&&I>=H?H:M;if(I!=null&&I>l){const nt=l===H&&H!=null?"End-of-utterance decision → final transcript":"End-of-speech → final transcript";x.push(ot("stt.transcription",l,I,{...q,"bosun.label":"STT transcription","bosun.description":nt}))}const F=I??H??M;if(V!=null&&V>F){const nt=I!=null?"Final transcript → Agent.on_user_turn_completed":H!=null?"EOU decision → Agent.on_user_turn_completed":"End-of-speech → Agent.on_user_turn_completed";x.push(ot("stt.turn_commit",F,V,{...q,"bosun.label":"Turn commit","bosun.description":nt}))}return!x.length&&m!=null&&u!=null&&u>m&&x.push(ot("stt.until_turn_committed",m,u,{"bosun.component":"stt","bosun.label":"STT/EOU","bosun.description":"User speech end → user turn committed (timing keys only)","bosun.explain":"Derived from timing.userSpeechEndAtMs + timing.userTurnCommittedAtMs"})),x}),kt=b(()=>[...t($),...t(qt)]),Zt=[{label:"User speech",names:["vad.user_speech"]},{label:"VAD",component:"vad"},{label:"STT",component:"stt"},{label:"Trigger",component:"trigger"},{label:"LLM",names:["llm.request.ttft","llm.streaming"]},{label:"LLM→TTS",names:["llm_to_tts.buffering","llm_to_tts.streaming"]},{label:"TTS generation",names:["tts.generation"]},{label:"TTS→Audio",names:["tts_to_audio.buffering","tts_to_audio.streaming"]}],Yt=b(()=>{const a=t(kt).map((u,h)=>({s:u,idx:h})),s=new Set,d=Zt.map(u=>{const h=a.filter(({s:_,idx:M})=>{var I;if(s.has(M))return!1;const j=typeof(_==null?void 0:_.name)=="string"?_.name:"",Q=(I=_==null?void 0:_.attributes)==null?void 0:I["bosun.component"],Z=Array.isArray(u.names)&&j!==""&&u.names.includes(j),H=typeof u.component=="string"&&Q===u.component;return Z||H}).sort((_,M)=>(R(_.s.startTimeUnixMs)??0)-(R(M.s.startTimeUnixMs)??0));for(const _ of h)s.add(_.idx);return{label:u.label,spans:h.map(_=>_.s)}}),m=a.filter(({idx:u})=>!s.has(u)).map(u=>u.s).sort((u,h)=>(R(u.startTimeUnixMs)??0)-(R(h.startTimeUnixMs)??0));return m.length&&d.push({label:"Other",spans:m}),d.filter(u=>u.spans.length)});function zt(a){var d;const s=(d=a==null?void 0:a.attributes)==null?void 0:d["bosun.label"];return typeof s=="string"&&s.trim()?s:typeof(a==null?void 0:a.name)=="string"&&a.name?a.name:"span"}const lt={blue:"#569cd6",green:"#93FF6D",greenDark:"#00B58A",orange:"#ce9178",purple:"#81147D",red:"#FF6666",gray:"#767676"};function Ht(a){return Math.max(0,Math.min(255,Math.round(a)))}function wt(a,s){const d=(a??"").trim().replace(/^#/,""),u=d.length===3?d.split("").map(q=>`${q}${q}`).join(""):d;if(u.length!==6||!/^[0-9a-fA-F]+$/.test(u))return a;const h=parseInt(u.slice(0,2),16),_=parseInt(u.slice(2,4),16),M=parseInt(u.slice(4,6),16),j=Math.max(-1,Math.min(1,s)),Q=j>=0?255:0,Z=Math.abs(j),H=Ht(h+(Q-h)*Z),I=Ht(_+(Q-_)*Z),V=Ht(M+(Q-M)*Z);return`#${H.toString(16).padStart(2,"0")}${I.toString(16).padStart(2,"0")}${V.toString(16).padStart(2,"0")}`}function se(a){var m;const s=typeof(a==null?void 0:a.name)=="string"?a.name:"";if(s==="vad.endpointing")return"vad.endpointing";if(s.startsWith("vad."))return"vad.user_speech";if(s==="llm.request.ttft")return"llm.request";if(s==="llm.streaming")return"llm.streaming";if(s==="llm_to_tts.buffering")return"llm_to_tts.buffering";if(s==="llm_to_tts.streaming")return"llm_to_tts.streaming";if(s==="tts.generation")return"tts.generation";if(s==="tts_to_audio.buffering")return"tts_to_audio.buffering";if(s==="tts_to_audio.streaming")return"tts_to_audio.streaming";if(s.startsWith("stt."))return"stt";if(s.startsWith("trigger."))return"trigger";const d=(m=a==null?void 0:a.attributes)==null?void 0:m["bosun.component"];return d==="vad"?"vad.user_speech":d==="stt"?"stt":d==="trigger"?"trigger":"other"}const $t={"vad.user_speech":wt(lt.purple,.35),"vad.endpointing":wt(lt.purple,-.15),"llm.request":wt(lt.blue,-.25),"llm.streaming":lt.blue,"llm_to_tts.buffering":wt(lt.orange,-.25),"llm_to_tts.streaming":lt.orange,"tts.generation":wt(lt.orange,.25),"tts_to_audio.buffering":wt(lt.purple,-.25),"tts_to_audio.streaming":wt(lt.purple,.25),"llm_to_audio.ok":lt.green,"llm_to_audio.high":lt.red,trigger:lt.greenDark,stt:wt(lt.purple,.2),other:lt.gray};function ue(a){const s=$t[a]??lt.gray,d=wt(s,-.25);return`background: ${s}; border-color: ${d};`}function he(a,s){var Q,Z;const d=zt(a),m=a==null?void 0:a.durationMs,u=a==null?void 0:a.startTimeIso,h=a==null?void 0:a.endTimeIso,_=(Q=a==null?void 0:a.attributes)==null?void 0:Q["bosun.explain"],M=(Z=a==null?void 0:a.attributes)==null?void 0:Z["bosun.description"];return[d,s&&s!==d?s:"",m!=null?L(m):"",u&&h?`${u} → ${h}`:"",typeof M=="string"?M:"",typeof _=="string"?_:""].filter(H=>typeof H=="string"&&H.trim()!=="").join(`
3
- `)}const be=b(()=>{var h,_,M;const a=R((h=t(K))==null?void 0:h.llmRequestStartAtMs),s=R((_=t(K))==null?void 0:_.ttsAudioStartAtMs);if(a==null||s==null||s<a)return null;const d=s-a,m=d>800||!!((M=t(P))!=null&&M.problematic),u={name:"llm_to_audio.latency",startTimeUnixMs:a,endTimeUnixMs:s,durationMs:d,startTimeIso:U(a),endTimeIso:U(s),attributes:{"bosun.label":"LLM→Audio start","bosun.description":"LLM request start → agent speaking (first audio frame)","bosun.explain":m?"High latency (>800ms) or problematic timing":"OK"}};return{id:`derived:llm_to_audio:${a}:${s}`,group:"LLM→Audio start",start:a,end:s,colorKey:m?"llm_to_audio.high":"llm_to_audio.ok",span:u,derived:!0}}),z=b(()=>{const a=[];for(const d of t(Yt))for(const m of d.spans){const u=R(m.startTimeUnixMs),h=R(m.endTimeUnixMs);if(u==null||h==null||h<u)continue;const _=typeof(m==null?void 0:m.name)=="string"?m.name:"span";a.push({id:`${d.label}:${_}:${u}:${h}`,group:d.label,start:u,end:h,colorKey:se(m),span:m,derived:!1})}const s=t(be);return s&&a.push(s),a}),G=b(()=>{const a=t(Yt).map((d,m)=>({id:d.label,content:d.label,order:m})),s=t(be);return s&&!a.some(d=>d.id===s.group)&&a.push({id:s.group,content:s.group,order:a.length}),a}),Nt=b(()=>t(z).map(a=>({id:a.id,group:a.group,content:"",start:a.start,end:a.end,type:"range",className:"bosun-latency-item",style:ue(a.colorKey),title:he(a.span,a.group)}))),te=b(()=>{let a=Number.POSITIVE_INFINITY,s=Number.NEGATIVE_INFINITY;for(const m of t(z))a=Math.min(a,m.start),s=Math.max(s,m.end);if(!Number.isFinite(a)||!Number.isFinite(s)||s<a)return null;const d=Math.max(100,(s-a)*.05);return{start:a-d,end:s+d}}),ne=b(()=>t(Nt).length>0),oe=b(()=>{let a=0,s=0;for(const d of t(z))d.derived?s++:a++;return{base:a,derived:s,total:a+s}}),ee=b(()=>t(kt).filter(a=>{const s=R(a.startTimeUnixMs),d=R(a.endTimeUnixMs);return s!=null&&d!=null&&d>=s}).length??0);rr(()=>{if(!t(B))return;let a=!1;const s=t(B);return ir(()=>import("./B5CoBEt2.js"),[],import.meta.url).then(d=>{if(a)return;const m=t(te),h={autoResize:!0,height:260,maxHeight:260,minHeight:260,groupOrder:"order",stack:!1,selectable:!1,multiselect:!1,moveable:!1,zoomable:!1,showCurrentTime:!1,showMajorLabels:!1,showMinorLabels:!0,showTooltips:!0,tooltip:{followMouse:!0,overflowMethod:"flip",delay:0},xss:{disabled:!1},moment:(..._)=>{const M=d.moment(..._);return typeof(M==null?void 0:M.utc)=="function"?M.utc():M},format:{minorLabels:{millisecond:".SSS",second:":ss",minute:"HH:mm",hour:"HH:mm"},majorLabels:{second:"HH:mm:ss",minute:"HH:mm",hour:"MMM D",day:"MMM D"}},start:m==null?void 0:m.start,end:m==null?void 0:m.end};J=new d.Timeline(s,t(Nt),t(G),h),it(D,!0),typeof ResizeObserver<"u"&&(O=new ResizeObserver(()=>J==null?void 0:J.redraw()),O.observe(s))}).catch(d=>{console.error("LatencyTab: failed to load vis-timeline",d)}),()=>{a=!0,O==null||O.disconnect(),O=null,it(D,!1),J==null||J.destroy(),J=null}}),Ke(()=>{if(!t(D)||!J)return;J.setData({items:t(Nt),groups:t(G)});const s=t(te);s&&J.setWindow(s.start,s.end,{animation:!1}),J.redraw()});var w=ba(),W=r(w),dt=r(W),at=n(r(dt),2),ht=r(at,!0);e(at),e(dt);var bt=n(dt,2),pt=r(bt),_t=n(r(pt),2),ct=r(_t,!0);e(_t),e(pt);var Tt=n(pt,2),jt=n(r(Tt),2),ie=r(jt,!0);e(jt),e(Tt),e(bt);var Vt=n(bt,2);{var me=a=>{var s=kr(),d=n(r(s),2),m=r(d,!0);e(d),e(s),S(u=>c(m,u),[()=>t(P).missing.join(", ")]),i(a,s)};y(Vt,a=>{var s;Array.isArray((s=t(P))==null?void 0:s.missing)&&t(P).missing.length&&a(me)})}var gt=n(Vt,2);{var Kt=a=>{var s=Ar(),d=n(r(s),2);pe(d,21,()=>t(f).problematicReasons,ke,(m,u)=>{var h=Pr(),_=r(h,!0);e(h),S(()=>c(_,t(u))),i(m,h)}),e(d),e(s),i(a,s)};y(gt,a=>{var s;Array.isArray((s=t(f))==null?void 0:s.problematicReasons)&&t(f).problematicReasons.length&&a(Kt)})}e(W);var Lt=n(W,2),E=n(r(Lt),2);{var N=a=>{var s=Nr(),d=n(r(s)),m=r(d,!0);e(d);var u=n(d,2),h=r(u,!0);e(u);var _=n(u,2);{var M=I=>{var V=Cr(),q=n(ft(V)),x=r(q,!0);e(q),Rt(),S(()=>c(x,t(oe).derived)),i(I,V)};y(_,I=>{t(oe).derived&&I(M)})}var j=n(_,2);{var Q=I=>{var V=Er(),q=n(ft(V)),x=r(q,!0);e(q),Rt(),S(()=>c(x,t(kt).length-t(ee))),i(I,V)};y(j,I=>{t(kt).length!==t(ee)&&I(Q)})}var Z=n(j,2);{var H=I=>{var V=Ir(),q=n(ft(V)),x=r(q,!0);e(q),Rt(),S(()=>c(x,t(ee)-t(oe).base)),i(I,V)};y(Z,I=>{t(oe).base!==t(ee)&&I(H)})}e(s),S(()=>{c(m,t(oe).base),c(h,t(kt).length)}),i(a,s)};y(E,a=>{t(kt).length&&a(N)})}var et=n(E,2);{var v=a=>{var s=Lr();i(a,s)};y(et,a=>{t(ne)||a(v)})}var p=n(et,2);let C;var k=r(p),vt=r(k);lr(vt,a=>it(B,a),()=>t(B)),e(k),e(p),e(Lt);var X=n(Lt,2),ut=n(r(X),2);{var Dt=a=>{var s=Dr();i(a,s)},Ae=a=>{var s=Rr(),d=r(s),m=n(r(d));pe(m,23,()=>t(kt),(u,h)=>u.name??h,(u,h)=>{var _=Or(),M=r(_),j=r(M,!0);e(M);var Q=n(M),Z=r(Q,!0);e(Q);var H=n(Q),I=r(H,!0);e(H);var V=n(H),q=r(V,!0);e(V),e(_),S((x,l)=>{c(j,x),c(Z,l),c(I,t(h).startTimeIso??"—"),c(q,t(h).endTimeIso??"—")},[()=>zt(t(h)),()=>L(t(h).durationMs)]),i(u,_)}),e(m),e(d),e(s),i(a,s)};y(ut,a=>{t(kt).length?a(Ae,!1):a(Dt)})}e(X);var Me=n(X,2),le=n(r(Me),2);pe(le,21,()=>Object.entries(t(K)),([a,s])=>a,(a,s)=>{var d=b(()=>fr(t(s),2));let m=()=>t(d)[0],u=()=>t(d)[1];var h=Hr(),_=r(h),M=r(_,!0);e(_);var j=n(_,2),Q=r(j,!0);e(j),e(h),S(Z=>{c(M,m()),c(Q,Z)},[()=>typeof u()=="number"?u():String(u())]),i(a,h)}),e(le),e(Me);var de=n(Me,2),Oe=n(r(de),2);{var Re=a=>{var s=qr(),d=ft(s),m=r(d),u=r(m),h=n(r(u),2),_=r(h,!0);e(h),e(u);var M=n(u,2),j=n(r(M),2),Q=r(j,!0);e(j),e(M),e(m);var Z=n(m,2);{var H=x=>{var l=Ur(),F=r(l,!0);e(l),S(A=>c(F,A),[()=>t(f).speechCreated.notes.join(" ")]),i(x,l)};y(Z,x=>{var l;Array.isArray((l=t(f).speechCreated)==null?void 0:l.notes)&&t(f).speechCreated.notes.length&&x(H)})}e(d);var I=n(d,2),V=r(I),q=n(r(V));pe(q,21,()=>t(f).speechCreated.events,ke,(x,l)=>{var F=Br(),A=r(F),T=r(A),rt=r(T,!0);e(T);var st=n(T,2),nt=r(st,!0);e(st),e(A);var tt=n(A),Mt=r(tt,!0);e(tt);var mt=n(tt),yt=r(mt);{var Ct=At=>{var Ot=jr();i(At,Ot)},Xt=At=>{var Ot=xe(),Qt=ft(Ot);{var ge=xt=>{var Ft=Fr();i(xt,Ft)},It=xt=>{var Ft=St("—");i(xt,Ft)};y(Qt,xt=>{t(l).userInitiated===!1?xt(ge):xt(It,!1)},!0)}i(At,Ot)};y(yt,At=>{t(l).userInitiated===!0?At(Ct):At(Xt,!1)})}e(mt),e(F),S(()=>{c(rt,t(l).atIso??"—"),c(nt,t(l).atMs),c(Mt,t(l).source??"—")}),i(x,F)}),e(q),e(V),e(I),S(()=>{var x,l;c(_,((x=t(f).speechCreated.totals)==null?void 0:x.totalEvents)??"—"),c(Q,((l=t(f).speechCreated.totals)==null?void 0:l.droppedEvents)??"—")}),i(a,s)},ze=a=>{var s=zr();i(a,s)};y(Oe,a=>{var s;(s=t(f))!=null&&s.speechCreated?a(Re):a(ze,!1)})}e(de);var re=n(de,2),Ce=n(r(re),2);{var Et=a=>{var s=Kr(),d=ft(s),m=r(d),u=r(m),h=n(r(u),2),_=r(h,!0);e(h),e(u);var M=n(u,2),j=n(r(M),2),Q=r(j,!0);e(j),e(M);var Z=n(M,2),H=n(r(Z),2),I=r(H,!0);e(H),e(Z),e(m);var V=n(m,2);{var q=A=>{var T=Vr(),rt=r(T,!0);e(T),S(st=>c(rt,st),[()=>t(f).sttTranscripts.notes.join(" ")]),i(A,T)};y(V,A=>{var T;Array.isArray((T=t(f).sttTranscripts)==null?void 0:T.notes)&&t(f).sttTranscripts.notes.length&&A(q)})}e(d);var x=n(d,2),l=r(x),F=n(r(l));pe(F,21,()=>t(f).sttTranscripts.messages,ke,(A,T)=>{var rt=Yr(),st=r(rt),nt=r(st),tt=r(nt,!0);e(nt);var Mt=n(nt,2),mt=r(Mt,!0);e(Mt),e(st);var yt=n(st),Ct=r(yt);{var Xt=xt=>{var Ft=Jr();i(xt,Ft)},At=xt=>{var Ft=xe(),We=ft(Ft);{var ae=Jt=>{var De=Wr();i(Jt,De)},Bt=Jt=>{var De=St("—");i(Jt,De)};y(We,Jt=>{t(T).isFinal===!1?Jt(ae):Jt(Bt,!1)},!0)}i(xt,Ft)};y(Ct,xt=>{t(T).isFinal===!0?xt(Xt):xt(At,!1)})}e(yt);var Ot=n(yt),Qt=r(Ot,!0);e(Ot);var ge=n(Ot),It=r(ge,!0);e(ge),e(rt),S(()=>{c(tt,t(T).atIso??"—"),c(mt,t(T).atMs),c(Qt,t(T).textLen),c(It,t(T).text===""?"<EMPTY>":t(T).text)}),i(A,rt)}),e(F),e(l),e(x),S(()=>{var A,T,rt;c(_,((A=t(f).sttTranscripts.totals)==null?void 0:A.totalMessages)??"—"),c(Q,((T=t(f).sttTranscripts.totals)==null?void 0:T.droppedMessages)??"—"),c(I,((rt=t(f).sttTranscripts.totals)==null?void 0:rt.totalTextChars)??"—")}),i(a,s)},ye=a=>{var s=Gr();i(a,s)};y(Ce,a=>{var s;(s=t(f))!=null&&s.sttTranscripts?a(Et):a(ye,!1)})}e(re);var fe=n(re,2),He=n(r(fe),2);{var Ue=a=>{var s=Zr(),d=ft(s),m=r(d),u=r(m),h=n(r(u),2),_=r(h,!0);e(h),e(u);var M=n(u,2),j=n(r(M),2),Q=r(j,!0);e(j),e(M),e(m);var Z=n(m,2);{var H=x=>{var l=Xr(),F=r(l,!0);e(l),S(A=>c(F,A),[()=>t(f).userStateChanges.notes.join(" ")]),i(x,l)};y(Z,x=>{var l;Array.isArray((l=t(f).userStateChanges)==null?void 0:l.notes)&&t(f).userStateChanges.notes.length&&x(H)})}e(d);var I=n(d,2),V=r(I),q=n(r(V));pe(q,21,()=>t(f).userStateChanges.events,ke,(x,l)=>{var F=Qr(),A=r(F),T=r(A),rt=r(T,!0);e(T);var st=n(T,2),nt=r(st,!0);e(st),e(A);var tt=n(A),Mt=r(tt,!0);e(tt);var mt=n(tt),yt=r(mt,!0);e(mt),e(F),S(()=>{c(rt,t(l).atIso??"—"),c(nt,t(l).atMs),c(Mt,t(l).oldState),c(yt,t(l).newState)}),i(x,F)}),e(q),e(V),e(I),S(()=>{var x,l;c(_,((x=t(f).userStateChanges.totals)==null?void 0:x.totalEvents)??"—"),c(Q,((l=t(f).userStateChanges.totals)==null?void 0:l.droppedEvents)??"—")}),i(a,s)},ce=a=>{var s=$r();i(a,s)};y(He,a=>{var s;(s=t(f))!=null&&s.userStateChanges?a(Ue):a(ce,!1)})}e(fe);var we=n(fe,2),Ve=n(r(we),2);{var Gt=a=>{var s=sa(),d=ft(s),m=r(d),u=r(m),h=n(r(u),2),_=r(h,!0);e(h),e(u);var M=n(u,2),j=n(r(M),2),Q=r(j,!0);e(j),e(M),e(m);var Z=n(m,2);{var H=x=>{var l=ta(),F=r(l,!0);e(l),S(A=>c(F,A),[()=>t(f).vadEvents.notes.join(" ")]),i(x,l)};y(Z,x=>{var l;Array.isArray((l=t(f).vadEvents)==null?void 0:l.notes)&&t(f).vadEvents.notes.length&&x(H)})}e(d);var I=n(d,2),V=r(I),q=n(r(V));pe(q,21,()=>t(f).vadEvents.events,ke,(x,l)=>{var F=aa(),A=r(F),T=r(A),rt=r(T,!0);e(T);var st=n(T,2),nt=r(st,!0);e(st),e(A);var tt=n(A),Mt=r(tt,!0);e(tt);var mt=n(tt),yt=r(mt);{var Ct=ae=>{var Bt=ea();i(ae,Bt)},Xt=ae=>{var Bt=xe(),Jt=ft(Bt);{var De=Fe=>{var er=ra();i(Fe,er)},mr=Fe=>{var er=St("—");i(Fe,er)};y(Jt,Fe=>{t(l).speaking===!1?Fe(De):Fe(mr,!1)},!0)}i(ae,Bt)};y(yt,ae=>{t(l).speaking===!0?ae(Ct):ae(Xt,!1)})}e(mt);var At=n(mt),Ot=r(At,!0);e(At);var Qt=n(At),ge=r(Qt,!0);e(Qt);var It=n(Qt),xt=r(It,!0);e(It);var Ft=n(It),We=r(Ft,!0);e(Ft),e(F),S((ae,Bt,Jt,De)=>{c(rt,t(l).atIso??"—"),c(nt,t(l).atMs),c(Mt,t(l).type??"—"),c(Ot,ae),c(ge,Bt),c(xt,Jt),c(We,De)},[()=>typeof t(l).probability=="number"?t(l).probability.toFixed(3):"—",()=>L(t(l).speechDurationMs),()=>L(t(l).silenceDurationMs),()=>L(t(l).inferenceDurationMs)]),i(x,F)}),e(q),e(V),e(I),S(()=>{var x,l;c(_,((x=t(f).vadEvents.totals)==null?void 0:x.totalEvents)??"—"),c(Q,((l=t(f).vadEvents.totals)==null?void 0:l.droppedEvents)??"—")}),i(a,s)},Te=a=>{var s=na();i(a,s)};y(Ve,a=>{var s;(s=t(f))!=null&&s.vadEvents?a(Gt):a(Te,!1)})}e(we);var Pt=n(we,2),Se=n(r(Pt),2);{var Ee=a=>{var s=ca(),d=ft(s),m=r(d),u=r(m),h=n(r(u),2),_=r(h,!0);e(h),e(u);var M=n(u,2),j=n(r(M),2),Q=r(j,!0);e(j),e(M),e(m);var Z=n(m,2);{var H=x=>{var l=oa(),F=r(l,!0);e(l),S(A=>c(F,A),[()=>t(f).eouModelPredictions.notes.join(" ")]),i(x,l)};y(Z,x=>{var l;Array.isArray((l=t(f).eouModelPredictions)==null?void 0:l.notes)&&t(f).eouModelPredictions.notes.length&&x(H)})}e(d);var I=n(d,2),V=r(I),q=n(r(V));pe(q,21,()=>t(f).eouModelPredictions.events,ke,(x,l)=>{var F=da(),A=r(F),T=r(A),rt=r(T,!0);e(T);var st=n(T,2),nt=r(st,!0);e(st),e(A);var tt=n(A),Mt=r(tt,!0);e(tt);var mt=n(tt),yt=r(mt,!0);e(mt);var Ct=n(mt),Xt=r(Ct,!0);e(Ct);var At=n(Ct),Ot=r(At);{var Qt=It=>{var xt=ia();i(It,xt)},ge=It=>{var xt=xe(),Ft=ft(xt);{var We=Bt=>{var Jt=la();i(Bt,Jt)},ae=Bt=>{var Jt=St("—");i(Bt,Jt)};y(Ft,Bt=>{t(l).useMaxEndpointingDelay===!1?Bt(We):Bt(ae,!1)},!0)}i(It,xt)};y(Ot,It=>{t(l).useMaxEndpointingDelay===!0?It(Qt):It(ge,!1)})}e(At),e(F),S((It,xt,Ft)=>{c(rt,t(l).atIso??"—"),c(nt,t(l).atMs),c(Mt,It),c(yt,xt),c(Xt,Ft)},[()=>typeof t(l).probability=="number"?t(l).probability.toFixed(3):"—",()=>typeof t(l).unlikelyThreshold=="number"?t(l).unlikelyThreshold.toFixed(3):t(l).unlikelyThreshold===null?"null":"—",()=>L(t(l).selectedEndpointingDelayMs)]),i(x,F)}),e(q),e(V),e(I),S(()=>{var x,l;c(_,((x=t(f).eouModelPredictions.totals)==null?void 0:x.totalEvents)??"—"),c(Q,((l=t(f).eouModelPredictions.totals)==null?void 0:l.droppedEvents)??"—")}),i(a,s)},Ie=a=>{var s=va();i(a,s)};y(Se,a=>{var s;(s=t(f))!=null&&s.eouModelPredictions?a(Ee):a(Ie,!1)})}e(Pt);var Ne=n(Pt,2),ve=n(r(Ne),2);{var Ze=a=>{var s=fa(),d=ft(s),m=r(d),u=r(m),h=n(r(u),2),_=r(h,!0);e(h),e(u);var M=n(u,2),j=n(r(M),2),Q=r(j,!0);e(j),e(M),e(m);var Z=n(m,2);{var H=x=>{var l=ua(),F=r(l,!0);e(l),S(A=>c(F,A),[()=>t(f).eouMetrics.notes.join(" ")]),i(x,l)};y(Z,x=>{var l;Array.isArray((l=t(f).eouMetrics)==null?void 0:l.notes)&&t(f).eouMetrics.notes.length&&x(H)})}e(d);var I=n(d,2),V=r(I),q=n(r(V));pe(q,21,()=>t(f).eouMetrics.events,ke,(x,l)=>{var F=ma(),A=r(F),T=r(A),rt=r(T,!0);e(T);var st=n(T,2),nt=r(st,!0);e(st),e(A);var tt=n(A),Mt=r(tt,!0);e(tt);var mt=n(tt),yt=r(mt,!0);e(mt);var Ct=n(mt),Xt=r(Ct,!0);e(Ct);var At=n(Ct),Ot=r(At,!0);e(At),e(F),S((Qt,ge,It,xt)=>{c(rt,t(l).atIso??"—"),c(nt,t(l).atMs),c(Mt,Qt),c(yt,ge),c(Xt,It),c(Ot,xt)},[()=>t(l).lastSpeakingAtMs?U(t(l).lastSpeakingAtMs):"—",()=>L(t(l).endOfUtteranceDelayMs),()=>L(t(l).transcriptionDelayMs),()=>L(t(l).onUserTurnCompletedDelayMs)]),i(x,F)}),e(q),e(V),e(I),S(()=>{var x,l;c(_,((x=t(f).eouMetrics.totals)==null?void 0:x.totalEvents)??"—"),c(Q,((l=t(f).eouMetrics.totals)==null?void 0:l.droppedEvents)??"—")}),i(a,s)},$e=a=>{var s=ga();i(a,s)};y(ve,a=>{var s;(s=t(f))!=null&&s.eouMetrics?a(Ze):a($e,!1)})}e(Ne);var je=n(Ne,2),Je=n(r(je),2);{var tr=a=>{var s=xa(),d=ft(s),m=r(d),u=r(m),h=n(r(u),2),_=r(h,!0);e(h),e(u);var M=n(u,2),j=n(r(M),2),Q=r(j,!0);e(j),e(M);var Z=n(M,2),H=n(r(Z),2),I=r(H,!0);e(H),e(Z),e(m);var V=n(m,2);{var q=A=>{var T=pa(),rt=r(T,!0);e(T),S(st=>c(rt,st),[()=>t(f).ttsProviderTextSends.notes.join(" ")]),i(A,T)};y(V,A=>{var T;Array.isArray((T=t(f).ttsProviderTextSends)==null?void 0:T.notes)&&t(f).ttsProviderTextSends.notes.length&&A(q)})}e(d);var x=n(d,2),l=r(x),F=n(r(l));pe(F,21,()=>t(f).ttsProviderTextSends.messages,ke,(A,T)=>{var rt=_a(),st=r(rt),nt=r(st),tt=r(nt,!0);e(nt);var Mt=n(nt,2),mt=r(Mt,!0);e(Mt),e(st);var yt=n(st),Ct=r(yt,!0);e(yt);var Xt=n(yt),At=r(Xt,!0);e(Xt);var Ot=n(Xt),Qt=r(Ot,!0);e(Ot),e(rt),S(()=>{c(tt,t(T).atIso??"—"),c(mt,t(T).atMs),c(Ct,t(T).flush?"true":"false"),c(At,t(T).textLen),c(Qt,t(T).text===""?"<EMPTY>":t(T).text)}),i(A,rt)}),e(F),e(l),e(x),S(()=>{var A,T,rt;c(_,((A=t(f).ttsProviderTextSends.totals)==null?void 0:A.totalMessages)??"—"),c(Q,((T=t(f).ttsProviderTextSends.totals)==null?void 0:T.droppedMessages)??"—"),c(I,((rt=t(f).ttsProviderTextSends.totals)==null?void 0:rt.totalTextChars)??"—")}),i(a,s)},Le=a=>{var s=ha();i(a,s)};y(Je,a=>{var s;(s=t(f))!=null&&s.ttsProviderTextSends?a(tr):a(Le,!1)})}e(je),e(w),S((a,s)=>{var d,m,u,h;c(ht,a),Wt(_t,1,Ge((d=t(P))!=null&&d.problematic?"text-red-300":"text-rc-gray-200")),c(ct,(m=t(P))!=null&&m.problematic?"true":"false"),Wt(jt,1,Ge((u=t(P))!=null&&u.interrupted?"text-amber-200":"text-rc-gray-200")),c(ie,(h=t(P))!=null&&h.interrupted?"true":"false"),C=Wt(p,1,"w-full overflow-x-auto",null,C,s)},[()=>{var a;return L((a=t(P))==null?void 0:a.llmToAudioLatencyMs)},()=>({hidden:!t(ne)})]),i(Y,w),qe()}var wa=(Y,o,B)=>{o.shouldSuppressClick(Y)||B()},Ma=g('<span class="text-[13px] leading-none text-rc-gray-400"> </span>'),Ta=g('<div class="flex w-full justify-center"><div role="button" tabindex="0"><div class="flex flex-wrap items-baseline gap-x-2 gap-y-0"><!> <div class="min-w-0 break-words"> </div></div></div></div>'),Sa=g('<div class="mr-2 mt-1 flex h-5 w-5 shrink-0 items-center justify-center rounded-sm bg-rc-green-700 text-sm uppercase text-rc-gray-100 backdrop-blur-md"> </div>'),ka=(Y,o)=>{var B;Y.stopPropagation(),(B=o.onRevert)==null||B.call(o,o.trace)},Pa=g('<button type="button" title="Revert to before this message" class="mr-2 mt-1 shrink-0 self-start rounded p-1 text-rc-gray-500 opacity-80 transition-colors hover:bg-rc-gray-900 hover:text-rc-gray-200 focus:outline-none focus-visible:outline-none"><!></button>'),Aa=(Y,o,B)=>{o.shouldSuppressClick(Y)||B()},Ca=g("<div> </div>"),Ea=g('<div class="absolute bottom-1 left-2 rounded bg-red-950/60 px-2 py-0.5 text-[11px] text-red-200"> </div>'),Ia=(Y,o)=>{Y.stopPropagation(),o()},Na=g('<button type="button"><!></button>'),La=(Y,o)=>{Y.stopPropagation(),o.onAnalyze(o.trace)},Da=g('<button type="button" class="inline-flex items-center text-nowrap rounded border-0 bg-transparent px-1 py-0.5 text-rc-gray-400 transition-colors hover:bg-rc-gray-900 hover:text-rc-gray-200 focus:outline-none focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent disabled:hover:text-rc-gray-400">Analyze</button>'),Oa=(Y,o)=>{Y.stopPropagation(),o.onRegenerate(o.trace)},Ra=g('<button type="button" class="inline-flex items-center text-nowrap rounded border-0 bg-transparent px-1 py-0.5 text-rc-gray-400 transition-colors hover:bg-rc-gray-900 hover:text-rc-gray-200 focus:outline-none focus-visible:outline-none">Regenerate</button>'),Ha=g('<div class="mt-1 flex flex-wrap items-center gap-x-2 gap-y-1"><!> <!> <!></div>'),Ua=g('<!> <!> <div><div role="button" tabindex="0" class="cursor-pointer select-text"><div><div> </div> <!> <!></div></div> <!></div>',1),ja=g('<div class="rounded-md border border-red-500 bg-red-950/40 p-3 font-mono text-sm text-red-200"> </div>'),Fa=g("<!> <!> <!>",1),Ba=g('<div class="whitespace-pre-wrap break-words rounded-md border border-rc-gray-650 bg-rc-gray-900/60 p-3 text-sm text-rc-gray-100"> </div>'),qa=g('<div class="text-sm text-rc-gray-300">No latency metrics present on this trace.</div>'),za=g('<div class="flex flex-col gap-3"><!> <div class="flex items-center justify-between gap-2 text-sm text-rc-gray-200"><div class="text-rc-gray-400"> </div> <!></div> <div><!> <div class="mt-2 h-[55vh] overflow-auto"><!></div></div></div>'),Va=g("<div><!></div> <!>",1);function hs(Y,o){Be(o,!0);let B=Ye(o,"analyzeDisabled",3,!1),J=Ut(!1),D=Ut("idle"),O=Ut("content");const $=dr();ar($.cleanup);function P(w){return w?w.split("/").at(-1)??w:""}function K(w){const W=P(w).trim().charAt(0);return W?W.toUpperCase():"?"}const f=b(()=>o.trace.role==="system"?"system":o.trace.eventName==="finished-main-streaming-step"||o.trace.eventName==="sent-message"?"agent":(o.trace.role==="user","user")),R=b(()=>t(f)==="agent"?"max-w-[83%]":t(f)==="user"?"max-w-[90%] sm:max-w-[80%] md:max-w-[70%]":t(f)==="system"?"max-w-[90%] sm:max-w-[85%] md:max-w-[75%]":""),L=b(()=>{var w;return t(f)==="user"&&!!o.onRevert&&((w=o.trace)==null?void 0:w.bosunPrevStateId)!==void 0}),U=b(()=>o.trace.error!=null),ot=b(()=>{var w;return(w=o.trace)==null?void 0:w.metrics}),qt=b(()=>{var w,W;return(W=(w=t(ot))==null?void 0:w.summary)==null?void 0:W.llmToAudioLatencyMs}),kt=b(()=>typeof t(qt)=="number"&&t(qt)>800);function Zt(){it(J,!0),it(O,t(ot)?"latency":"content",!0)}function Yt(w){if(typeof w!="number"||!Number.isFinite(w))return null;const W=new Date(w);if(Number.isNaN(W.getTime()))return null;const dt=String(W.getHours()).padStart(2,"0"),at=String(W.getMinutes()).padStart(2,"0"),ht=String(W.getSeconds()).padStart(2,"0");return`${dt}:${at}:${ht}`}const zt=b(()=>{var w;return Yt((w=o.trace)==null?void 0:w.createdAt)});function lt(w){try{return JSON.stringify(w??null,null,2)}catch{return String(w)}}async function Ht(){try{await navigator.clipboard.writeText(lt(o.trace))}catch(w){console.error("Failed to copy",w)}}function wt(){return t(f)==="agent"&&o.trace.eventName!=="transfer-requested"&&!!(o.agentId&&o.agentId.trim())&&(o.trace.eventName==="finished-main-streaming-step"||o.trace.eventName==="sent-message")}function se(){return t(f)==="agent"&&o.trace.eventName!=="transfer-requested"&&!!(o.agentId&&o.agentId.trim())&&(o.trace.eventName==="finished-main-streaming-step"||o.trace.eventName==="sent-message")}function $t(){return se()}function ue(w,W){const dt=(w??"").trim();if(!dt)return"";const at=dt.split(`
4
- `).map(pt=>pt.trimEnd()).filter(pt=>pt.trim()!=="");if(!at.length)return"";const ht=at[at.length-1],bt=(W??"").trim();return bt&&ht.includes(bt)&&at.pop(),at.join(`
5
- `)}async function he(){try{it(D,"idle");const w=(o.agentId||"").trim();if(!w)throw new Error("Agent id is not available; cannot add test");const W=cr.indexOf(o.trace);let dt="";if(W!==-1)for(let pt=W-1;pt>=0;pt--){const _t=cr[pt];if(xr(_t)&&typeof _t.stringifiedConversation=="string"){const ct=_t.stringifiedConversation.trim();if(ct){dt=ct;break}}}const at=(o.trace.content??"").trim(),bt={pinned:"TRUE",assertion_type:"llm-rubric",assertion_value:"",conversation:ue(dt,at),expected_output:at,similarity_threshold:"60",timeout:"0",context:o.context||{}};await gr.tests.addTest.mutate({agent:w,seed:bt,mergeContexts:!0}),it(D,"ok"),_r(`/edit/${encodeURIComponent(w)}/tests`),setTimeout(()=>it(D,"idle"),3e3)}catch(w){console.error("Failed to add test",w),it(D,"error"),setTimeout(()=>it(D,"idle"),4e3)}}var be=Va(),z=ft(be);let G;var Nt=r(z);{var te=w=>{var W=Ta(),dt=r(W);dt.__pointerdown=function(...ct){var Tt;(Tt=$.onPointerDown)==null||Tt.apply(this,ct)},dt.__click=[wa,$,Zt];var at=r(dt),ht=r(at);{var bt=ct=>{var Tt=Ma(),jt=r(Tt,!0);e(Tt),S(()=>c(jt,t(zt))),i(ct,Tt)};y(ht,ct=>{t(zt)&&ct(bt)})}var pt=n(ht,2),_t=r(pt);e(pt),e(at),e(dt),e(W),S(()=>{Wt(dt,1,`cursor-pointer select-text rounded-full border border-rc-gray-650 bg-rc-gray-800/40 px-4 py-2 text-sm text-rc-gray-100 ${t(U)?"border-red-500 bg-red-950/30 text-red-200":""}`),c(_t,`Transfer requested: ${o.trace.content??""}`)}),i(w,W)},ne=w=>{var W=Ua(),dt=ft(W);{var at=E=>{var N=Sa(),et=r(N,!0);e(N),S((v,p)=>{pr(N,"title",v),c(et,p)},[()=>P(o.agentId),()=>K(o.agentId)]),i(E,N)};y(dt,E=>{t(f)==="agent"&&o.agentId&&E(at)})}var ht=n(dt,2);{var bt=E=>{var N=Pa();N.__click=[ka,o];var et=r(N);or(et,{name:"undo",width:16,height:16}),e(N),i(E,N)};y(ht,E=>{t(L)&&E(bt)})}var pt=n(ht,2),_t=r(pt);_t.__pointerdown=function(...E){var N;(N=$.onPointerDown)==null||N.apply(this,E)},_t.__click=[Aa,$,Zt];var ct=r(_t),Tt=r(ct),jt=r(Tt,!0);e(Tt);var ie=n(Tt,2);{var Vt=E=>{var N=Ca(),et=r(N,!0);e(N),S(()=>{Wt(N,1,`${t(kt)?"absolute bottom-1 right-2":"mt-1 text-right"} text-xs text-rc-gray-200/70`),c(et,t(zt))}),i(E,N)};y(ie,E=>{t(zt)&&E(Vt)})}var me=n(ie,2);{var gt=E=>{var N=Ea(),et=r(N);e(N),S(v=>c(et,`High LLM to audio latency: ${v??""} ms`),[()=>Math.round(t(qt))]),i(E,N)};y(me,E=>{t(kt)&&E(gt)})}e(ct),e(_t);var Kt=n(_t,2);{var Lt=E=>{var N=Ha(),et=r(N);{var v=X=>{var ut=Na();ut.__click=[Ia,he];var Dt=r(ut);{var Ae=le=>{var de=St("Added");i(le,de)},Me=le=>{var de=xe(),Oe=ft(de);{var Re=re=>{var Ce=St("Failed");i(re,Ce)},ze=re=>{var Ce=St("Add test");i(re,Ce)};y(Oe,re=>{t(D)==="error"?re(Re):re(ze,!1)},!0)}i(le,de)};y(Dt,le=>{t(D)==="ok"?le(Ae):le(Me,!1)})}e(ut),S(()=>Wt(ut,1,`inline-flex items-center text-nowrap rounded border-0 bg-transparent px-1 py-0.5 transition-colors focus:outline-none focus-visible:outline-none ${t(D)!=="idle"?"cursor-default text-rc-gray-400":"cursor-pointer text-rc-gray-400 hover:bg-rc-gray-900 hover:text-rc-gray-200"}`)),i(X,ut)};y(et,X=>{wt()&&X(v)})}var p=n(et,2);{var C=X=>{var ut=Da();ut.__click=[La,o],S(()=>ut.disabled=B()),i(X,ut)};y(p,X=>{se()&&o.onAnalyze&&X(C)})}var k=n(p,2);{var vt=X=>{var ut=Ra();ut.__click=[Oa,o],i(X,ut)};y(k,X=>{$t()&&o.onRegenerate&&X(vt)})}e(N),i(E,N)};y(Kt,E=>{(se()||wt()||$t()&&o.onRegenerate)&&E(Lt)})}e(pt),S(()=>{Wt(pt,1,`min-w-0 ${t(R)??""}`),Wt(ct,1,`rounded-lg ${t(f)==="system"?"justify-between whitespace-pre-line break-words border border-emerald-500 text-emerald-500":t(f)!=="user"?"w-full whitespace-pre-line break-words bg-rc-green-700 backdrop-blur-md":"whitespace-pre-line break-words bg-rc-gray-700"} border-thin border-rc-gray-110 p-2 pt-1 text-rc-gray-100 ${t(U)?"border-red-500 bg-red-950/30 text-red-200":""} ${t(kt)?"relative pb-5 ring-1 ring-red-500/60":""} ${t(kt)&&!t(U)?"border-red-500":""}`),c(jt,o.trace.content)}),i(w,W)};y(Nt,w=>{o.trace.eventName==="transfer-requested"?w(te):w(ne,!1)})}e(z);var oe=n(z,2);{var ee=w=>{{const W=at=>{var ht=za(),bt=r(ht);{var pt=E=>{var N=ja(),et=r(N,!0);e(N),S(v=>c(et,v),[()=>lt(o.trace.error)]),i(E,N)};y(bt,E=>{t(U)&&E(pt)})}var _t=n(bt,2),ct=r(_t),Tt=r(ct);e(ct);var jt=n(ct,2);Qe(jt,{variant:"secondary",size:"small",onclick:Ht,children:(E,N)=>{Rt();var et=St("Copy raw trace");i(E,et)},$$slots:{default:!0}}),e(_t);var ie=n(_t,2),Vt=r(ie);nr(Vt,{get value(){return t(O)},ariaLabel:"Conversational trace tabs",onChange:({value:E})=>it(O,E,!0),children:(E,N)=>{var et=Fa(),v=ft(et);_e(v,{value:"content",class:"px-3",children:(k,vt)=>{Rt();var X=St("Content");i(k,X)},$$slots:{default:!0}});var p=n(v,2);{let k=b(()=>!t(ot));_e(p,{value:"latency",class:"px-3",get disabled(){return t(k)},children:(vt,X)=>{Rt();var ut=St("Latency");i(vt,ut)},$$slots:{default:!0}})}var C=n(p,2);_e(C,{value:"raw",class:"px-3",children:(k,vt)=>{Rt();var X=St("Raw");i(k,X)},$$slots:{default:!0}}),i(E,et)},$$slots:{default:!0}});var me=n(Vt,2),gt=r(me);{var Kt=E=>{var N=Ba(),et=r(N,!0);e(N),S(()=>c(et,o.trace.content)),i(E,N)},Lt=E=>{var N=xe(),et=ft(N);{var v=C=>{var k=xe(),vt=ft(k);{var X=Dt=>{ya(Dt,{get metrics(){return t(ot)}})},ut=Dt=>{var Ae=qa();i(Dt,Ae)};y(vt,Dt=>{t(ot)?Dt(X):Dt(ut,!1)})}i(C,k)},p=C=>{{let k=b(()=>lt(o.trace));Pe(C,{get value(){return t(k)},language:"json",class:"h-full"})}};y(et,C=>{t(O)==="latency"?C(v):C(p,!1)},!0)}i(E,N)};y(gt,E=>{t(O)==="content"?E(Kt):E(Lt,!1)})}e(me),e(ie),e(ht),S(()=>c(Tt,`${o.trace.role??""} • ${o.trace.medium??""}`)),i(at,ht)};let dt=b(()=>`Conversation: ${o.trace.eventName}`);Xe(w,{get title(){return t(dt)},class:"!w-[80vw] !max-w-4xl",get open(){return t(J)},set open(at){it(J,at,!0)},children:W,$$slots:{default:!0}})}};y(oe,w=>{t(J)&&w(ee)})}S(w=>G=Wt(z,1,"group mb-2 flex w-full items-start",null,G,w),[()=>({"justify-end":t(f)==="user"||t(f)==="system"})]),i(Y,be),qe()}sr(["pointerdown","click"]);var Ja=g('<div><div class="h-full w-full"></div></div>');function Wa(Y,o){Be(o,!0);let B=Ye(o,"language",3,"markdown"),J=Ye(o,"class",3,""),D=Ut(null),O=null,$=null,P=null,K=Ut(!1);rr(()=>{if(!t(D))return;vr();let L=!1;return ir(()=>import("./DLQqXQ6R.js").then(U=>U.e),__vite__mapDeps([0,1,2]),import.meta.url).then(U=>{if(L)return;ur(U),$=U,O=U.editor.createDiffEditor(t(D),{theme:"bosun-dark",readOnly:!0,automaticLayout:!0,lineNumbers:"off",renderSideBySide:!0,renderIndicators:!0,ignoreTrimWhitespace:!1,diffWordWrap:"on",diffAlgorithm:"advanced",maxComputationTime:2e4,renderMarginRevertIcon:!1,renderGutterMenu:!1,minimap:{enabled:!1},scrollBeyondLastLine:!1,wordWrap:"on",overviewRulerBorder:!1,hideCursorInOverviewRuler:!0,matchBrackets:"never",bracketPairColorization:{enabled:!1},guides:{highlightActiveBracketPair:!1,bracketPairs:!1,bracketPairsHorizontal:!1},occurrencesHighlight:"off",selectionHighlight:!1,renderLineHighlight:"none",contextmenu:!1,originalEditable:!1});const ot=U.editor.createModel(o.original??"",B()),qt=U.editor.createModel(o.modified??"",B());P={original:ot,modified:qt},O.setModel({original:ot,modified:qt}),it(K,!0)}).catch(U=>{console.error("ReadOnlyMonacoDiff: failed to init",U)}),()=>{if(L=!0,O){try{O.setModel(null)}catch{}O.dispose(),O=null}P&&(P.original.dispose(),P.modified.dispose(),P=null),$=null}}),Ke(()=>{if(!O||!P||!t(K))return;const L=o.original??"",U=o.modified??"";P.original.getValue()!==L&&P.original.setValue(L),P.modified.getValue()!==U&&P.modified.setValue(U)}),Ke(()=>{if(!O||!P||!t(K)||!$)return;const L=B()||"markdown";P.original.getLanguageId()!==L&&$.editor.setModelLanguage(P.original,L),P.modified.getLanguageId()!==L&&$.editor.setModelLanguage(P.modified,L)});var f=Ja(),R=r(f);lr(R,L=>it(D,L),()=>t(D)),e(f),S(()=>Wt(f,1,`overflow-hidden rounded-md border border-rc-gray-700 ${J()}`)),i(Y,f),qe()}var Ya=(Y,o,B)=>{o.shouldSuppressClick(Y)||it(B,!0)},Ka=g('<span class="text-[13px] leading-none text-rc-gray-400"> </span>'),Ga=(Y,o,B,J)=>{Y.stopPropagation(),!o.shouldSuppressClick(Y)&&t(B)&&it(J,!0)},Xa=g('<span><span class="cursor-pointer" title="Show prompt-cache calc JSON"> </span></span>'),Qa=g('<div class="rounded-md border border-red-500 bg-red-950/40 p-3 font-mono text-sm text-red-200"> </div>'),Za=g("<!> <!> <!> <!> <!>",1),$a=g('<div class="flex h-full flex-col gap-2"><div class="grid grid-cols-2 gap-2"><div class="flex items-center justify-start"><!></div> <div class="flex items-center justify-end"><!></div></div> <!></div>'),ts=g('<div class="flex flex-col gap-3"><!> <div class="flex flex-wrap items-center gap-x-4 gap-y-1 text-sm text-rc-gray-200"><div><span class="text-rc-gray-400">Timing:</span> </div> <div><span class="text-rc-gray-400">Response time:</span> —</div> <div><span class="text-rc-gray-400">Model:</span> </div></div> <div><!> <div class="mt-2 h-[55vh]"><!></div></div></div>'),es=g('<div class="h-[65vh]"><!></div>'),rs=g('<button type="button" class="flex w-full cursor-pointer select-text items-baseline gap-2 truncate rounded-md bg-transparent px-2 py-1 text-left text-sm text-rc-gray-200 hover:bg-rc-gray-800/40"><!> <!> <span> </span> <!></button> <!> <!>',1);function bs(Y,o){Be(o,!0);let B=Ut(!1),J=Ut(!1),D=Ut("response");const O=dr();ar(O.cleanup);function $(v){return v&&typeof v.renderedPrompt=="string"?v.renderedPrompt:null}function P(v,p){if(v===p)return v.length;const C=Math.min(v.length,p.length);for(let k=0;k<C;k++)if(v.charCodeAt(k)!==p.charCodeAt(k))return k;return C}function K(v,p){const C=Math.max(v.length,p.length);if(C===0)return 100;const k=P(v,p);return Math.floor(k/C*100)}function f(v,p){const C=v.length,k=p.length,vt=P(v,p),X=Math.max(C,k),ut=X===0?100:Math.floor(vt/X*100);return{currentLength:C,baselineLength:k,commonPrefixLength:vt,denom:X,similarityPct:ut}}function R(v,p){const vt=v.slice(0,600),X=v.slice(Math.max(vt.length,v.length-600)),ut=Math.max(0,v.length-vt.length-X.length);return{length:v.length,head:vt,tail:X,omittedChars:ut}}function L(v){const p=v.llmUsage;return!p||typeof p.promptTokens!="number"||!Number.isFinite(p.promptTokens)||p.promptTokens<=0||typeof p.cachedPromptTokens!="number"||!Number.isFinite(p.cachedPromptTokens)||p.cachedPromptTokens<0?null:Math.max(0,Math.min(100,Math.floor(p.cachedPromptTokens/p.promptTokens*100)))}function U(v){const p=new WeakSet;try{return JSON.stringify(v,(C,k)=>{if(typeof k=="bigint")return k.toString();if(k instanceof Error)return{name:k.name,message:k.message,stack:k.stack};if(typeof k=="object"&&k!==null){if(p.has(k))return"[Circular]";p.add(k)}return k},2)??""}catch{return String(v)}}function ot(v){if(v==null)return"";if(typeof v=="string"){const p=v.trim();if(!p)return"";try{return JSON.stringify(JSON.parse(p),null,2)}catch{return v}}return U(v)}function qt(v){return new Date(v).toISOString()}function kt(v){if(typeof v!="number"||!Number.isFinite(v))return null;const p=new Date(v);if(Number.isNaN(p.getTime()))return null;const C=String(p.getHours()).padStart(2,"0"),k=String(p.getMinutes()).padStart(2,"0"),vt=String(p.getSeconds()).padStart(2,"0");return`${C}:${k}:${vt}`}const Zt=b(()=>kt(o.trace.createdAt)),Yt=b(()=>o.trace.error!=null),zt=b(()=>`AI: ${o.trace.name}`),lt=b(()=>o.trace.name),Ht=b(()=>{if(o.trace.name!=="main")return null;const v=$(o.trace),p=$(o.compareTrace);return v==null||p==null?null:K(v,p)}),wt=b(()=>o.trace.name!=="main"?null:L(o.trace)),se=90,$t=90,ue=b(()=>o.trace.name!=="main"?null:t(wt)!=null?t(wt)===0&&t(Ht)!=null&&t(Ht)>=$t?{text:"0% tokens cached. Cache miss",className:"text-red-200"}:t(wt)>=se?{text:`${t(wt)}% tokens cached`,className:"text-rc-gray-400"}:{text:`${t(wt)}% tokens cached - move dynamic parts of prompt to the bottom`,className:"text-red-200"}:t(Ht)!=null?t(Ht)>=se?{text:`${t(Ht)}%`,className:"text-rc-gray-400"}:{text:`${t(Ht)}% cached - move dynamic parts of prompt to the bottom`,className:"text-red-200"}:null),he=b(()=>{var Dt;if(o.trace.name!=="main")return null;const v=$(o.trace),p=$(o.compareTrace),C=v!=null&&p!=null?f(v,p):null,k=o.trace.llmUsage??null,vt=t(wt),X=vt===0&&(C==null?void 0:C.similarityPct)!=null&&C.similarityPct>=$t;return{version:1,labelSource:vt!=null?"llmUsage":t(Ht)!=null?"promptSimilarityFallback":"none",thresholds:{okPct:se,cacheMissSimilarityPct:$t},inputs:{llmUsage:k,currentRenderedPrompt:v!=null?R(v):null,baselineRenderedPrompt:p!=null?R(p):null},computed:{cachedTokensPct:vt,promptSimilarityPct:(C==null?void 0:C.similarityPct)??null,promptSimilarity:C,cacheMiss:X},decision:{text:((Dt=t(ue))==null?void 0:Dt.text)??null}}}),be=b(()=>t(he)?U(t(he)):"{}"),z=b(()=>ot(o.trace.response)),G=b(()=>{const v=o.trace.response;if(typeof v!="string")return"json";try{return JSON.parse(v),"json"}catch{return"text"}}),Nt=b(()=>o.trace.stringifiedConversation??""),te=b(()=>ot(o.trace.renderedPrompt)),ne=b(()=>ot(o.trace.receivedPrompt)),oe=b(()=>ot(o.trace.receivedContext)),ee=b(()=>ot(o.trace.schema)),w=b(()=>o.trace.error?U(o.trace.error):"");function W(v){return v==null?"":typeof v=="string"?v:U(v)}const dt=b(()=>W(o.trace.receivedPrompt)),at=b(()=>W(o.trace.renderedPrompt));let ht=Ut(null),bt=Ut(null);async function pt(v){try{const p=v==="raw"?t(dt):t(at);await navigator.clipboard.writeText(p),it(ht,v,!0),t(bt)&&clearTimeout(t(bt)),it(bt,window.setTimeout(()=>{it(ht,null),it(bt,null)},2e3),!0)}catch(p){console.error("Failed to copy prompt",p)}}var _t=rs(),ct=ft(_t);ct.__pointerdown=function(...v){var p;(p=O.onPointerDown)==null||p.apply(this,v)},ct.__click=[Ya,O,B];var Tt=r(ct);{let v=b(()=>t(Yt)?"close":"checkmark"),p=b(()=>t(Yt)?"self-center text-red-400":"self-center text-rc-green-200");or(Tt,{get name(){return t(v)},width:18,height:18,get class(){return t(p)}})}var jt=n(Tt,2);{var ie=v=>{var p=Ka(),C=r(p,!0);e(p),S(()=>c(C,t(Zt))),i(v,p)};y(jt,v=>{t(Zt)&&v(ie)})}var Vt=n(jt,2),me=r(Vt);e(Vt);var gt=n(Vt,2);{var Kt=v=>{var p=Xa(),C=r(p);C.__click=[Ga,O,he,J];var k=r(C,!0);e(C),e(p),S(()=>{Wt(p,1,`shrink-0 text-xs ${t(ue).className}`),c(k,t(ue).text)}),i(v,p)};y(gt,v=>{t(ue)!=null&&v(Kt)})}e(ct);var Lt=n(ct,2);{var E=v=>{Xe(v,{get title(){return t(zt)},class:"!w-[85vw] !max-w-5xl",get open(){return t(B)},set open(C){it(B,C,!0)},children:C=>{var k=ts(),vt=r(k);{var X=Et=>{var ye=Qa(),fe=r(ye,!0);e(ye),S(()=>c(fe,t(w))),i(Et,ye)};y(vt,Et=>{t(w)&&Et(X)})}var ut=n(vt,2),Dt=r(ut),Ae=n(r(Dt));e(Dt);var Me=n(Dt,4),le=n(r(Me));e(Me),e(ut);var de=n(ut,2),Oe=r(de);nr(Oe,{get value(){return t(D)},ariaLabel:"Step trace tabs",onChange:({value:Et})=>it(D,Et,!0),children:(Et,ye)=>{var fe=Za(),He=ft(fe);_e(He,{value:"response",class:"px-3",children:(Gt,Te)=>{Rt();var Pt=St("Response");i(Gt,Pt)},$$slots:{default:!0}});var Ue=n(He,2);_e(Ue,{value:"conversation",class:"px-3",children:(Gt,Te)=>{Rt();var Pt=St("Conversation");i(Gt,Pt)},$$slots:{default:!0}});var ce=n(Ue,2);_e(ce,{value:"prompt",class:"px-3",children:(Gt,Te)=>{Rt();var Pt=St("Prompt");i(Gt,Pt)},$$slots:{default:!0}});var we=n(ce,2);_e(we,{value:"context",class:"px-3",children:(Gt,Te)=>{Rt();var Pt=St("Context");i(Gt,Pt)},$$slots:{default:!0}});var Ve=n(we,2);_e(Ve,{value:"schema",class:"px-3",children:(Gt,Te)=>{Rt();var Pt=St("Schema");i(Gt,Pt)},$$slots:{default:!0}}),i(Et,fe)},$$slots:{default:!0}});var Re=n(Oe,2),ze=r(Re);{var re=Et=>{Pe(Et,{get value(){return t(z)},get language(){return t(G)},class:"h-full"})},Ce=Et=>{var ye=xe(),fe=ft(ye);{var He=ce=>{Pe(ce,{get value(){return t(Nt)},language:"text",class:"h-full"})},Ue=ce=>{var we=xe(),Ve=ft(we);{var Gt=Pt=>{var Se=$a(),Ee=r(Se),Ie=r(Ee),Ne=r(Ie);{let je=b(()=>!t(dt).trim());Qe(Ne,{variant:"secondary",size:"small",get disabled(){return t(je)},onclick:()=>pt("raw"),children:(Je,tr)=>{Rt();var Le=St();S(()=>c(Le,t(ht)==="raw"?"Copied raw prompt":"Copy raw prompt")),i(Je,Le)},$$slots:{default:!0}})}e(Ie);var ve=n(Ie,2),Ze=r(ve);{let je=b(()=>!t(at).trim());Qe(Ze,{variant:"secondary",size:"small",get disabled(){return t(je)},onclick:()=>pt("rendered"),children:(Je,tr)=>{Rt();var Le=St();S(()=>c(Le,t(ht)==="rendered"?"Copied rendered prompt":"Copy rendered prompt")),i(Je,Le)},$$slots:{default:!0}})}e(ve),e(Ee);var $e=n(Ee,2);Wa($e,{get original(){return t(ne)},get modified(){return t(te)},language:"markdown",class:"min-h-0 flex-1"}),e(Se),i(Pt,Se)},Te=Pt=>{var Se=xe(),Ee=ft(Se);{var Ie=ve=>{Pe(ve,{get value(){return t(oe)},language:"json",class:"h-full"})},Ne=ve=>{Pe(ve,{get value(){return t(ee)},language:"json",class:"h-full"})};y(Ee,ve=>{t(D)==="context"?ve(Ie):ve(Ne,!1)},!0)}i(Pt,Se)};y(Ve,Pt=>{t(D)==="prompt"?Pt(Gt):Pt(Te,!1)},!0)}i(ce,we)};y(fe,ce=>{t(D)==="conversation"?ce(He):ce(Ue,!1)},!0)}i(Et,ye)};y(ze,Et=>{t(D)==="response"?Et(re):Et(Ce,!1)})}e(Re),e(de),e(k),S(Et=>{c(Ae,` ${Et??""}`),c(le,` ${o.trace.model??"—"??""}`)},[()=>typeof o.trace.createdAt=="number"?qt(o.trace.createdAt):"—"]),i(C,k)},$$slots:{default:!0}})};y(Lt,v=>{t(B)&&v(E)})}var N=n(Lt,2);{var et=v=>{Xe(v,{title:"Prompt cache calc",class:"!w-[85vw] !max-w-5xl",get open(){return t(J)},set open(C){it(J,C,!0)},children:C=>{var k=es(),vt=r(k);Pe(vt,{get value(){return t(be)},language:"json",class:"h-full"}),e(k),i(C,k)},$$slots:{default:!0}})};y(N,v=>{t(J)&&v(et)})}S(()=>{Wt(Vt,1,Ge(t(Yt)?"text-red-200":"")),c(me,`AI: ${t(lt)??""}`)}),i(Y,_t),qe()}sr(["pointerdown","click"]);export{xs as C,bs as a,hs as b};
@@ -1 +0,0 @@
1
- import{l as o,a as r}from"../chunks/CXaO9BO2.js";export{o as load_css,r as start};
@@ -1,2 +0,0 @@
1
- )�import{l as o,a as r}from"../chunks/CXaO9BO2.js";export{o as load_css,r as start};
2
-