@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,285 @@
1
+ import { normalizePublicBasePath } from "../lib/basePath";
2
+ import { isValidBindHost } from "./networkHints";
3
+
4
+ export type InstanceCaptureMode = "simple" | "full";
5
+
6
+ export type InstanceStartOverrides = {
7
+ port: number | null;
8
+ basePath: string | null;
9
+ host: string | null;
10
+ captureMode: InstanceCaptureMode | null;
11
+ dataDir: string | null;
12
+ uiEnabled: boolean | null;
13
+ open: boolean;
14
+ };
15
+
16
+ export type InstanceAction =
17
+ | { kind: "start"; name: string; overrides: InstanceStartOverrides; json: boolean }
18
+ | { kind: "list"; json: boolean }
19
+ | { kind: "status"; name: string; json: boolean }
20
+ | { kind: "connect"; name: string; json: boolean }
21
+ | { kind: "stop"; name: string; json: boolean }
22
+ | { kind: "restart"; name: string; overrides: InstanceStartOverrides; json: boolean };
23
+
24
+ export type InstanceArgsResult =
25
+ | { kind: "help" }
26
+ | { kind: "error"; message: string }
27
+ | { kind: "ok"; action: InstanceAction };
28
+
29
+ function parsePort(value: string | undefined): number | null {
30
+ if (value === undefined || value.trim().length === 0) return null;
31
+ const parsed = Number(value);
32
+ return Number.isInteger(parsed) && parsed >= 1 && parsed <= 65_535 ? parsed : null;
33
+ }
34
+
35
+ function parseMode(value: string | undefined): InstanceCaptureMode | null {
36
+ return value === "simple" || value === "full" ? value : null;
37
+ }
38
+
39
+ function parseBasePath(value: string | undefined): string | null {
40
+ if (value === undefined) return null;
41
+ return normalizePublicBasePath(value);
42
+ }
43
+
44
+ function optionWithEquals(arg: string): { name: string; value: string } | null {
45
+ if (!arg.startsWith("--") || !arg.includes("=")) return null;
46
+ const separator = arg.indexOf("=");
47
+ return { name: arg.slice(0, separator), value: arg.slice(separator + 1) };
48
+ }
49
+
50
+ function emptyOverrides(): InstanceStartOverrides {
51
+ return {
52
+ port: null,
53
+ basePath: null,
54
+ host: null,
55
+ captureMode: null,
56
+ dataDir: null,
57
+ uiEnabled: null,
58
+ open: false,
59
+ };
60
+ }
61
+
62
+ type MutableOptions = {
63
+ json: boolean;
64
+ help: boolean;
65
+ overrides: InstanceStartOverrides;
66
+ positional: string[];
67
+ };
68
+
69
+ function setValueOption(
70
+ options: MutableOptions,
71
+ name: string,
72
+ value: string | undefined,
73
+ ): string | null {
74
+ switch (name) {
75
+ case "--port":
76
+ case "-p": {
77
+ const port = parsePort(value);
78
+ if (port === null) return "instance: --port must be an integer from 1 to 65535";
79
+ options.overrides.port = port;
80
+ return null;
81
+ }
82
+ case "--base-path": {
83
+ const basePath = parseBasePath(value);
84
+ if (basePath === null) {
85
+ return "instance: --base-path must be an absolute URL path without a query or hash";
86
+ }
87
+ options.overrides.basePath = basePath;
88
+ return null;
89
+ }
90
+ case "--host":
91
+ case "-H": {
92
+ const host = value?.trim() ?? "";
93
+ if (!isValidBindHost(host)) {
94
+ return "instance: --host requires a hostname or IP address without a protocol or path";
95
+ }
96
+ options.overrides.host = host;
97
+ return null;
98
+ }
99
+ case "--mode":
100
+ case "--capture-mode": {
101
+ const captureMode = parseMode(value);
102
+ if (captureMode === null) return "instance: --mode must be simple or full";
103
+ options.overrides.captureMode = captureMode;
104
+ return null;
105
+ }
106
+ case "--data-dir": {
107
+ const dataDir = value?.trim() ?? "";
108
+ if (dataDir.length === 0) return "instance: --data-dir requires a directory path";
109
+ options.overrides.dataDir = dataDir;
110
+ return null;
111
+ }
112
+ default:
113
+ return `instance: unknown option ${name}`;
114
+ }
115
+ }
116
+
117
+ export function parseInstanceArgs(argv: readonly string[]): InstanceArgsResult {
118
+ const options: MutableOptions = {
119
+ json: false,
120
+ help: false,
121
+ overrides: emptyOverrides(),
122
+ positional: [],
123
+ };
124
+
125
+ for (let index = 0; index < argv.length; index++) {
126
+ const arg = argv[index];
127
+ if (arg === undefined) continue;
128
+ const equalsOption = optionWithEquals(arg);
129
+ if (equalsOption !== null) {
130
+ const error = setValueOption(options, equalsOption.name, equalsOption.value);
131
+ if (error !== null) return { kind: "error", message: error };
132
+ continue;
133
+ }
134
+ switch (arg) {
135
+ case "--help":
136
+ case "-h":
137
+ options.help = true;
138
+ break;
139
+ case "--json":
140
+ options.json = true;
141
+ break;
142
+ case "--open":
143
+ options.overrides.open = true;
144
+ break;
145
+ case "--backend-only":
146
+ if (options.overrides.uiEnabled === true) {
147
+ return {
148
+ kind: "error",
149
+ message: "instance: --backend-only and --with-ui are mutually exclusive",
150
+ };
151
+ }
152
+ options.overrides.uiEnabled = false;
153
+ break;
154
+ case "--with-ui":
155
+ if (options.overrides.uiEnabled === false) {
156
+ return {
157
+ kind: "error",
158
+ message: "instance: --backend-only and --with-ui are mutually exclusive",
159
+ };
160
+ }
161
+ options.overrides.uiEnabled = true;
162
+ break;
163
+ case "--port":
164
+ case "-p":
165
+ case "--base-path":
166
+ case "--host":
167
+ case "-H":
168
+ case "--mode":
169
+ case "--capture-mode":
170
+ case "--data-dir": {
171
+ const error = setValueOption(options, arg, argv[index + 1]);
172
+ if (error !== null) return { kind: "error", message: error };
173
+ index++;
174
+ break;
175
+ }
176
+ default:
177
+ if (arg.startsWith("-")) {
178
+ return { kind: "error", message: `instance: unknown option ${arg}` };
179
+ }
180
+ options.positional.push(arg);
181
+ }
182
+ }
183
+
184
+ if (options.help) return { kind: "help" };
185
+ const command = options.positional[0];
186
+ if (command === "list") {
187
+ if (options.positional.length !== 1) {
188
+ return { kind: "error", message: "instance: list does not accept an instance name" };
189
+ }
190
+ if (
191
+ options.overrides.port !== null ||
192
+ options.overrides.basePath !== null ||
193
+ options.overrides.host !== null ||
194
+ options.overrides.captureMode !== null ||
195
+ options.overrides.dataDir !== null ||
196
+ options.overrides.uiEnabled !== null ||
197
+ options.overrides.open
198
+ ) {
199
+ return { kind: "error", message: "instance: list accepts only --json" };
200
+ }
201
+ return { kind: "ok", action: { kind: "list", json: options.json } };
202
+ }
203
+ if (
204
+ command === "status" ||
205
+ command === "stop" ||
206
+ command === "connect" ||
207
+ command === "connection"
208
+ ) {
209
+ const name = options.positional[1];
210
+ if (name === undefined || options.positional.length !== 2) {
211
+ return { kind: "error", message: `instance: ${command} requires exactly one instance name` };
212
+ }
213
+ if (
214
+ options.overrides.port !== null ||
215
+ options.overrides.basePath !== null ||
216
+ options.overrides.host !== null ||
217
+ options.overrides.captureMode !== null ||
218
+ options.overrides.dataDir !== null ||
219
+ options.overrides.uiEnabled !== null ||
220
+ options.overrides.open
221
+ ) {
222
+ return {
223
+ kind: "error",
224
+ message: `instance: ${command} accepts only an instance name and --json`,
225
+ };
226
+ }
227
+ return {
228
+ kind: "ok",
229
+ action: { kind: command === "connection" ? "connect" : command, name, json: options.json },
230
+ };
231
+ }
232
+ if (command === "start" || command === "restart") {
233
+ const name = options.positional[1];
234
+ if (name === undefined || options.positional.length !== 2) {
235
+ return { kind: "error", message: `instance: ${command} requires exactly one instance name` };
236
+ }
237
+ if (options.overrides.uiEnabled === false && options.overrides.open) {
238
+ return { kind: "error", message: "instance: --open cannot be used with --backend-only" };
239
+ }
240
+ return {
241
+ kind: "ok",
242
+ action: { kind: command, name, overrides: options.overrides, json: options.json },
243
+ };
244
+ }
245
+ if (command === undefined) {
246
+ return {
247
+ kind: "error",
248
+ message: "instance: expected start, list, status, connect, stop, or restart",
249
+ };
250
+ }
251
+ return { kind: "error", message: `instance: unknown command ${command}` };
252
+ }
253
+
254
+ export function instanceHelp(): string {
255
+ return `agent-inspector instance - manage isolated named runtimes
256
+
257
+ Usage:
258
+ agent-inspector instance start <name> [options]
259
+ agent-inspector instance list [--json]
260
+ agent-inspector instance status <name> [--json]
261
+ agent-inspector instance connect <name> [--json]
262
+ agent-inspector instance stop <name> [--json]
263
+ agent-inspector instance restart <name> [options]
264
+
265
+ Start/restart options:
266
+ --port, -p <port> Public ingress port (auto-allocated on first start)
267
+ --base-path <path> Public Base Path (default: /inspector; use / for root)
268
+ --host, -H <host> Bind host (default: 127.0.0.1)
269
+ --mode <simple|full> Capture mode (default: simple)
270
+ --data-dir <path> Isolated data/config directory
271
+ --backend-only Persist a headless backend without serving the UI
272
+ --with-ui Persist composed UI serving (the default for new instances)
273
+ --open Open the UI after readiness
274
+ --json Emit machine-readable output
275
+ --help, -h Show this help
276
+
277
+ Named instances run as hidden background supervisors and persist their configuration. Each one
278
+ uses separate Provider, config, capture, and index storage. The existing \`agent-inspector\` command
279
+ remains the unmanaged default instance. Base Path aliases mount another URL on one runtime; named
280
+ instances start separate runtimes.
281
+
282
+ The connect command prints protocol-correct Anthropic, OpenAI /v1, MCP, health, and UI settings
283
+ without exposing lifecycle or Provider credentials. \`connection\` is accepted as an alias.
284
+ `;
285
+ }
@@ -0,0 +1,181 @@
1
+ import {
2
+ MANAGED_INSTANCE_CONTROL_PATH,
3
+ MANAGED_INSTANCE_SHUTDOWN_PATH,
4
+ MANAGED_INSTANCE_TOKEN_HEADER,
5
+ } from "../lib/managedInstance";
6
+
7
+ const DEFAULT_CONTROL_TIMEOUT_MS = 2_000;
8
+
9
+ export type InstanceControlFetch = (input: string, init?: RequestInit) => Promise<Response>;
10
+
11
+ export type ExpectedInstanceControlIdentity = {
12
+ instanceId: string;
13
+ launchId: string;
14
+ controlToken: string;
15
+ host: string;
16
+ publicPort: number;
17
+ };
18
+
19
+ export type InstanceControlIdentity = {
20
+ schemaVersion: 1;
21
+ instanceId: string;
22
+ launchId: string;
23
+ supervisorPid: number;
24
+ startedAt: string;
25
+ publicPort: number;
26
+ upstreamPort: number;
27
+ };
28
+
29
+ export type InstanceControlProbe =
30
+ | { kind: "running"; identity: InstanceControlIdentity }
31
+ | { kind: "unreachable"; timedOut: boolean }
32
+ | { kind: "identity-mismatch" }
33
+ | { kind: "invalid-response" };
34
+
35
+ export type InstanceShutdownResult =
36
+ | { kind: "accepted" }
37
+ | { kind: "unreachable"; timedOut: boolean }
38
+ | { kind: "identity-mismatch" }
39
+ | { kind: "rejected" };
40
+
41
+ function isRecord(value: unknown): value is Record<string, unknown> {
42
+ return typeof value === "object" && value !== null && !Array.isArray(value);
43
+ }
44
+
45
+ function parseIdentity(value: unknown): InstanceControlIdentity | null {
46
+ if (!isRecord(value)) return null;
47
+ const schemaVersion = value["schemaVersion"];
48
+ const instanceId = value["instanceId"];
49
+ const launchId = value["launchId"];
50
+ const supervisorPid = value["supervisorPid"];
51
+ const startedAt = value["startedAt"];
52
+ const publicPort = value["publicPort"];
53
+ const upstreamPort = value["upstreamPort"];
54
+ if (
55
+ schemaVersion !== 1 ||
56
+ typeof instanceId !== "string" ||
57
+ instanceId.length === 0 ||
58
+ typeof launchId !== "string" ||
59
+ launchId.length === 0 ||
60
+ typeof supervisorPid !== "number" ||
61
+ !Number.isInteger(supervisorPid) ||
62
+ supervisorPid < 1 ||
63
+ typeof startedAt !== "string" ||
64
+ !Number.isFinite(Date.parse(startedAt)) ||
65
+ typeof publicPort !== "number" ||
66
+ !Number.isInteger(publicPort) ||
67
+ publicPort < 1 ||
68
+ publicPort > 65_535 ||
69
+ typeof upstreamPort !== "number" ||
70
+ !Number.isInteger(upstreamPort) ||
71
+ upstreamPort < 1 ||
72
+ upstreamPort > 65_535
73
+ ) {
74
+ return null;
75
+ }
76
+ return {
77
+ schemaVersion: 1,
78
+ instanceId,
79
+ launchId,
80
+ supervisorPid,
81
+ startedAt,
82
+ publicPort,
83
+ upstreamPort,
84
+ };
85
+ }
86
+
87
+ function hostForUrl(host: string): string {
88
+ if (host.startsWith("[") && host.endsWith("]")) return host;
89
+ return host.includes(":") ? `[${host}]` : host;
90
+ }
91
+
92
+ function endpoint(identity: ExpectedInstanceControlIdentity, path: string): string {
93
+ return `http://${hostForUrl(identity.host)}:${String(identity.publicPort)}${path}`;
94
+ }
95
+
96
+ function requestInit(
97
+ identity: ExpectedInstanceControlIdentity,
98
+ controller: AbortController,
99
+ method: "GET" | "POST",
100
+ ): RequestInit {
101
+ return {
102
+ method,
103
+ headers: {
104
+ accept: "application/json",
105
+ [MANAGED_INSTANCE_TOKEN_HEADER]: identity.controlToken,
106
+ },
107
+ cache: "no-store",
108
+ signal: controller.signal,
109
+ };
110
+ }
111
+
112
+ async function responseJson(response: Response): Promise<unknown | null> {
113
+ try {
114
+ const value: unknown = await response.json();
115
+ return value;
116
+ } catch {
117
+ return null;
118
+ }
119
+ }
120
+
121
+ export async function probeInstanceControl(
122
+ expected: ExpectedInstanceControlIdentity,
123
+ fetchImpl: InstanceControlFetch = fetch,
124
+ timeoutMs = DEFAULT_CONTROL_TIMEOUT_MS,
125
+ ): Promise<InstanceControlProbe> {
126
+ const controller = new AbortController();
127
+ const timeout = setTimeout(() => controller.abort(), timeoutMs);
128
+ try {
129
+ const response = await fetchImpl(
130
+ endpoint(expected, MANAGED_INSTANCE_CONTROL_PATH),
131
+ requestInit(expected, controller, "GET"),
132
+ );
133
+ if (!response.ok) return { kind: "identity-mismatch" };
134
+ const identity = parseIdentity(await responseJson(response));
135
+ if (identity === null) return { kind: "invalid-response" };
136
+ if (
137
+ identity.instanceId !== expected.instanceId ||
138
+ identity.launchId !== expected.launchId ||
139
+ identity.publicPort !== expected.publicPort
140
+ ) {
141
+ return { kind: "identity-mismatch" };
142
+ }
143
+ return { kind: "running", identity };
144
+ } catch (error) {
145
+ return {
146
+ kind: "unreachable",
147
+ timedOut:
148
+ controller.signal.aborted || (error instanceof Error && error.name === "AbortError"),
149
+ };
150
+ } finally {
151
+ clearTimeout(timeout);
152
+ }
153
+ }
154
+
155
+ export async function requestInstanceShutdown(
156
+ expected: ExpectedInstanceControlIdentity,
157
+ fetchImpl: InstanceControlFetch = fetch,
158
+ timeoutMs = DEFAULT_CONTROL_TIMEOUT_MS,
159
+ ): Promise<InstanceShutdownResult> {
160
+ const controller = new AbortController();
161
+ const timeout = setTimeout(() => controller.abort(), timeoutMs);
162
+ try {
163
+ const response = await fetchImpl(
164
+ endpoint(expected, MANAGED_INSTANCE_SHUTDOWN_PATH),
165
+ requestInit(expected, controller, "POST"),
166
+ );
167
+ if (response.status === 202) return { kind: "accepted" };
168
+ if (response.status === 401 || response.status === 403 || response.status === 404) {
169
+ return { kind: "identity-mismatch" };
170
+ }
171
+ return { kind: "rejected" };
172
+ } catch (error) {
173
+ return {
174
+ kind: "unreachable",
175
+ timedOut:
176
+ controller.signal.aborted || (error instanceof Error && error.name === "AbortError"),
177
+ };
178
+ } finally {
179
+ clearTimeout(timeout);
180
+ }
181
+ }