@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,755 +0,0 @@
1
- import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { y as formatTokens, m as cn, E as getStatusCategory, s as safeGetOwnProperty } from "./router-DWcUFPR3.mjs";
3
- import { g as getLogFormatAdapter, q as AnswerMarkdown, B as Badge, s as Collapsible, t as CollapsibleTrigger, v as CollapsibleContent, w as ScrollArea, x as LazyJsonViewer, y as safeJsonValue } from "./ProxyViewerContainer-B02Ey0p_.mjs";
4
- import "node:crypto";
5
- import "node:path";
6
- import "node:fs";
7
- import "node:child_process";
8
- import "node:buffer";
9
- import "node:url";
10
- import "crypto";
11
- import "node:util";
12
- import "node:net";
13
- import "../_libs/modelcontextprotocol__server.mjs";
14
- import "../_libs/jszip.mjs";
15
- import "node:os";
16
- import { ac as Zap, T as TriangleAlert, v as CircleStop, ae as Brain, c as ChevronDown, t as ChevronRight, l as Terminal } from "../_libs/lucide-react.mjs";
17
- import { R as Root } from "../_libs/radix-ui__react-separator.mjs";
18
- import "../_libs/tanstack__react-router.mjs";
19
- import "../_libs/tanstack__router-core.mjs";
20
- import "../_libs/cookie-es.mjs";
21
- import "../_libs/seroval.mjs";
22
- import "../_libs/seroval-plugins.mjs";
23
- import "node:stream";
24
- import "../_libs/tanstack__history.mjs";
25
- import "node:stream/web";
26
- import "../_libs/react-dom.mjs";
27
- import "util";
28
- import "async_hooks";
29
- import "stream";
30
- import "../_libs/isbot.mjs";
31
- import "../_libs/swr.mjs";
32
- import "../_libs/use-sync-external-store.mjs";
33
- import "../_libs/dequal.mjs";
34
- import "../_libs/class-variance-authority.mjs";
35
- import "../_libs/clsx.mjs";
36
- import "../_libs/tailwind-merge.mjs";
37
- import "node:fs/promises";
38
- import "node:worker_threads";
39
- import "node:readline";
40
- import "../_libs/conf.mjs";
41
- import "node:process";
42
- import "node:assert";
43
- import "../_libs/dot-prop.mjs";
44
- import "../_libs/env-paths.mjs";
45
- import "../_libs/atomically.mjs";
46
- import "node:events";
47
- import "../_libs/stubborn-fs.mjs";
48
- import "../_libs/stubborn-utils.mjs";
49
- import "../_libs/when-exit.mjs";
50
- import "../_libs/ajv.mjs";
51
- import "../_libs/fast-deep-equal.mjs";
52
- import "../_libs/json-schema-traverse.mjs";
53
- import "../_libs/fast-uri.mjs";
54
- import "../_libs/ajv-formats.mjs";
55
- import "../_libs/debounce-fn.mjs";
56
- import "../_libs/mimic-function.mjs";
57
- import "../_libs/semver.mjs";
58
- import "../_libs/uint8array-extras.mjs";
59
- import "node:dns/promises";
60
- import "node:assert/strict";
61
- import "../_libs/zod.mjs";
62
- import "../_libs/modelcontextprotocol__core.mjs";
63
- import "../_libs/readable-stream.mjs";
64
- import "events";
65
- import "node:string_decoder";
66
- import "../_libs/process-nextick-args.mjs";
67
- import "../_libs/isarray.mjs";
68
- import "../_libs/safe-buffer.mjs";
69
- import "buffer";
70
- import "../_libs/core-util-is.mjs";
71
- import "../_libs/inherits.mjs";
72
- import "../_libs/util-deprecate.mjs";
73
- import "../_libs/lie.mjs";
74
- import "../_libs/immediate.mjs";
75
- import "../_libs/setimmediate.mjs";
76
- import "../_libs/pako.mjs";
77
- import "../_libs/tanstack__react-virtual.mjs";
78
- import "../_libs/tanstack__virtual-core.mjs";
79
- import "../_libs/diff.mjs";
80
- import "../_libs/radix-ui__react-dialog.mjs";
81
- import "../_libs/radix-ui__primitive.mjs";
82
- import "../_libs/radix-ui__react-compose-refs.mjs";
83
- import "../_libs/radix-ui__react-context.mjs";
84
- import "../_libs/radix-ui__react-id.mjs";
85
- import "../_libs/@radix-ui/react-use-layout-effect+[...].mjs";
86
- import "../_libs/@radix-ui/react-use-controllable-state+[...].mjs";
87
- import "../_libs/@radix-ui/react-dismissable-layer+[...].mjs";
88
- import "../_libs/radix-ui__react-primitive.mjs";
89
- import "../_libs/radix-ui__react-slot.mjs";
90
- import "../_libs/@radix-ui/react-use-callback-ref+[...].mjs";
91
- import "../_libs/radix-ui__react-focus-scope.mjs";
92
- import "../_libs/radix-ui__react-portal.mjs";
93
- import "../_libs/radix-ui__react-presence.mjs";
94
- import "../_libs/radix-ui__react-focus-guards.mjs";
95
- import "../_libs/react-remove-scroll.mjs";
96
- import "tslib";
97
- import "../_libs/react-remove-scroll-bar.mjs";
98
- import "../_libs/react-style-singleton.mjs";
99
- import "../_libs/get-nonce.mjs";
100
- import "../_libs/use-sidecar.mjs";
101
- import "../_libs/use-callback-ref.mjs";
102
- import "../_libs/aria-hidden.mjs";
103
- import "../_libs/radix-ui__react-tabs.mjs";
104
- import "../_libs/radix-ui__react-roving-focus.mjs";
105
- import "../_libs/radix-ui__react-collection.mjs";
106
- import "../_libs/radix-ui__react-direction.mjs";
107
- import "../_libs/@radix-ui/react-use-is-hydrated+[...].mjs";
108
- import "../_libs/radix-ui__react-select.mjs";
109
- import "../_libs/radix-ui__number.mjs";
110
- import "../_libs/radix-ui__react-popper.mjs";
111
- import "../_libs/floating-ui__react-dom.mjs";
112
- import "../_libs/floating-ui__dom.mjs";
113
- import "../_libs/floating-ui__core.mjs";
114
- import "../_libs/floating-ui__utils.mjs";
115
- import "../_libs/radix-ui__react-arrow.mjs";
116
- import "../_libs/radix-ui__react-use-size.mjs";
117
- import "../_libs/radix-ui__react-use-previous.mjs";
118
- import "../_libs/@radix-ui/react-visually-hidden+[...].mjs";
119
- import "../_libs/radix-ui__react-tooltip.mjs";
120
- import "../_libs/radix-ui__react-collapsible.mjs";
121
- import "../_libs/radix-ui__react-scroll-area.mjs";
122
- function Separator({
123
- className,
124
- orientation = "horizontal",
125
- decorative = true,
126
- ...props
127
- }) {
128
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
129
- Root,
130
- {
131
- "data-slot": "separator",
132
- decorative,
133
- orientation,
134
- className: cn(
135
- "bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
136
- className
137
- ),
138
- ...props
139
- }
140
- );
141
- }
142
- const THINKING_TAG_REGEX = /<think>([\s\S]*?)<\/think>/gi;
143
- const THINKING_TAG_REGEX_SINGLE = /<think>([\s\S]*?)<\/think>/i;
144
- function extractThinkingFromContent(text) {
145
- const match = THINKING_TAG_REGEX_SINGLE.exec(text);
146
- if (!match || match[1] === void 0) {
147
- return { thinking: null, remainingText: text };
148
- }
149
- const thinking = match[1].trim();
150
- const remainingText = text.replace(THINKING_TAG_REGEX, "").trim();
151
- return { thinking, remainingText };
152
- }
153
- function assertNever(_value) {
154
- return /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, {});
155
- }
156
- function SystemReminderBlock({ text }) {
157
- const [open, setOpen] = reactExports.useState(false);
158
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(Collapsible, { open, onOpenChange: setOpen, children: [
159
- /* @__PURE__ */ jsxRuntimeExports.jsxs(CollapsibleTrigger, { className: "flex items-center gap-1.5 py-0.5 cursor-pointer hover:opacity-80 transition-opacity group", children: [
160
- open ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-3 text-muted-foreground" }),
161
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-muted-foreground text-xs italic select-none opacity-60", children: "[system-reminder]" })
162
- ] }),
163
- /* @__PURE__ */ jsxRuntimeExports.jsx(CollapsibleContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "pl-4 pt-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx(AnswerMarkdown, { text }) }) })
164
- ] });
165
- }
166
- const TextBlock = reactExports.memo(function TextBlock2({ text }) {
167
- if (text.includes("<system-reminder>")) {
168
- return /* @__PURE__ */ jsxRuntimeExports.jsx(SystemReminderBlock, { text });
169
- }
170
- const { thinking, remainingText } = extractThinkingFromContent(text);
171
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
172
- thinking !== null && /* @__PURE__ */ jsxRuntimeExports.jsx(ThinkingBlock, { thinking }),
173
- remainingText.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(AnswerMarkdown, { text: remainingText }),
174
- thinking === null && remainingText.length === 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground italic", children: "Empty text block" })
175
- ] });
176
- });
177
- const ThinkingBlock = reactExports.memo(function ThinkingBlock2({
178
- thinking
179
- }) {
180
- const [open, setOpen] = reactExports.useState(false);
181
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Collapsible, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-l-2 border-purple-500/40 my-1", children: [
182
- /* @__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: [
183
- /* @__PURE__ */ jsxRuntimeExports.jsx(Brain, { className: "size-3.5 text-purple-400 shrink-0" }),
184
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-medium text-purple-400", children: "Thinking" }),
185
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
186
- Badge,
187
- {
188
- variant: "ghost",
189
- className: "text-[10px] text-muted-foreground px-1.5 py-0 h-4 font-mono",
190
- children: [
191
- thinking.length.toLocaleString(),
192
- " chars"
193
- ]
194
- }
195
- ),
196
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1" }),
197
- open ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-3 text-muted-foreground" })
198
- ] }),
199
- /* @__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 }) }) }) })
200
- ] }) });
201
- });
202
- const ToolUseBlock = reactExports.memo(function ToolUseBlock2({
203
- name,
204
- input,
205
- toolIndex,
206
- toolFocus
207
- }) {
208
- const [open, setOpen] = reactExports.useState(false);
209
- const triggerRef = reactExports.useRef(null);
210
- const shouldFocus = toolFocus?.focusedToolIndex === toolIndex;
211
- reactExports.useEffect(() => {
212
- if (!shouldFocus || toolFocus === void 0 || toolFocus.toolFocusNonce <= 0) return void 0;
213
- setOpen(true);
214
- const timer = window.setTimeout(() => {
215
- const trigger = triggerRef.current;
216
- if (trigger === null) return;
217
- trigger.scrollIntoView({ block: "center", behavior: "smooth" });
218
- trigger.focus({ preventScroll: true });
219
- }, 0);
220
- return () => window.clearTimeout(timer);
221
- }, [shouldFocus, toolFocus, toolFocus?.toolFocusNonce]);
222
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Collapsible, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-l-2 border-sky-400/25 my-1", "data-response-tool-index": toolIndex, children: [
223
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
224
- CollapsibleTrigger,
225
- {
226
- ref: triggerRef,
227
- className: "flex items-center gap-1.5 px-3 py-1 w-full text-left cursor-pointer hover:bg-sky-400/[0.04] transition-colors rounded-r-sm group focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
228
- children: [
229
- /* @__PURE__ */ jsxRuntimeExports.jsx(Terminal, { className: "size-3.5 text-sky-400/70 shrink-0" }),
230
- /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "outline", className: "text-[10px] font-mono px-1.5 py-0 h-4", children: name }),
231
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1" }),
232
- open ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-3 text-muted-foreground" })
233
- ]
234
- }
235
- ),
236
- /* @__PURE__ */ jsxRuntimeExports.jsx(CollapsibleContent, { children: open && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-3 pb-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollArea, { className: "max-h-[60vh]", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
237
- reactExports.Suspense,
238
- {
239
- fallback: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-muted-foreground", children: "Loading JSON..." }),
240
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(LazyJsonViewer, { data: safeJsonValue(input), defaultExpandDepth: 0 })
241
- }
242
- ) }) }) })
243
- ] }) });
244
- });
245
- const ResponseContentBlockRenderer = reactExports.memo(function ResponseContentBlockRenderer2({
246
- block,
247
- toolIndex,
248
- toolFocus
249
- }) {
250
- switch (block.type) {
251
- case "text":
252
- return /* @__PURE__ */ jsxRuntimeExports.jsx(TextBlock, { text: block.text });
253
- case "thinking":
254
- case "think":
255
- return /* @__PURE__ */ jsxRuntimeExports.jsx(ThinkingBlock, { thinking: block.thinking });
256
- case "tool_use":
257
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
258
- ToolUseBlock,
259
- {
260
- name: block.name,
261
- input: block.input,
262
- toolIndex: toolIndex ?? 0,
263
- toolFocus
264
- }
265
- );
266
- default:
267
- return assertNever();
268
- }
269
- });
270
- const StructuredResponseViewAnthropic = reactExports.memo(function StructuredResponseViewAnthropic2({
271
- response,
272
- toolFocus
273
- }) {
274
- let toolIndex = 0;
275
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-3", children: [
276
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [
277
- /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "secondary", className: "text-[10px] px-1.5 py-0 h-5 font-mono", children: response.model }),
278
- response.stop_reason !== null && /* @__PURE__ */ jsxRuntimeExports.jsxs(
279
- Badge,
280
- {
281
- variant: "outline",
282
- className: "text-[10px] px-1.5 py-0 h-5 font-mono flex items-center gap-1",
283
- children: [
284
- /* @__PURE__ */ jsxRuntimeExports.jsx(CircleStop, { className: "size-2.5" }),
285
- response.stop_reason
286
- ]
287
- }
288
- ),
289
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex items-center gap-1 text-muted-foreground text-xs", children: [
290
- /* @__PURE__ */ jsxRuntimeExports.jsx(Zap, { className: "size-3" }),
291
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-mono tabular-nums", children: [
292
- formatTokens(response.usage.input_tokens ?? 0),
293
- " in /",
294
- " ",
295
- formatTokens(response.usage.output_tokens ?? 0),
296
- " out"
297
- ] }),
298
- 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: [
299
- "KV Cache +",
300
- formatTokens(response.usage.cache_creation_input_tokens)
301
- ] }),
302
- 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: [
303
- "KV Cache ~",
304
- formatTokens(response.usage.cache_read_input_tokens)
305
- ] })
306
- ] })
307
- ] }),
308
- /* @__PURE__ */ jsxRuntimeExports.jsx(Separator, { className: "opacity-50" }),
309
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
310
- response.content.map((block, i) => {
311
- const currentToolIndex = block.type === "tool_use" ? toolIndex : void 0;
312
- if (block.type === "tool_use") toolIndex += 1;
313
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
314
- ResponseContentBlockRenderer,
315
- {
316
- block,
317
- toolIndex: currentToolIndex,
318
- toolFocus
319
- },
320
- i
321
- );
322
- }),
323
- response.content.length === 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground italic", children: "Empty response content" })
324
- ] })
325
- ] });
326
- });
327
- function parseToolArguments(raw) {
328
- if (raw === void 0 || raw === "") return {};
329
- try {
330
- return JSON.parse(raw);
331
- } catch {
332
- return null;
333
- }
334
- }
335
- function useToolFocus({
336
- toolIndex,
337
- toolFocus,
338
- setOpen
339
- }) {
340
- const triggerRef = reactExports.useRef(null);
341
- const shouldFocus = toolFocus?.focusedToolIndex === toolIndex;
342
- reactExports.useEffect(() => {
343
- if (!shouldFocus || toolFocus === void 0 || toolFocus.toolFocusNonce <= 0) return void 0;
344
- setOpen(true);
345
- const timer = window.setTimeout(() => {
346
- const trigger = triggerRef.current;
347
- if (trigger === null) return;
348
- trigger.scrollIntoView({ block: "center", behavior: "smooth" });
349
- trigger.focus({ preventScroll: true });
350
- }, 0);
351
- return () => window.clearTimeout(timer);
352
- }, [setOpen, shouldFocus, toolFocus, toolFocus?.toolFocusNonce]);
353
- return triggerRef;
354
- }
355
- function OpenAIFunctionCallBlock({
356
- name,
357
- argumentsText,
358
- toolIndex,
359
- toolFocus
360
- }) {
361
- const blockRef = reactExports.useRef(null);
362
- const shouldFocus = toolFocus?.focusedToolIndex === toolIndex;
363
- reactExports.useEffect(() => {
364
- if (!shouldFocus || toolFocus === void 0 || toolFocus.toolFocusNonce <= 0) return void 0;
365
- const timer = window.setTimeout(() => {
366
- const block = blockRef.current;
367
- if (block === null) return;
368
- block.scrollIntoView({ block: "center", behavior: "smooth" });
369
- block.focus({ preventScroll: true });
370
- }, 0);
371
- return () => window.clearTimeout(timer);
372
- }, [shouldFocus, toolFocus, toolFocus?.toolFocusNonce]);
373
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(
374
- "div",
375
- {
376
- ref: blockRef,
377
- tabIndex: -1,
378
- className: "border border-sky-400/20 rounded-md p-3 bg-muted/20 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
379
- "data-response-tool-index": toolIndex,
380
- children: [
381
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-sky-400/80 font-mono mb-1", children: "function_call" }),
382
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "font-mono text-xs", children: [
383
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-foreground/80", children: name }),
384
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-muted-foreground", children: [
385
- "(",
386
- argumentsText,
387
- ")"
388
- ] })
389
- ] })
390
- ]
391
- }
392
- );
393
- }
394
- function OpenAIToolCallBlock({
395
- call,
396
- toolIndex,
397
- toolFocus
398
- }) {
399
- const [open, setOpen] = reactExports.useState(false);
400
- const name = call.function.name ?? "(unnamed tool)";
401
- const parsed = open ? parseToolArguments(call.function.arguments) : {};
402
- const triggerRef = useToolFocus({ toolIndex, toolFocus, setOpen });
403
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Collapsible, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-l-2 border-sky-400/25 my-1", "data-response-tool-index": toolIndex, children: [
404
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
405
- CollapsibleTrigger,
406
- {
407
- ref: triggerRef,
408
- className: "flex items-center gap-1.5 px-3 py-1 w-full text-left cursor-pointer hover:bg-sky-400/[0.04] transition-colors rounded-r-sm group focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
409
- children: [
410
- /* @__PURE__ */ jsxRuntimeExports.jsx(Terminal, { className: "size-3.5 text-sky-400/70 shrink-0" }),
411
- /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "outline", className: "text-[10px] font-mono px-1.5 py-0 h-4", children: name }),
412
- call.id !== void 0 && call.id !== "" && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-mono text-muted-foreground/60 truncate", children: call.id }),
413
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1" }),
414
- open ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-3 text-muted-foreground" })
415
- ]
416
- }
417
- ),
418
- /* @__PURE__ */ jsxRuntimeExports.jsx(CollapsibleContent, { children: open && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-3 pb-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollArea, { className: "max-h-[60vh]", children: parsed === null ? (
419
- // JSON.parse failed — show the raw string so the user can
420
- // still see what the model tried to call.
421
- /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: "font-mono text-xs whitespace-pre-wrap break-words text-rose-300/90", children: call.function.arguments })
422
- ) : /* @__PURE__ */ jsxRuntimeExports.jsx(
423
- reactExports.Suspense,
424
- {
425
- fallback: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-muted-foreground", children: "Loading JSON..." }),
426
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(LazyJsonViewer, { data: safeJsonValue(parsed), defaultExpandDepth: 0 })
427
- }
428
- ) }) }) })
429
- ] }) });
430
- }
431
- function extractResponsesOutputText(response) {
432
- if (response.output_text !== void 0 && response.output_text.length > 0) {
433
- return response.output_text;
434
- }
435
- const parts = [];
436
- for (const outputItem of response.output ?? []) {
437
- if (safeGetOwnProperty(outputItem, "type") !== "message") continue;
438
- const content = safeGetOwnProperty(outputItem, "content");
439
- if (!Array.isArray(content)) continue;
440
- for (const contentPart of content) {
441
- const type = safeGetOwnProperty(contentPart, "type");
442
- const text = safeGetOwnProperty(contentPart, "text");
443
- if ((type === "output_text" || type === "text") && typeof text === "string") {
444
- parts.push(text);
445
- }
446
- }
447
- }
448
- return parts.join("\n");
449
- }
450
- function extractResponsesFunctionCalls(response) {
451
- const calls = [];
452
- for (const outputItem of response.output ?? []) {
453
- if (safeGetOwnProperty(outputItem, "type") !== "function_call") continue;
454
- const name = safeGetOwnProperty(outputItem, "name");
455
- if (typeof name !== "string" || name.length === 0) continue;
456
- const id = safeGetOwnProperty(outputItem, "id");
457
- const callId = safeGetOwnProperty(outputItem, "call_id");
458
- const args = safeGetOwnProperty(outputItem, "arguments");
459
- const status = safeGetOwnProperty(outputItem, "status");
460
- calls.push({
461
- id: typeof id === "string" && id.length > 0 ? id : null,
462
- callId: typeof callId === "string" && callId.length > 0 ? callId : null,
463
- name,
464
- argumentsText: typeof args === "string" ? args : "",
465
- status: typeof status === "string" && status.length > 0 ? status : null
466
- });
467
- }
468
- return calls;
469
- }
470
- function ResponsesFunctionCallBlock({
471
- call,
472
- toolIndex,
473
- toolFocus
474
- }) {
475
- const [open, setOpen] = reactExports.useState(false);
476
- const parsed = open ? parseToolArguments(call.argumentsText) : {};
477
- const identity = call.callId ?? call.id;
478
- const triggerRef = useToolFocus({ toolIndex, toolFocus, setOpen });
479
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Collapsible, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-l-2 border-sky-400/25 my-1", "data-response-tool-index": toolIndex, children: [
480
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
481
- CollapsibleTrigger,
482
- {
483
- ref: triggerRef,
484
- className: "flex items-center gap-1.5 px-3 py-1 w-full text-left cursor-pointer hover:bg-sky-400/[0.04] transition-colors rounded-r-sm group focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
485
- children: [
486
- /* @__PURE__ */ jsxRuntimeExports.jsx(Terminal, { className: "size-3.5 text-sky-400/70 shrink-0" }),
487
- /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "outline", className: "text-[10px] font-mono px-1.5 py-0 h-4", children: call.name }),
488
- identity !== null && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-mono text-muted-foreground/60 truncate", children: identity }),
489
- call.status !== null && /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "secondary", className: "text-[10px] px-1.5 py-0 h-4 font-mono", children: call.status }),
490
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1" }),
491
- open ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-3 text-muted-foreground" })
492
- ]
493
- }
494
- ),
495
- /* @__PURE__ */ jsxRuntimeExports.jsx(CollapsibleContent, { children: open && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-3 pb-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollArea, { className: "max-h-[60vh]", children: parsed === null ? /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: "font-mono text-xs whitespace-pre-wrap break-words text-rose-300/90", children: call.argumentsText }) : /* @__PURE__ */ jsxRuntimeExports.jsx(
496
- reactExports.Suspense,
497
- {
498
- fallback: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-muted-foreground", children: "Loading JSON..." }),
499
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(LazyJsonViewer, { data: safeJsonValue(parsed), defaultExpandDepth: 0 })
500
- }
501
- ) }) }) })
502
- ] }) });
503
- }
504
- const OpenAIResponseView = reactExports.memo(function OpenAIResponseView2({
505
- response,
506
- toolFocus
507
- }) {
508
- const choice = response.choices[0];
509
- const message = choice?.message;
510
- const toolCalls = message?.tool_calls ?? [];
511
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-3", children: [
512
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [
513
- /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "secondary", className: "text-[10px] px-1.5 py-0 h-5 font-mono", children: response.model }),
514
- choice?.finish_reason !== null && choice?.finish_reason !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs(
515
- Badge,
516
- {
517
- variant: "outline",
518
- className: "text-[10px] px-1.5 py-0 h-5 font-mono flex items-center gap-1",
519
- children: [
520
- /* @__PURE__ */ jsxRuntimeExports.jsx(CircleStop, { className: "size-2.5" }),
521
- choice.finish_reason
522
- ]
523
- }
524
- ),
525
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex items-center gap-1 text-muted-foreground text-xs", children: [
526
- /* @__PURE__ */ jsxRuntimeExports.jsx(Zap, { className: "size-3" }),
527
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-mono tabular-nums", children: [
528
- formatTokens(response.usage.prompt_tokens ?? 0),
529
- " in /",
530
- " ",
531
- formatTokens(response.usage.completion_tokens ?? 0),
532
- " out"
533
- ] })
534
- ] })
535
- ] }),
536
- /* @__PURE__ */ jsxRuntimeExports.jsx(Separator, { className: "opacity-50" }),
537
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
538
- message?.reasoning_content !== null && message?.reasoning_content !== void 0 && message.reasoning_content.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(ThinkingBlock, { thinking: message.reasoning_content }),
539
- message?.content !== null && message?.content !== void 0 && message.content.length > 0 && (() => {
540
- const hasReasoningField = message.reasoning_content !== null && message.reasoning_content !== void 0 && message.reasoning_content.length > 0;
541
- const { thinking, remainingText } = extractThinkingFromContent(message.content);
542
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
543
- thinking !== null && !hasReasoningField && /* @__PURE__ */ jsxRuntimeExports.jsx(ThinkingBlock, { thinking }),
544
- remainingText.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(AnswerMarkdown, { text: remainingText })
545
- ] });
546
- })(),
547
- toolCalls.map((call, i) => (
548
- // biome-ignore lint/suspicious/noArrayIndexKey: tool_calls is the positionally stable list from the response
549
- /* @__PURE__ */ jsxRuntimeExports.jsx(
550
- OpenAIToolCallBlock,
551
- {
552
- call,
553
- toolIndex: i,
554
- toolFocus
555
- },
556
- call.id ?? `tc-${i}`
557
- )
558
- )),
559
- message?.function_call !== null && message?.function_call !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(
560
- OpenAIFunctionCallBlock,
561
- {
562
- name: message.function_call.name,
563
- argumentsText: message.function_call.arguments,
564
- toolIndex: toolCalls.length,
565
- toolFocus
566
- }
567
- ),
568
- (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" })
569
- ] })
570
- ] });
571
- });
572
- const OpenAIResponsesResponseView = reactExports.memo(function OpenAIResponsesResponseView2({
573
- response,
574
- toolFocus
575
- }) {
576
- const text = extractResponsesOutputText(response);
577
- const calls = extractResponsesFunctionCalls(response);
578
- const status = response.status ?? null;
579
- const inputTokens = response.usage?.input_tokens ?? 0;
580
- const outputTokens = response.usage?.output_tokens ?? 0;
581
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-3", children: [
582
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [
583
- response.model !== void 0 && response.model.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "secondary", className: "text-[10px] px-1.5 py-0 h-5 font-mono", children: response.model }),
584
- status !== null && /* @__PURE__ */ jsxRuntimeExports.jsxs(
585
- Badge,
586
- {
587
- variant: "outline",
588
- className: "text-[10px] px-1.5 py-0 h-5 font-mono flex items-center gap-1",
589
- children: [
590
- /* @__PURE__ */ jsxRuntimeExports.jsx(CircleStop, { className: "size-2.5" }),
591
- status
592
- ]
593
- }
594
- ),
595
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex items-center gap-1 text-muted-foreground text-xs", children: [
596
- /* @__PURE__ */ jsxRuntimeExports.jsx(Zap, { className: "size-3" }),
597
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-mono tabular-nums", children: [
598
- formatTokens(inputTokens),
599
- " in / ",
600
- formatTokens(outputTokens),
601
- " out"
602
- ] })
603
- ] })
604
- ] }),
605
- /* @__PURE__ */ jsxRuntimeExports.jsx(Separator, { className: "opacity-50" }),
606
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
607
- text.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(AnswerMarkdown, { text }),
608
- calls.map((call, i) => (
609
- // biome-ignore lint/suspicious/noArrayIndexKey: response output order is stable
610
- /* @__PURE__ */ jsxRuntimeExports.jsx(
611
- ResponsesFunctionCallBlock,
612
- {
613
- call,
614
- toolIndex: i,
615
- toolFocus
616
- },
617
- call.callId ?? call.id ?? `call-${i}`
618
- )
619
- )),
620
- text.length === 0 && calls.length === 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground italic", children: "Empty response content" })
621
- ] })
622
- ] });
623
- });
624
- function isRecord(value) {
625
- return typeof value === "object" && value !== null && !Array.isArray(value);
626
- }
627
- function isOpenAIResponse(response) {
628
- return isRecord(response) && response.object === "chat.completion";
629
- }
630
- function isOpenAIResponsesResponse(response) {
631
- return isRecord(response) && response.object === "response";
632
- }
633
- function isAnthropicResponse(response) {
634
- return isRecord(response) && response.type === "message" && Array.isArray(response.content);
635
- }
636
- function formatViewFor(apiFormat, response, toolFocus) {
637
- if (apiFormat === "openai" && isOpenAIResponse(response)) {
638
- return /* @__PURE__ */ jsxRuntimeExports.jsx(OpenAIResponseView, { response, toolFocus });
639
- }
640
- if (apiFormat === "openai" && isOpenAIResponsesResponse(response)) {
641
- return /* @__PURE__ */ jsxRuntimeExports.jsx(OpenAIResponsesResponseView, { response, toolFocus });
642
- }
643
- if (apiFormat === "anthropic" && isAnthropicResponse(response)) {
644
- return /* @__PURE__ */ jsxRuntimeExports.jsx(StructuredResponseViewAnthropic, { response, toolFocus });
645
- }
646
- return null;
647
- }
648
- function getStatusClasses(category) {
649
- switch (category) {
650
- case "success":
651
- return "text-emerald-400";
652
- case "client_error":
653
- return "text-amber-400";
654
- case "server_error":
655
- return "text-red-400";
656
- case "pending":
657
- return "text-muted-foreground";
658
- }
659
- }
660
- function StatusIndicator({ status }) {
661
- const category = getStatusCategory(status);
662
- const classes = getStatusClasses(category);
663
- if (status === null) {
664
- return /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-muted-foreground italic", children: "pending" });
665
- }
666
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: cn("flex items-center gap-1 text-xs font-mono font-semibold", classes), children: [
667
- category === "server_error" && /* @__PURE__ */ jsxRuntimeExports.jsx(TriangleAlert, { className: "size-3" }),
668
- status
669
- ] });
670
- }
671
- function ErrorResponseView({ text }) {
672
- 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 }) });
673
- }
674
- function MarkdownFallbackView({ text }) {
675
- return /* @__PURE__ */ jsxRuntimeExports.jsx(AnswerMarkdown, { text });
676
- }
677
- const ResponseView = reactExports.memo(function ResponseView2({
678
- responseText,
679
- responseStatus,
680
- streaming,
681
- inputTokens,
682
- outputTokens,
683
- cacheCreationInputTokens,
684
- cacheReadInputTokens,
685
- apiFormat,
686
- error,
687
- focusedToolIndex = null,
688
- toolFocusNonce = 0
689
- }) {
690
- const resolvedFormat = apiFormat ?? "unknown";
691
- const parsed = reactExports.useMemo(
692
- () => getLogFormatAdapter(resolvedFormat).analyzeResponse(responseText).parsed,
693
- [resolvedFormat, responseText]
694
- );
695
- if (responseText === null && error === void 0) {
696
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 py-3", children: [
697
- /* @__PURE__ */ jsxRuntimeExports.jsx(StatusIndicator, { status: responseStatus }),
698
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-muted-foreground italic", children: "No response" })
699
- ] });
700
- }
701
- const isHttpError = responseStatus !== null && responseStatus >= 400;
702
- if (isHttpError) {
703
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
704
- /* @__PURE__ */ jsxRuntimeExports.jsx(StatusIndicator, { status: responseStatus }),
705
- /* @__PURE__ */ jsxRuntimeExports.jsx(ErrorResponseView, { text: responseText ?? "" }),
706
- error !== void 0 && error !== null && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded border border-destructive/50 bg-destructive/10 p-3 text-xs", children: [
707
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-semibold text-destructive mb-1", children: "SSE Error" }),
708
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-muted-foreground font-mono", children: error })
709
- ] })
710
- ] });
711
- }
712
- if (error !== void 0 && error !== null) {
713
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
714
- /* @__PURE__ */ jsxRuntimeExports.jsx(StatusIndicator, { status: responseStatus }),
715
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded border border-destructive/50 bg-destructive/10 p-3 text-xs", children: [
716
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-semibold text-destructive mb-1", children: "SSE Error" }),
717
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-muted-foreground font-mono", children: error })
718
- ] }),
719
- responseText !== null && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ErrorResponseView, { text: responseText }) })
720
- ] });
721
- }
722
- if (parsed !== null) {
723
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
724
- /* @__PURE__ */ jsxRuntimeExports.jsx(StatusIndicator, { status: responseStatus }),
725
- formatViewFor(resolvedFormat, parsed, { focusedToolIndex, toolFocusNonce })
726
- ] });
727
- }
728
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
729
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
730
- /* @__PURE__ */ jsxRuntimeExports.jsx(StatusIndicator, { status: responseStatus }),
731
- streaming && (inputTokens !== null || outputTokens !== null) && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex items-center gap-1 text-muted-foreground text-xs", children: [
732
- /* @__PURE__ */ jsxRuntimeExports.jsx(Zap, { className: "size-3" }),
733
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-mono tabular-nums", children: [
734
- inputTokens !== null ? formatTokens(inputTokens) : "—",
735
- " in /",
736
- " ",
737
- outputTokens !== null ? formatTokens(outputTokens) : "—",
738
- " out"
739
- ] }),
740
- cacheCreationInputTokens !== null && cacheCreationInputTokens !== void 0 && cacheCreationInputTokens > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-mono tabular-nums text-emerald-400", children: [
741
- "KV Cache +",
742
- formatTokens(cacheCreationInputTokens)
743
- ] }),
744
- cacheReadInputTokens !== null && cacheReadInputTokens !== void 0 && cacheReadInputTokens > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-mono tabular-nums text-purple-400", children: [
745
- "KV Cache ~",
746
- formatTokens(cacheReadInputTokens)
747
- ] })
748
- ] })
749
- ] }),
750
- /* @__PURE__ */ jsxRuntimeExports.jsx(MarkdownFallbackView, { text: responseText ?? "" })
751
- ] });
752
- });
753
- export {
754
- ResponseView
755
- };