@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.
- package/.output/{nitro.json → backend/nitro.json} +3 -3
- package/.output/backend-public/assets/index-D4LX-sw-.js +11 -0
- package/.output/cli.js +22707 -17099
- package/.output/server/_libs/extend.mjs +4 -8
- package/.output/server/_libs/jszip.mjs +9 -35
- package/.output/server/_libs/modelcontextprotocol__core.mjs +25 -25
- package/.output/server/_libs/modelcontextprotocol__server.mjs +2 -2
- package/.output/server/_libs/react-dom.mjs +2 -3
- package/.output/server/_libs/react.mjs +1 -27
- package/.output/server/_libs/tanstack__react-router.mjs +1 -329
- package/.output/server/_libs/tanstack__router-core.mjs +42 -100
- package/.output/server/_libs/use-sync-external-store.mjs +1 -64
- package/.output/server/_libs/ws.mjs +1 -1
- package/.output/server/_libs/zod.mjs +6 -6
- package/.output/server/_ssr/index.mjs +5 -4
- package/.output/server/_ssr/publicBasePathContext-IH2ilOfu.mjs +176 -0
- package/.output/server/_ssr/{router-DWcUFPR3.mjs → router-D18yUq36.mjs} +7877 -5597
- package/.output/server/_ssr/start-COQu_AgD.mjs +57 -0
- package/.output/server/_tanstack-start-manifest_v-DnbdNeun.mjs +4 -0
- package/.output/server/index.mjs +5 -145
- package/.output/{public/assets/CompareDrawer-DQHjxFO6.js → ui/assets/CompareDrawer-DAUuIJ6G.js} +1 -1
- package/.output/{public/assets/InspectorPet-D1A4505B.js → ui/assets/InspectorPet-BRBVjOWI.js} +1 -1
- package/.output/ui/assets/ProxyViewerContainer-D7Sq0ctc.js +59 -0
- package/.output/{public/assets/ReplayDialog-C5vmbecv.js → ui/assets/ReplayDialog-nDLsjOhs.js} +1 -1
- package/.output/{public/assets/RequestAnatomy-CPGNB8lk.js → ui/assets/RequestAnatomy-zd4BDgL0.js} +1 -1
- package/.output/ui/assets/ResponseView-AdIXGcSn.js +2 -0
- package/.output/ui/assets/StreamingChunkSequence-CesTz8He.js +1 -0
- package/.output/{public/assets/_sessionId-CDhRgzf6.js → ui/assets/_sessionId-BAfzrhSU.js} +1 -1
- package/.output/{public/assets/_sessionId-mw3aA8Bp.js → ui/assets/_sessionId-QnBomgPD.js} +1 -1
- package/.output/ui/assets/favicon-DYEkHSNl.svg +21 -0
- package/.output/{public/assets/index-B2eoeT-Z.js → ui/assets/index-BcsdxBAd.js} +1 -1
- package/.output/ui/assets/index-BvXp42al.css +1 -0
- package/.output/{public/assets/index-CX7_rf7o.js → ui/assets/index-D0rtCN9V.js} +1 -1
- package/.output/ui/assets/index-DHpwr08Z.js +73 -0
- package/.output/{public/assets/index-BfRhTvOd.js → ui/assets/index-dNuk2dsU.js} +1 -1
- package/.output/ui/assets/json-viewer-BvFHglMb.js +1 -0
- package/.output/{public/assets/jszip.min-C9rCFoU3.js → ui/assets/jszip.min-B5Z7gNZB.js} +1 -1
- package/.output/ui/index.html +229 -0
- package/.output/ui/runtime-config.js +2 -0
- package/.output/workers/logFinalizer.worker.js +983 -414
- package/.output/workers/sessionWorkerEntry.js +983 -414
- package/README.md +363 -35
- package/docs/instance-control.openapi.yaml +361 -0
- package/package.json +28 -5
- package/scripts/generate-theme-scales.mjs +3 -3
- package/src/{router.tsx → backend/router.tsx} +3 -15
- package/src/backend/routes/$.ts +26 -0
- package/src/backend/routes/__root.ts +4 -0
- package/src/backend/routes/api/-instances.ts +109 -0
- package/src/{routes → backend/routes}/api/alerts.summary.ts +3 -3
- package/src/{routes → backend/routes}/api/alerts.ts +4 -4
- package/src/{routes → backend/routes}/api/config.paths.ts +1 -1
- package/src/{routes → backend/routes}/api/config.ts +11 -2
- package/src/{routes → backend/routes}/api/ecosystem.packages.$packageId.help.ts +1 -1
- package/src/{routes → backend/routes}/api/ecosystem.packages.$packageId.install.ts +1 -1
- package/src/{routes → backend/routes}/api/ecosystem.packages.$packageId.runner-presets.ts +1 -1
- package/src/{routes → backend/routes}/api/ecosystem.packages.$packageId.upgrade.ts +1 -1
- package/src/{routes → backend/routes}/api/ecosystem.packages.ts +5 -1
- package/src/{routes → backend/routes}/api/ecosystem.recipes.$recipeId.run.ts +1 -1
- package/src/{routes → backend/routes}/api/ecosystem.tasks.$taskId.ts +1 -1
- package/src/{routes → backend/routes}/api/ecosystem.tasks.ts +1 -1
- package/src/{routes → backend/routes}/api/groups.$groupId.evidence.ts +2 -2
- package/src/{routes → backend/routes}/api/groups.$groupId.sessions.ts +2 -2
- package/src/{routes → backend/routes}/api/groups.$groupId.ts +2 -2
- package/src/{routes → backend/routes}/api/groups.ts +2 -2
- package/src/{routes → backend/routes}/api/health.ts +3 -3
- package/src/backend/routes/api/instances.$name.connection.ts +12 -0
- package/src/backend/routes/api/instances.$name.restart.ts +23 -0
- package/src/backend/routes/api/instances.$name.start.ts +18 -0
- package/src/backend/routes/api/instances.$name.stop.ts +23 -0
- package/src/backend/routes/api/instances.$name.ts +12 -0
- package/src/backend/routes/api/instances.ts +16 -0
- package/src/{routes → backend/routes}/api/knowledge.candidates.$candidateId.promote.ts +2 -2
- package/src/{routes → backend/routes}/api/knowledge.candidates.$candidateId.ts +2 -2
- package/src/{routes → backend/routes}/api/knowledge.candidates.ts +1 -1
- package/src/{routes → backend/routes}/api/knowledge.project-context.ts +2 -2
- package/src/{routes → backend/routes}/api/knowledge.search.ts +2 -2
- package/src/{routes → backend/routes}/api/knowledge.sessions.$sessionId.candidates.ts +3 -3
- package/src/{routes → backend/routes}/api/logs.$id.body.ts +6 -6
- package/src/{routes → backend/routes}/api/logs.$id.chunks.ts +5 -4
- package/src/{routes → backend/routes}/api/logs.$id.replay.ts +12 -11
- package/src/{routes → backend/routes}/api/logs.$id.ts +4 -3
- package/src/{routes → backend/routes}/api/logs.import.ts +3 -3
- package/src/{routes → backend/routes}/api/logs.stream.ts +11 -7
- package/src/{routes → backend/routes}/api/logs.ts +17 -9
- package/src/{routes → backend/routes}/api/mcp.ts +1 -1
- package/src/{routes → backend/routes}/api/models.ts +1 -1
- package/src/{routes → backend/routes}/api/pi-agent.ts +2 -2
- package/src/{routes → backend/routes}/api/providers.$providerId.model-metadata.ts +5 -5
- package/src/{routes → backend/routes}/api/providers.$providerId.test.log.ts +7 -7
- package/src/{routes → backend/routes}/api/providers.$providerId.ts +4 -4
- package/src/{routes → backend/routes}/api/providers.export.ts +1 -1
- package/src/{routes → backend/routes}/api/providers.import.ts +3 -3
- package/src/{routes → backend/routes}/api/providers.scan.ts +2 -2
- package/src/{routes → backend/routes}/api/providers.ts +9 -4
- package/src/{routes → backend/routes}/api/runs.$runId.evidence.ts +2 -2
- package/src/{routes → backend/routes}/api/runs.$runId.ts +2 -2
- package/src/{routes → backend/routes}/api/runs.ts +4 -4
- package/src/backend/routes/api/runtime.ts +46 -0
- package/src/{routes → backend/routes}/api/sessions.ts +3 -3
- package/src/{routes → backend/routes}/proxy/$.ts +1 -1
- package/src/{routes → backend/routes}/readyz.ts +1 -1
- package/src/backend/start.ts +10 -0
- package/src/cli/alias.ts +431 -0
- package/src/cli/doctor.ts +32 -9
- package/src/cli/instance.ts +1050 -0
- package/src/cli/instanceArgs.ts +285 -0
- package/src/cli/instanceControl.ts +181 -0
- package/src/cli/instanceModel.ts +267 -0
- package/src/cli/instanceRegistry.ts +731 -0
- package/src/cli/networkHints.ts +27 -14
- package/src/cli/onboard.ts +190 -35
- package/src/cli/onboardTarget.ts +228 -0
- package/src/cli/templates/codex-skill-onboard.ts +109 -31
- package/src/cli/templates/skill-onboard.ts +140 -70
- package/src/cli.ts +338 -77
- package/src/components/ProxyViewer.tsx +20 -10
- package/src/components/ProxyViewerContainer.tsx +12 -11
- package/src/components/pi-agent/PiAgentPanel.tsx +2 -2
- package/src/components/providers/ProviderCard.tsx +1 -1
- package/src/components/providers/ProviderTestResultsView.tsx +1 -1
- package/src/components/providers/SettingsDialog.tsx +160 -140
- package/src/components/proxy-viewer/ApplicationBar.tsx +2 -1
- package/src/components/proxy-viewer/LogEntry.tsx +1 -1
- package/src/components/proxy-viewer/log-formats/index.ts +1 -1
- package/src/contracts/index.ts +5 -0
- package/src/contracts/log.ts +33 -3
- package/src/knowledge/types.ts +3 -2
- package/src/lib/alertContract.ts +2 -2
- package/src/lib/apiClient.ts +30 -7
- package/src/lib/apiFormat.ts +29 -0
- package/src/lib/basePath.ts +31 -7
- package/src/lib/browserRuntimeContract.ts +124 -0
- package/src/lib/browserRuntimeResolver.ts +244 -0
- package/src/{proxy → lib}/claudeCodeStrip.ts +6 -7
- package/src/lib/codingAgentEndpoints.ts +54 -0
- package/src/lib/instanceContract.ts +236 -0
- package/src/lib/managedInstance.ts +104 -0
- package/src/lib/piAgentContract.ts +3 -2
- package/src/lib/publicBasePathContext.ts +137 -0
- package/src/lib/resourceLimits.ts +2 -0
- package/src/lib/runContract.ts +3 -3
- package/src/lib/sessionInfoContract.ts +3 -2
- package/src/mcp/instanceHandlers.ts +150 -0
- package/src/mcp/loopback.ts +16 -5
- package/src/mcp/mode.ts +25 -0
- package/src/mcp/server.ts +274 -39
- package/src/mcp/toolHandlers.ts +2 -2
- package/src/proxy/config.ts +25 -30
- package/src/proxy/dataDir.ts +43 -7
- package/src/proxy/ecosystemTasks.ts +161 -70
- package/src/proxy/formats/registry.ts +6 -21
- package/src/proxy/handler.ts +129 -29
- package/src/proxy/identityProxy.ts +1049 -50
- package/src/proxy/jsonlRecovery.ts +554 -0
- package/src/proxy/logFinalizer.ts +25 -10
- package/src/proxy/logImporter.ts +2 -1
- package/src/proxy/logIndex.ts +191 -95
- package/src/proxy/logger.ts +77 -14
- package/src/proxy/platformCommands.ts +41 -0
- package/src/proxy/privateDataPath.ts +310 -88
- package/src/proxy/rawStreamCapture.ts +194 -13
- package/src/proxy/runtimeAdmission.ts +5 -2
- package/src/proxy/runtimeHealth.ts +14 -1
- package/src/proxy/runtimeShutdown.ts +84 -2
- package/src/proxy/schemas.ts +7 -1
- package/src/proxy/sessionArchive.ts +78 -14
- package/src/proxy/sessionInfo.ts +5 -4
- package/src/proxy/sqliteLogIndex.ts +65 -2
- package/src/proxy/store.ts +141 -34
- package/src/proxy/uiAssetServer.ts +106 -0
- package/src/proxy/upstream.ts +29 -2
- package/src/ui/bootstrap.ts +167 -0
- package/src/ui/index.html +38 -0
- package/src/ui/logsStreamClient.ts +20 -0
- package/src/ui/main.tsx +13 -0
- package/src/ui/public/runtime-config.js +2 -0
- package/src/ui/router.tsx +13 -0
- package/src/ui/routes/__root.tsx +69 -0
- package/src/{routes → ui/routes}/index.tsx +2 -3
- package/src/{routes → ui/routes}/session/$sessionId.tsx +5 -11
- package/src/ui/runtimeDiscovery.ts +50 -0
- package/styles/globals.css +1 -0
- package/.output/public/assets/ProxyViewerContainer-BhpIgfBi.js +0 -126
- package/.output/public/assets/ResponseView-DUfrajCm.js +0 -2
- package/.output/public/assets/StreamingChunkSequence-nbeCQqOz.js +0 -1
- package/.output/public/assets/index-BWjeqxbk.css +0 -1
- package/.output/public/assets/index-C6qZwYlR.js +0 -70
- package/.output/public/assets/json-viewer-BLmF1sOZ.js +0 -1
- package/.output/server/_libs/@radix-ui/react-accessible-icon+[...].mjs +0 -1
- package/.output/server/_libs/@radix-ui/react-dismissable-layer+[...].mjs +0 -344
- package/.output/server/_libs/@radix-ui/react-navigation-menu+[...].mjs +0 -2
- package/.output/server/_libs/@radix-ui/react-one-time-password-field+[...].mjs +0 -2
- package/.output/server/_libs/@radix-ui/react-password-toggle-field+[...].mjs +0 -2
- package/.output/server/_libs/@radix-ui/react-use-callback-ref+[...].mjs +0 -11
- package/.output/server/_libs/@radix-ui/react-use-controllable-state+[...].mjs +0 -69
- package/.output/server/_libs/@radix-ui/react-use-effect-event+[...].mjs +0 -1
- package/.output/server/_libs/@radix-ui/react-use-is-hydrated+[...].mjs +0 -28
- package/.output/server/_libs/@radix-ui/react-use-layout-effect+[...].mjs +0 -6
- package/.output/server/_libs/@radix-ui/react-visually-hidden+[...].mjs +0 -34
- package/.output/server/_libs/aria-hidden.mjs +0 -122
- package/.output/server/_libs/bail.mjs +0 -8
- package/.output/server/_libs/character-entities.mjs +0 -2130
- package/.output/server/_libs/class-variance-authority.mjs +0 -44
- package/.output/server/_libs/clsx.mjs +0 -16
- package/.output/server/_libs/comma-separated-tokens.mjs +0 -10
- package/.output/server/_libs/decode-named-character-reference+[...].mjs +0 -8
- package/.output/server/_libs/dequal.mjs +0 -27
- package/.output/server/_libs/detect-node-es.mjs +0 -1
- package/.output/server/_libs/devlop.mjs +0 -8
- package/.output/server/_libs/diff.mjs +0 -320
- package/.output/server/_libs/estree-util-is-identifier-name.mjs +0 -11
- package/.output/server/_libs/floating-ui__core.mjs +0 -725
- package/.output/server/_libs/floating-ui__dom.mjs +0 -622
- package/.output/server/_libs/floating-ui__react-dom.mjs +0 -292
- package/.output/server/_libs/floating-ui__utils.mjs +0 -320
- package/.output/server/_libs/get-nonce.mjs +0 -9
- package/.output/server/_libs/hast-util-to-jsx-runtime.mjs +0 -388
- package/.output/server/_libs/hast-util-whitespace.mjs +0 -10
- package/.output/server/_libs/html-url-attributes.mjs +0 -26
- package/.output/server/_libs/inline-style-parser.mjs +0 -142
- package/.output/server/_libs/is-plain-obj.mjs +0 -10
- package/.output/server/_libs/lucide-react.mjs +0 -1027
- package/.output/server/_libs/mdast-util-from-markdown.mjs +0 -717
- package/.output/server/_libs/mdast-util-to-hast.mjs +0 -710
- package/.output/server/_libs/mdast-util-to-string.mjs +0 -38
- package/.output/server/_libs/micromark-core-commonmark.mjs +0 -2259
- package/.output/server/_libs/micromark-factory-destination.mjs +0 -94
- package/.output/server/_libs/micromark-factory-label.mjs +0 -63
- package/.output/server/_libs/micromark-factory-space.mjs +0 -24
- package/.output/server/_libs/micromark-factory-title.mjs +0 -65
- package/.output/server/_libs/micromark-factory-whitespace.mjs +0 -22
- package/.output/server/_libs/micromark-util-character.mjs +0 -44
- package/.output/server/_libs/micromark-util-chunked.mjs +0 -36
- package/.output/server/_libs/micromark-util-classify-character+[...].mjs +0 -12
- package/.output/server/_libs/micromark-util-combine-extensions+[...].mjs +0 -41
- package/.output/server/_libs/micromark-util-decode-numeric-character-reference+[...].mjs +0 -19
- package/.output/server/_libs/micromark-util-decode-string.mjs +0 -21
- package/.output/server/_libs/micromark-util-encode.mjs +0 -1
- package/.output/server/_libs/micromark-util-html-tag-name.mjs +0 -69
- package/.output/server/_libs/micromark-util-normalize-identifier+[...].mjs +0 -6
- package/.output/server/_libs/micromark-util-resolve-all.mjs +0 -15
- package/.output/server/_libs/micromark-util-sanitize-uri.mjs +0 -41
- package/.output/server/_libs/micromark-util-subtokenize.mjs +0 -346
- package/.output/server/_libs/micromark.mjs +0 -906
- package/.output/server/_libs/property-information.mjs +0 -1209
- package/.output/server/_libs/radix-ui.mjs +0 -1
- package/.output/server/_libs/radix-ui__number.mjs +0 -6
- package/.output/server/_libs/radix-ui__primitive.mjs +0 -11
- package/.output/server/_libs/radix-ui__react-accordion.mjs +0 -1
- package/.output/server/_libs/radix-ui__react-alert-dialog.mjs +0 -1
- package/.output/server/_libs/radix-ui__react-arrow.mjs +0 -23
- package/.output/server/_libs/radix-ui__react-aspect-ratio.mjs +0 -1
- package/.output/server/_libs/radix-ui__react-avatar.mjs +0 -1
- package/.output/server/_libs/radix-ui__react-checkbox.mjs +0 -1
- package/.output/server/_libs/radix-ui__react-collapsible.mjs +0 -144
- package/.output/server/_libs/radix-ui__react-collection.mjs +0 -69
- package/.output/server/_libs/radix-ui__react-compose-refs.mjs +0 -38
- package/.output/server/_libs/radix-ui__react-context-menu.mjs +0 -1
- package/.output/server/_libs/radix-ui__react-context.mjs +0 -64
- package/.output/server/_libs/radix-ui__react-dialog.mjs +0 -280
- package/.output/server/_libs/radix-ui__react-direction.mjs +0 -9
- package/.output/server/_libs/radix-ui__react-dropdown-menu.mjs +0 -1
- package/.output/server/_libs/radix-ui__react-focus-guards.mjs +0 -39
- package/.output/server/_libs/radix-ui__react-focus-scope.mjs +0 -210
- package/.output/server/_libs/radix-ui__react-form.mjs +0 -1
- package/.output/server/_libs/radix-ui__react-hover-card.mjs +0 -1
- package/.output/server/_libs/radix-ui__react-id.mjs +0 -14
- package/.output/server/_libs/radix-ui__react-label.mjs +0 -1
- package/.output/server/_libs/radix-ui__react-menu.mjs +0 -1
- package/.output/server/_libs/radix-ui__react-menubar.mjs +0 -1
- package/.output/server/_libs/radix-ui__react-popover.mjs +0 -1
- package/.output/server/_libs/radix-ui__react-popper.mjs +0 -340
- package/.output/server/_libs/radix-ui__react-portal.mjs +0 -16
- package/.output/server/_libs/radix-ui__react-presence.mjs +0 -173
- package/.output/server/_libs/radix-ui__react-primitive.mjs +0 -42
- package/.output/server/_libs/radix-ui__react-progress.mjs +0 -1
- package/.output/server/_libs/radix-ui__react-radio-group.mjs +0 -1
- package/.output/server/_libs/radix-ui__react-roving-focus.mjs +0 -235
- package/.output/server/_libs/radix-ui__react-scroll-area.mjs +0 -731
- package/.output/server/_libs/radix-ui__react-select.mjs +0 -1207
- package/.output/server/_libs/radix-ui__react-separator.mjs +0 -28
- package/.output/server/_libs/radix-ui__react-slider.mjs +0 -1
- package/.output/server/_libs/radix-ui__react-slot.mjs +0 -132
- package/.output/server/_libs/radix-ui__react-switch.mjs +0 -1
- package/.output/server/_libs/radix-ui__react-tabs.mjs +0 -194
- package/.output/server/_libs/radix-ui__react-toast.mjs +0 -2
- package/.output/server/_libs/radix-ui__react-toggle-group.mjs +0 -1
- package/.output/server/_libs/radix-ui__react-toggle.mjs +0 -1
- package/.output/server/_libs/radix-ui__react-toolbar.mjs +0 -1
- package/.output/server/_libs/radix-ui__react-tooltip.mjs +0 -498
- package/.output/server/_libs/radix-ui__react-use-previous.mjs +0 -14
- package/.output/server/_libs/radix-ui__react-use-size.mjs +0 -39
- package/.output/server/_libs/react-markdown.mjs +0 -235
- package/.output/server/_libs/react-remove-scroll-bar.mjs +0 -82
- package/.output/server/_libs/react-remove-scroll.mjs +0 -328
- package/.output/server/_libs/react-style-singleton.mjs +0 -69
- package/.output/server/_libs/remark-parse.mjs +0 -19
- package/.output/server/_libs/remark-rehype.mjs +0 -21
- package/.output/server/_libs/space-separated-tokens.mjs +0 -6
- package/.output/server/_libs/style-to-js.mjs +0 -72
- package/.output/server/_libs/style-to-object.mjs +0 -38
- package/.output/server/_libs/swr.mjs +0 -947
- package/.output/server/_libs/tailwind-merge.mjs +0 -3255
- package/.output/server/_libs/tanstack__react-virtual.mjs +0 -130
- package/.output/server/_libs/tanstack__virtual-core.mjs +0 -1319
- package/.output/server/_libs/three.mjs +0 -26016
- package/.output/server/_libs/trim-lines.mjs +0 -41
- package/.output/server/_libs/trough.mjs +0 -85
- package/.output/server/_libs/tslib.mjs +0 -1
- package/.output/server/_libs/ungap__structured-clone.mjs +0 -212
- package/.output/server/_libs/unified.mjs +0 -661
- package/.output/server/_libs/unist-util-is.mjs +0 -100
- package/.output/server/_libs/unist-util-position.mjs +0 -27
- package/.output/server/_libs/unist-util-stringify-position.mjs +0 -27
- package/.output/server/_libs/unist-util-visit-parents.mjs +0 -82
- package/.output/server/_libs/unist-util-visit.mjs +0 -24
- package/.output/server/_libs/use-callback-ref.mjs +0 -66
- package/.output/server/_libs/use-sidecar.mjs +0 -106
- package/.output/server/_libs/vfile-message.mjs +0 -138
- package/.output/server/_libs/vfile.mjs +0 -467
- package/.output/server/_sessionId-E_Dmopc-.mjs +0 -144
- package/.output/server/_sessionId-U54BAqdp.mjs +0 -82
- package/.output/server/_ssr/CompareDrawer-CksatPed.mjs +0 -1058
- package/.output/server/_ssr/InspectorPet-DNc4GQ7z.mjs +0 -936
- package/.output/server/_ssr/ProxyViewerContainer-B02Ey0p_.mjs +0 -17607
- package/.output/server/_ssr/ReplayDialog-DdMvHJF1.mjs +0 -723
- package/.output/server/_ssr/RequestAnatomy--vh2Z8__.mjs +0 -835
- package/.output/server/_ssr/ResponseView-Dhxc-cKC.mjs +0 -755
- package/.output/server/_ssr/StreamingChunkSequence-BG0EQmaD.mjs +0 -272
- package/.output/server/_ssr/index-D0At9nfd.mjs +0 -82
- package/.output/server/_ssr/index-lcfulIXa.mjs +0 -133
- package/.output/server/_ssr/json-viewer-My1J1_5R.mjs +0 -481
- package/.output/server/_ssr/start-HYkvq4Ni.mjs +0 -4
- package/.output/server/_tanstack-start-manifest_v-B2chR8ef.mjs +0 -4
- package/.output/server/node_modules/tslib/modules/index.js +0 -70
- package/.output/server/node_modules/tslib/modules/package.json +0 -3
- package/.output/server/node_modules/tslib/package.json +0 -47
- package/.output/server/node_modules/tslib/tslib.js +0 -484
- package/.output/server/package.json +0 -9
- package/src/routes/__root.tsx +0 -170
- /package/.output/{public → ui}/assets/agent-inspector-58K1_MsC.ico +0 -0
- /package/.output/{public → ui}/assets/alibaba-TTwafVwX.svg +0 -0
- /package/.output/{public → ui}/assets/minimax-BPMzvuL-.jpeg +0 -0
- /package/.output/{public → ui}/assets/qwen-mMn3f5ul.webp +0 -0
- /package/.output/{public → ui}/assets/zhipuai-BPNAnxo-.svg +0 -0
- /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
|
|
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
|
-
|
|
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
|
-
|
|
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 = "
|
|
51
|
-
- Stdio-only MCP clients: configure \`agent-inspector-mcp stdio --url
|
|
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
|
-
|
|
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
|
-
|
|
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 \`
|
|
86
|
-
\`
|
|
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
|
-
|
|
156
|
+
${startExplanation}
|
|
95
157
|
|
|
96
158
|
\`\`\`powershell
|
|
97
|
-
|
|
98
|
-
Invoke-RestMethod -Uri "
|
|
99
|
-
Invoke-RestMethod -Uri "
|
|
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
|
-
|
|
104
|
-
curl -fsS "
|
|
105
|
-
curl -fsS "
|
|
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
|
|
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
|
|
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
|
|
120
|
-
url = "
|
|
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
|
|
192
|
+
[mcp_servers.${mcpTomlKey}]
|
|
129
193
|
command = "agent-inspector-mcp"
|
|
130
|
-
args = ["stdio", "--url", "
|
|
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.
|
|
139
|
-
url = "
|
|
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
|
|
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 "
|
|
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
|
|
270
|
+
To capture traffic through Agent Inspector, use the protocol-correct base URL:
|
|
207
271
|
|
|
208
272
|
\`\`\`text
|
|
209
|
-
|
|
273
|
+
Anthropic: ${anthropicProxyUrl}
|
|
274
|
+
OpenAI Responses / Codex: ${openAiProxyUrl}
|
|
210
275
|
\`\`\`
|
|
211
276
|
|
|
212
|
-
For Anthropic-compatible tools, set \`ANTHROPIC_BASE_URL
|
|
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,
|
|
293
|
+
For a Provider Test memory probe, first read \`${runtimeUrl}\`. ${providerTestUiGuidance}
|
|
220
294
|
|
|
221
|
-
|
|
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
|