@tonyclaw/agent-inspector 3.0.44 → 3.0.46

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 (347) hide show
  1. package/.output/{nitro.json → backend/nitro.json} +3 -3
  2. package/.output/backend-public/assets/index-D4LX-sw-.js +11 -0
  3. package/.output/cli.js +22707 -17099
  4. package/.output/server/_libs/extend.mjs +4 -8
  5. package/.output/server/_libs/jszip.mjs +9 -35
  6. package/.output/server/_libs/modelcontextprotocol__core.mjs +25 -25
  7. package/.output/server/_libs/modelcontextprotocol__server.mjs +2 -2
  8. package/.output/server/_libs/react-dom.mjs +2 -3
  9. package/.output/server/_libs/react.mjs +1 -27
  10. package/.output/server/_libs/tanstack__react-router.mjs +1 -329
  11. package/.output/server/_libs/tanstack__router-core.mjs +42 -100
  12. package/.output/server/_libs/use-sync-external-store.mjs +1 -64
  13. package/.output/server/_libs/ws.mjs +1 -1
  14. package/.output/server/_libs/zod.mjs +6 -6
  15. package/.output/server/_ssr/index.mjs +5 -4
  16. package/.output/server/_ssr/publicBasePathContext-IH2ilOfu.mjs +176 -0
  17. package/.output/server/_ssr/{router-DWcUFPR3.mjs → router-D18yUq36.mjs} +7877 -5597
  18. package/.output/server/_ssr/start-COQu_AgD.mjs +57 -0
  19. package/.output/server/_tanstack-start-manifest_v-DnbdNeun.mjs +4 -0
  20. package/.output/server/index.mjs +5 -145
  21. package/.output/{public/assets/CompareDrawer-DQHjxFO6.js → ui/assets/CompareDrawer-DAUuIJ6G.js} +1 -1
  22. package/.output/{public/assets/InspectorPet-D1A4505B.js → ui/assets/InspectorPet-BRBVjOWI.js} +1 -1
  23. package/.output/ui/assets/ProxyViewerContainer-D7Sq0ctc.js +59 -0
  24. package/.output/{public/assets/ReplayDialog-C5vmbecv.js → ui/assets/ReplayDialog-nDLsjOhs.js} +1 -1
  25. package/.output/{public/assets/RequestAnatomy-CPGNB8lk.js → ui/assets/RequestAnatomy-zd4BDgL0.js} +1 -1
  26. package/.output/ui/assets/ResponseView-AdIXGcSn.js +2 -0
  27. package/.output/ui/assets/StreamingChunkSequence-CesTz8He.js +1 -0
  28. package/.output/{public/assets/_sessionId-CDhRgzf6.js → ui/assets/_sessionId-BAfzrhSU.js} +1 -1
  29. package/.output/{public/assets/_sessionId-mw3aA8Bp.js → ui/assets/_sessionId-QnBomgPD.js} +1 -1
  30. package/.output/ui/assets/favicon-DYEkHSNl.svg +21 -0
  31. package/.output/{public/assets/index-B2eoeT-Z.js → ui/assets/index-BcsdxBAd.js} +1 -1
  32. package/.output/ui/assets/index-BvXp42al.css +1 -0
  33. package/.output/{public/assets/index-CX7_rf7o.js → ui/assets/index-D0rtCN9V.js} +1 -1
  34. package/.output/ui/assets/index-DHpwr08Z.js +73 -0
  35. package/.output/{public/assets/index-BfRhTvOd.js → ui/assets/index-dNuk2dsU.js} +1 -1
  36. package/.output/ui/assets/json-viewer-BvFHglMb.js +1 -0
  37. package/.output/{public/assets/jszip.min-C9rCFoU3.js → ui/assets/jszip.min-B5Z7gNZB.js} +1 -1
  38. package/.output/ui/index.html +229 -0
  39. package/.output/ui/runtime-config.js +2 -0
  40. package/.output/workers/logFinalizer.worker.js +983 -414
  41. package/.output/workers/sessionWorkerEntry.js +983 -414
  42. package/README.md +363 -35
  43. package/docs/instance-control.openapi.yaml +361 -0
  44. package/package.json +28 -5
  45. package/scripts/generate-theme-scales.mjs +3 -3
  46. package/src/{router.tsx → backend/router.tsx} +3 -15
  47. package/src/backend/routes/$.ts +26 -0
  48. package/src/backend/routes/__root.ts +4 -0
  49. package/src/backend/routes/api/-instances.ts +109 -0
  50. package/src/{routes → backend/routes}/api/alerts.summary.ts +3 -3
  51. package/src/{routes → backend/routes}/api/alerts.ts +4 -4
  52. package/src/{routes → backend/routes}/api/config.paths.ts +1 -1
  53. package/src/{routes → backend/routes}/api/config.ts +11 -2
  54. package/src/{routes → backend/routes}/api/ecosystem.packages.$packageId.help.ts +1 -1
  55. package/src/{routes → backend/routes}/api/ecosystem.packages.$packageId.install.ts +1 -1
  56. package/src/{routes → backend/routes}/api/ecosystem.packages.$packageId.runner-presets.ts +1 -1
  57. package/src/{routes → backend/routes}/api/ecosystem.packages.$packageId.upgrade.ts +1 -1
  58. package/src/{routes → backend/routes}/api/ecosystem.packages.ts +5 -1
  59. package/src/{routes → backend/routes}/api/ecosystem.recipes.$recipeId.run.ts +1 -1
  60. package/src/{routes → backend/routes}/api/ecosystem.tasks.$taskId.ts +1 -1
  61. package/src/{routes → backend/routes}/api/ecosystem.tasks.ts +1 -1
  62. package/src/{routes → backend/routes}/api/groups.$groupId.evidence.ts +2 -2
  63. package/src/{routes → backend/routes}/api/groups.$groupId.sessions.ts +2 -2
  64. package/src/{routes → backend/routes}/api/groups.$groupId.ts +2 -2
  65. package/src/{routes → backend/routes}/api/groups.ts +2 -2
  66. package/src/{routes → backend/routes}/api/health.ts +3 -3
  67. package/src/backend/routes/api/instances.$name.connection.ts +12 -0
  68. package/src/backend/routes/api/instances.$name.restart.ts +23 -0
  69. package/src/backend/routes/api/instances.$name.start.ts +18 -0
  70. package/src/backend/routes/api/instances.$name.stop.ts +23 -0
  71. package/src/backend/routes/api/instances.$name.ts +12 -0
  72. package/src/backend/routes/api/instances.ts +16 -0
  73. package/src/{routes → backend/routes}/api/knowledge.candidates.$candidateId.promote.ts +2 -2
  74. package/src/{routes → backend/routes}/api/knowledge.candidates.$candidateId.ts +2 -2
  75. package/src/{routes → backend/routes}/api/knowledge.candidates.ts +1 -1
  76. package/src/{routes → backend/routes}/api/knowledge.project-context.ts +2 -2
  77. package/src/{routes → backend/routes}/api/knowledge.search.ts +2 -2
  78. package/src/{routes → backend/routes}/api/knowledge.sessions.$sessionId.candidates.ts +3 -3
  79. package/src/{routes → backend/routes}/api/logs.$id.body.ts +6 -6
  80. package/src/{routes → backend/routes}/api/logs.$id.chunks.ts +5 -4
  81. package/src/{routes → backend/routes}/api/logs.$id.replay.ts +12 -11
  82. package/src/{routes → backend/routes}/api/logs.$id.ts +4 -3
  83. package/src/{routes → backend/routes}/api/logs.import.ts +3 -3
  84. package/src/{routes → backend/routes}/api/logs.stream.ts +11 -7
  85. package/src/{routes → backend/routes}/api/logs.ts +17 -9
  86. package/src/{routes → backend/routes}/api/mcp.ts +1 -1
  87. package/src/{routes → backend/routes}/api/models.ts +1 -1
  88. package/src/{routes → backend/routes}/api/pi-agent.ts +2 -2
  89. package/src/{routes → backend/routes}/api/providers.$providerId.model-metadata.ts +5 -5
  90. package/src/{routes → backend/routes}/api/providers.$providerId.test.log.ts +7 -7
  91. package/src/{routes → backend/routes}/api/providers.$providerId.ts +4 -4
  92. package/src/{routes → backend/routes}/api/providers.export.ts +1 -1
  93. package/src/{routes → backend/routes}/api/providers.import.ts +3 -3
  94. package/src/{routes → backend/routes}/api/providers.scan.ts +2 -2
  95. package/src/{routes → backend/routes}/api/providers.ts +9 -4
  96. package/src/{routes → backend/routes}/api/runs.$runId.evidence.ts +2 -2
  97. package/src/{routes → backend/routes}/api/runs.$runId.ts +2 -2
  98. package/src/{routes → backend/routes}/api/runs.ts +4 -4
  99. package/src/backend/routes/api/runtime.ts +46 -0
  100. package/src/{routes → backend/routes}/api/sessions.ts +3 -3
  101. package/src/{routes → backend/routes}/proxy/$.ts +1 -1
  102. package/src/{routes → backend/routes}/readyz.ts +1 -1
  103. package/src/backend/start.ts +10 -0
  104. package/src/cli/alias.ts +431 -0
  105. package/src/cli/doctor.ts +32 -9
  106. package/src/cli/instance.ts +1050 -0
  107. package/src/cli/instanceArgs.ts +285 -0
  108. package/src/cli/instanceControl.ts +181 -0
  109. package/src/cli/instanceModel.ts +267 -0
  110. package/src/cli/instanceRegistry.ts +731 -0
  111. package/src/cli/networkHints.ts +27 -14
  112. package/src/cli/onboard.ts +190 -35
  113. package/src/cli/onboardTarget.ts +228 -0
  114. package/src/cli/templates/codex-skill-onboard.ts +109 -31
  115. package/src/cli/templates/skill-onboard.ts +140 -70
  116. package/src/cli.ts +338 -77
  117. package/src/components/ProxyViewer.tsx +20 -10
  118. package/src/components/ProxyViewerContainer.tsx +12 -11
  119. package/src/components/pi-agent/PiAgentPanel.tsx +2 -2
  120. package/src/components/providers/ProviderCard.tsx +1 -1
  121. package/src/components/providers/ProviderTestResultsView.tsx +1 -1
  122. package/src/components/providers/SettingsDialog.tsx +160 -140
  123. package/src/components/proxy-viewer/ApplicationBar.tsx +2 -1
  124. package/src/components/proxy-viewer/LogEntry.tsx +1 -1
  125. package/src/components/proxy-viewer/log-formats/index.ts +1 -1
  126. package/src/contracts/index.ts +5 -0
  127. package/src/contracts/log.ts +33 -3
  128. package/src/knowledge/types.ts +3 -2
  129. package/src/lib/alertContract.ts +2 -2
  130. package/src/lib/apiClient.ts +30 -7
  131. package/src/lib/apiFormat.ts +29 -0
  132. package/src/lib/basePath.ts +31 -7
  133. package/src/lib/browserRuntimeContract.ts +124 -0
  134. package/src/lib/browserRuntimeResolver.ts +244 -0
  135. package/src/{proxy → lib}/claudeCodeStrip.ts +6 -7
  136. package/src/lib/codingAgentEndpoints.ts +54 -0
  137. package/src/lib/instanceContract.ts +236 -0
  138. package/src/lib/managedInstance.ts +104 -0
  139. package/src/lib/piAgentContract.ts +3 -2
  140. package/src/lib/publicBasePathContext.ts +137 -0
  141. package/src/lib/resourceLimits.ts +2 -0
  142. package/src/lib/runContract.ts +3 -3
  143. package/src/lib/sessionInfoContract.ts +3 -2
  144. package/src/mcp/instanceHandlers.ts +150 -0
  145. package/src/mcp/loopback.ts +16 -5
  146. package/src/mcp/mode.ts +25 -0
  147. package/src/mcp/server.ts +274 -39
  148. package/src/mcp/toolHandlers.ts +2 -2
  149. package/src/proxy/config.ts +25 -30
  150. package/src/proxy/dataDir.ts +43 -7
  151. package/src/proxy/ecosystemTasks.ts +161 -70
  152. package/src/proxy/formats/registry.ts +6 -21
  153. package/src/proxy/handler.ts +129 -29
  154. package/src/proxy/identityProxy.ts +1049 -50
  155. package/src/proxy/jsonlRecovery.ts +554 -0
  156. package/src/proxy/logFinalizer.ts +25 -10
  157. package/src/proxy/logImporter.ts +2 -1
  158. package/src/proxy/logIndex.ts +191 -95
  159. package/src/proxy/logger.ts +77 -14
  160. package/src/proxy/platformCommands.ts +41 -0
  161. package/src/proxy/privateDataPath.ts +310 -88
  162. package/src/proxy/rawStreamCapture.ts +194 -13
  163. package/src/proxy/runtimeAdmission.ts +5 -2
  164. package/src/proxy/runtimeHealth.ts +14 -1
  165. package/src/proxy/runtimeShutdown.ts +84 -2
  166. package/src/proxy/schemas.ts +7 -1
  167. package/src/proxy/sessionArchive.ts +78 -14
  168. package/src/proxy/sessionInfo.ts +5 -4
  169. package/src/proxy/sqliteLogIndex.ts +65 -2
  170. package/src/proxy/store.ts +141 -34
  171. package/src/proxy/uiAssetServer.ts +106 -0
  172. package/src/proxy/upstream.ts +29 -2
  173. package/src/ui/bootstrap.ts +167 -0
  174. package/src/ui/index.html +38 -0
  175. package/src/ui/logsStreamClient.ts +20 -0
  176. package/src/ui/main.tsx +13 -0
  177. package/src/ui/public/runtime-config.js +2 -0
  178. package/src/ui/router.tsx +13 -0
  179. package/src/ui/routes/__root.tsx +69 -0
  180. package/src/{routes → ui/routes}/index.tsx +2 -3
  181. package/src/{routes → ui/routes}/session/$sessionId.tsx +5 -11
  182. package/src/ui/runtimeDiscovery.ts +50 -0
  183. package/styles/globals.css +1 -0
  184. package/.output/public/assets/ProxyViewerContainer-BhpIgfBi.js +0 -126
  185. package/.output/public/assets/ResponseView-DUfrajCm.js +0 -2
  186. package/.output/public/assets/StreamingChunkSequence-nbeCQqOz.js +0 -1
  187. package/.output/public/assets/index-BWjeqxbk.css +0 -1
  188. package/.output/public/assets/index-C6qZwYlR.js +0 -70
  189. package/.output/public/assets/json-viewer-BLmF1sOZ.js +0 -1
  190. package/.output/server/_libs/@radix-ui/react-accessible-icon+[...].mjs +0 -1
  191. package/.output/server/_libs/@radix-ui/react-dismissable-layer+[...].mjs +0 -344
  192. package/.output/server/_libs/@radix-ui/react-navigation-menu+[...].mjs +0 -2
  193. package/.output/server/_libs/@radix-ui/react-one-time-password-field+[...].mjs +0 -2
  194. package/.output/server/_libs/@radix-ui/react-password-toggle-field+[...].mjs +0 -2
  195. package/.output/server/_libs/@radix-ui/react-use-callback-ref+[...].mjs +0 -11
  196. package/.output/server/_libs/@radix-ui/react-use-controllable-state+[...].mjs +0 -69
  197. package/.output/server/_libs/@radix-ui/react-use-effect-event+[...].mjs +0 -1
  198. package/.output/server/_libs/@radix-ui/react-use-is-hydrated+[...].mjs +0 -28
  199. package/.output/server/_libs/@radix-ui/react-use-layout-effect+[...].mjs +0 -6
  200. package/.output/server/_libs/@radix-ui/react-visually-hidden+[...].mjs +0 -34
  201. package/.output/server/_libs/aria-hidden.mjs +0 -122
  202. package/.output/server/_libs/bail.mjs +0 -8
  203. package/.output/server/_libs/character-entities.mjs +0 -2130
  204. package/.output/server/_libs/class-variance-authority.mjs +0 -44
  205. package/.output/server/_libs/clsx.mjs +0 -16
  206. package/.output/server/_libs/comma-separated-tokens.mjs +0 -10
  207. package/.output/server/_libs/decode-named-character-reference+[...].mjs +0 -8
  208. package/.output/server/_libs/dequal.mjs +0 -27
  209. package/.output/server/_libs/detect-node-es.mjs +0 -1
  210. package/.output/server/_libs/devlop.mjs +0 -8
  211. package/.output/server/_libs/diff.mjs +0 -320
  212. package/.output/server/_libs/estree-util-is-identifier-name.mjs +0 -11
  213. package/.output/server/_libs/floating-ui__core.mjs +0 -725
  214. package/.output/server/_libs/floating-ui__dom.mjs +0 -622
  215. package/.output/server/_libs/floating-ui__react-dom.mjs +0 -292
  216. package/.output/server/_libs/floating-ui__utils.mjs +0 -320
  217. package/.output/server/_libs/get-nonce.mjs +0 -9
  218. package/.output/server/_libs/hast-util-to-jsx-runtime.mjs +0 -388
  219. package/.output/server/_libs/hast-util-whitespace.mjs +0 -10
  220. package/.output/server/_libs/html-url-attributes.mjs +0 -26
  221. package/.output/server/_libs/inline-style-parser.mjs +0 -142
  222. package/.output/server/_libs/is-plain-obj.mjs +0 -10
  223. package/.output/server/_libs/lucide-react.mjs +0 -1027
  224. package/.output/server/_libs/mdast-util-from-markdown.mjs +0 -717
  225. package/.output/server/_libs/mdast-util-to-hast.mjs +0 -710
  226. package/.output/server/_libs/mdast-util-to-string.mjs +0 -38
  227. package/.output/server/_libs/micromark-core-commonmark.mjs +0 -2259
  228. package/.output/server/_libs/micromark-factory-destination.mjs +0 -94
  229. package/.output/server/_libs/micromark-factory-label.mjs +0 -63
  230. package/.output/server/_libs/micromark-factory-space.mjs +0 -24
  231. package/.output/server/_libs/micromark-factory-title.mjs +0 -65
  232. package/.output/server/_libs/micromark-factory-whitespace.mjs +0 -22
  233. package/.output/server/_libs/micromark-util-character.mjs +0 -44
  234. package/.output/server/_libs/micromark-util-chunked.mjs +0 -36
  235. package/.output/server/_libs/micromark-util-classify-character+[...].mjs +0 -12
  236. package/.output/server/_libs/micromark-util-combine-extensions+[...].mjs +0 -41
  237. package/.output/server/_libs/micromark-util-decode-numeric-character-reference+[...].mjs +0 -19
  238. package/.output/server/_libs/micromark-util-decode-string.mjs +0 -21
  239. package/.output/server/_libs/micromark-util-encode.mjs +0 -1
  240. package/.output/server/_libs/micromark-util-html-tag-name.mjs +0 -69
  241. package/.output/server/_libs/micromark-util-normalize-identifier+[...].mjs +0 -6
  242. package/.output/server/_libs/micromark-util-resolve-all.mjs +0 -15
  243. package/.output/server/_libs/micromark-util-sanitize-uri.mjs +0 -41
  244. package/.output/server/_libs/micromark-util-subtokenize.mjs +0 -346
  245. package/.output/server/_libs/micromark.mjs +0 -906
  246. package/.output/server/_libs/property-information.mjs +0 -1209
  247. package/.output/server/_libs/radix-ui.mjs +0 -1
  248. package/.output/server/_libs/radix-ui__number.mjs +0 -6
  249. package/.output/server/_libs/radix-ui__primitive.mjs +0 -11
  250. package/.output/server/_libs/radix-ui__react-accordion.mjs +0 -1
  251. package/.output/server/_libs/radix-ui__react-alert-dialog.mjs +0 -1
  252. package/.output/server/_libs/radix-ui__react-arrow.mjs +0 -23
  253. package/.output/server/_libs/radix-ui__react-aspect-ratio.mjs +0 -1
  254. package/.output/server/_libs/radix-ui__react-avatar.mjs +0 -1
  255. package/.output/server/_libs/radix-ui__react-checkbox.mjs +0 -1
  256. package/.output/server/_libs/radix-ui__react-collapsible.mjs +0 -144
  257. package/.output/server/_libs/radix-ui__react-collection.mjs +0 -69
  258. package/.output/server/_libs/radix-ui__react-compose-refs.mjs +0 -38
  259. package/.output/server/_libs/radix-ui__react-context-menu.mjs +0 -1
  260. package/.output/server/_libs/radix-ui__react-context.mjs +0 -64
  261. package/.output/server/_libs/radix-ui__react-dialog.mjs +0 -280
  262. package/.output/server/_libs/radix-ui__react-direction.mjs +0 -9
  263. package/.output/server/_libs/radix-ui__react-dropdown-menu.mjs +0 -1
  264. package/.output/server/_libs/radix-ui__react-focus-guards.mjs +0 -39
  265. package/.output/server/_libs/radix-ui__react-focus-scope.mjs +0 -210
  266. package/.output/server/_libs/radix-ui__react-form.mjs +0 -1
  267. package/.output/server/_libs/radix-ui__react-hover-card.mjs +0 -1
  268. package/.output/server/_libs/radix-ui__react-id.mjs +0 -14
  269. package/.output/server/_libs/radix-ui__react-label.mjs +0 -1
  270. package/.output/server/_libs/radix-ui__react-menu.mjs +0 -1
  271. package/.output/server/_libs/radix-ui__react-menubar.mjs +0 -1
  272. package/.output/server/_libs/radix-ui__react-popover.mjs +0 -1
  273. package/.output/server/_libs/radix-ui__react-popper.mjs +0 -340
  274. package/.output/server/_libs/radix-ui__react-portal.mjs +0 -16
  275. package/.output/server/_libs/radix-ui__react-presence.mjs +0 -173
  276. package/.output/server/_libs/radix-ui__react-primitive.mjs +0 -42
  277. package/.output/server/_libs/radix-ui__react-progress.mjs +0 -1
  278. package/.output/server/_libs/radix-ui__react-radio-group.mjs +0 -1
  279. package/.output/server/_libs/radix-ui__react-roving-focus.mjs +0 -235
  280. package/.output/server/_libs/radix-ui__react-scroll-area.mjs +0 -731
  281. package/.output/server/_libs/radix-ui__react-select.mjs +0 -1207
  282. package/.output/server/_libs/radix-ui__react-separator.mjs +0 -28
  283. package/.output/server/_libs/radix-ui__react-slider.mjs +0 -1
  284. package/.output/server/_libs/radix-ui__react-slot.mjs +0 -132
  285. package/.output/server/_libs/radix-ui__react-switch.mjs +0 -1
  286. package/.output/server/_libs/radix-ui__react-tabs.mjs +0 -194
  287. package/.output/server/_libs/radix-ui__react-toast.mjs +0 -2
  288. package/.output/server/_libs/radix-ui__react-toggle-group.mjs +0 -1
  289. package/.output/server/_libs/radix-ui__react-toggle.mjs +0 -1
  290. package/.output/server/_libs/radix-ui__react-toolbar.mjs +0 -1
  291. package/.output/server/_libs/radix-ui__react-tooltip.mjs +0 -498
  292. package/.output/server/_libs/radix-ui__react-use-previous.mjs +0 -14
  293. package/.output/server/_libs/radix-ui__react-use-size.mjs +0 -39
  294. package/.output/server/_libs/react-markdown.mjs +0 -235
  295. package/.output/server/_libs/react-remove-scroll-bar.mjs +0 -82
  296. package/.output/server/_libs/react-remove-scroll.mjs +0 -328
  297. package/.output/server/_libs/react-style-singleton.mjs +0 -69
  298. package/.output/server/_libs/remark-parse.mjs +0 -19
  299. package/.output/server/_libs/remark-rehype.mjs +0 -21
  300. package/.output/server/_libs/space-separated-tokens.mjs +0 -6
  301. package/.output/server/_libs/style-to-js.mjs +0 -72
  302. package/.output/server/_libs/style-to-object.mjs +0 -38
  303. package/.output/server/_libs/swr.mjs +0 -947
  304. package/.output/server/_libs/tailwind-merge.mjs +0 -3255
  305. package/.output/server/_libs/tanstack__react-virtual.mjs +0 -130
  306. package/.output/server/_libs/tanstack__virtual-core.mjs +0 -1319
  307. package/.output/server/_libs/three.mjs +0 -26016
  308. package/.output/server/_libs/trim-lines.mjs +0 -41
  309. package/.output/server/_libs/trough.mjs +0 -85
  310. package/.output/server/_libs/tslib.mjs +0 -1
  311. package/.output/server/_libs/ungap__structured-clone.mjs +0 -212
  312. package/.output/server/_libs/unified.mjs +0 -661
  313. package/.output/server/_libs/unist-util-is.mjs +0 -100
  314. package/.output/server/_libs/unist-util-position.mjs +0 -27
  315. package/.output/server/_libs/unist-util-stringify-position.mjs +0 -27
  316. package/.output/server/_libs/unist-util-visit-parents.mjs +0 -82
  317. package/.output/server/_libs/unist-util-visit.mjs +0 -24
  318. package/.output/server/_libs/use-callback-ref.mjs +0 -66
  319. package/.output/server/_libs/use-sidecar.mjs +0 -106
  320. package/.output/server/_libs/vfile-message.mjs +0 -138
  321. package/.output/server/_libs/vfile.mjs +0 -467
  322. package/.output/server/_sessionId-E_Dmopc-.mjs +0 -144
  323. package/.output/server/_sessionId-U54BAqdp.mjs +0 -82
  324. package/.output/server/_ssr/CompareDrawer-CksatPed.mjs +0 -1058
  325. package/.output/server/_ssr/InspectorPet-DNc4GQ7z.mjs +0 -936
  326. package/.output/server/_ssr/ProxyViewerContainer-B02Ey0p_.mjs +0 -17607
  327. package/.output/server/_ssr/ReplayDialog-DdMvHJF1.mjs +0 -723
  328. package/.output/server/_ssr/RequestAnatomy--vh2Z8__.mjs +0 -835
  329. package/.output/server/_ssr/ResponseView-Dhxc-cKC.mjs +0 -755
  330. package/.output/server/_ssr/StreamingChunkSequence-BG0EQmaD.mjs +0 -272
  331. package/.output/server/_ssr/index-D0At9nfd.mjs +0 -82
  332. package/.output/server/_ssr/index-lcfulIXa.mjs +0 -133
  333. package/.output/server/_ssr/json-viewer-My1J1_5R.mjs +0 -481
  334. package/.output/server/_ssr/start-HYkvq4Ni.mjs +0 -4
  335. package/.output/server/_tanstack-start-manifest_v-B2chR8ef.mjs +0 -4
  336. package/.output/server/node_modules/tslib/modules/index.js +0 -70
  337. package/.output/server/node_modules/tslib/modules/package.json +0 -3
  338. package/.output/server/node_modules/tslib/package.json +0 -47
  339. package/.output/server/node_modules/tslib/tslib.js +0 -484
  340. package/.output/server/package.json +0 -9
  341. package/src/routes/__root.tsx +0 -170
  342. /package/.output/{public → ui}/assets/agent-inspector-58K1_MsC.ico +0 -0
  343. /package/.output/{public → ui}/assets/alibaba-TTwafVwX.svg +0 -0
  344. /package/.output/{public → ui}/assets/minimax-BPMzvuL-.jpeg +0 -0
  345. /package/.output/{public → ui}/assets/qwen-mMn3f5ul.webp +0 -0
  346. /package/.output/{public → ui}/assets/zhipuai-BPNAnxo-.svg +0 -0
  347. /package/src/{routes → backend/routes}/livez.ts +0 -0
@@ -1,723 +0,0 @@
1
- import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { u as useProviders, f as fetchJsonWithTimeout, D as Dialog, b as DialogContent, c as DialogHeader, d as DialogTitle, T as Tabs, e as TabsList, h as TabsTrigger, i as TabsContent, j as TooltipProvider, k as Tooltip, l as TooltipTrigger, m as TooltipContent, n as dispatchLogFocusRequest, A as ApiTimeoutError } from "./ProxyViewerContainer-B02Ey0p_.mjs";
3
- import { B as Button, C as CapturedLogSchema } from "./router-DWcUFPR3.mjs";
4
- import { ResponseView } from "./ResponseView-Dhxc-cKC.mjs";
5
- import "node:crypto";
6
- import "node:path";
7
- import "node:fs";
8
- import "node:child_process";
9
- import "node:buffer";
10
- import "node:url";
11
- import "crypto";
12
- import "node:util";
13
- import "node:net";
14
- import "../_libs/modelcontextprotocol__server.mjs";
15
- import "../_libs/jszip.mjs";
16
- import "node:os";
17
- import { p as RotateCcw, aL as Braces, z as Minimize2 } from "../_libs/lucide-react.mjs";
18
- import { o as object, n as number, e as array, d as boolean, c as string } from "../_libs/zod.mjs";
19
- import "../_libs/swr.mjs";
20
- import "../_libs/use-sync-external-store.mjs";
21
- import "../_libs/dequal.mjs";
22
- import "../_libs/tanstack__react-virtual.mjs";
23
- import "../_libs/react-dom.mjs";
24
- import "util";
25
- import "async_hooks";
26
- import "stream";
27
- import "../_libs/tanstack__virtual-core.mjs";
28
- import "../_libs/class-variance-authority.mjs";
29
- import "../_libs/clsx.mjs";
30
- import "../_libs/diff.mjs";
31
- import "../_libs/radix-ui__react-dialog.mjs";
32
- import "../_libs/radix-ui__primitive.mjs";
33
- import "../_libs/radix-ui__react-compose-refs.mjs";
34
- import "../_libs/radix-ui__react-context.mjs";
35
- import "../_libs/radix-ui__react-id.mjs";
36
- import "../_libs/@radix-ui/react-use-layout-effect+[...].mjs";
37
- import "../_libs/@radix-ui/react-use-controllable-state+[...].mjs";
38
- import "../_libs/@radix-ui/react-dismissable-layer+[...].mjs";
39
- import "../_libs/radix-ui__react-primitive.mjs";
40
- import "../_libs/radix-ui__react-slot.mjs";
41
- import "../_libs/@radix-ui/react-use-callback-ref+[...].mjs";
42
- import "../_libs/radix-ui__react-focus-scope.mjs";
43
- import "../_libs/radix-ui__react-portal.mjs";
44
- import "../_libs/radix-ui__react-presence.mjs";
45
- import "../_libs/radix-ui__react-focus-guards.mjs";
46
- import "../_libs/react-remove-scroll.mjs";
47
- import "tslib";
48
- import "../_libs/react-remove-scroll-bar.mjs";
49
- import "../_libs/react-style-singleton.mjs";
50
- import "../_libs/get-nonce.mjs";
51
- import "../_libs/use-sidecar.mjs";
52
- import "../_libs/use-callback-ref.mjs";
53
- import "../_libs/aria-hidden.mjs";
54
- import "../_libs/radix-ui__react-tabs.mjs";
55
- import "../_libs/radix-ui__react-roving-focus.mjs";
56
- import "../_libs/radix-ui__react-collection.mjs";
57
- import "../_libs/radix-ui__react-direction.mjs";
58
- import "../_libs/@radix-ui/react-use-is-hydrated+[...].mjs";
59
- import "../_libs/radix-ui__react-select.mjs";
60
- import "../_libs/radix-ui__number.mjs";
61
- import "../_libs/radix-ui__react-popper.mjs";
62
- import "../_libs/floating-ui__react-dom.mjs";
63
- import "../_libs/floating-ui__dom.mjs";
64
- import "../_libs/floating-ui__core.mjs";
65
- import "../_libs/floating-ui__utils.mjs";
66
- import "../_libs/radix-ui__react-arrow.mjs";
67
- import "../_libs/radix-ui__react-use-size.mjs";
68
- import "../_libs/radix-ui__react-use-previous.mjs";
69
- import "../_libs/@radix-ui/react-visually-hidden+[...].mjs";
70
- import "../_libs/radix-ui__react-tooltip.mjs";
71
- import "../_libs/radix-ui__react-collapsible.mjs";
72
- import "../_libs/radix-ui__react-scroll-area.mjs";
73
- import "../_libs/tanstack__react-router.mjs";
74
- import "../_libs/tanstack__router-core.mjs";
75
- import "../_libs/cookie-es.mjs";
76
- import "../_libs/seroval.mjs";
77
- import "../_libs/seroval-plugins.mjs";
78
- import "node:stream";
79
- import "../_libs/tanstack__history.mjs";
80
- import "node:stream/web";
81
- import "../_libs/isbot.mjs";
82
- import "../_libs/tailwind-merge.mjs";
83
- import "node:fs/promises";
84
- import "node:worker_threads";
85
- import "node:readline";
86
- import "../_libs/conf.mjs";
87
- import "node:process";
88
- import "node:assert";
89
- import "../_libs/dot-prop.mjs";
90
- import "../_libs/env-paths.mjs";
91
- import "../_libs/atomically.mjs";
92
- import "node:events";
93
- import "../_libs/stubborn-fs.mjs";
94
- import "../_libs/stubborn-utils.mjs";
95
- import "../_libs/when-exit.mjs";
96
- import "../_libs/ajv.mjs";
97
- import "../_libs/fast-deep-equal.mjs";
98
- import "../_libs/json-schema-traverse.mjs";
99
- import "../_libs/fast-uri.mjs";
100
- import "../_libs/ajv-formats.mjs";
101
- import "../_libs/debounce-fn.mjs";
102
- import "../_libs/mimic-function.mjs";
103
- import "../_libs/semver.mjs";
104
- import "../_libs/uint8array-extras.mjs";
105
- import "node:dns/promises";
106
- import "node:assert/strict";
107
- import "../_libs/modelcontextprotocol__core.mjs";
108
- import "../_libs/readable-stream.mjs";
109
- import "events";
110
- import "node:string_decoder";
111
- import "../_libs/process-nextick-args.mjs";
112
- import "../_libs/isarray.mjs";
113
- import "../_libs/safe-buffer.mjs";
114
- import "buffer";
115
- import "../_libs/core-util-is.mjs";
116
- import "../_libs/inherits.mjs";
117
- import "../_libs/util-deprecate.mjs";
118
- import "../_libs/lie.mjs";
119
- import "../_libs/immediate.mjs";
120
- import "../_libs/setimmediate.mjs";
121
- import "../_libs/pako.mjs";
122
- import "../_libs/radix-ui__react-separator.mjs";
123
- function isJsonObject(value) {
124
- return typeof value === "object" && value !== null && !Array.isArray(value);
125
- }
126
- function byteLength(value) {
127
- if (value === null || value === void 0) return null;
128
- return new TextEncoder().encode(value).length;
129
- }
130
- function readRequestModel(body) {
131
- try {
132
- const parsed = JSON.parse(body);
133
- if (!isJsonObject(parsed)) return null;
134
- const model = parsed["model"];
135
- return typeof model === "string" && model.length > 0 ? model : null;
136
- } catch {
137
- return null;
138
- }
139
- }
140
- function replaceRequestModel(body, model) {
141
- try {
142
- const parsed = JSON.parse(body);
143
- if (!isJsonObject(parsed)) {
144
- return { body, error: "Request body must be a JSON object." };
145
- }
146
- return {
147
- body: JSON.stringify({ ...parsed, model }, null, 2),
148
- error: null
149
- };
150
- } catch {
151
- return { body, error: "Request body must be valid JSON before changing the replay model." };
152
- }
153
- }
154
- function buildReplayMetrics(input) {
155
- return {
156
- status: input.status ?? null,
157
- elapsedMs: input.elapsedMs ?? null,
158
- inputTokens: input.inputTokens ?? null,
159
- outputTokens: input.outputTokens ?? null,
160
- responseBytes: byteLength(input.responseText),
161
- streaming: input.streaming === true
162
- };
163
- }
164
- function numericDelta(original, replay) {
165
- if (original === null || replay === null) return null;
166
- return replay - original;
167
- }
168
- function buildReplayComparisons(original, replay) {
169
- return [
170
- {
171
- id: "status",
172
- label: "Status",
173
- original: original.status,
174
- replay: replay.status,
175
- delta: numericDelta(original.status, replay.status)
176
- },
177
- {
178
- id: "elapsed",
179
- label: "Elapsed",
180
- original: original.elapsedMs,
181
- replay: replay.elapsedMs,
182
- delta: numericDelta(original.elapsedMs, replay.elapsedMs)
183
- },
184
- {
185
- id: "input",
186
- label: "Input",
187
- original: original.inputTokens,
188
- replay: replay.inputTokens,
189
- delta: numericDelta(original.inputTokens, replay.inputTokens)
190
- },
191
- {
192
- id: "output",
193
- label: "Output",
194
- original: original.outputTokens,
195
- replay: replay.outputTokens,
196
- delta: numericDelta(original.outputTokens, replay.outputTokens)
197
- },
198
- {
199
- id: "bytes",
200
- label: "Bytes",
201
- original: original.responseBytes,
202
- replay: replay.responseBytes,
203
- delta: numericDelta(original.responseBytes, replay.responseBytes)
204
- },
205
- {
206
- id: "streaming",
207
- label: "Stream",
208
- original: original.streaming,
209
- replay: replay.streaming,
210
- delta: null
211
- }
212
- ];
213
- }
214
- const ReplayResultSchema = object({
215
- success: boolean(),
216
- error: string().optional(),
217
- responseStatus: number().nullable().optional(),
218
- responseText: string().nullable().optional(),
219
- inputTokens: number().nullable().optional(),
220
- outputTokens: number().nullable().optional(),
221
- elapsedMs: number().nullable().optional(),
222
- streaming: boolean().optional(),
223
- replayLogId: number().optional()
224
- });
225
- const ReplayHistorySchema = object({
226
- logs: array(CapturedLogSchema),
227
- total: number()
228
- });
229
- const REPLAY_TIMEOUT_MS = 6e4;
230
- const REPLAY_HISTORY_TIMEOUT_MS = 1e4;
231
- function formatJsonForEdit(value) {
232
- try {
233
- const parsed = JSON.parse(value);
234
- return JSON.stringify(parsed, null, 2);
235
- } catch {
236
- return value;
237
- }
238
- }
239
- function compactJsonForEdit(value) {
240
- try {
241
- const parsed = JSON.parse(value);
242
- return JSON.stringify(parsed);
243
- } catch {
244
- return value;
245
- }
246
- }
247
- function readJsonEditState(value) {
248
- try {
249
- JSON.parse(value);
250
- return { valid: true, message: "Valid JSON" };
251
- } catch (err) {
252
- return {
253
- valid: false,
254
- message: err instanceof Error ? err.message : "Invalid JSON"
255
- };
256
- }
257
- }
258
- function formatElapsed(ms) {
259
- if (ms < 1e3) return `${String(ms)}ms`;
260
- return `${(ms / 1e3).toFixed(1)}s`;
261
- }
262
- function formatMetricValue(value, metricId) {
263
- if (value === null) return "-";
264
- if (typeof value === "boolean") return value ? "stream" : "non-stream";
265
- switch (metricId) {
266
- case "elapsed":
267
- return formatElapsed(value);
268
- case "input":
269
- case "output":
270
- case "bytes":
271
- return value.toLocaleString();
272
- case "status":
273
- return String(value);
274
- case "streaming":
275
- return value ? "stream" : "non-stream";
276
- }
277
- }
278
- function formatDelta(delta, metricId) {
279
- if (delta === null) return "-";
280
- const sign = delta > 0 ? "+" : "";
281
- switch (metricId) {
282
- case "elapsed":
283
- return `${sign}${formatElapsed(delta)}`;
284
- case "input":
285
- case "output":
286
- case "bytes":
287
- case "status":
288
- return `${sign}${delta.toLocaleString()}`;
289
- case "streaming":
290
- return "-";
291
- }
292
- }
293
- function deltaToneClass(delta) {
294
- if (delta === null || delta === 0) return "text-muted-foreground";
295
- if (delta > 0) return "text-amber-400";
296
- return "text-emerald-400";
297
- }
298
- function ReplayComparisonTable({
299
- comparisons
300
- }) {
301
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "overflow-hidden rounded-md border border-border", children: [
302
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-[1fr_1fr_1fr_1fr] bg-muted/40 px-3 py-2 text-[11px] font-medium text-muted-foreground", children: [
303
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Metric" }),
304
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Original" }),
305
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Replay" }),
306
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Delta" })
307
- ] }),
308
- comparisons.map((comparison) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
309
- "div",
310
- {
311
- className: "grid grid-cols-[1fr_1fr_1fr_1fr] border-t border-border px-3 py-2 text-xs",
312
- children: [
313
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-muted-foreground", children: comparison.label }),
314
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono", children: formatMetricValue(comparison.original, comparison.id) }),
315
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono", children: formatMetricValue(comparison.replay, comparison.id) }),
316
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `font-mono ${deltaToneClass(comparison.delta)}`, children: formatDelta(comparison.delta, comparison.id) })
317
- ]
318
- },
319
- comparison.id
320
- ))
321
- ] });
322
- }
323
- function ReplayDialog({
324
- log,
325
- displayNumber,
326
- open,
327
- onOpenChange
328
- }) {
329
- const { providers } = useProviders();
330
- const originalBody = log.rawRequestBody ?? "{}";
331
- const [modifiedBody, setModifiedBody] = reactExports.useState(() => {
332
- return formatJsonForEdit(originalBody);
333
- });
334
- const [replayResult, setReplayResult] = reactExports.useState(null);
335
- const [replayHistory, setReplayHistory] = reactExports.useState([]);
336
- const [loading, setLoading] = reactExports.useState(false);
337
- const [error, setError] = reactExports.useState(null);
338
- const replayAbortRef = reactExports.useRef(null);
339
- const replayRequestIdRef = reactExports.useRef(0);
340
- const jsonEditState = reactExports.useMemo(() => readJsonEditState(modifiedBody), [modifiedBody]);
341
- const cancelReplay = reactExports.useCallback(() => {
342
- replayRequestIdRef.current += 1;
343
- replayAbortRef.current?.abort();
344
- replayAbortRef.current = null;
345
- setLoading(false);
346
- }, []);
347
- const refreshReplayHistory = reactExports.useCallback(async () => {
348
- if (!open) return;
349
- try {
350
- const data = await fetchJsonWithTimeout(
351
- `/api/logs?replayOf=${String(log.id)}`,
352
- ReplayHistorySchema,
353
- REPLAY_HISTORY_TIMEOUT_MS
354
- );
355
- setReplayHistory(data.logs);
356
- } catch {
357
- }
358
- }, [log.id, open]);
359
- reactExports.useEffect(() => {
360
- void refreshReplayHistory();
361
- }, [refreshReplayHistory]);
362
- reactExports.useEffect(() => {
363
- if (open) return void 0;
364
- cancelReplay();
365
- return void 0;
366
- }, [cancelReplay, open]);
367
- reactExports.useEffect(() => {
368
- return () => {
369
- replayRequestIdRef.current += 1;
370
- replayAbortRef.current?.abort();
371
- replayAbortRef.current = null;
372
- };
373
- }, []);
374
- async function handleReplay() {
375
- if (!jsonEditState.valid) {
376
- setError("Request body must be valid JSON before replay.");
377
- return;
378
- }
379
- replayAbortRef.current?.abort();
380
- const requestId = replayRequestIdRef.current + 1;
381
- replayRequestIdRef.current = requestId;
382
- const controller = new AbortController();
383
- replayAbortRef.current = controller;
384
- setLoading(true);
385
- setError(null);
386
- setReplayResult(null);
387
- try {
388
- const data = await fetchJsonWithTimeout(
389
- `/api/logs/${log.id}/replay`,
390
- ReplayResultSchema,
391
- REPLAY_TIMEOUT_MS,
392
- {
393
- method: "POST",
394
- headers: { "Content-Type": "application/json" },
395
- body: JSON.stringify({ modifiedBody }),
396
- signal: controller.signal
397
- }
398
- );
399
- if (replayRequestIdRef.current !== requestId) return;
400
- setReplayResult(data);
401
- await refreshReplayHistory();
402
- if (!data.success) {
403
- setError(data.error ?? "Replay failed");
404
- }
405
- } catch (err) {
406
- if (replayRequestIdRef.current !== requestId) return;
407
- if (err instanceof ApiTimeoutError || err instanceof DOMException && err.name === "AbortError") {
408
- setError("Replay timed out or was canceled.");
409
- return;
410
- }
411
- setError(err instanceof Error ? err.message : "Network error");
412
- } finally {
413
- if (replayRequestIdRef.current === requestId) {
414
- replayAbortRef.current = null;
415
- setLoading(false);
416
- }
417
- }
418
- }
419
- function handleClose() {
420
- cancelReplay();
421
- setReplayResult(null);
422
- setError(null);
423
- onOpenChange(false);
424
- }
425
- function handleBodyChange(value) {
426
- setModifiedBody(value);
427
- setReplayResult(null);
428
- setError(null);
429
- }
430
- function handleFormatBody() {
431
- handleBodyChange(formatJsonForEdit(modifiedBody));
432
- }
433
- function handleCompactBody() {
434
- handleBodyChange(compactJsonForEdit(modifiedBody));
435
- }
436
- function handleResetBody() {
437
- handleBodyChange(formatJsonForEdit(originalBody));
438
- }
439
- function handleOpenReplayLog(logId) {
440
- window.location.hash = `log-${String(logId)}`;
441
- dispatchLogFocusRequest({ logId, tab: "request" });
442
- onOpenChange(false);
443
- }
444
- const replayModelOptions = reactExports.useMemo(() => {
445
- const options = [];
446
- for (const provider of providers) {
447
- for (const model of provider.models) {
448
- if (model.trim().length === 0) continue;
449
- options.push({
450
- key: `${provider.id}:${model}`,
451
- providerName: provider.name,
452
- model
453
- });
454
- }
455
- }
456
- return options;
457
- }, [providers]);
458
- const currentReplayModel = readRequestModel(modifiedBody) ?? log.model ?? "";
459
- function handleReplayModelChange(model) {
460
- const result = replaceRequestModel(modifiedBody, model);
461
- if (result.error !== null) {
462
- setError(result.error);
463
- return;
464
- }
465
- handleBodyChange(formatJsonForEdit(result.body));
466
- }
467
- const originalMetrics = buildReplayMetrics({
468
- status: log.responseStatus,
469
- elapsedMs: log.elapsedMs,
470
- inputTokens: log.inputTokens,
471
- outputTokens: log.outputTokens,
472
- responseText: log.responseText,
473
- streaming: log.streaming
474
- });
475
- const replayMetrics = replayResult === null ? null : buildReplayMetrics({
476
- status: replayResult.responseStatus,
477
- elapsedMs: replayResult.elapsedMs,
478
- inputTokens: replayResult.inputTokens,
479
- outputTokens: replayResult.outputTokens,
480
- responseText: replayResult.responseText,
481
- streaming: replayResult.streaming
482
- });
483
- const replayComparisons = replayMetrics === null ? [] : buildReplayComparisons(originalMetrics, replayMetrics);
484
- const latestReplayHistory = replayHistory.slice(-5).reverse();
485
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Dialog, { open, onOpenChange: handleClose, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogContent, { className: "max-w-4xl max-h-[85vh] overflow-auto", children: [
486
- /* @__PURE__ */ jsxRuntimeExports.jsx(DialogHeader, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogTitle, { className: "flex items-center gap-2", children: [
487
- /* @__PURE__ */ jsxRuntimeExports.jsx(RotateCcw, { className: "size-4" }),
488
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { title: `Log ID ${String(log.id)}`, children: [
489
- "Replay Request #",
490
- displayNumber
491
- ] })
492
- ] }) }),
493
- /* @__PURE__ */ jsxRuntimeExports.jsxs(Tabs, { defaultValue: "modified", children: [
494
- /* @__PURE__ */ jsxRuntimeExports.jsxs(TabsList, { children: [
495
- /* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "modified", children: "Modified Request" }),
496
- /* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "original", children: "Original Response" }),
497
- replayResult && /* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "replay", children: "Replay Response" }),
498
- replayResult && /* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "compare", children: "Compare" })
499
- ] }),
500
- /* @__PURE__ */ jsxRuntimeExports.jsxs(TabsContent, { value: "modified", className: "space-y-4", children: [
501
- replayModelOptions.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid gap-1.5", children: [
502
- /* @__PURE__ */ jsxRuntimeExports.jsx("label", { htmlFor: `replay-model-${String(log.id)}`, className: "text-sm font-medium", children: "Replay target" }),
503
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
504
- "select",
505
- {
506
- id: `replay-model-${String(log.id)}`,
507
- value: currentReplayModel,
508
- onChange: (event) => handleReplayModelChange(event.currentTarget.value),
509
- className: "h-8 rounded-md border border-input bg-background px-2 text-sm",
510
- children: [
511
- currentReplayModel === "" && /* @__PURE__ */ jsxRuntimeExports.jsx("option", { value: "", children: "Select model" }),
512
- currentReplayModel !== "" && !replayModelOptions.some((option) => option.model === currentReplayModel) && /* @__PURE__ */ jsxRuntimeExports.jsx("option", { value: currentReplayModel, children: currentReplayModel }),
513
- replayModelOptions.map((option) => /* @__PURE__ */ jsxRuntimeExports.jsxs("option", { value: option.model, children: [
514
- option.providerName,
515
- " / ",
516
- option.model
517
- ] }, option.key))
518
- ]
519
- }
520
- )
521
- ] }),
522
- latestReplayHistory.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2 rounded-md border border-border bg-muted/20 px-3 py-2", children: [
523
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
524
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs font-medium", children: "Replay history" }),
525
- /* @__PURE__ */ jsxRuntimeExports.jsx(
526
- Button,
527
- {
528
- type: "button",
529
- variant: "ghost",
530
- size: "sm",
531
- onClick: () => {
532
- void refreshReplayHistory();
533
- },
534
- children: "Refresh"
535
- }
536
- )
537
- ] }),
538
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid gap-1", children: latestReplayHistory.map((historyLog) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
539
- "button",
540
- {
541
- type: "button",
542
- onClick: () => handleOpenReplayLog(historyLog.id),
543
- className: "grid grid-cols-[auto_1fr_auto_auto] items-center gap-2 rounded-sm px-2 py-1 text-left text-xs hover:bg-muted",
544
- children: [
545
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-mono text-emerald-600", children: [
546
- "#",
547
- historyLog.id
548
- ] }),
549
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate font-mono text-muted-foreground", children: historyLog.model ?? "unknown" }),
550
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono text-muted-foreground", children: historyLog.responseStatus ?? "-" }),
551
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono text-muted-foreground", children: historyLog.elapsedMs === null ? "-" : formatElapsed(historyLog.elapsedMs) })
552
- ]
553
- },
554
- historyLog.id
555
- )) })
556
- ] }),
557
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
558
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [
559
- /* @__PURE__ */ jsxRuntimeExports.jsx("label", { htmlFor: `replay-body-${String(log.id)}`, className: "text-sm font-medium", children: "Request Body" }),
560
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
561
- /* @__PURE__ */ jsxRuntimeExports.jsx(
562
- "span",
563
- {
564
- className: jsonEditState.valid ? "text-xs text-emerald-500" : "text-xs text-destructive",
565
- children: jsonEditState.message
566
- }
567
- ),
568
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
569
- Button,
570
- {
571
- type: "button",
572
- variant: "outline",
573
- size: "sm",
574
- onClick: handleFormatBody,
575
- disabled: !jsonEditState.valid,
576
- title: "Format JSON",
577
- children: [
578
- /* @__PURE__ */ jsxRuntimeExports.jsx(Braces, { className: "size-3.5" }),
579
- "Format"
580
- ]
581
- }
582
- ),
583
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
584
- Button,
585
- {
586
- type: "button",
587
- variant: "outline",
588
- size: "sm",
589
- onClick: handleCompactBody,
590
- disabled: !jsonEditState.valid,
591
- title: "Compact JSON",
592
- children: [
593
- /* @__PURE__ */ jsxRuntimeExports.jsx(Minimize2, { className: "size-3.5" }),
594
- "Compact"
595
- ]
596
- }
597
- ),
598
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
599
- Button,
600
- {
601
- type: "button",
602
- variant: "ghost",
603
- size: "sm",
604
- onClick: handleResetBody,
605
- title: "Reset to original request",
606
- children: [
607
- /* @__PURE__ */ jsxRuntimeExports.jsx(RotateCcw, { className: "size-3.5" }),
608
- "Reset"
609
- ]
610
- }
611
- )
612
- ] })
613
- ] }),
614
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipProvider, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
615
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
616
- "textarea",
617
- {
618
- id: `replay-body-${String(log.id)}`,
619
- className: "w-full min-h-80 p-3 font-mono text-xs leading-5 bg-muted rounded-md border border-input resize-y tabular-nums focus:outline-none focus:ring-2 focus:ring-ring",
620
- value: modifiedBody,
621
- onChange: (e) => handleBodyChange(e.target.value),
622
- spellCheck: false
623
- }
624
- ) }),
625
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: "Edit formatted JSON before re-sending to the provider" })
626
- ] }) })
627
- ] }),
628
- error !== null && error !== "" && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-sm text-destructive bg-destructive/10 px-3 py-2 rounded-md", children: error }),
629
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
630
- Button,
631
- {
632
- onClick: () => {
633
- void handleReplay();
634
- },
635
- disabled: loading || !jsonEditState.valid,
636
- children: loading ? "Replaying..." : "Replay"
637
- }
638
- ) }),
639
- replayResult !== null && /* @__PURE__ */ jsxRuntimeExports.jsx(ReplayComparisonTable, { comparisons: replayComparisons.slice(0, 4) }),
640
- replayResult?.success === true && replayResult.replayLogId !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2 rounded-md border border-emerald-500/25 bg-emerald-500/10 px-3 py-2 text-xs text-emerald-600", children: [
641
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { children: [
642
- "Replay saved as test log #",
643
- replayResult.replayLogId,
644
- "."
645
- ] }),
646
- /* @__PURE__ */ jsxRuntimeExports.jsx(
647
- Button,
648
- {
649
- type: "button",
650
- variant: "outline",
651
- size: "sm",
652
- onClick: () => handleOpenReplayLog(replayResult.replayLogId ?? log.id),
653
- children: "Open saved log"
654
- }
655
- )
656
- ] }),
657
- replayResult && replayResult.success && /* @__PURE__ */ jsxRuntimeExports.jsxs(Tabs, { defaultValue: "parsed", children: [
658
- /* @__PURE__ */ jsxRuntimeExports.jsxs(TabsList, { children: [
659
- /* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "parsed", children: "Response" }),
660
- /* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "raw", children: "Raw Response" })
661
- ] }),
662
- /* @__PURE__ */ jsxRuntimeExports.jsx(TabsContent, { value: "parsed", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
663
- ResponseView,
664
- {
665
- responseText: replayResult.responseText ?? null,
666
- responseStatus: replayResult.responseStatus ?? null,
667
- streaming: replayResult.streaming ?? false,
668
- inputTokens: replayResult.inputTokens ?? null,
669
- outputTokens: replayResult.outputTokens ?? null,
670
- apiFormat: log.apiFormat
671
- }
672
- ) }),
673
- /* @__PURE__ */ jsxRuntimeExports.jsx(TabsContent, { value: "raw", children: /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: "font-mono text-xs whitespace-pre-wrap bg-muted p-3 rounded-md max-h-96 overflow-auto", children: replayResult.responseText ?? "No response" }) })
674
- ] })
675
- ] }),
676
- /* @__PURE__ */ jsxRuntimeExports.jsx(TabsContent, { value: "original", children: log.responseText !== null ? /* @__PURE__ */ jsxRuntimeExports.jsxs(Tabs, { defaultValue: "parsed", children: [
677
- /* @__PURE__ */ jsxRuntimeExports.jsxs(TabsList, { children: [
678
- /* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "parsed", children: "Response" }),
679
- /* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "raw", children: "Raw Response" })
680
- ] }),
681
- /* @__PURE__ */ jsxRuntimeExports.jsx(TabsContent, { value: "parsed", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
682
- ResponseView,
683
- {
684
- responseText: log.responseText,
685
- responseStatus: log.responseStatus,
686
- streaming: log.streaming,
687
- inputTokens: log.inputTokens,
688
- outputTokens: log.outputTokens,
689
- cacheCreationInputTokens: log.cacheCreationInputTokens,
690
- cacheReadInputTokens: log.cacheReadInputTokens,
691
- apiFormat: log.apiFormat
692
- }
693
- ) }),
694
- /* @__PURE__ */ jsxRuntimeExports.jsx(TabsContent, { value: "raw", children: /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: "font-mono text-xs whitespace-pre-wrap bg-muted p-3 rounded-md max-h-96 overflow-auto", children: log.responseText }) })
695
- ] }) : /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground italic", children: "No original response" }) }),
696
- replayResult && replayResult.success && /* @__PURE__ */ jsxRuntimeExports.jsx(TabsContent, { value: "replay", children: (replayResult.responseText ?? null) !== null ? /* @__PURE__ */ jsxRuntimeExports.jsxs(Tabs, { defaultValue: "parsed", children: [
697
- /* @__PURE__ */ jsxRuntimeExports.jsxs(TabsList, { children: [
698
- /* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "parsed", children: "Response" }),
699
- /* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "raw", children: "Raw Response" })
700
- ] }),
701
- /* @__PURE__ */ jsxRuntimeExports.jsx(TabsContent, { value: "parsed", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
702
- ResponseView,
703
- {
704
- responseText: replayResult.responseText ?? null,
705
- responseStatus: replayResult.responseStatus ?? null,
706
- streaming: replayResult.streaming ?? false,
707
- inputTokens: replayResult.inputTokens ?? null,
708
- outputTokens: replayResult.outputTokens ?? null,
709
- apiFormat: log.apiFormat
710
- }
711
- ) }),
712
- /* @__PURE__ */ jsxRuntimeExports.jsx(TabsContent, { value: "raw", children: /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: "font-mono text-xs whitespace-pre-wrap bg-muted p-3 rounded-md max-h-96 overflow-auto", children: replayResult.responseText ?? "" }) })
713
- ] }) : /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground italic", children: "No replay response" }) }),
714
- replayResult && /* @__PURE__ */ jsxRuntimeExports.jsxs(TabsContent, { value: "compare", className: "space-y-3", children: [
715
- /* @__PURE__ */ jsxRuntimeExports.jsx(ReplayComparisonTable, { comparisons: replayComparisons }),
716
- replayResult.success ? null : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-xs text-destructive", children: replayResult.error ?? "Replay failed" })
717
- ] })
718
- ] })
719
- ] }) });
720
- }
721
- export {
722
- ReplayDialog
723
- };