@tonyclaw/agent-inspector 2.0.15 → 2.0.17

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 (36) hide show
  1. package/.output/cli.js +399 -28
  2. package/.output/nitro.json +1 -1
  3. package/.output/public/assets/{CompareDrawer-B6WCFRJq.js → CompareDrawer-DDg7Cs4N.js} +1 -1
  4. package/.output/public/assets/{ProxyViewerContainer-CofGRJoO.js → ProxyViewerContainer-DbbK1y7N.js} +24 -24
  5. package/.output/public/assets/{ReplayDialog-O_53zkX8.js → ReplayDialog-C1zWNkoz.js} +1 -1
  6. package/.output/public/assets/{RequestAnatomy-CqBSMZv5.js → RequestAnatomy-DR8OICOJ.js} +1 -1
  7. package/.output/public/assets/{ResponseView-BvbA6zot.js → ResponseView-Dh9iSj6h.js} +1 -1
  8. package/.output/public/assets/{StreamingChunkSequence-Bnf6djjc.js → StreamingChunkSequence-B_xElyH3.js} +1 -1
  9. package/.output/public/assets/_sessionId-gv1a_NNu.js +1 -0
  10. package/.output/public/assets/index-u-LwDaeH.js +1 -0
  11. package/.output/public/assets/{main-Biir9ZGe.js → main-bwZlEXw2.js} +2 -2
  12. package/.output/server/{_sessionId-B77Gh4IL.mjs → _sessionId-BEuJJhqT.mjs} +2 -2
  13. package/.output/server/_ssr/{CompareDrawer-D4-RHFqW.mjs → CompareDrawer-yTO93GMz.mjs} +2 -2
  14. package/.output/server/_ssr/{ProxyViewerContainer-YP28-_2H.mjs → ProxyViewerContainer-C8qCkHGB.mjs} +72 -22
  15. package/.output/server/_ssr/{ReplayDialog-D9rQlrcY.mjs → ReplayDialog-DRF9PG7Z.mjs} +3 -3
  16. package/.output/server/_ssr/{RequestAnatomy-BXCRWD9H.mjs → RequestAnatomy-DBcuV_jV.mjs} +2 -2
  17. package/.output/server/_ssr/{ResponseView-DEwWMqSS.mjs → ResponseView-JJm78HZT.mjs} +2 -2
  18. package/.output/server/_ssr/{StreamingChunkSequence-CdrTPf5v.mjs → StreamingChunkSequence-DyGKjBYx.mjs} +2 -2
  19. package/.output/server/_ssr/{index-Chf1DYqT.mjs → index-T7JG28t6.mjs} +2 -2
  20. package/.output/server/_ssr/index.mjs +2 -2
  21. package/.output/server/_ssr/{router-BHXU5jWm.mjs → router-BJob8RN3.mjs} +2 -2
  22. package/.output/server/{_tanstack-start-manifest_v-D1dtacWy.mjs → _tanstack-start-manifest_v-CuiFi3XC.mjs} +1 -1
  23. package/.output/server/index.mjs +57 -57
  24. package/README.md +22 -5
  25. package/package.json +3 -3
  26. package/scripts/setup-agent-skills.mjs +64 -0
  27. package/src/cli/onboard.ts +407 -13
  28. package/src/cli/templates/codex-skill-onboard.ts +13 -4
  29. package/src/cli/templates/command-onboard.ts +12 -4
  30. package/src/cli/templates/skill-onboard.ts +30 -8
  31. package/src/components/OnboardingBanner.tsx +35 -7
  32. package/src/components/providers/SettingsDialog.tsx +22 -4
  33. package/src/lib/useOnboarding.ts +9 -1
  34. package/.output/public/assets/_sessionId-9ICCw6YA.js +0 -1
  35. package/.output/public/assets/index-DVkMYH8H.js +0 -1
  36. package/scripts/setup-codex-skill.mjs +0 -38
@@ -1,5 +1,5 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports, a as React } from "../_libs/react.mjs";
2
- import { C as CapturedLogSchema, D as DEFAULT_CAPTURE_MODE, a as DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS, b as DEFAULT_TIME_DISPLAY_FORMAT, c as RuntimeConfigSchema, P as ProviderConfigSchema, r as requestFormatForPath, i as createPendingProviderTestResults, j as ProviderTestResultsSchema, k as createFailedProviderTestResults, M as MAX_SLOW_RESPONSE_THRESHOLD_SECONDS, T as TimeDisplayFormatSchema, g as getSessionPath, f as providerHasContextMetadata, h as findProviderModelMetadata, s as safeGetOwnProperty, K as KnowledgeCandidateSchema, e as stripClaudeCodeBillingHeader, p as parseOpenAIResponse, O as OpenAIRequestSchema, A as AnthropicResponseSchema$1, d as AnthropicRequestSchema, l as resolveProviderContextWindow, m as isPlainRecord } from "./router-BHXU5jWm.mjs";
2
+ import { C as CapturedLogSchema, D as DEFAULT_CAPTURE_MODE, a as DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS, b as DEFAULT_TIME_DISPLAY_FORMAT, c as RuntimeConfigSchema, P as ProviderConfigSchema, r as requestFormatForPath, i as createPendingProviderTestResults, j as ProviderTestResultsSchema, k as createFailedProviderTestResults, M as MAX_SLOW_RESPONSE_THRESHOLD_SECONDS, T as TimeDisplayFormatSchema, g as getSessionPath, f as providerHasContextMetadata, h as findProviderModelMetadata, s as safeGetOwnProperty, K as KnowledgeCandidateSchema, e as stripClaudeCodeBillingHeader, p as parseOpenAIResponse, O as OpenAIRequestSchema, A as AnthropicResponseSchema$1, d as AnthropicRequestSchema, l as resolveProviderContextWindow, m as isPlainRecord } from "./router-BJob8RN3.mjs";
3
3
  import { u as useSWR, a as useSWRConfig } from "../_libs/swr.mjs";
4
4
  import { J as JSZip } from "../_libs/jszip.mjs";
5
5
  import { c as clsx } from "../_libs/clsx.mjs";
@@ -157,13 +157,15 @@ function useOnboarding() {
157
157
  );
158
158
  const { mutate: globalMutate } = useSWRConfig();
159
159
  const hasSeenOnboarding = response.data?.hasSeenOnboarding ?? false;
160
+ const captureMode = response.data?.captureMode ?? DEFAULT_CAPTURE_MODE;
160
161
  const markSeen = async () => {
161
162
  await globalMutate(ONBOARDING_SWR_KEY, patchRuntimeConfig({ hasSeenOnboarding: true }), {
162
163
  optimisticData: {
163
164
  stripClaudeCodeBillingHeader: response.data?.stripClaudeCodeBillingHeader ?? false,
164
165
  hasSeenOnboarding: true,
165
166
  slowResponseThresholdSeconds: response.data?.slowResponseThresholdSeconds ?? DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS,
166
- timeDisplayFormat: response.data?.timeDisplayFormat ?? DEFAULT_TIME_DISPLAY_FORMAT
167
+ timeDisplayFormat: response.data?.timeDisplayFormat ?? DEFAULT_TIME_DISPLAY_FORMAT,
168
+ captureMode
167
169
  },
168
170
  rollbackOnError: true,
169
171
  revalidate: false
@@ -171,13 +173,15 @@ function useOnboarding() {
171
173
  };
172
174
  return {
173
175
  hasSeenOnboarding,
176
+ captureMode,
174
177
  isLoading: response.isLoading,
175
178
  markSeen
176
179
  };
177
180
  }
178
181
  function OnboardingBanner() {
179
- const { hasSeenOnboarding, isLoading, markSeen } = useOnboarding();
182
+ const { hasSeenOnboarding, captureMode, isLoading, markSeen } = useOnboarding();
180
183
  if (isLoading || hasSeenOnboarding) return null;
184
+ const isFullMode = captureMode === "full";
181
185
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
182
186
  "div",
183
187
  {
@@ -186,19 +190,47 @@ function OnboardingBanner() {
186
190
  className: "mx-4 mt-2 mb-1 flex items-start gap-3 rounded-md border border-amber-500/30 bg-amber-500/5 px-4 py-3 text-sm",
187
191
  children: [
188
192
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-0 flex-1", children: [
189
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mb-1 font-medium text-amber-600 dark:text-amber-400", children: "Agent Inspector is ready" }),
193
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mb-1 font-medium text-amber-600 dark:text-amber-400", children: isFullMode ? "Agent Inspector is ready in Full mode" : "Agent Inspector is ready in Simple mode" }),
190
194
  /* @__PURE__ */ jsxRuntimeExports.jsxs("ul", { className: "space-y-0.5 text-xs leading-relaxed text-muted-foreground", children: [
191
- /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { children: [
192
- /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Trace" }),
193
- ": requests, responses, streaming chunks, tools, and timing."
195
+ isFullMode ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
196
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { children: [
197
+ /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Full mode" }),
198
+ ": raw headers, raw response, and SSE chunks are captured for diagnostics."
199
+ ] }),
200
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { children: [
201
+ /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Daily work" }),
202
+ ": restart with ",
203
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { children: "agent-inspector --mode simple" }),
204
+ " ",
205
+ "to reduce capture overhead."
206
+ ] })
207
+ ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
208
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { children: [
209
+ /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Simple mode" }),
210
+ ": lightweight capture for requests, responses, tools, timing, and token usage."
211
+ ] }),
212
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { children: [
213
+ /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Need diagnostics?" }),
214
+ " Restart with",
215
+ " ",
216
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { children: "agent-inspector --mode full" }),
217
+ " for raw headers, raw response, and SSE chunks."
218
+ ] })
194
219
  ] }),
195
220
  /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { children: [
196
- /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Replay" }),
197
- ": resend captured requests and compare provider behavior."
221
+ /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Replay and Memory" }),
222
+ ": available in both modes for provider checks and reviewable knowledge candidates."
198
223
  ] }),
199
224
  /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { children: [
200
- /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Memory" }),
201
- ": create reviewable candidates before promotion to OpenClaw."
225
+ /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Agent setup" }),
226
+ ": run ",
227
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { children: "agent-inspector onboard --status" }),
228
+ ", then use ",
229
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { children: "/agent-inspector:onboard" }),
230
+ " in Claude Code or ask Codex to use",
231
+ " ",
232
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { children: "agent-inspector-onboard" }),
233
+ "."
202
234
  ] })
203
235
  ] })
204
236
  ] }),
@@ -331,7 +363,7 @@ function useProviders() {
331
363
  mutate: response.mutate
332
364
  };
333
365
  }
334
- const version = "2.0.15";
366
+ const version = "2.0.17";
335
367
  const packageJson = {
336
368
  version
337
369
  };
@@ -1392,19 +1424,19 @@ function useCopyFeedback(text) {
1392
1424
  return { copied, copy };
1393
1425
  }
1394
1426
  const LazyCompareDrawer = reactExports.lazy(
1395
- () => import("./CompareDrawer-D4-RHFqW.mjs").then((m) => ({ default: m.CompareDrawer }))
1427
+ () => import("./CompareDrawer-yTO93GMz.mjs").then((m) => ({ default: m.CompareDrawer }))
1396
1428
  );
1397
1429
  const LazyReplayDialog = reactExports.lazy(
1398
- () => import("./ReplayDialog-D9rQlrcY.mjs").then((m) => ({ default: m.ReplayDialog }))
1430
+ () => import("./ReplayDialog-DRF9PG7Z.mjs").then((m) => ({ default: m.ReplayDialog }))
1399
1431
  );
1400
1432
  const LazyRequestAnatomy = reactExports.lazy(
1401
- () => import("./RequestAnatomy-BXCRWD9H.mjs").then((m) => ({ default: m.RequestAnatomy }))
1433
+ () => import("./RequestAnatomy-DBcuV_jV.mjs").then((m) => ({ default: m.RequestAnatomy }))
1402
1434
  );
1403
1435
  const LazyResponseView = reactExports.lazy(
1404
- () => import("./ResponseView-DEwWMqSS.mjs").then((m) => ({ default: m.ResponseView }))
1436
+ () => import("./ResponseView-JJm78HZT.mjs").then((m) => ({ default: m.ResponseView }))
1405
1437
  );
1406
1438
  const LazyStreamingChunkSequence = reactExports.lazy(
1407
- () => import("./StreamingChunkSequence-CdrTPf5v.mjs").then((m) => ({
1439
+ () => import("./StreamingChunkSequence-DyGKjBYx.mjs").then((m) => ({
1408
1440
  default: m.StreamingChunkSequence
1409
1441
  }))
1410
1442
  );
@@ -7082,7 +7114,7 @@ function SettingsDialog() {
7082
7114
  /* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "proxy", children: "Proxy" }),
7083
7115
  /* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "onboarding", children: "Onboarding" })
7084
7116
  ] }),
7085
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-4 overflow-y-auto flex-1 pr-3", children: [
7117
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-4 flex-1 overflow-x-hidden overflow-y-auto pr-3", children: [
7086
7118
  /* @__PURE__ */ jsxRuntimeExports.jsx(TabsContent, { value: "providers", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
7087
7119
  ProvidersPanel,
7088
7120
  {
@@ -7114,7 +7146,7 @@ function CopyableSetupValue({
7114
7146
  onCopy
7115
7147
  }) {
7116
7148
  const copied = copiedId === id;
7117
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-md border border-border bg-muted/20 px-3 py-2", children: [
7149
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-0 rounded-md border border-border bg-muted/20 px-3 py-2", children: [
7118
7150
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mb-1 text-xs font-medium text-muted-foreground", children: label }),
7119
7151
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
7120
7152
  /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "min-w-0 flex-1 truncate font-mono text-xs text-foreground", children: value }),
@@ -7141,10 +7173,28 @@ function OnboardingSettingsTab() {
7141
7173
  }, []);
7142
7174
  const values = reactExports.useMemo(
7143
7175
  () => [
7144
- { id: "skill", label: "Codex skill", value: "agent-inspector onboard --force" },
7176
+ { id: "status", label: "Check onboarding", value: "agent-inspector onboard --status" },
7177
+ {
7178
+ id: "status-json",
7179
+ label: "Check onboarding JSON",
7180
+ value: "agent-inspector onboard --status --json"
7181
+ },
7182
+ { id: "refresh", label: "Refresh generated files", value: "agent-inspector onboard --force" },
7183
+ {
7184
+ id: "uninstall",
7185
+ label: "Remove matching generated files",
7186
+ value: "agent-inspector onboard --uninstall"
7187
+ },
7188
+ { id: "claude", label: "Claude Code command", value: "/agent-inspector:onboard" },
7189
+ {
7190
+ id: "codex",
7191
+ label: "Codex prompt",
7192
+ value: "Use the agent-inspector-onboard skill"
7193
+ },
7145
7194
  { id: "mcp", label: "MCP URL", value: `${origin}/api/mcp` },
7146
7195
  { id: "proxy", label: "Proxy URL", value: `${origin}/proxy` },
7147
- { id: "anthropic", label: "Anthropic base", value: `ANTHROPIC_BASE_URL=${origin}/proxy` }
7196
+ { id: "anthropic", label: "Anthropic base", value: `ANTHROPIC_BASE_URL=${origin}/proxy` },
7197
+ { id: "openai", label: "OpenAI base", value: `OPENAI_BASE_URL=${origin}/proxy` }
7148
7198
  ],
7149
7199
  [origin]
7150
7200
  );
@@ -7154,7 +7204,7 @@ function OnboardingSettingsTab() {
7154
7204
  setTimeout(() => setCopiedId(null), 1600);
7155
7205
  });
7156
7206
  }, []);
7157
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [
7207
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-0 space-y-4", children: [
7158
7208
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
7159
7209
  /* @__PURE__ */ jsxRuntimeExports.jsx(Terminal, { className: "size-4 text-muted-foreground" }),
7160
7210
  /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-sm font-semibold", children: "Agent onboarding" })
@@ -1,7 +1,7 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { u as useProviders, D as Dialog, b as DialogContent, d as DialogHeader, e as DialogTitle, T as Tabs, h as TabsList, i as TabsTrigger, j as TabsContent, k as TooltipProvider, l as Tooltip, m as TooltipTrigger, n as TooltipContent, o as Button } from "./ProxyViewerContainer-YP28-_2H.mjs";
3
- import { ResponseView } from "./ResponseView-DEwWMqSS.mjs";
4
- import "./router-BHXU5jWm.mjs";
2
+ import { u as useProviders, D as Dialog, b as DialogContent, d as DialogHeader, e as DialogTitle, T as Tabs, h as TabsList, i as TabsTrigger, j as TabsContent, k as TooltipProvider, l as Tooltip, m as TooltipTrigger, n as TooltipContent, o as Button } from "./ProxyViewerContainer-C8qCkHGB.mjs";
3
+ import { ResponseView } from "./ResponseView-JJm78HZT.mjs";
4
+ import "./router-BJob8RN3.mjs";
5
5
  import "../_libs/modelcontextprotocol__server.mjs";
6
6
  import "../_libs/jszip.mjs";
7
7
  import { K as RotateCcw } from "../_libs/lucide-react.mjs";
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { u as useProviders, p as analyzeContextIntelligence, f as formatTokens, k as TooltipProvider, c as cn, l as Tooltip, m as TooltipTrigger, n as TooltipContent, S as SegmentBar, R as ROLE_COLOR_CLASSES, A as ANATOMY_ROLE_LABELS, q as formatContextWindowTokens, C as CONTEXT_USAGE_THRESHOLDS } from "./ProxyViewerContainer-YP28-_2H.mjs";
3
- import "./router-BHXU5jWm.mjs";
2
+ import { u as useProviders, p as analyzeContextIntelligence, f as formatTokens, k as TooltipProvider, c as cn, l as Tooltip, m as TooltipTrigger, n as TooltipContent, S as SegmentBar, R as ROLE_COLOR_CLASSES, A as ANATOMY_ROLE_LABELS, q as formatContextWindowTokens, C as CONTEXT_USAGE_THRESHOLDS } from "./ProxyViewerContainer-C8qCkHGB.mjs";
3
+ import "./router-BJob8RN3.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import { ac as Info, b as ChevronDown, f as ChevronRight } from "../_libs/lucide-react.mjs";
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { g as getLogFormatAdapter, f as formatTokens, c as cn, s as getStatusCategory, B as Badge, t as Collapsible, v as CollapsibleTrigger, w as CollapsibleContent, x as ScrollArea, y as JsonViewer, z as safeJsonValue } from "./ProxyViewerContainer-YP28-_2H.mjs";
3
- import "./router-BHXU5jWm.mjs";
2
+ import { g as getLogFormatAdapter, f as formatTokens, c as cn, s as getStatusCategory, B as Badge, t as Collapsible, v as CollapsibleTrigger, w as CollapsibleContent, x as ScrollArea, y as JsonViewer, z as safeJsonValue } from "./ProxyViewerContainer-C8qCkHGB.mjs";
3
+ import "./router-BJob8RN3.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import { Z as Zap, j as TriangleAlert, ad as CircleStop, B as Brain, b as ChevronDown, f as ChevronRight, T as Terminal } from "../_libs/lucide-react.mjs";
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { k as TooltipProvider, l as Tooltip, m as TooltipTrigger, B as Badge, n as TooltipContent, y as JsonViewer } from "./ProxyViewerContainer-YP28-_2H.mjs";
3
- import "./router-BHXU5jWm.mjs";
2
+ import { k as TooltipProvider, l as Tooltip, m as TooltipTrigger, B as Badge, n as TooltipContent, y as JsonViewer } from "./ProxyViewerContainer-C8qCkHGB.mjs";
3
+ import "./router-BJob8RN3.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import { b as ChevronDown, f as ChevronRight, L as LoaderCircle } from "../_libs/lucide-react.mjs";
@@ -1,6 +1,6 @@
1
- import { P as ProxyViewerContainer } from "./ProxyViewerContainer-YP28-_2H.mjs";
1
+ import { P as ProxyViewerContainer } from "./ProxyViewerContainer-C8qCkHGB.mjs";
2
2
  import "../_libs/react.mjs";
3
- import "./router-BHXU5jWm.mjs";
3
+ import "./router-BJob8RN3.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import "../_libs/swr.mjs";
@@ -198,7 +198,7 @@ function getResponse() {
198
198
  return event.res;
199
199
  }
200
200
  async function getStartManifest(matchedRoutes) {
201
- const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-D1dtacWy.mjs");
201
+ const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-CuiFi3XC.mjs");
202
202
  const startManifest = tsrStartManifest();
203
203
  const rootRoute = startManifest.routes[rootRouteId] = startManifest.routes[rootRouteId] || {};
204
204
  rootRoute.assets = rootRoute.assets || [];
@@ -767,7 +767,7 @@ let entriesPromise;
767
767
  let baseManifestPromise;
768
768
  let cachedFinalManifestPromise;
769
769
  async function loadEntries() {
770
- const routerEntry = await import("./router-BHXU5jWm.mjs").then((n) => n.n);
770
+ const routerEntry = await import("./router-BJob8RN3.mjs").then((n) => n.n);
771
771
  const startEntry = await import("./start-HYkvq4Ni.mjs");
772
772
  return { startEntry, routerEntry };
773
773
  }
@@ -92,7 +92,7 @@ function RootDocument({ children }) {
92
92
  ] })
93
93
  ] });
94
94
  }
95
- const $$splitComponentImporter$1 = () => import("./index-Chf1DYqT.mjs");
95
+ const $$splitComponentImporter$1 = () => import("./index-T7JG28t6.mjs");
96
96
  const Route$r = createFileRoute("/")({
97
97
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
98
98
  });
@@ -135,7 +135,7 @@ function decodeSessionIdFromPath(encoded) {
135
135
  function getSessionPath(sessionId) {
136
136
  return `/session/${encodeSessionIdForPath(sessionId)}`;
137
137
  }
138
- const $$splitComponentImporter = () => import("../_sessionId-B77Gh4IL.mjs");
138
+ const $$splitComponentImporter = () => import("../_sessionId-BEuJJhqT.mjs");
139
139
  const Route$q = createFileRoute("/session/$sessionId")({
140
140
  component: lazyRouteComponent($$splitComponentImporter, "component"),
141
141
  parseParams: (params) => ({
@@ -1,4 +1,4 @@
1
- const tsrStartManifest = () => ({ "routes": { "__root__": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/__root.tsx", "children": ["/", "/api/config", "/api/health", "/api/logs", "/api/mcp", "/api/models", "/api/providers", "/api/sessions", "/proxy/$", "/session/$sessionId", "/api/knowledge/candidates", "/api/knowledge/project-context", "/api/knowledge/search", "/api/knowledge/sessions/$sessionId/candidates"], "preloads": ["/assets/main-Biir9ZGe.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-DVkMYH8H.js", "/assets/ProxyViewerContainer-CofGRJoO.js"] }, "/api/config": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/config.ts", "children": ["/api/config/paths"] }, "/api/health": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/health.ts" }, "/api/logs": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.ts", "children": ["/api/logs/$id", "/api/logs/stream"] }, "/api/mcp": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/mcp.ts" }, "/api/models": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/models.ts" }, "/api/providers": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.ts", "children": ["/api/providers/$providerId", "/api/providers/export", "/api/providers/import", "/api/providers/scan"] }, "/api/sessions": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/sessions.ts" }, "/proxy/$": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/proxy/$.ts" }, "/session/$sessionId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/session/$sessionId.tsx", "assets": [], "preloads": ["/assets/_sessionId-9ICCw6YA.js", "/assets/ProxyViewerContainer-CofGRJoO.js"] }, "/api/config/paths": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/config.paths.ts" }, "/api/knowledge/candidates": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.ts", "children": ["/api/knowledge/candidates/$candidateId"] }, "/api/knowledge/project-context": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.project-context.ts" }, "/api/knowledge/search": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.search.ts" }, "/api/logs/$id": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.ts", "children": ["/api/logs/$id/chunks", "/api/logs/$id/replay"] }, "/api/logs/stream": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.stream.ts" }, "/api/providers/$providerId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.ts", "children": ["/api/providers/$providerId/model-metadata", "/api/providers/$providerId/test"] }, "/api/providers/export": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.export.ts" }, "/api/providers/import": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.import.ts" }, "/api/providers/scan": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.scan.ts" }, "/api/knowledge/candidates/$candidateId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.$candidateId.ts", "children": ["/api/knowledge/candidates/$candidateId/promote"] }, "/api/logs/$id/chunks": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.chunks.ts" }, "/api/logs/$id/replay": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.replay.ts" }, "/api/providers/$providerId/model-metadata": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.model-metadata.ts" }, "/api/providers/$providerId/test": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.test.ts", "children": ["/api/providers/$providerId/test/log"] }, "/api/knowledge/candidates/$candidateId/promote": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.$candidateId.promote.ts" }, "/api/knowledge/sessions/$sessionId/candidates": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.sessions.$sessionId.candidates.ts" }, "/api/providers/$providerId/test/log": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.test.log.ts" } }, "clientEntry": "/assets/main-Biir9ZGe.js" });
1
+ const tsrStartManifest = () => ({ "routes": { "__root__": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/__root.tsx", "children": ["/", "/api/config", "/api/health", "/api/logs", "/api/mcp", "/api/models", "/api/providers", "/api/sessions", "/proxy/$", "/session/$sessionId", "/api/knowledge/candidates", "/api/knowledge/project-context", "/api/knowledge/search", "/api/knowledge/sessions/$sessionId/candidates"], "preloads": ["/assets/main-bwZlEXw2.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-u-LwDaeH.js", "/assets/ProxyViewerContainer-DbbK1y7N.js"] }, "/api/config": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/config.ts", "children": ["/api/config/paths"] }, "/api/health": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/health.ts" }, "/api/logs": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.ts", "children": ["/api/logs/$id", "/api/logs/stream"] }, "/api/mcp": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/mcp.ts" }, "/api/models": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/models.ts" }, "/api/providers": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.ts", "children": ["/api/providers/$providerId", "/api/providers/export", "/api/providers/import", "/api/providers/scan"] }, "/api/sessions": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/sessions.ts" }, "/proxy/$": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/proxy/$.ts" }, "/session/$sessionId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/session/$sessionId.tsx", "assets": [], "preloads": ["/assets/_sessionId-gv1a_NNu.js", "/assets/ProxyViewerContainer-DbbK1y7N.js"] }, "/api/config/paths": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/config.paths.ts" }, "/api/knowledge/candidates": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.ts", "children": ["/api/knowledge/candidates/$candidateId"] }, "/api/knowledge/project-context": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.project-context.ts" }, "/api/knowledge/search": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.search.ts" }, "/api/logs/$id": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.ts", "children": ["/api/logs/$id/chunks", "/api/logs/$id/replay"] }, "/api/logs/stream": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.stream.ts" }, "/api/providers/$providerId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.ts", "children": ["/api/providers/$providerId/model-metadata", "/api/providers/$providerId/test"] }, "/api/providers/export": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.export.ts" }, "/api/providers/import": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.import.ts" }, "/api/providers/scan": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.scan.ts" }, "/api/knowledge/candidates/$candidateId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.$candidateId.ts", "children": ["/api/knowledge/candidates/$candidateId/promote"] }, "/api/logs/$id/chunks": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.chunks.ts" }, "/api/logs/$id/replay": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.replay.ts" }, "/api/providers/$providerId/model-metadata": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.model-metadata.ts" }, "/api/providers/$providerId/test": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.test.ts", "children": ["/api/providers/$providerId/test/log"] }, "/api/knowledge/candidates/$candidateId/promote": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.$candidateId.promote.ts" }, "/api/knowledge/sessions/$sessionId/candidates": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.sessions.$sessionId.candidates.ts" }, "/api/providers/$providerId/test/log": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.test.log.ts" } }, "clientEntry": "/assets/main-bwZlEXw2.js" });
2
2
  export {
3
3
  tsrStartManifest
4
4
  };
@@ -35,103 +35,103 @@ const headers = ((m) => function headersRouteRule(event) {
35
35
  }
36
36
  });
37
37
  const assets = {
38
- "/assets/index-DVkMYH8H.js": {
39
- "type": "text/javascript; charset=utf-8",
40
- "etag": '"74-GBmxRerueSBHr5Yf7dUOgBYydpU"',
41
- "mtime": "2026-06-27T01:33:17.528Z",
42
- "size": 116,
43
- "path": "../public/assets/index-DVkMYH8H.js"
44
- },
45
38
  "/assets/alibaba-TTwafVwX.svg": {
46
39
  "type": "image/svg+xml",
47
40
  "etag": '"171b-6dyV5K8QjiaY35sN9qNprh9zDIs"',
48
- "mtime": "2026-06-27T01:33:17.528Z",
41
+ "mtime": "2026-06-27T08:05:44.395Z",
49
42
  "size": 5915,
50
43
  "path": "../public/assets/alibaba-TTwafVwX.svg"
51
44
  },
52
- "/assets/CompareDrawer-B6WCFRJq.js": {
45
+ "/assets/CompareDrawer-DDg7Cs4N.js": {
53
46
  "type": "text/javascript; charset=utf-8",
54
- "etag": '"49fe-H23nTYJE6lXgq0srel66pBNsVds"',
55
- "mtime": "2026-06-27T01:33:17.528Z",
47
+ "etag": '"49fe-ST4mvhJApf3tK3AHGe/jnh7b8dA"',
48
+ "mtime": "2026-06-27T08:05:44.395Z",
56
49
  "size": 18942,
57
- "path": "../public/assets/CompareDrawer-B6WCFRJq.js"
50
+ "path": "../public/assets/CompareDrawer-DDg7Cs4N.js"
58
51
  },
59
52
  "/assets/index-D_nZj9Vt.css": {
60
53
  "type": "text/css; charset=utf-8",
61
54
  "etag": '"1a275-7T1iSNG2p6BSsqLwdpfky+9evLw"',
62
- "mtime": "2026-06-27T01:33:17.528Z",
55
+ "mtime": "2026-06-27T08:05:44.395Z",
63
56
  "size": 107125,
64
57
  "path": "../public/assets/index-D_nZj9Vt.css"
65
58
  },
59
+ "/assets/index-u-LwDaeH.js": {
60
+ "type": "text/javascript; charset=utf-8",
61
+ "etag": '"74-boh/9GDh4CR9Flgsc4G84xDxjHg"',
62
+ "mtime": "2026-06-27T08:05:44.395Z",
63
+ "size": 116,
64
+ "path": "../public/assets/index-u-LwDaeH.js"
65
+ },
66
+ "/assets/ReplayDialog-C1zWNkoz.js": {
67
+ "type": "text/javascript; charset=utf-8",
68
+ "etag": '"2361-2HHZgW4drPSmavIm8hPSIOojqNs"',
69
+ "mtime": "2026-06-27T08:05:44.396Z",
70
+ "size": 9057,
71
+ "path": "../public/assets/ReplayDialog-C1zWNkoz.js"
72
+ },
73
+ "/assets/RequestAnatomy-DR8OICOJ.js": {
74
+ "type": "text/javascript; charset=utf-8",
75
+ "etag": '"4485-N9GhW/2QqcCw31XDu4TtvnszBGI"',
76
+ "mtime": "2026-06-27T08:05:44.396Z",
77
+ "size": 17541,
78
+ "path": "../public/assets/RequestAnatomy-DR8OICOJ.js"
79
+ },
66
80
  "/assets/minimax-BPMzvuL-.jpeg": {
67
81
  "type": "image/jpeg",
68
82
  "etag": '"1b06-IwivU89ko5UTMUM1/t7hn4sQK9A"',
69
- "mtime": "2026-06-27T01:33:17.528Z",
83
+ "mtime": "2026-06-27T08:05:44.395Z",
70
84
  "size": 6918,
71
85
  "path": "../public/assets/minimax-BPMzvuL-.jpeg"
72
86
  },
73
- "/assets/RequestAnatomy-CqBSMZv5.js": {
74
- "type": "text/javascript; charset=utf-8",
75
- "etag": '"4485-ASH0McTixuSChPgRJXtw7959sE8"',
76
- "mtime": "2026-06-27T01:33:17.528Z",
77
- "size": 17541,
78
- "path": "../public/assets/RequestAnatomy-CqBSMZv5.js"
79
- },
80
- "/assets/ReplayDialog-O_53zkX8.js": {
87
+ "/assets/ResponseView-Dh9iSj6h.js": {
81
88
  "type": "text/javascript; charset=utf-8",
82
- "etag": '"2361-UXCD85zY35ZMpI4MCvWGIBGRqsM"',
83
- "mtime": "2026-06-27T01:33:17.528Z",
84
- "size": 9057,
85
- "path": "../public/assets/ReplayDialog-O_53zkX8.js"
86
- },
87
- "/assets/ResponseView-BvbA6zot.js": {
88
- "type": "text/javascript; charset=utf-8",
89
- "etag": '"30cd-kBNUcY62rE797/1oAWUgva5ZP3E"',
90
- "mtime": "2026-06-27T01:33:17.528Z",
89
+ "etag": '"30cd-4xMnhGLUg/50P9M4/lNZVL4lKjo"',
90
+ "mtime": "2026-06-27T08:05:44.396Z",
91
91
  "size": 12493,
92
- "path": "../public/assets/ResponseView-BvbA6zot.js"
92
+ "path": "../public/assets/ResponseView-Dh9iSj6h.js"
93
93
  },
94
- "/assets/StreamingChunkSequence-Bnf6djjc.js": {
94
+ "/assets/zhipuai-BPNAnxo-.svg": {
95
+ "type": "image/svg+xml",
96
+ "etag": '"2bf8-hNaLCTi89nOFCsIIfWpP/jrfo0s"',
97
+ "mtime": "2026-06-27T08:05:44.395Z",
98
+ "size": 11256,
99
+ "path": "../public/assets/zhipuai-BPNAnxo-.svg"
100
+ },
101
+ "/assets/StreamingChunkSequence-B_xElyH3.js": {
95
102
  "type": "text/javascript; charset=utf-8",
96
- "etag": '"d5b-H23wfjS024K950LRNDcnoBMbvZk"',
97
- "mtime": "2026-06-27T01:33:17.528Z",
103
+ "etag": '"d5b-63IZqsXb3mHwoP35jfQARaDbClI"',
104
+ "mtime": "2026-06-27T08:05:44.396Z",
98
105
  "size": 3419,
99
- "path": "../public/assets/StreamingChunkSequence-Bnf6djjc.js"
106
+ "path": "../public/assets/StreamingChunkSequence-B_xElyH3.js"
100
107
  },
101
- "/assets/_sessionId-9ICCw6YA.js": {
108
+ "/assets/_sessionId-gv1a_NNu.js": {
102
109
  "type": "text/javascript; charset=utf-8",
103
- "etag": '"d2-uFVaRacf7cf25NZ3tVGQAaJ9s1U"',
104
- "mtime": "2026-06-27T01:33:17.528Z",
110
+ "etag": '"d2-atc0PPwWYseoheB1VLGM7JAiJ/A"',
111
+ "mtime": "2026-06-27T08:05:44.395Z",
105
112
  "size": 210,
106
- "path": "../public/assets/_sessionId-9ICCw6YA.js"
113
+ "path": "../public/assets/_sessionId-gv1a_NNu.js"
107
114
  },
108
- "/assets/main-Biir9ZGe.js": {
115
+ "/assets/main-bwZlEXw2.js": {
109
116
  "type": "text/javascript; charset=utf-8",
110
- "etag": '"51726-FJBttDIDcSV3cKBP0p/i3W2xLZs"',
111
- "mtime": "2026-06-27T01:33:17.528Z",
117
+ "etag": '"51726-1SJJ0BJfAuGmylFZ/0OY4VxlOhE"',
118
+ "mtime": "2026-06-27T08:05:44.395Z",
112
119
  "size": 333606,
113
- "path": "../public/assets/main-Biir9ZGe.js"
114
- },
115
- "/assets/zhipuai-BPNAnxo-.svg": {
116
- "type": "image/svg+xml",
117
- "etag": '"2bf8-hNaLCTi89nOFCsIIfWpP/jrfo0s"',
118
- "mtime": "2026-06-27T01:33:17.528Z",
119
- "size": 11256,
120
- "path": "../public/assets/zhipuai-BPNAnxo-.svg"
120
+ "path": "../public/assets/main-bwZlEXw2.js"
121
121
  },
122
122
  "/assets/qwen-CONDcHqt.png": {
123
123
  "type": "image/png",
124
124
  "etag": '"572c3-cdJAPaHdOvFCGzuaQjagdgOu6XE"',
125
- "mtime": "2026-06-27T01:33:17.528Z",
125
+ "mtime": "2026-06-27T08:05:44.395Z",
126
126
  "size": 357059,
127
127
  "path": "../public/assets/qwen-CONDcHqt.png"
128
128
  },
129
- "/assets/ProxyViewerContainer-CofGRJoO.js": {
129
+ "/assets/ProxyViewerContainer-DbbK1y7N.js": {
130
130
  "type": "text/javascript; charset=utf-8",
131
- "etag": '"aa18a-0PYHI8TBpyPCvr+xLRTgvxnmB4M"',
132
- "mtime": "2026-06-27T01:33:17.528Z",
133
- "size": 696714,
134
- "path": "../public/assets/ProxyViewerContainer-CofGRJoO.js"
131
+ "etag": '"aa779-gGe0kXBI3ePH3bRC96W2oCbRTJ4"',
132
+ "mtime": "2026-06-27T08:05:44.396Z",
133
+ "size": 698233,
134
+ "path": "../public/assets/ProxyViewerContainer-DbbK1y7N.js"
135
135
  }
136
136
  };
137
137
  function readAsset(id) {
package/README.md CHANGED
@@ -50,11 +50,28 @@ The onboarding command installs guided setup skills for local agents:
50
50
  - Codex: `~/.codex/skills/agent-inspector-onboard/SKILL.md`, focused on connecting
51
51
  `http://localhost:25947/api/mcp` through Codex `mcp_servers.agent-inspector`.
52
52
 
53
- During npm global install, Agent Inspector also makes a best-effort Codex skill install when
54
- `~/.codex` already exists. Set `AGENT_INSPECTOR_SKIP_CODEX_SKILL=1` to skip that postinstall step,
55
- set `AGENT_INSPECTOR_INSTALL_CODEX_SKILL=1` to attempt it even before `~/.codex` exists, or run
56
- `agent-inspector onboard --codex-only --force` later to refresh it. For a full refresh of all
57
- generated onboarding files, run `agent-inspector onboard --force`.
53
+ During npm global install, Agent Inspector also makes a best-effort onboarding skill install for
54
+ detected local agents. If `~/.claude` exists, it installs the Claude Code skill and slash command.
55
+ If `~/.codex` exists, it installs the Codex skill. Generated onboarding files are stamped with the
56
+ current npm package version; a later package install refreshes older generated files automatically,
57
+ while same-version, newer-version, or user-created files without Agent Inspector version metadata are
58
+ left in place.
59
+
60
+ Set `AGENT_INSPECTOR_SKIP_CLAUDE_SKILL=1` or `AGENT_INSPECTOR_SKIP_CODEX_SKILL=1` to skip either
61
+ postinstall step. Set `AGENT_INSPECTOR_INSTALL_CLAUDE_SKILL=1` or
62
+ `AGENT_INSPECTOR_INSTALL_CODEX_SKILL=1` to attempt installation even before the corresponding agent
63
+ home directory exists. To refresh generated onboarding files later, run
64
+ `agent-inspector onboard --force`.
65
+
66
+ To check what is installed, run `agent-inspector onboard --status`. It reports each generated file,
67
+ its stamped version, whether it is current/outdated/custom, and the suggested next command. For
68
+ scripts and CI checks, use `agent-inspector onboard --status --json`.
69
+
70
+ Before uninstalling the npm package, run `agent-inspector onboard --uninstall` to remove matching
71
+ generated onboarding files. The uninstall command only removes Agent Inspector generated files whose
72
+ metadata version matches the currently installed npm package. npm v7+ does not run package uninstall
73
+ lifecycle scripts, so `npm uninstall -g @tonyclaw/agent-inspector` alone cannot reliably clean these
74
+ files automatically.
58
75
 
59
76
  For local development from source:
60
77
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tonyclaw/agent-inspector",
3
- "version": "2.0.15",
3
+ "version": "2.0.17",
4
4
  "type": "module",
5
5
  "description": "Agent observability and knowledge capture layer for AI coding tools.",
6
6
  "license": "MIT",
@@ -39,7 +39,7 @@
39
39
  "!src/**/__fixtures__",
40
40
  "!src/routeTree.gen.ts",
41
41
  "scripts/setup-windows-runtime.mjs",
42
- "scripts/setup-codex-skill.mjs",
42
+ "scripts/setup-agent-skills.mjs",
43
43
  "styles",
44
44
  ".output",
45
45
  "!.output/*.exe"
@@ -49,7 +49,7 @@
49
49
  "start": "node .output/cli.js",
50
50
  "build": "vite build && bun build:cli",
51
51
  "build:cli": "npx esbuild src/cli.ts --bundle --platform=node --target=node18 --format=esm --outfile=.output/cli.js",
52
- "postinstall": "node scripts/setup-windows-runtime.mjs && node scripts/setup-codex-skill.mjs",
52
+ "postinstall": "node scripts/setup-windows-runtime.mjs && node scripts/setup-agent-skills.mjs",
53
53
  "prepublishOnly": "npm run build",
54
54
  "typecheck": "tsc --noEmit",
55
55
  "lint": "eslint .",
@@ -0,0 +1,64 @@
1
+ import { existsSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { dirname, join } from "node:path";
4
+ import { spawnSync } from "node:child_process";
5
+ import { fileURLToPath } from "node:url";
6
+
7
+ const scriptDir = dirname(fileURLToPath(import.meta.url));
8
+ const packageRoot = dirname(scriptDir);
9
+ const cliEntry = join(packageRoot, ".output", "cli.js");
10
+ const claudeHome = process.env["CLAUDE_HOME"] ?? join(homedir(), ".claude");
11
+ const codexHome = process.env["CODEX_HOME"] ?? join(homedir(), ".codex");
12
+
13
+ function cliIsAvailable() {
14
+ return existsSync(cliEntry);
15
+ }
16
+
17
+ function shouldInstallClaude() {
18
+ if (process.env["AGENT_INSPECTOR_SKIP_CLAUDE_SKILL"] === "1") return false;
19
+ return existsSync(claudeHome) || process.env["AGENT_INSPECTOR_INSTALL_CLAUDE_SKILL"] === "1";
20
+ }
21
+
22
+ function shouldInstallCodex() {
23
+ if (process.env["AGENT_INSPECTOR_SKIP_CODEX_SKILL"] === "1") return false;
24
+ return existsSync(codexHome) || process.env["AGENT_INSPECTOR_INSTALL_CODEX_SKILL"] === "1";
25
+ }
26
+
27
+ function runOnboard(label, args) {
28
+ const result = spawnSync(process.execPath, [cliEntry, "onboard", ...args], {
29
+ stdio: "ignore",
30
+ windowsHide: true,
31
+ });
32
+
33
+ if (result.status !== 0) {
34
+ console.warn(`Skipping ${label} onboard skill installation.`);
35
+ console.warn(`Run later: agent-inspector onboard --force`);
36
+ return false;
37
+ }
38
+
39
+ console.warn(`Agent Inspector onboard skill ready for ${label}.`);
40
+ return true;
41
+ }
42
+
43
+ function main() {
44
+ if (!cliIsAvailable()) return;
45
+
46
+ if (shouldInstallClaude()) {
47
+ if (runOnboard("Claude Code", ["--skip-codex-skill", "--skill-dir", claudeHome])) {
48
+ console.warn(`Next step for Claude Code: /agent-inspector:onboard`);
49
+ }
50
+ }
51
+
52
+ if (shouldInstallCodex()) {
53
+ if (runOnboard("Codex", ["--codex-only"])) {
54
+ console.warn(`Next step for Codex: ask to use the agent-inspector-onboard skill`);
55
+ }
56
+ }
57
+ }
58
+
59
+ try {
60
+ main();
61
+ } catch (error) {
62
+ const message = error instanceof Error ? error.message : String(error);
63
+ console.warn(`Skipping Agent Inspector onboard skill installation: ${message}`);
64
+ }