@tonyclaw/agent-inspector 2.0.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 (400) hide show
  1. package/.output/cli.js +1611 -0
  2. package/.output/nitro.json +17 -0
  3. package/.output/public/assets/CompareDrawer-CU5ZrWcL.js +1 -0
  4. package/.output/public/assets/ProxyViewerContainer-pEBqVp1d.js +101 -0
  5. package/.output/public/assets/ReplayDialog-F58yNg5j.js +1 -0
  6. package/.output/public/assets/RequestAnatomy-C9lT0qE_.js +1 -0
  7. package/.output/public/assets/ResponseView-DHJq6bnz.js +1 -0
  8. package/.output/public/assets/StreamingChunkSequence-BTgfpFUT.js +1 -0
  9. package/.output/public/assets/_sessionId-DsNRbnNm.js +1 -0
  10. package/.output/public/assets/alibaba-TTwafVwX.svg +1 -0
  11. package/.output/public/assets/index-CpWG2hFn.css +1 -0
  12. package/.output/public/assets/index-DmBV8Gve.js +1 -0
  13. package/.output/public/assets/json-viewer-CZVYLR8j.js +14 -0
  14. package/.output/public/assets/main-DHs7FBK3.js +18 -0
  15. package/.output/public/assets/minimax-BPMzvuL-.jpeg +0 -0
  16. package/.output/public/assets/qwen-CONDcHqt.png +0 -0
  17. package/.output/public/assets/zhipuai-BPNAnxo-.svg +219 -0
  18. package/.output/server/_chunks/ssr-renderer.mjs +22 -0
  19. package/.output/server/_libs/@radix-ui/react-accessible-icon+[...].mjs +1 -0
  20. package/.output/server/_libs/@radix-ui/react-dismissable-layer+[...].mjs +210 -0
  21. package/.output/server/_libs/@radix-ui/react-navigation-menu+[...].mjs +2 -0
  22. package/.output/server/_libs/@radix-ui/react-one-time-password-field+[...].mjs +2 -0
  23. package/.output/server/_libs/@radix-ui/react-password-toggle-field+[...].mjs +2 -0
  24. package/.output/server/_libs/@radix-ui/react-use-callback-ref+[...].mjs +11 -0
  25. package/.output/server/_libs/@radix-ui/react-use-controllable-state+[...].mjs +69 -0
  26. package/.output/server/_libs/@radix-ui/react-use-effect-event+[...].mjs +1 -0
  27. package/.output/server/_libs/@radix-ui/react-use-escape-keydown+[...].mjs +17 -0
  28. package/.output/server/_libs/@radix-ui/react-use-is-hydrated+[...].mjs +1 -0
  29. package/.output/server/_libs/@radix-ui/react-use-layout-effect+[...].mjs +6 -0
  30. package/.output/server/_libs/@radix-ui/react-visually-hidden+[...].mjs +34 -0
  31. package/.output/server/_libs/ajv-formats.mjs +330 -0
  32. package/.output/server/_libs/ajv.mjs +11444 -0
  33. package/.output/server/_libs/aria-hidden.mjs +122 -0
  34. package/.output/server/_libs/atomically.mjs +152 -0
  35. package/.output/server/_libs/bail.mjs +8 -0
  36. package/.output/server/_libs/cfworker__json-schema.mjs +1 -0
  37. package/.output/server/_libs/character-entities.mjs +2130 -0
  38. package/.output/server/_libs/class-variance-authority.mjs +44 -0
  39. package/.output/server/_libs/clsx.mjs +16 -0
  40. package/.output/server/_libs/comma-separated-tokens.mjs +10 -0
  41. package/.output/server/_libs/conf.mjs +635 -0
  42. package/.output/server/_libs/cookie-es.mjs +58 -0
  43. package/.output/server/_libs/core-util-is.mjs +75 -0
  44. package/.output/server/_libs/croner.mjs +1 -0
  45. package/.output/server/_libs/crossws.mjs +1 -0
  46. package/.output/server/_libs/debounce-fn.mjs +69 -0
  47. package/.output/server/_libs/decode-named-character-reference+[...].mjs +8 -0
  48. package/.output/server/_libs/dequal.mjs +27 -0
  49. package/.output/server/_libs/detect-node-es.mjs +1 -0
  50. package/.output/server/_libs/devlop.mjs +8 -0
  51. package/.output/server/_libs/diff.mjs +320 -0
  52. package/.output/server/_libs/dot-prop.mjs +265 -0
  53. package/.output/server/_libs/env-paths.mjs +57 -0
  54. package/.output/server/_libs/estree-util-is-identifier-name.mjs +11 -0
  55. package/.output/server/_libs/extend.mjs +97 -0
  56. package/.output/server/_libs/fast-deep-equal.mjs +38 -0
  57. package/.output/server/_libs/fast-uri.mjs +812 -0
  58. package/.output/server/_libs/floating-ui__core.mjs +725 -0
  59. package/.output/server/_libs/floating-ui__dom.mjs +622 -0
  60. package/.output/server/_libs/floating-ui__react-dom.mjs +292 -0
  61. package/.output/server/_libs/floating-ui__utils.mjs +320 -0
  62. package/.output/server/_libs/get-nonce.mjs +9 -0
  63. package/.output/server/_libs/h3-v2.mjs +276 -0
  64. package/.output/server/_libs/h3.mjs +408 -0
  65. package/.output/server/_libs/hast-util-to-jsx-runtime.mjs +388 -0
  66. package/.output/server/_libs/hast-util-whitespace.mjs +10 -0
  67. package/.output/server/_libs/hookable.mjs +1 -0
  68. package/.output/server/_libs/html-url-attributes.mjs +26 -0
  69. package/.output/server/_libs/immediate.mjs +74 -0
  70. package/.output/server/_libs/inherits.mjs +50 -0
  71. package/.output/server/_libs/inline-style-parser.mjs +142 -0
  72. package/.output/server/_libs/is-plain-obj.mjs +10 -0
  73. package/.output/server/_libs/isarray.mjs +14 -0
  74. package/.output/server/_libs/isbot.mjs +20 -0
  75. package/.output/server/_libs/json-schema-traverse.mjs +180 -0
  76. package/.output/server/_libs/jszip.mjs +3051 -0
  77. package/.output/server/_libs/lie.mjs +273 -0
  78. package/.output/server/_libs/lucide-react.mjs +492 -0
  79. package/.output/server/_libs/mdast-util-from-markdown.mjs +717 -0
  80. package/.output/server/_libs/mdast-util-to-hast.mjs +710 -0
  81. package/.output/server/_libs/mdast-util-to-string.mjs +38 -0
  82. package/.output/server/_libs/micromark-core-commonmark.mjs +2259 -0
  83. package/.output/server/_libs/micromark-factory-destination.mjs +94 -0
  84. package/.output/server/_libs/micromark-factory-label.mjs +63 -0
  85. package/.output/server/_libs/micromark-factory-space.mjs +24 -0
  86. package/.output/server/_libs/micromark-factory-title.mjs +65 -0
  87. package/.output/server/_libs/micromark-factory-whitespace.mjs +22 -0
  88. package/.output/server/_libs/micromark-util-character.mjs +44 -0
  89. package/.output/server/_libs/micromark-util-chunked.mjs +36 -0
  90. package/.output/server/_libs/micromark-util-classify-character+[...].mjs +12 -0
  91. package/.output/server/_libs/micromark-util-combine-extensions+[...].mjs +41 -0
  92. package/.output/server/_libs/micromark-util-decode-numeric-character-reference+[...].mjs +19 -0
  93. package/.output/server/_libs/micromark-util-decode-string.mjs +21 -0
  94. package/.output/server/_libs/micromark-util-encode.mjs +1 -0
  95. package/.output/server/_libs/micromark-util-html-tag-name.mjs +69 -0
  96. package/.output/server/_libs/micromark-util-normalize-identifier+[...].mjs +6 -0
  97. package/.output/server/_libs/micromark-util-resolve-all.mjs +15 -0
  98. package/.output/server/_libs/micromark-util-sanitize-uri.mjs +41 -0
  99. package/.output/server/_libs/micromark-util-subtokenize.mjs +346 -0
  100. package/.output/server/_libs/micromark.mjs +906 -0
  101. package/.output/server/_libs/mimic-function.mjs +47 -0
  102. package/.output/server/_libs/modelcontextprotocol__server.mjs +9738 -0
  103. package/.output/server/_libs/ocache.mjs +1 -0
  104. package/.output/server/_libs/ohash.mjs +1 -0
  105. package/.output/server/_libs/pako.mjs +4223 -0
  106. package/.output/server/_libs/process-nextick-args.mjs +48 -0
  107. package/.output/server/_libs/property-information.mjs +1209 -0
  108. package/.output/server/_libs/radix-ui.mjs +1 -0
  109. package/.output/server/_libs/radix-ui__number.mjs +6 -0
  110. package/.output/server/_libs/radix-ui__primitive.mjs +11 -0
  111. package/.output/server/_libs/radix-ui__react-accordion.mjs +1 -0
  112. package/.output/server/_libs/radix-ui__react-alert-dialog.mjs +1 -0
  113. package/.output/server/_libs/radix-ui__react-arrow.mjs +23 -0
  114. package/.output/server/_libs/radix-ui__react-aspect-ratio.mjs +1 -0
  115. package/.output/server/_libs/radix-ui__react-avatar.mjs +1 -0
  116. package/.output/server/_libs/radix-ui__react-checkbox.mjs +1 -0
  117. package/.output/server/_libs/radix-ui__react-collapsible.mjs +144 -0
  118. package/.output/server/_libs/radix-ui__react-collection.mjs +69 -0
  119. package/.output/server/_libs/radix-ui__react-compose-refs.mjs +39 -0
  120. package/.output/server/_libs/radix-ui__react-context-menu.mjs +1 -0
  121. package/.output/server/_libs/radix-ui__react-context.mjs +78 -0
  122. package/.output/server/_libs/radix-ui__react-dialog.mjs +325 -0
  123. package/.output/server/_libs/radix-ui__react-direction.mjs +9 -0
  124. package/.output/server/_libs/radix-ui__react-dropdown-menu.mjs +1 -0
  125. package/.output/server/_libs/radix-ui__react-focus-guards.mjs +29 -0
  126. package/.output/server/_libs/radix-ui__react-focus-scope.mjs +206 -0
  127. package/.output/server/_libs/radix-ui__react-form.mjs +1 -0
  128. package/.output/server/_libs/radix-ui__react-hover-card.mjs +1 -0
  129. package/.output/server/_libs/radix-ui__react-id.mjs +14 -0
  130. package/.output/server/_libs/radix-ui__react-label.mjs +1 -0
  131. package/.output/server/_libs/radix-ui__react-menu.mjs +1 -0
  132. package/.output/server/_libs/radix-ui__react-menubar.mjs +1 -0
  133. package/.output/server/_libs/radix-ui__react-popover.mjs +1 -0
  134. package/.output/server/_libs/radix-ui__react-popper.mjs +286 -0
  135. package/.output/server/_libs/radix-ui__react-portal.mjs +16 -0
  136. package/.output/server/_libs/radix-ui__react-presence.mjs +128 -0
  137. package/.output/server/_libs/radix-ui__react-primitive.mjs +42 -0
  138. package/.output/server/_libs/radix-ui__react-progress.mjs +1 -0
  139. package/.output/server/_libs/radix-ui__react-radio-group.mjs +1 -0
  140. package/.output/server/_libs/radix-ui__react-roving-focus.mjs +224 -0
  141. package/.output/server/_libs/radix-ui__react-scroll-area.mjs +721 -0
  142. package/.output/server/_libs/radix-ui__react-select.mjs +1163 -0
  143. package/.output/server/_libs/radix-ui__react-separator.mjs +28 -0
  144. package/.output/server/_libs/radix-ui__react-slider.mjs +1 -0
  145. package/.output/server/_libs/radix-ui__react-slot.mjs +99 -0
  146. package/.output/server/_libs/radix-ui__react-switch.mjs +1 -0
  147. package/.output/server/_libs/radix-ui__react-tabs.mjs +189 -0
  148. package/.output/server/_libs/radix-ui__react-toast.mjs +2 -0
  149. package/.output/server/_libs/radix-ui__react-toggle-group.mjs +1 -0
  150. package/.output/server/_libs/radix-ui__react-toggle.mjs +1 -0
  151. package/.output/server/_libs/radix-ui__react-toolbar.mjs +1 -0
  152. package/.output/server/_libs/radix-ui__react-tooltip.mjs +495 -0
  153. package/.output/server/_libs/radix-ui__react-use-previous.mjs +14 -0
  154. package/.output/server/_libs/radix-ui__react-use-size.mjs +39 -0
  155. package/.output/server/_libs/react-dom.mjs +10781 -0
  156. package/.output/server/_libs/react-markdown.mjs +147 -0
  157. package/.output/server/_libs/react-remove-scroll-bar.mjs +82 -0
  158. package/.output/server/_libs/react-remove-scroll.mjs +328 -0
  159. package/.output/server/_libs/react-style-singleton.mjs +69 -0
  160. package/.output/server/_libs/react.mjs +515 -0
  161. package/.output/server/_libs/readable-stream.mjs +1518 -0
  162. package/.output/server/_libs/remark-parse.mjs +19 -0
  163. package/.output/server/_libs/remark-rehype.mjs +21 -0
  164. package/.output/server/_libs/rou3.mjs +14 -0
  165. package/.output/server/_libs/safe-buffer.mjs +64 -0
  166. package/.output/server/_libs/semver.mjs +1938 -0
  167. package/.output/server/_libs/seroval-plugins.mjs +58 -0
  168. package/.output/server/_libs/seroval.mjs +1765 -0
  169. package/.output/server/_libs/setimmediate.mjs +152 -0
  170. package/.output/server/_libs/space-separated-tokens.mjs +6 -0
  171. package/.output/server/_libs/srvx.mjs +1029 -0
  172. package/.output/server/_libs/stubborn-fs.mjs +91 -0
  173. package/.output/server/_libs/stubborn-utils.mjs +66 -0
  174. package/.output/server/_libs/style-to-js.mjs +72 -0
  175. package/.output/server/_libs/style-to-object.mjs +38 -0
  176. package/.output/server/_libs/swr.mjs +939 -0
  177. package/.output/server/_libs/tailwind-merge.mjs +3010 -0
  178. package/.output/server/_libs/tanstack__history.mjs +217 -0
  179. package/.output/server/_libs/tanstack__react-router.mjs +1480 -0
  180. package/.output/server/_libs/tanstack__react-store.mjs +1 -0
  181. package/.output/server/_libs/tanstack__react-virtual.mjs +44 -0
  182. package/.output/server/_libs/tanstack__router-core.mjs +4827 -0
  183. package/.output/server/_libs/tanstack__store.mjs +1 -0
  184. package/.output/server/_libs/tanstack__virtual-core.mjs +1225 -0
  185. package/.output/server/_libs/tiny-invariant.mjs +12 -0
  186. package/.output/server/_libs/tiny-warning.mjs +5 -0
  187. package/.output/server/_libs/trim-lines.mjs +41 -0
  188. package/.output/server/_libs/trough.mjs +85 -0
  189. package/.output/server/_libs/tslib.mjs +1 -0
  190. package/.output/server/_libs/ufo.mjs +54 -0
  191. package/.output/server/_libs/uint8array-extras.mjs +69 -0
  192. package/.output/server/_libs/ungap__structured-clone.mjs +212 -0
  193. package/.output/server/_libs/unified.mjs +661 -0
  194. package/.output/server/_libs/unist-util-is.mjs +100 -0
  195. package/.output/server/_libs/unist-util-position.mjs +27 -0
  196. package/.output/server/_libs/unist-util-stringify-position.mjs +27 -0
  197. package/.output/server/_libs/unist-util-visit-parents.mjs +82 -0
  198. package/.output/server/_libs/unist-util-visit.mjs +24 -0
  199. package/.output/server/_libs/unstorage.mjs +1 -0
  200. package/.output/server/_libs/use-callback-ref.mjs +66 -0
  201. package/.output/server/_libs/use-sidecar.mjs +106 -0
  202. package/.output/server/_libs/use-sync-external-store.mjs +64 -0
  203. package/.output/server/_libs/util-deprecate.mjs +12 -0
  204. package/.output/server/_libs/vfile-message.mjs +138 -0
  205. package/.output/server/_libs/vfile.mjs +467 -0
  206. package/.output/server/_libs/when-exit.mjs +53 -0
  207. package/.output/server/_libs/zod.mjs +4524 -0
  208. package/.output/server/_sessionId-wMLPvC5g.mjs +123 -0
  209. package/.output/server/_ssr/CompareDrawer-BU4V0uVf.mjs +1041 -0
  210. package/.output/server/_ssr/ProxyViewerContainer-BnRwFEnn.mjs +5972 -0
  211. package/.output/server/_ssr/ReplayDialog-C7dn9pd_.mjs +322 -0
  212. package/.output/server/_ssr/RequestAnatomy-C1rWpe9-.mjs +353 -0
  213. package/.output/server/_ssr/ResponseView-hGpPaYsf.mjs +602 -0
  214. package/.output/server/_ssr/StreamingChunkSequence-BRWI1r_G.mjs +302 -0
  215. package/.output/server/_ssr/index-BKURLVPz.mjs +118 -0
  216. package/.output/server/_ssr/index.mjs +1184 -0
  217. package/.output/server/_ssr/json-viewer-BBd2DtQP.mjs +515 -0
  218. package/.output/server/_ssr/router-BcZ0D6AB.mjs +6317 -0
  219. package/.output/server/_ssr/start-HYkvq4Ni.mjs +4 -0
  220. package/.output/server/_tanstack-start-manifest_v-1y8ZVxRI.mjs +4 -0
  221. package/.output/server/index.mjs +436 -0
  222. package/.output/server/node_modules/tslib/modules/index.js +70 -0
  223. package/.output/server/node_modules/tslib/modules/package.json +3 -0
  224. package/.output/server/node_modules/tslib/package.json +47 -0
  225. package/.output/server/node_modules/tslib/tslib.js +484 -0
  226. package/.output/server/package.json +9 -0
  227. package/LICENSE +21 -0
  228. package/README.md +52 -0
  229. package/package.json +110 -0
  230. package/src/assets/favicon.svg +31 -0
  231. package/src/assets/logos/alibaba.svg +1 -0
  232. package/src/assets/logos/anthropic.svg +1 -0
  233. package/src/assets/logos/claude-code.svg +4 -0
  234. package/src/assets/logos/deepseek.svg +1 -0
  235. package/src/assets/logos/mcp.png +0 -0
  236. package/src/assets/logos/minimax.jpeg +0 -0
  237. package/src/assets/logos/openai.svg +1 -0
  238. package/src/assets/logos/opencode.svg +4 -0
  239. package/src/assets/logos/qwen.png +0 -0
  240. package/src/assets/logos/zhipuai.svg +219 -0
  241. package/src/cli/detect-tools.ts +147 -0
  242. package/src/cli/doctor.ts +521 -0
  243. package/src/cli/onboard.ts +224 -0
  244. package/src/cli/templates/command-onboard.ts +17 -0
  245. package/src/cli/templates/skill-onboard.ts +547 -0
  246. package/src/cli.ts +345 -0
  247. package/src/components/OnboardingBanner.tsx +67 -0
  248. package/src/components/ProxyViewer.tsx +545 -0
  249. package/src/components/ProxyViewerContainer.tsx +363 -0
  250. package/src/components/providers/ImportWizardDialog.tsx +349 -0
  251. package/src/components/providers/ProviderCard.tsx +474 -0
  252. package/src/components/providers/ProviderForm.tsx +494 -0
  253. package/src/components/providers/ProviderLogo.tsx +117 -0
  254. package/src/components/providers/ProvidersPanel.tsx +619 -0
  255. package/src/components/providers/SettingsDialog.tsx +202 -0
  256. package/src/components/proxy-viewer/CompareDrawer.tsx +893 -0
  257. package/src/components/proxy-viewer/ConversationGroup.tsx +107 -0
  258. package/src/components/proxy-viewer/ConversationHeader.tsx +300 -0
  259. package/src/components/proxy-viewer/LogEntry.tsx +543 -0
  260. package/src/components/proxy-viewer/LogEntryHeader.tsx +501 -0
  261. package/src/components/proxy-viewer/ReplayDialog.tsx +218 -0
  262. package/src/components/proxy-viewer/ResponseView.tsx +171 -0
  263. package/src/components/proxy-viewer/StreamingChunkSequence.tsx +188 -0
  264. package/src/components/proxy-viewer/ThreadConnector.tsx +136 -0
  265. package/src/components/proxy-viewer/TurnGroup.tsx +337 -0
  266. package/src/components/proxy-viewer/anatomy/RequestAnatomy.tsx +98 -0
  267. package/src/components/proxy-viewer/anatomy/SegmentBar.tsx +196 -0
  268. package/src/components/proxy-viewer/anatomy/tokenEstimate.ts +53 -0
  269. package/src/components/proxy-viewer/anatomy/types.ts +39 -0
  270. package/src/components/proxy-viewer/anatomy/useAnatomyJump.ts +114 -0
  271. package/src/components/proxy-viewer/cacheTrend.ts +50 -0
  272. package/src/components/proxy-viewer/diff/DiffView.tsx +321 -0
  273. package/src/components/proxy-viewer/diff/computeDiff.ts +178 -0
  274. package/src/components/proxy-viewer/diff/index.ts +3 -0
  275. package/src/components/proxy-viewer/formats/anthropic/ContentBlocks.tsx +157 -0
  276. package/src/components/proxy-viewer/formats/anthropic/ResponseView.tsx +66 -0
  277. package/src/components/proxy-viewer/formats/anthropic/thinkingExtract.ts +21 -0
  278. package/src/components/proxy-viewer/formats/index.tsx +33 -0
  279. package/src/components/proxy-viewer/formats/openai/ResponseView.tsx +170 -0
  280. package/src/components/proxy-viewer/index.ts +9 -0
  281. package/src/components/proxy-viewer/lazy.ts +37 -0
  282. package/src/components/proxy-viewer/log-formats/anthropic.ts +194 -0
  283. package/src/components/proxy-viewer/log-formats/index.ts +23 -0
  284. package/src/components/proxy-viewer/log-formats/openai.ts +167 -0
  285. package/src/components/proxy-viewer/log-formats/types.ts +40 -0
  286. package/src/components/proxy-viewer/log-formats/unknown.ts +18 -0
  287. package/src/components/proxy-viewer/logEntryVisibility.ts +39 -0
  288. package/src/components/proxy-viewer/requestDiff.ts +277 -0
  289. package/src/components/proxy-viewer/useCopyFeedback.ts +36 -0
  290. package/src/components/proxy-viewer/useKeyboardNavigation.ts +190 -0
  291. package/src/components/proxy-viewer/viewerState.ts +66 -0
  292. package/src/components/ui/badge.tsx +47 -0
  293. package/src/components/ui/button.tsx +47 -0
  294. package/src/components/ui/collapsible.tsx +21 -0
  295. package/src/components/ui/confirm-dialog.tsx +51 -0
  296. package/src/components/ui/crab-logo.tsx +95 -0
  297. package/src/components/ui/crab-variants.tsx +467 -0
  298. package/src/components/ui/dialog.tsx +129 -0
  299. package/src/components/ui/json-expansion-button.tsx +56 -0
  300. package/src/components/ui/json-viewer-bulk.ts +97 -0
  301. package/src/components/ui/json-viewer.tsx +494 -0
  302. package/src/components/ui/mcp-logo.tsx +20 -0
  303. package/src/components/ui/scroll-area.tsx +54 -0
  304. package/src/components/ui/select.tsx +178 -0
  305. package/src/components/ui/separator.tsx +28 -0
  306. package/src/components/ui/tabs.tsx +88 -0
  307. package/src/components/ui/tooltip.tsx +51 -0
  308. package/src/index.css +11 -0
  309. package/src/knowledge/candidateStore.ts +63 -0
  310. package/src/knowledge/distiller.ts +98 -0
  311. package/src/knowledge/openclawClient.ts +118 -0
  312. package/src/knowledge/redactor.ts +80 -0
  313. package/src/knowledge/types.ts +84 -0
  314. package/src/lib/apiClient.ts +49 -0
  315. package/src/lib/export-logs.ts +51 -0
  316. package/src/lib/mask.ts +4 -0
  317. package/src/lib/objectUtils.ts +22 -0
  318. package/src/lib/providerContract.ts +26 -0
  319. package/src/lib/providerTestContract.ts +107 -0
  320. package/src/lib/runtimeConfig.ts +25 -0
  321. package/src/lib/serverPort.ts +41 -0
  322. package/src/lib/sessionUrl.ts +44 -0
  323. package/src/lib/stopReason.ts +58 -0
  324. package/src/lib/useOnboarding.ts +80 -0
  325. package/src/lib/useProviders.ts +30 -0
  326. package/src/lib/useStripConfig.ts +108 -0
  327. package/src/lib/utils.ts +21 -0
  328. package/src/mcp/loopback.ts +76 -0
  329. package/src/mcp/previewExtractor.ts +166 -0
  330. package/src/mcp/server.ts +396 -0
  331. package/src/mcp/toolHandlers.ts +341 -0
  332. package/src/proxy/chunkStorage.ts +112 -0
  333. package/src/proxy/claudeCodeStrip.ts +99 -0
  334. package/src/proxy/config.ts +172 -0
  335. package/src/proxy/constants.ts +47 -0
  336. package/src/proxy/dataDir.ts +86 -0
  337. package/src/proxy/formats/anthropic/anthropicProvider.ts +75 -0
  338. package/src/proxy/formats/anthropic/handler.ts +71 -0
  339. package/src/proxy/formats/anthropic/index.ts +14 -0
  340. package/src/proxy/formats/anthropic/register.ts +4 -0
  341. package/src/proxy/formats/anthropic/schemas.ts +237 -0
  342. package/src/proxy/formats/anthropic/stream.ts +205 -0
  343. package/src/proxy/formats/handler.ts +46 -0
  344. package/src/proxy/formats/index.ts +12 -0
  345. package/src/proxy/formats/jsonSchema.ts +36 -0
  346. package/src/proxy/formats/openai/alibabaProvider.ts +38 -0
  347. package/src/proxy/formats/openai/handler.ts +96 -0
  348. package/src/proxy/formats/openai/index.ts +25 -0
  349. package/src/proxy/formats/openai/provider.ts +50 -0
  350. package/src/proxy/formats/openai/register.ts +4 -0
  351. package/src/proxy/formats/openai/schemas.ts +187 -0
  352. package/src/proxy/formats/openai/stream.ts +206 -0
  353. package/src/proxy/formats/protocol.ts +50 -0
  354. package/src/proxy/formats/providerRegistry.ts +51 -0
  355. package/src/proxy/formats/providers/index.ts +3 -0
  356. package/src/proxy/formats/registry.ts +66 -0
  357. package/src/proxy/handler.ts +334 -0
  358. package/src/proxy/logFinalizer.ts +305 -0
  359. package/src/proxy/logFinalizer.worker.ts +24 -0
  360. package/src/proxy/logIndex.ts +268 -0
  361. package/src/proxy/logger.ts +179 -0
  362. package/src/proxy/openaiOrphanToolStrip.ts +142 -0
  363. package/src/proxy/providerImporters.ts +491 -0
  364. package/src/proxy/providers.ts +613 -0
  365. package/src/proxy/schemas.ts +209 -0
  366. package/src/proxy/sessionProcess.ts +140 -0
  367. package/src/proxy/sessionRuntime.ts +85 -0
  368. package/src/proxy/sessionSupervisor.ts +283 -0
  369. package/src/proxy/sessionWorkerEntry.ts +26 -0
  370. package/src/proxy/socketTracker.ts +255 -0
  371. package/src/proxy/store.ts +412 -0
  372. package/src/proxy/upstream.ts +90 -0
  373. package/src/router.tsx +16 -0
  374. package/src/routes/__root.tsx +45 -0
  375. package/src/routes/api/config.paths.ts +14 -0
  376. package/src/routes/api/config.ts +53 -0
  377. package/src/routes/api/health.ts +15 -0
  378. package/src/routes/api/knowledge.candidates.$candidateId.promote.ts +32 -0
  379. package/src/routes/api/knowledge.candidates.ts +10 -0
  380. package/src/routes/api/knowledge.project-context.ts +18 -0
  381. package/src/routes/api/knowledge.search.ts +31 -0
  382. package/src/routes/api/knowledge.sessions.$sessionId.candidates.ts +16 -0
  383. package/src/routes/api/logs.$id.chunks.ts +36 -0
  384. package/src/routes/api/logs.$id.replay.ts +191 -0
  385. package/src/routes/api/logs.$id.ts +22 -0
  386. package/src/routes/api/logs.stream.ts +74 -0
  387. package/src/routes/api/logs.ts +59 -0
  388. package/src/routes/api/mcp.ts +25 -0
  389. package/src/routes/api/models.ts +10 -0
  390. package/src/routes/api/providers.$providerId.test.log.ts +293 -0
  391. package/src/routes/api/providers.$providerId.ts +50 -0
  392. package/src/routes/api/providers.export.ts +26 -0
  393. package/src/routes/api/providers.import.ts +47 -0
  394. package/src/routes/api/providers.scan.ts +23 -0
  395. package/src/routes/api/providers.ts +45 -0
  396. package/src/routes/api/sessions.ts +17 -0
  397. package/src/routes/index.tsx +6 -0
  398. package/src/routes/proxy/$.ts +15 -0
  399. package/src/routes/session/$sessionId.tsx +23 -0
  400. package/styles/globals.css +188 -0
@@ -0,0 +1,602 @@
1
+ import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
+ import { g as getLogFormatAdapter, f as formatTokens, c as cn, p as getStatusCategory, B as Badge, s as safeJsonValue } from "./ProxyViewerContainer-BnRwFEnn.mjs";
3
+ import { JsonViewer } from "./json-viewer-BBd2DtQP.mjs";
4
+ import "./router-BcZ0D6AB.mjs";
5
+ import "../_libs/modelcontextprotocol__server.mjs";
6
+ import "../_libs/jszip.mjs";
7
+ import { Z as Zap, i as TriangleAlert, V as CircleStop, Y as Brain, b as ChevronDown, f as ChevronRight, _ as Terminal } from "../_libs/lucide-react.mjs";
8
+ import { M as Markdown } from "../_libs/react-markdown.mjs";
9
+ import { R as Root } from "../_libs/radix-ui__react-separator.mjs";
10
+ import { R as Root$1, C as CollapsibleTrigger$1, a as CollapsibleContent$1 } from "../_libs/radix-ui__react-collapsible.mjs";
11
+ import { R as Root$2, V as Viewport, C as Corner, S as ScrollAreaScrollbar, a as ScrollAreaThumb } from "../_libs/radix-ui__react-scroll-area.mjs";
12
+ import "../_libs/swr.mjs";
13
+ import "../_libs/use-sync-external-store.mjs";
14
+ import "../_libs/dequal.mjs";
15
+ import "../_libs/clsx.mjs";
16
+ import "../_libs/tailwind-merge.mjs";
17
+ import "../_libs/class-variance-authority.mjs";
18
+ import "../_libs/radix-ui__react-dialog.mjs";
19
+ import "../_libs/radix-ui__primitive.mjs";
20
+ import "../_libs/radix-ui__react-compose-refs.mjs";
21
+ import "../_libs/radix-ui__react-context.mjs";
22
+ import "../_libs/radix-ui__react-id.mjs";
23
+ import "../_libs/@radix-ui/react-use-layout-effect+[...].mjs";
24
+ import "../_libs/@radix-ui/react-use-controllable-state+[...].mjs";
25
+ import "../_libs/@radix-ui/react-dismissable-layer+[...].mjs";
26
+ import "../_libs/radix-ui__react-primitive.mjs";
27
+ import "../_libs/react-dom.mjs";
28
+ import "util";
29
+ import "async_hooks";
30
+ import "stream";
31
+ import "crypto";
32
+ import "../_libs/radix-ui__react-slot.mjs";
33
+ import "../_libs/@radix-ui/react-use-callback-ref+[...].mjs";
34
+ import "../_libs/@radix-ui/react-use-escape-keydown+[...].mjs";
35
+ import "../_libs/radix-ui__react-focus-scope.mjs";
36
+ import "../_libs/radix-ui__react-portal.mjs";
37
+ import "../_libs/radix-ui__react-presence.mjs";
38
+ import "../_libs/radix-ui__react-focus-guards.mjs";
39
+ import "../_libs/react-remove-scroll.mjs";
40
+ import "tslib";
41
+ import "../_libs/react-remove-scroll-bar.mjs";
42
+ import "../_libs/react-style-singleton.mjs";
43
+ import "../_libs/get-nonce.mjs";
44
+ import "../_libs/use-sidecar.mjs";
45
+ import "../_libs/use-callback-ref.mjs";
46
+ import "../_libs/aria-hidden.mjs";
47
+ import "../_libs/diff.mjs";
48
+ import "../_libs/tanstack__react-virtual.mjs";
49
+ import "../_libs/tanstack__virtual-core.mjs";
50
+ import "../_libs/radix-ui__react-select.mjs";
51
+ import "../_libs/radix-ui__number.mjs";
52
+ import "../_libs/radix-ui__react-collection.mjs";
53
+ import "../_libs/radix-ui__react-direction.mjs";
54
+ import "../_libs/radix-ui__react-popper.mjs";
55
+ import "../_libs/floating-ui__react-dom.mjs";
56
+ import "../_libs/floating-ui__dom.mjs";
57
+ import "../_libs/floating-ui__core.mjs";
58
+ import "../_libs/floating-ui__utils.mjs";
59
+ import "../_libs/radix-ui__react-arrow.mjs";
60
+ import "../_libs/radix-ui__react-use-size.mjs";
61
+ import "../_libs/radix-ui__react-use-previous.mjs";
62
+ import "../_libs/@radix-ui/react-visually-hidden+[...].mjs";
63
+ import "../_libs/zod.mjs";
64
+ import "../_libs/radix-ui__react-tooltip.mjs";
65
+ import "../_libs/radix-ui__react-tabs.mjs";
66
+ import "../_libs/radix-ui__react-roving-focus.mjs";
67
+ import "../_libs/tanstack__react-router.mjs";
68
+ import "../_libs/tiny-warning.mjs";
69
+ import "../_libs/tanstack__router-core.mjs";
70
+ import "../_libs/cookie-es.mjs";
71
+ import "../_libs/tanstack__history.mjs";
72
+ import "../_libs/tiny-invariant.mjs";
73
+ import "../_libs/seroval.mjs";
74
+ import "../_libs/seroval-plugins.mjs";
75
+ import "node:stream/web";
76
+ import "node:stream";
77
+ import "../_libs/isbot.mjs";
78
+ import "node:fs";
79
+ import "node:fs/promises";
80
+ import "node:buffer";
81
+ import "node:path";
82
+ import "node:child_process";
83
+ import "node:url";
84
+ import "../_libs/conf.mjs";
85
+ import "node:util";
86
+ import "node:process";
87
+ import "node:crypto";
88
+ import "node:assert";
89
+ import "../_libs/dot-prop.mjs";
90
+ import "../_libs/env-paths.mjs";
91
+ import "node:os";
92
+ import "../_libs/atomically.mjs";
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:worker_threads";
106
+ import "../_libs/readable-stream.mjs";
107
+ import "events";
108
+ import "node:string_decoder";
109
+ import "../_libs/process-nextick-args.mjs";
110
+ import "../_libs/isarray.mjs";
111
+ import "../_libs/safe-buffer.mjs";
112
+ import "buffer";
113
+ import "../_libs/core-util-is.mjs";
114
+ import "../_libs/inherits.mjs";
115
+ import "../_libs/util-deprecate.mjs";
116
+ import "../_libs/lie.mjs";
117
+ import "../_libs/immediate.mjs";
118
+ import "../_libs/setimmediate.mjs";
119
+ import "../_libs/pako.mjs";
120
+ import "../_libs/devlop.mjs";
121
+ import "../_libs/unified.mjs";
122
+ import "../_libs/bail.mjs";
123
+ import "../_libs/extend.mjs";
124
+ import "../_libs/is-plain-obj.mjs";
125
+ import "../_libs/trough.mjs";
126
+ import "../_libs/vfile.mjs";
127
+ import "../_libs/vfile-message.mjs";
128
+ import "../_libs/unist-util-stringify-position.mjs";
129
+ import "../_libs/remark-parse.mjs";
130
+ import "../_libs/mdast-util-from-markdown.mjs";
131
+ import "../_libs/micromark-util-decode-numeric-character-reference+[...].mjs";
132
+ import "../_libs/micromark-util-decode-string.mjs";
133
+ import "../_libs/decode-named-character-reference+[...].mjs";
134
+ import "../_libs/character-entities.mjs";
135
+ import "../_libs/micromark-util-normalize-identifier+[...].mjs";
136
+ import "../_libs/micromark.mjs";
137
+ import "../_libs/micromark-util-combine-extensions+[...].mjs";
138
+ import "../_libs/micromark-util-chunked.mjs";
139
+ import "../_libs/micromark-factory-space.mjs";
140
+ import "../_libs/micromark-util-character.mjs";
141
+ import "../_libs/micromark-core-commonmark.mjs";
142
+ import "../_libs/micromark-util-classify-character+[...].mjs";
143
+ import "../_libs/micromark-util-resolve-all.mjs";
144
+ import "../_libs/micromark-util-subtokenize.mjs";
145
+ import "../_libs/micromark-factory-destination.mjs";
146
+ import "../_libs/micromark-factory-label.mjs";
147
+ import "../_libs/micromark-factory-title.mjs";
148
+ import "../_libs/micromark-factory-whitespace.mjs";
149
+ import "../_libs/micromark-util-html-tag-name.mjs";
150
+ import "../_libs/mdast-util-to-string.mjs";
151
+ import "../_libs/remark-rehype.mjs";
152
+ import "../_libs/mdast-util-to-hast.mjs";
153
+ import "../_libs/ungap__structured-clone.mjs";
154
+ import "../_libs/micromark-util-sanitize-uri.mjs";
155
+ import "../_libs/unist-util-position.mjs";
156
+ import "../_libs/trim-lines.mjs";
157
+ import "../_libs/unist-util-visit.mjs";
158
+ import "../_libs/unist-util-visit-parents.mjs";
159
+ import "../_libs/unist-util-is.mjs";
160
+ import "../_libs/hast-util-to-jsx-runtime.mjs";
161
+ import "../_libs/comma-separated-tokens.mjs";
162
+ import "../_libs/property-information.mjs";
163
+ import "../_libs/space-separated-tokens.mjs";
164
+ import "../_libs/style-to-js.mjs";
165
+ import "../_libs/style-to-object.mjs";
166
+ import "../_libs/inline-style-parser.mjs";
167
+ import "../_libs/hast-util-whitespace.mjs";
168
+ import "../_libs/estree-util-is-identifier-name.mjs";
169
+ import "../_libs/html-url-attributes.mjs";
170
+ function Separator({
171
+ className,
172
+ orientation = "horizontal",
173
+ decorative = true,
174
+ ...props
175
+ }) {
176
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
177
+ Root,
178
+ {
179
+ "data-slot": "separator",
180
+ decorative,
181
+ orientation,
182
+ className: cn(
183
+ "bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
184
+ className
185
+ ),
186
+ ...props
187
+ }
188
+ );
189
+ }
190
+ function Collapsible({
191
+ ...props
192
+ }) {
193
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Root$1, { "data-slot": "collapsible", ...props });
194
+ }
195
+ function CollapsibleTrigger({
196
+ ...props
197
+ }) {
198
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(CollapsibleTrigger$1, { "data-slot": "collapsible-trigger", ...props });
199
+ }
200
+ function CollapsibleContent({
201
+ ...props
202
+ }) {
203
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(CollapsibleContent$1, { "data-slot": "collapsible-content", ...props });
204
+ }
205
+ function ScrollArea({
206
+ className,
207
+ children,
208
+ ...props
209
+ }) {
210
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(
211
+ Root$2,
212
+ {
213
+ "data-slot": "scroll-area",
214
+ className: cn("relative", className),
215
+ ...props,
216
+ children: [
217
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
218
+ Viewport,
219
+ {
220
+ "data-slot": "scroll-area-viewport",
221
+ className: "focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",
222
+ children
223
+ }
224
+ ),
225
+ /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollBar, {}),
226
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Corner, {})
227
+ ]
228
+ }
229
+ );
230
+ }
231
+ function ScrollBar({
232
+ className,
233
+ orientation = "vertical",
234
+ ...props
235
+ }) {
236
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
237
+ ScrollAreaScrollbar,
238
+ {
239
+ "data-slot": "scroll-area-scrollbar",
240
+ orientation,
241
+ className: cn(
242
+ "flex touch-none p-px transition-colors select-none",
243
+ orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent",
244
+ orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent",
245
+ className
246
+ ),
247
+ ...props,
248
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(
249
+ ScrollAreaThumb,
250
+ {
251
+ "data-slot": "scroll-area-thumb",
252
+ className: "bg-border relative flex-1 rounded-full"
253
+ }
254
+ )
255
+ }
256
+ );
257
+ }
258
+ const THINKING_TAG_REGEX = /<think>([\s\S]*?)<\/think>/gi;
259
+ const THINKING_TAG_REGEX_SINGLE = /<think>([\s\S]*?)<\/think>/i;
260
+ function extractThinkingFromContent(text) {
261
+ const match = THINKING_TAG_REGEX_SINGLE.exec(text);
262
+ if (!match || match[1] === void 0) {
263
+ return { thinking: null, remainingText: text };
264
+ }
265
+ const thinking = match[1].trim();
266
+ const remainingText = text.replace(THINKING_TAG_REGEX, "").trim();
267
+ return { thinking, remainingText };
268
+ }
269
+ function assertNever(_value) {
270
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, {});
271
+ }
272
+ function SystemReminderBlock({ text }) {
273
+ const [open, setOpen] = reactExports.useState(false);
274
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(Collapsible, { open, onOpenChange: setOpen, children: [
275
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(CollapsibleTrigger, { className: "flex items-center gap-1.5 py-0.5 cursor-pointer hover:opacity-80 transition-opacity group", children: [
276
+ open ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-3 text-muted-foreground" }),
277
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-muted-foreground text-xs italic select-none opacity-60", children: "[system-reminder]" })
278
+ ] }),
279
+ /* @__PURE__ */ jsxRuntimeExports.jsx(CollapsibleContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "pl-4 pt-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "prose prose-sm dark:prose-invert max-w-none [&_pre]:bg-muted [&_pre]:text-foreground [&_code]:text-[0.8em] [&_p]:my-1 [&_ul]:my-1 [&_ol]:my-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Markdown, { children: text }) }) }) })
280
+ ] });
281
+ }
282
+ const TextBlock = reactExports.memo(function TextBlock2({ text }) {
283
+ if (text.includes("<system-reminder>")) {
284
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(SystemReminderBlock, { text });
285
+ }
286
+ const { thinking, remainingText } = extractThinkingFromContent(text);
287
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
288
+ thinking !== null && /* @__PURE__ */ jsxRuntimeExports.jsx(ThinkingBlock, { thinking }),
289
+ remainingText.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "prose prose-sm dark:prose-invert max-w-none [&_pre]:bg-muted [&_pre]:text-foreground [&_code]:text-[0.8em] [&_p]:my-1 [&_ul]:my-1 [&_ol]:my-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Markdown, { children: remainingText }) }),
290
+ thinking === null && remainingText.length === 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground italic", children: "Empty text block" })
291
+ ] });
292
+ });
293
+ const ThinkingBlock = reactExports.memo(function ThinkingBlock2({
294
+ thinking
295
+ }) {
296
+ const [open, setOpen] = reactExports.useState(false);
297
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Collapsible, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-l-2 border-purple-500/40 my-1", children: [
298
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(CollapsibleTrigger, { className: "flex items-center gap-1.5 px-3 py-1 w-full text-left cursor-pointer hover:bg-purple-500/5 transition-colors rounded-r-sm group", children: [
299
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Brain, { className: "size-3.5 text-purple-400 shrink-0" }),
300
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-medium text-purple-400", children: "Thinking" }),
301
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
302
+ Badge,
303
+ {
304
+ variant: "ghost",
305
+ className: "text-[10px] text-muted-foreground px-1.5 py-0 h-4 font-mono",
306
+ children: [
307
+ thinking.length.toLocaleString(),
308
+ " chars"
309
+ ]
310
+ }
311
+ ),
312
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1" }),
313
+ open ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-3 text-muted-foreground" })
314
+ ] }),
315
+ /* @__PURE__ */ jsxRuntimeExports.jsx(CollapsibleContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-3 pb-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollArea, { className: "max-h-[60vh]", children: /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: "text-xs text-muted-foreground whitespace-pre-wrap font-mono leading-relaxed", children: thinking }) }) }) })
316
+ ] }) });
317
+ });
318
+ const ToolUseBlock = reactExports.memo(function ToolUseBlock2({
319
+ name,
320
+ input
321
+ }) {
322
+ const [open, setOpen] = reactExports.useState(false);
323
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Collapsible, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-l-2 border-blue-500/40 my-1", children: [
324
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(CollapsibleTrigger, { className: "flex items-center gap-1.5 px-3 py-1 w-full text-left cursor-pointer hover:bg-blue-500/5 transition-colors rounded-r-sm group", children: [
325
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Terminal, { className: "size-3.5 text-blue-400 shrink-0" }),
326
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "outline", className: "text-[10px] font-mono px-1.5 py-0 h-4", children: name }),
327
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1" }),
328
+ open ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-3 text-muted-foreground" })
329
+ ] }),
330
+ /* @__PURE__ */ jsxRuntimeExports.jsx(CollapsibleContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-3 pb-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollArea, { className: "max-h-[60vh]", children: /* @__PURE__ */ jsxRuntimeExports.jsx(JsonViewer, { data: safeJsonValue(input), defaultExpandDepth: 0 }) }) }) })
331
+ ] }) });
332
+ });
333
+ const ResponseContentBlockRenderer = reactExports.memo(function ResponseContentBlockRenderer2({
334
+ block
335
+ }) {
336
+ switch (block.type) {
337
+ case "text":
338
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(TextBlock, { text: block.text });
339
+ case "thinking":
340
+ case "think":
341
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(ThinkingBlock, { thinking: block.thinking });
342
+ case "tool_use":
343
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(ToolUseBlock, { name: block.name, input: block.input });
344
+ default:
345
+ return assertNever();
346
+ }
347
+ });
348
+ const StructuredResponseViewAnthropic = reactExports.memo(function StructuredResponseViewAnthropic2({
349
+ response
350
+ }) {
351
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-3", children: [
352
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [
353
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "secondary", className: "text-[10px] px-1.5 py-0 h-5 font-mono", children: response.model }),
354
+ response.stop_reason !== null && /* @__PURE__ */ jsxRuntimeExports.jsxs(
355
+ Badge,
356
+ {
357
+ variant: "outline",
358
+ className: "text-[10px] px-1.5 py-0 h-5 font-mono flex items-center gap-1",
359
+ children: [
360
+ /* @__PURE__ */ jsxRuntimeExports.jsx(CircleStop, { className: "size-2.5" }),
361
+ response.stop_reason
362
+ ]
363
+ }
364
+ ),
365
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex items-center gap-1 text-muted-foreground text-xs", children: [
366
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Zap, { className: "size-3" }),
367
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-mono tabular-nums", children: [
368
+ formatTokens(response.usage.input_tokens ?? 0),
369
+ " in /",
370
+ " ",
371
+ formatTokens(response.usage.output_tokens ?? 0),
372
+ " out"
373
+ ] }),
374
+ response.usage.cache_creation_input_tokens !== void 0 && response.usage.cache_creation_input_tokens !== null && response.usage.cache_creation_input_tokens > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-mono tabular-nums text-emerald-400", children: [
375
+ "Cache +",
376
+ formatTokens(response.usage.cache_creation_input_tokens)
377
+ ] }),
378
+ response.usage.cache_read_input_tokens !== void 0 && response.usage.cache_read_input_tokens !== null && response.usage.cache_read_input_tokens > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-mono tabular-nums text-purple-400", children: [
379
+ "Cache ~",
380
+ formatTokens(response.usage.cache_read_input_tokens)
381
+ ] })
382
+ ] })
383
+ ] }),
384
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Separator, { className: "opacity-50" }),
385
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
386
+ response.content.map((block, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(ResponseContentBlockRenderer, { block }, i)),
387
+ response.content.length === 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground italic", children: "Empty response content" })
388
+ ] })
389
+ ] });
390
+ });
391
+ function parseToolArguments(raw) {
392
+ if (raw === void 0 || raw === "") return {};
393
+ try {
394
+ return JSON.parse(raw);
395
+ } catch {
396
+ return null;
397
+ }
398
+ }
399
+ function OpenAIToolCallBlock({ call }) {
400
+ const [open, setOpen] = reactExports.useState(false);
401
+ const name = call.function.name ?? "(unnamed tool)";
402
+ const parsed = parseToolArguments(call.function.arguments);
403
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Collapsible, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-l-2 border-blue-500/40 my-1", children: [
404
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(CollapsibleTrigger, { className: "flex items-center gap-1.5 px-3 py-1 w-full text-left cursor-pointer hover:bg-blue-500/5 transition-colors rounded-r-sm group", children: [
405
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Terminal, { className: "size-3.5 text-blue-400 shrink-0" }),
406
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "outline", className: "text-[10px] font-mono px-1.5 py-0 h-4", children: name }),
407
+ call.id !== void 0 && call.id !== "" && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-mono text-muted-foreground/60 truncate", children: call.id }),
408
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1" }),
409
+ open ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-3 text-muted-foreground" })
410
+ ] }),
411
+ /* @__PURE__ */ jsxRuntimeExports.jsx(CollapsibleContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-3 pb-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollArea, { className: "max-h-[60vh]", children: parsed === null ? (
412
+ // JSON.parse failed — show the raw string so the user can
413
+ // still see what the model tried to call.
414
+ /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: "font-mono text-xs whitespace-pre-wrap break-words text-rose-300/90", children: call.function.arguments })
415
+ ) : /* @__PURE__ */ jsxRuntimeExports.jsx(JsonViewer, { data: safeJsonValue(parsed), defaultExpandDepth: 0 }) }) }) })
416
+ ] }) });
417
+ }
418
+ const OpenAIResponseView = reactExports.memo(function OpenAIResponseView2({
419
+ response
420
+ }) {
421
+ const choice = response.choices[0];
422
+ const message = choice?.message;
423
+ const toolCalls = message?.tool_calls ?? [];
424
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-3", children: [
425
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [
426
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "secondary", className: "text-[10px] px-1.5 py-0 h-5 font-mono", children: response.model }),
427
+ choice?.finish_reason !== null && choice?.finish_reason !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs(
428
+ Badge,
429
+ {
430
+ variant: "outline",
431
+ className: "text-[10px] px-1.5 py-0 h-5 font-mono flex items-center gap-1",
432
+ children: [
433
+ /* @__PURE__ */ jsxRuntimeExports.jsx(CircleStop, { className: "size-2.5" }),
434
+ choice.finish_reason
435
+ ]
436
+ }
437
+ ),
438
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex items-center gap-1 text-muted-foreground text-xs", children: [
439
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Zap, { className: "size-3" }),
440
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-mono tabular-nums", children: [
441
+ formatTokens(response.usage.prompt_tokens ?? 0),
442
+ " in /",
443
+ " ",
444
+ formatTokens(response.usage.completion_tokens ?? 0),
445
+ " out"
446
+ ] })
447
+ ] })
448
+ ] }),
449
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Separator, { className: "opacity-50" }),
450
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
451
+ message?.reasoning_content !== null && message?.reasoning_content !== void 0 && message.reasoning_content.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(ThinkingBlock, { thinking: message.reasoning_content }),
452
+ message?.content !== null && message?.content !== void 0 && message.content.length > 0 && (() => {
453
+ const hasReasoningField = message.reasoning_content !== null && message.reasoning_content !== void 0 && message.reasoning_content.length > 0;
454
+ const { thinking, remainingText } = extractThinkingFromContent(message.content);
455
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
456
+ thinking !== null && !hasReasoningField && /* @__PURE__ */ jsxRuntimeExports.jsx(ThinkingBlock, { thinking }),
457
+ remainingText.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "prose prose-sm dark:prose-invert max-w-none [&_pre]:bg-muted [&_pre]:text-foreground [&_code]:text-[0.8em] [&_p]:my-1 [&_ul]:my-1 [&_ol]:my-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Markdown, { children: remainingText }) })
458
+ ] });
459
+ })(),
460
+ toolCalls.map((call, i) => (
461
+ // biome-ignore lint/suspicious/noArrayIndexKey: tool_calls is the positionally stable list from the response
462
+ /* @__PURE__ */ jsxRuntimeExports.jsx(OpenAIToolCallBlock, { call }, call.id ?? `tc-${i}`)
463
+ )),
464
+ message?.function_call !== null && message?.function_call !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border border-blue-500/30 rounded-md p-3 bg-blue-500/5", children: [
465
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-blue-400 font-mono mb-1", children: "function_call" }),
466
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "font-mono text-xs", children: [
467
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-blue-300", children: message.function_call.name }),
468
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-muted-foreground", children: [
469
+ "(",
470
+ message.function_call.arguments,
471
+ ")"
472
+ ] })
473
+ ] })
474
+ ] }),
475
+ (message?.content === null || message?.content === void 0 || message.content.length === 0) && (message?.reasoning_content === null || message?.reasoning_content === void 0 || message.reasoning_content.length === 0) && (message?.function_call === null || message?.function_call === void 0) && toolCalls.length === 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground italic", children: "Empty response content" })
476
+ ] })
477
+ ] });
478
+ });
479
+ function isRecord(value) {
480
+ return typeof value === "object" && value !== null && !Array.isArray(value);
481
+ }
482
+ function isOpenAIResponse(response) {
483
+ return isRecord(response) && response.object === "chat.completion";
484
+ }
485
+ function isAnthropicResponse(response) {
486
+ return isRecord(response) && response.type === "message" && Array.isArray(response.content);
487
+ }
488
+ function formatViewFor(apiFormat, response) {
489
+ if (apiFormat === "openai" && isOpenAIResponse(response)) {
490
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(OpenAIResponseView, { response });
491
+ }
492
+ if (apiFormat === "anthropic" && isAnthropicResponse(response)) {
493
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(StructuredResponseViewAnthropic, { response });
494
+ }
495
+ return null;
496
+ }
497
+ function getStatusClasses(category) {
498
+ switch (category) {
499
+ case "success":
500
+ return "text-emerald-400";
501
+ case "client_error":
502
+ return "text-amber-400";
503
+ case "server_error":
504
+ return "text-red-400";
505
+ case "pending":
506
+ return "text-muted-foreground";
507
+ }
508
+ }
509
+ function StatusIndicator({ status }) {
510
+ const category = getStatusCategory(status);
511
+ const classes = getStatusClasses(category);
512
+ if (status === null) {
513
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-muted-foreground italic", children: "pending" });
514
+ }
515
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: cn("flex items-center gap-1 text-xs font-mono font-semibold", classes), children: [
516
+ category === "server_error" && /* @__PURE__ */ jsxRuntimeExports.jsx(TriangleAlert, { className: "size-3" }),
517
+ status
518
+ ] });
519
+ }
520
+ function ErrorResponseView({ text }) {
521
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-md border border-red-500/30 bg-red-500/5 p-3", children: /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: "text-xs text-red-300 whitespace-pre-wrap font-mono leading-relaxed overflow-auto max-h-[60vh]", children: text }) });
522
+ }
523
+ function MarkdownFallbackView({ text }) {
524
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "prose prose-sm dark:prose-invert max-w-none [&_pre]:bg-muted [&_pre]:text-foreground [&_code]:text-[0.8em] [&_p]:my-1 [&_ul]:my-1 [&_ol]:my-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Markdown, { children: text }) });
525
+ }
526
+ const ResponseView = reactExports.memo(function ResponseView2({
527
+ responseText,
528
+ responseStatus,
529
+ streaming,
530
+ inputTokens,
531
+ outputTokens,
532
+ cacheCreationInputTokens,
533
+ cacheReadInputTokens,
534
+ apiFormat,
535
+ error
536
+ }) {
537
+ const resolvedFormat = apiFormat ?? "unknown";
538
+ const parsed = reactExports.useMemo(
539
+ () => getLogFormatAdapter(resolvedFormat).analyzeResponse(responseText).parsed,
540
+ [resolvedFormat, responseText]
541
+ );
542
+ if (responseText === null && error === void 0) {
543
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 py-3", children: [
544
+ /* @__PURE__ */ jsxRuntimeExports.jsx(StatusIndicator, { status: responseStatus }),
545
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-muted-foreground italic", children: "No response" })
546
+ ] });
547
+ }
548
+ const isHttpError = responseStatus !== null && responseStatus >= 400;
549
+ if (isHttpError) {
550
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
551
+ /* @__PURE__ */ jsxRuntimeExports.jsx(StatusIndicator, { status: responseStatus }),
552
+ /* @__PURE__ */ jsxRuntimeExports.jsx(ErrorResponseView, { text: responseText ?? "" }),
553
+ error !== void 0 && error !== null && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded border border-destructive/50 bg-destructive/10 p-3 text-xs", children: [
554
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-semibold text-destructive mb-1", children: "SSE Error" }),
555
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-muted-foreground font-mono", children: error })
556
+ ] })
557
+ ] });
558
+ }
559
+ if (error !== void 0 && error !== null) {
560
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
561
+ /* @__PURE__ */ jsxRuntimeExports.jsx(StatusIndicator, { status: responseStatus }),
562
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded border border-destructive/50 bg-destructive/10 p-3 text-xs", children: [
563
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-semibold text-destructive mb-1", children: "SSE Error" }),
564
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-muted-foreground font-mono", children: error })
565
+ ] }),
566
+ responseText !== null && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ErrorResponseView, { text: responseText }) })
567
+ ] });
568
+ }
569
+ if (parsed !== null) {
570
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
571
+ /* @__PURE__ */ jsxRuntimeExports.jsx(StatusIndicator, { status: responseStatus }),
572
+ formatViewFor(resolvedFormat, parsed)
573
+ ] });
574
+ }
575
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
576
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
577
+ /* @__PURE__ */ jsxRuntimeExports.jsx(StatusIndicator, { status: responseStatus }),
578
+ streaming && (inputTokens !== null || outputTokens !== null) && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex items-center gap-1 text-muted-foreground text-xs", children: [
579
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Zap, { className: "size-3" }),
580
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-mono tabular-nums", children: [
581
+ inputTokens !== null ? formatTokens(inputTokens) : "—",
582
+ " in /",
583
+ " ",
584
+ outputTokens !== null ? formatTokens(outputTokens) : "—",
585
+ " out"
586
+ ] }),
587
+ cacheCreationInputTokens !== null && cacheCreationInputTokens !== void 0 && cacheCreationInputTokens > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-mono tabular-nums text-emerald-400", children: [
588
+ "Cache +",
589
+ formatTokens(cacheCreationInputTokens)
590
+ ] }),
591
+ cacheReadInputTokens !== null && cacheReadInputTokens !== void 0 && cacheReadInputTokens > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-mono tabular-nums text-purple-400", children: [
592
+ "Cache ~",
593
+ formatTokens(cacheReadInputTokens)
594
+ ] })
595
+ ] })
596
+ ] }),
597
+ /* @__PURE__ */ jsxRuntimeExports.jsx(MarkdownFallbackView, { text: responseText ?? "" })
598
+ ] });
599
+ });
600
+ export {
601
+ ResponseView
602
+ };