@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
@@ -0,0 +1,228 @@
1
+ import { appendBasePathToOrigin, getConfiguredBasePath } from "../lib/basePath.js";
2
+ import { normalizeBrowserRuntimeBaseUrl } from "../lib/browserRuntimeContract.js";
3
+ import { getInstancesRoot, readInstanceRecord, validateInstanceName } from "./instanceRegistry.js";
4
+ import { urlForHost } from "./networkHints.js";
5
+
6
+ const DEFAULT_PORT = 9527;
7
+ const DEFAULT_ORIGIN = `http://localhost:${String(DEFAULT_PORT)}`;
8
+ const AGENT_INSPECTOR_PUBLIC_ORIGIN_ENV = "AGENT_INSPECTOR_PUBLIC_ORIGIN";
9
+ const MCP_NAME_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u;
10
+
11
+ type OnboardTargetEnv = Readonly<Record<string, string | undefined>>;
12
+
13
+ export type OnboardTargetKind = "default" | "instance" | "base-url";
14
+
15
+ export type OnboardTarget = {
16
+ kind: OnboardTargetKind;
17
+ instanceName: string | null;
18
+ mcpName: string;
19
+ port: number;
20
+ uiUrl: string | null;
21
+ controlBaseUrl: string;
22
+ agentBaseUrl: string;
23
+ /** @deprecated Compatibility alias for controlBaseUrl. */
24
+ baseUrl: string;
25
+ apiUrl: string;
26
+ healthUrl: string;
27
+ anthropicProxyUrl: string;
28
+ openAiProxyUrl: string;
29
+ mcpUrl: string;
30
+ };
31
+
32
+ export type OnboardTargetOptions = {
33
+ instanceName: string | null;
34
+ baseUrl: string | null;
35
+ controlBaseUrl?: string | null;
36
+ agentBaseUrl?: string | null;
37
+ uiUrl?: string | null;
38
+ mcpName: string | null;
39
+ };
40
+
41
+ export type OnboardTargetResult =
42
+ | { ok: true; target: OnboardTarget }
43
+ | { ok: false; message: string };
44
+
45
+ function targetFromSurfaces(
46
+ kind: OnboardTargetKind,
47
+ instanceName: string | null,
48
+ mcpName: string,
49
+ port: number,
50
+ controlBaseUrl: string,
51
+ agentBaseUrl: string,
52
+ uiUrl: string | null,
53
+ ): OnboardTarget {
54
+ return {
55
+ kind,
56
+ instanceName,
57
+ mcpName,
58
+ port,
59
+ uiUrl,
60
+ controlBaseUrl,
61
+ agentBaseUrl,
62
+ baseUrl: controlBaseUrl,
63
+ apiUrl: `${controlBaseUrl}/api`,
64
+ healthUrl: `${controlBaseUrl}/api/health`,
65
+ anthropicProxyUrl: `${agentBaseUrl}/proxy`,
66
+ openAiProxyUrl: `${agentBaseUrl}/proxy/v1`,
67
+ mcpUrl: `${agentBaseUrl}/api/mcp`,
68
+ };
69
+ }
70
+
71
+ function validateMcpName(rawName: string): string | null {
72
+ const name = rawName.trim();
73
+ return name === rawName && MCP_NAME_PATTERN.test(name) ? name : null;
74
+ }
75
+
76
+ function normalizeExplicitBaseUrl(rawBaseUrl: string): { baseUrl: string; port: number } | null {
77
+ const baseUrl = normalizeBrowserRuntimeBaseUrl(rawBaseUrl);
78
+ if (baseUrl === null) return null;
79
+ try {
80
+ const parsed = new URL(baseUrl);
81
+ const defaultPort = parsed.protocol === "https:" ? 443 : 80;
82
+ const port = parsed.port === "" ? defaultPort : Number(parsed.port);
83
+ return Number.isInteger(port) && port >= 1 && port <= 65_535 ? { baseUrl, port } : null;
84
+ } catch {
85
+ return null;
86
+ }
87
+ }
88
+
89
+ function normalizePublicOrigin(rawOrigin: string): string | null {
90
+ if (rawOrigin.trim() !== rawOrigin) return null;
91
+ try {
92
+ const parsed = new URL(rawOrigin);
93
+ if (
94
+ (parsed.protocol !== "http:" && parsed.protocol !== "https:") ||
95
+ parsed.username.length > 0 ||
96
+ parsed.password.length > 0 ||
97
+ parsed.pathname !== "/" ||
98
+ parsed.search.length > 0 ||
99
+ parsed.hash.length > 0
100
+ ) {
101
+ return null;
102
+ }
103
+ return parsed.origin;
104
+ } catch {
105
+ return null;
106
+ }
107
+ }
108
+
109
+ export function resolveOnboardTarget(
110
+ options: OnboardTargetOptions,
111
+ env: OnboardTargetEnv = process.env,
112
+ ): OnboardTargetResult {
113
+ const hasExplicitSurface =
114
+ options.baseUrl !== null ||
115
+ (options.controlBaseUrl !== null && options.controlBaseUrl !== undefined) ||
116
+ (options.agentBaseUrl !== null && options.agentBaseUrl !== undefined) ||
117
+ options.uiUrl !== undefined;
118
+ if (options.instanceName !== null && hasExplicitSurface) {
119
+ return {
120
+ ok: false,
121
+ message:
122
+ "--instance and explicit --base-url/--control-base-url/--agent-base-url/--ui-url options are mutually exclusive",
123
+ };
124
+ }
125
+
126
+ const explicitMcpName = options.mcpName === null ? null : validateMcpName(options.mcpName);
127
+ if (options.mcpName !== null && explicitMcpName === null) {
128
+ return {
129
+ ok: false,
130
+ message:
131
+ "--mcp-name must be 1-128 letters, digits, dots, hyphens, or underscores and start with a letter or digit",
132
+ };
133
+ }
134
+
135
+ if (hasExplicitSurface) {
136
+ const sharedRaw = options.baseUrl;
137
+ const controlRaw = options.controlBaseUrl ?? sharedRaw ?? options.agentBaseUrl;
138
+ const agentRaw = options.agentBaseUrl ?? sharedRaw ?? options.controlBaseUrl;
139
+ const control =
140
+ controlRaw === null || controlRaw === undefined ? null : normalizeExplicitBaseUrl(controlRaw);
141
+ const agent =
142
+ agentRaw === null || agentRaw === undefined ? null : normalizeExplicitBaseUrl(agentRaw);
143
+ const ui =
144
+ options.uiUrl === undefined || options.uiUrl === null
145
+ ? null
146
+ : normalizeExplicitBaseUrl(options.uiUrl);
147
+ if (
148
+ control === null ||
149
+ agent === null ||
150
+ (options.uiUrl !== undefined && options.uiUrl !== null && ui === null)
151
+ ) {
152
+ return {
153
+ ok: false,
154
+ message:
155
+ "Explicit UI, control, and agent Base URLs must be credential-free HTTP(S) URLs without a query or fragment",
156
+ };
157
+ }
158
+ return {
159
+ ok: true,
160
+ target: targetFromSurfaces(
161
+ "base-url",
162
+ null,
163
+ explicitMcpName ?? "agent-inspector",
164
+ control.port,
165
+ control.baseUrl,
166
+ agent.baseUrl,
167
+ ui?.baseUrl ?? null,
168
+ ),
169
+ };
170
+ }
171
+
172
+ if (options.instanceName !== null) {
173
+ const validatedName = validateInstanceName(options.instanceName);
174
+ if (validatedName.kind === "error") {
175
+ return { ok: false, message: validatedName.error.message };
176
+ }
177
+ const record = readInstanceRecord(getInstancesRoot(env), validatedName.value);
178
+ if (record.kind === "error") {
179
+ return { ok: false, message: record.error.message };
180
+ }
181
+ if (record.value === null) {
182
+ return {
183
+ ok: false,
184
+ message: `Named instance ${validatedName.value} does not exist`,
185
+ };
186
+ }
187
+ const origin = urlForHost(record.value.publicPort, record.value.host);
188
+ const baseUrl = appendBasePathToOrigin(origin, "/", record.value.basePath);
189
+ return {
190
+ ok: true,
191
+ target: targetFromSurfaces(
192
+ "instance",
193
+ record.value.name,
194
+ explicitMcpName ?? `agent-inspector-${record.value.name}`,
195
+ record.value.publicPort,
196
+ baseUrl,
197
+ baseUrl,
198
+ record.value.uiEnabled ? baseUrl : null,
199
+ ),
200
+ };
201
+ }
202
+
203
+ const configuredPublicOrigin = env[AGENT_INSPECTOR_PUBLIC_ORIGIN_ENV];
204
+ const publicOrigin =
205
+ configuredPublicOrigin === undefined
206
+ ? DEFAULT_ORIGIN
207
+ : normalizePublicOrigin(configuredPublicOrigin);
208
+ if (publicOrigin === null) {
209
+ return {
210
+ ok: false,
211
+ message:
212
+ "AGENT_INSPECTOR_PUBLIC_ORIGIN must be an exact credential-free HTTP(S) origin without a path, query, or fragment",
213
+ };
214
+ }
215
+ const baseUrl = appendBasePathToOrigin(publicOrigin, "/", getConfiguredBasePath(env));
216
+ return {
217
+ ok: true,
218
+ target: targetFromSurfaces(
219
+ "default",
220
+ null,
221
+ explicitMcpName ?? "agent-inspector",
222
+ DEFAULT_PORT,
223
+ baseUrl,
224
+ baseUrl,
225
+ env["AGENT_INSPECTOR_BACKEND_ONLY"] === "1" ? null : baseUrl,
226
+ ),
227
+ };
228
+ }
@@ -11,6 +11,22 @@ export type CodexSkillOnboardContext = {
11
11
  readonly version: string;
12
12
  /** The default proxy port (mirrors `DEFAULT_PORT` in `src/cli.ts`). */
13
13
  readonly port: number;
14
+ /** Public backend control/agent Base URL, including the configured Base Path. */
15
+ readonly baseUrl: string;
16
+ /** Optional composed or standalone UI URL. Undefined preserves the legacy composed default. */
17
+ readonly uiUrl?: string | null;
18
+ /** REST/SSE Base URL. Falls back to baseUrl for compatibility. */
19
+ readonly controlBaseUrl?: string;
20
+ /** Proxy/MCP Base URL. Falls back to baseUrl for compatibility. */
21
+ readonly agentBaseUrl?: string;
22
+ /** MCP config key selected by onboarding. */
23
+ readonly mcpName?: string;
24
+ /** Selected onboarding target type. */
25
+ readonly targetKind?: "default" | "instance" | "base-url";
26
+ /** Normalized registry name for a named target. */
27
+ readonly instanceName?: string | null;
28
+ /** CLI arguments that reproduce the selected target. */
29
+ readonly onboardTargetArguments?: string;
14
30
  };
15
31
 
16
32
  export const REQUIRED_CODEX_PHASE_HEADINGS = [
@@ -23,7 +39,45 @@ export const REQUIRED_CODEX_PHASE_HEADINGS = [
23
39
  ] as const;
24
40
 
25
41
  export function renderCodexSkillOnboard(ctx: CodexSkillOnboardContext): string {
26
- const { version, port } = ctx;
42
+ const { version } = ctx;
43
+ const controlBaseUrl = ctx.controlBaseUrl ?? ctx.baseUrl;
44
+ const agentBaseUrl = ctx.agentBaseUrl ?? ctx.baseUrl;
45
+ const uiUrl = ctx.uiUrl === undefined ? ctx.baseUrl : ctx.uiUrl;
46
+ const mcpName = ctx.mcpName ?? "agent-inspector";
47
+ const targetKind = ctx.targetKind ?? "default";
48
+ const targetArguments = ctx.onboardTargetArguments ?? "";
49
+ const instanceName = ctx.instanceName ?? null;
50
+ const healthUrl = `${controlBaseUrl}/api/health`;
51
+ const runtimeUrl = `${controlBaseUrl}/api/runtime`;
52
+ const configUrl = `${controlBaseUrl}/api/config`;
53
+ const anthropicProxyUrl = `${agentBaseUrl}/proxy`;
54
+ const openAiProxyUrl = `${agentBaseUrl}/proxy/v1`;
55
+ const mcpUrl = `${agentBaseUrl}/api/mcp`;
56
+ const mcpTomlKey = /^[A-Za-z0-9_-]+$/u.test(mcpName) ? mcpName : JSON.stringify(mcpName);
57
+ const statusCommand = `agent-inspector onboard --status${targetArguments}`;
58
+ const refreshCommand = `agent-inspector onboard --force${targetArguments}`;
59
+ const startCommand =
60
+ targetKind === "instance" && instanceName !== null
61
+ ? `agent-inspector instance start ${instanceName}`
62
+ : targetKind === "base-url"
63
+ ? `# Explicit control target ${controlBaseUrl}: do not start a replacement local runtime.`
64
+ : "agent-inspector --mode simple --background --no-open";
65
+ const fullModeCommand =
66
+ targetKind === "instance" && instanceName !== null
67
+ ? `agent-inspector instance restart ${instanceName} --mode full`
68
+ : targetKind === "base-url"
69
+ ? "ask the target operator to enable Full capture mode"
70
+ : "agent-inspector --mode full --force-restart";
71
+ const startExplanation =
72
+ targetKind === "base-url"
73
+ ? `The selected Inspector target uses control Base URL \`${controlBaseUrl}\` and agent Base URL \`${agentBaseUrl}\`. Do not start the default local runtime as a substitute; verify the selected target and ask its operator for help if it is unavailable.`
74
+ : `Start or reuse the selected Agent Inspector backend before wiring MCP. The default command composes a UI, while backend-only named instances retain proxy, REST, health, and MCP without UI files. Prefer the installed binary so Windows users get the branded runtime in Task Manager. Use \`${fullModeCommand}\` only when the user needs raw headers, raw response, or SSE chunks.`;
75
+ const selectedUi =
76
+ uiUrl === null ? "not supplied (do not infer one from a backend URL)" : `\`${uiUrl}\``;
77
+ const providerTestUiGuidance =
78
+ uiUrl === null
79
+ ? `No UI URL was supplied. Do not open \`${controlBaseUrl}\` or \`${agentBaseUrl}\` as a page; use the MCP Provider Test tools and log/session resources, or ask the operator for a standalone UI URL.`
80
+ : `The operator supplied the explicit composed or standalone UI URL \`${uiUrl}\`. Use that URL for browser steps; do not substitute the control or agent Base URL.`;
27
81
  return `---
28
82
  name: agent-inspector-onboard
29
83
  description: Guide Codex users through connecting Agent Inspector v${version} as a local MCP server.
@@ -36,10 +90,16 @@ metadata:
36
90
 
37
91
  Use this skill when the user wants to set up Agent Inspector inside Codex, connect the Agent Inspector MCP server, inspect captured model traffic from Codex, or turn Inspector sessions into reviewable knowledge candidates.
38
92
 
39
- Agent Inspector runs a local web UI, proxy, REST API, and MCP endpoint on the same port. The default MCP endpoint is:
93
+ The selected deployment has these explicit surfaces:
94
+
95
+ - UI URL: ${selectedUi}
96
+ - Control Base URL: \`${controlBaseUrl}\`
97
+ - Agent Base URL: \`${agentBaseUrl}\`
98
+
99
+ Composed mode may use one URL for all three, but backend-only mode and separately hosted UI deployments do not require UI and backend to share a process, origin, or port. The selected MCP endpoint is:
40
100
 
41
101
  \`\`\`text
42
- http://localhost:${port}/api/mcp
102
+ ${mcpUrl}
43
103
  \`\`\`
44
104
 
45
105
  This skill is installed at \`~/.codex/skills/agent-inspector-onboard/SKILL.md\`.
@@ -47,13 +107,15 @@ Codex user-level configuration lives in \`~/.codex/config.toml\`. Codex supports
47
107
 
48
108
  Use exactly one MCP transport for the same Inspector instance:
49
109
 
50
- - Streamable HTTP MCP: configure \`url = "http://localhost:${port}/api/mcp"\`.
51
- - Stdio-only MCP clients: configure \`agent-inspector-mcp stdio --url http://localhost:${port}/api/mcp\`.
110
+ - Streamable HTTP MCP: configure \`url = "${mcpUrl}"\`.
111
+ - Stdio-only MCP clients: configure \`agent-inspector-mcp stdio --url ${mcpUrl}\`.
52
112
 
53
113
  Do not configure both transports in the same MCP client, or the client may show duplicate Inspector tools.
54
114
 
55
115
  Keep this setup local and explicit. Agent Inspector MCP tools can read captured requests and provider configuration, so only wire it into trusted local Codex environments.
56
116
 
117
+ The backend publishes token-free runtime discovery at \`${runtimeUrl}\`. Treat \`backend-only\` as healthy when REST, proxy, and MCP capabilities are present.
118
+
57
119
  Agent Inspector starts in **Simple mode** by default. Keep Simple mode for everyday capture: requests, responses, tools, timing, and token usage stay available without retaining heavier raw headers, raw response, or detailed SSE chunk artifacts. Use **Full mode** only when the user is debugging provider headers, raw response payloads, or SSE stream details.
58
120
 
59
121
  ---
@@ -64,14 +126,14 @@ Check that the package and Codex home exist without printing secrets.
64
126
 
65
127
  \`\`\`powershell
66
128
  Get-Command agent-inspector -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Source
67
- agent-inspector onboard --status
129
+ ${statusCommand}
68
130
  Test-Path (Join-Path $env:USERPROFILE ".codex")
69
131
  Test-Path (Join-Path $env:USERPROFILE ".codex\\config.toml")
70
132
  \`\`\`
71
133
 
72
134
  \`\`\`bash
73
135
  node -e "const fs=require('node:fs'),p=require('node:path');const names=process.platform==='win32'?['agent-inspector.cmd','agent-inspector.exe','agent-inspector']:['agent-inspector'];const found=(process.env.PATH||'').split(p.delimiter).some(d=>names.some(n=>fs.existsSync(p.join(d,n))));console.log(found?'agent-inspector: present':'agent-inspector: missing')"
74
- agent-inspector onboard --status
136
+ ${statusCommand}
75
137
  test -d "$HOME/.codex" && echo "codex home: present" || echo "codex home: missing"
76
138
  test -f "$HOME/.codex/config.toml" && echo "config: present" || echo "config: missing"
77
139
  \`\`\`
@@ -82,8 +144,8 @@ If \`agent-inspector\` is missing, ask the user to install it first:
82
144
  npm install -g @tonyclaw/agent-inspector
83
145
  \`\`\`
84
146
 
85
- If \`agent-inspector onboard --status\` reports \`outdated\` or \`missing\`, ask the user to run
86
- \`agent-inspector onboard --force\` and restart this skill before continuing.
147
+ If \`${statusCommand}\` reports \`outdated\` or \`missing\`, ask the user to run
148
+ \`${refreshCommand}\` and restart this skill before continuing.
87
149
 
88
150
  Do not read \`~/.codex/auth.json\`, token files, or unrelated Codex state files.
89
151
 
@@ -91,33 +153,35 @@ Do not read \`~/.codex/auth.json\`, token files, or unrelated Codex state files.
91
153
 
92
154
  ## Phase 1: Start Agent Inspector
93
155
 
94
- Start or reuse Agent Inspector before wiring MCP. Prefer the installed binary so Windows users get the branded runtime in Task Manager. Start onboarding in Simple mode; if the user needs raw headers, raw response, or SSE chunks later, restart with \`agent-inspector --mode full\`.
156
+ ${startExplanation}
95
157
 
96
158
  \`\`\`powershell
97
- agent-inspector --mode simple --background --no-open
98
- Invoke-RestMethod -Uri "http://localhost:${port}/api/health" -TimeoutSec 3
99
- Invoke-RestMethod -Uri "http://localhost:${port}/api/config" -TimeoutSec 3 | Select-Object captureMode
159
+ ${startCommand}
160
+ Invoke-RestMethod -Uri "${healthUrl}" -TimeoutSec 3
161
+ Invoke-RestMethod -Uri "${runtimeUrl}" -TimeoutSec 3 | Select-Object deploymentMode, capabilities
162
+ Invoke-RestMethod -Uri "${configUrl}" -TimeoutSec 3 | Select-Object captureMode
100
163
  \`\`\`
101
164
 
102
165
  \`\`\`bash
103
- agent-inspector --mode simple --background --no-open
104
- curl -fsS "http://localhost:${port}/api/health"
105
- curl -fsS "http://localhost:${port}/api/config" | grep -o '"captureMode":"[^"]*"'
166
+ ${startCommand}
167
+ curl -fsS "${healthUrl}"
168
+ curl -fsS "${runtimeUrl}"
169
+ curl -fsS "${configUrl}" | grep -o '"captureMode":"[^"]*"'
106
170
  \`\`\`
107
171
 
108
- If the health check fails, show only the relevant error and ask whether to diagnose startup before editing Codex config. If the active capture mode is not \`simple\`, explain that an existing process is already running and offer to restart with \`agent-inspector --mode simple --force-restart\`.
172
+ If the health check fails, show only the relevant error and ask whether to diagnose the selected target before editing Codex config. If deeper capture is required, offer \`${fullModeCommand}\`.
109
173
 
110
174
  ---
111
175
 
112
176
  ## Phase 2: Wire Codex MCP
113
177
 
114
- Add an \`agent-inspector\` MCP server to \`~/.codex/config.toml\`. Preserve the user's existing config and merge the table instead of replacing the file.
178
+ Add the \`${mcpName}\` MCP server to \`~/.codex/config.toml\`. Preserve the user's existing config and merge the table instead of replacing the file.
115
179
 
116
180
  Recommended user-level config for Codex builds that support Streamable HTTP MCP:
117
181
 
118
182
  \`\`\`toml
119
- [mcp_servers.agent-inspector]
120
- url = "http://localhost:${port}/api/mcp"
183
+ [mcp_servers.${mcpTomlKey}]
184
+ url = "${mcpUrl}"
121
185
  startup_timeout_sec = 30
122
186
  tool_timeout_sec = 60
123
187
  \`\`\`
@@ -125,9 +189,9 @@ tool_timeout_sec = 60
125
189
  Fallback config for a stdio-only MCP client:
126
190
 
127
191
  \`\`\`toml
128
- [mcp_servers.agent-inspector]
192
+ [mcp_servers.${mcpTomlKey}]
129
193
  command = "agent-inspector-mcp"
130
- args = ["stdio", "--url", "http://localhost:${port}/api/mcp"]
194
+ args = ["stdio", "--url", "${mcpUrl}"]
131
195
  \`\`\`
132
196
 
133
197
  The stdio command is only a bridge to the same HTTP MCP endpoint. It does not start a second Inspector server.
@@ -135,8 +199,8 @@ The stdio command is only a bridge to the same HTTP MCP endpoint. It does not st
135
199
  If the user's Codex environment is managed by an admin allowlist, they may also need a matching identity rule in the managed requirements layer:
136
200
 
137
201
  \`\`\`toml
138
- [mcp_servers.agent-inspector.identity]
139
- url = "http://localhost:${port}/api/mcp"
202
+ [mcp_servers.${mcpTomlKey}.identity]
203
+ url = "${mcpUrl}"
140
204
  \`\`\`
141
205
 
142
206
  When editing:
@@ -145,7 +209,7 @@ When editing:
145
209
  - Keep existing \`mcp_servers.*\`, \`projects.*\`, profiles, sandbox, approval, and model settings intact.
146
210
  - Remove any duplicate Inspector MCP entry that points to the same \`/api/mcp\` endpoint or runs the same \`agent-inspector-mcp stdio\` bridge under another name.
147
211
  - Do not write provider API keys into Codex config.
148
- - Do not expose Agent Inspector MCP beyond localhost.
212
+ - Do not expose a raw Inspector listener to untrusted networks. For remote use, require the operator's authenticated same-origin gateway and keep control credentials in environment variables rather than generated config.
149
213
 
150
214
  ---
151
215
 
@@ -156,7 +220,7 @@ Tell the user that Codex loads MCP servers at session startup. After saving \`co
156
220
  Before restart, verify the HTTP endpoint itself:
157
221
 
158
222
  \`\`\`bash
159
- curl -sS -X POST "http://localhost:${port}/api/mcp" \\
223
+ curl -sS -X POST "${mcpUrl}" \\
160
224
  -H "Content-Type: application/json" \\
161
225
  -H "Accept: application/json, text/event-stream" \\
162
226
  -d '{
@@ -203,27 +267,41 @@ Provider mutation tools expose and modify local provider configuration. Ask for
203
267
 
204
268
  ## Phase 5: Capture and memory review
205
269
 
206
- To capture Codex traffic through Agent Inspector, route a model client through:
270
+ To capture traffic through Agent Inspector, use the protocol-correct base URL:
207
271
 
208
272
  \`\`\`text
209
- http://localhost:${port}/proxy
273
+ Anthropic: ${anthropicProxyUrl}
274
+ OpenAI Responses / Codex: ${openAiProxyUrl}
210
275
  \`\`\`
211
276
 
212
- For Anthropic-compatible tools, set \`ANTHROPIC_BASE_URL=http://localhost:${port}/proxy\`. For OpenAI-compatible tools, set \`OPENAI_BASE_URL=http://localhost:${port}/proxy\`.
277
+ For Anthropic-compatible tools, set \`ANTHROPIC_BASE_URL=${anthropicProxyUrl}\`. For OpenAI-compatible tools and Codex Responses providers, set \`OPENAI_BASE_URL=${openAiProxyUrl}\`.
278
+
279
+ Example Codex Responses provider snippet:
280
+
281
+ \`\`\`toml
282
+ [model_providers.agent-inspector]
283
+ name = "Agent Inspector"
284
+ base_url = "${openAiProxyUrl}"
285
+ wire_api = "responses"
286
+ \`\`\`
213
287
 
214
288
  If Codex or another AI tool runs in a different container, VM, WSL distro, or host than Agent
215
289
  Inspector, \`localhost\` points at the tool's own environment. Replace \`localhost\` with an Inspector
216
290
  address reachable from that environment, then verify the network/firewall path before debugging
217
291
  provider credentials.
218
292
 
219
- For a Provider Test memory probe, run a provider test in the Agent Inspector UI:
293
+ For a Provider Test memory probe, first read \`${runtimeUrl}\`. ${providerTestUiGuidance}
220
294
 
221
- 1. Open \`http://localhost:${port}\`.
295
+ When an explicit UI URL is available:
296
+
297
+ 1. Open the supplied UI URL.
222
298
  2. Go to Settings -> Providers.
223
299
  3. Add or edit a Provider.
224
300
  4. Run Test.
225
301
  5. Check the \`provider-test\` session.
226
302
 
303
+ If discovery reports \`backend-only\`, do not fail onboarding. A separately hosted UI may still exist only when its URL was explicitly supplied; otherwise use the MCP Provider Test tools and log/session resources. Proxy, REST, health, and MCP remain fully usable without UI files.
304
+
227
305
  Then ask Codex:
228
306
 
229
307
  \`\`\`text