@ai-matrx/chat 0.7.7 → 0.7.9

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 (115) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/agents/components/chat/chat-quick-actions.config.d.ts +0 -8
  3. package/dist/agents/components/chat/chat-quick-actions.config.js +2 -1
  4. package/dist/agents/components/inputs/smart-input/InputActionButtons.d.ts +2 -2
  5. package/dist/agents/components/inputs/smart-input/InputActionButtons.js +3 -1
  6. package/dist/agents/components/inputs/smart-input/SmartAgentInputStacked.js +8 -3
  7. package/dist/agents/components/messages-display/AgentConversationDisplay.js +1 -1
  8. package/dist/agents/components/messages-display/assistant/AgentEmptyMessageDisplay.js +4 -4
  9. package/dist/agents/components/messages-display/assistant/AssistantMessageFooter.js +4 -2
  10. package/dist/agents/components/messages-display/assistant/AssistantNoAnswer.js +1 -1
  11. package/dist/agents/components/messages-display/assistant/BreathingOrb.js +1 -1
  12. package/dist/agents/components/messages-display/assistant/InPlaceAnswerEditor.js +1 -1
  13. package/dist/agents/components/messages-display/citations/MessageSourcesRow.js +1 -1
  14. package/dist/agents/components/messages-display/conversation-tools/ConversationFindBar.js +4 -4
  15. package/dist/agents/components/messages-display/message-options/EditHistoryDialog.js +7 -7
  16. package/dist/agents/components/messages-display/user/AgentUserMessage.js +4 -4
  17. package/dist/agents/components/messages-display/user/CollabNoteMessage.js +2 -2
  18. package/dist/agents/components/messages-display/user/FirstTurnVariables.js +3 -3
  19. package/dist/agents/components/messages-display/user/PendingSendMessage.js +4 -4
  20. package/dist/agents/components/messages-display/user/RemarksTranscriptView.js +7 -7
  21. package/dist/agents/components/messages-display/user/ResourceAttachmentTile.js +9 -9
  22. package/dist/agents/components/messages-display/user/ResourceEditableToggleSamples.js +4 -4
  23. package/dist/agents/components/messages-display/user/UserActionBar.js +3 -3
  24. package/dist/agents/components/messages-display/user/UserMessageAttachmentStyleComparison.js +12 -12
  25. package/dist/agents/components/messages-display/user/UserMessageChipsDemo.js +19 -19
  26. package/dist/agents/components/messages-display/user/UserMessageHybridTileSamples.js +22 -22
  27. package/dist/agents/components/run/AgentRunnerPage.js +4 -4
  28. package/dist/agents/components/run/AssistantError.js +1 -1
  29. package/dist/agents/components/run/AssistantWarning.js +1 -1
  30. package/dist/agents/components/run/GenerationJobCard.js +5 -5
  31. package/dist/agents/components/run/IncompleteNote.js +1 -1
  32. package/dist/agents/components/run/RunJobWorkingLine.js +1 -1
  33. package/dist/agents/components/shared/AgentConversationColumn.js +1 -1
  34. package/dist/agents/components/shared/AgentHeaderMobile.js +6 -6
  35. package/dist/agents/components/shared/AgentModeController.js +1 -1
  36. package/dist/agents/components/shared/AutoInjectionSwitch.js +6 -6
  37. package/dist/agents/components/shared/DesktopFilterPanel.js +8 -8
  38. package/dist/agents/components/shared/transcript-layout.d.ts +9 -8
  39. package/dist/agents/components/shared/transcript-layout.js +2 -2
  40. package/dist/agents/components/smart/AgentRunner.js +1 -1
  41. package/dist/agents/components/smart/CreateWithAiTabs.js +1 -1
  42. package/dist/cx-chat/components/agent/agents.d.ts +0 -5
  43. package/dist/cx-chat/components/agent/agents.js +4 -3
  44. package/dist/cx-chat/components/agent/local-agents.d.ts +0 -6
  45. package/dist/cx-chat/components/agent/local-agents.js +3 -2
  46. package/dist/host/request-headers.js +3 -1
  47. package/dist/surfaces/manifests/agent-builder.manifest.d.ts +8 -0
  48. package/dist/surfaces/manifests/agent-builder.manifest.js +62 -2
  49. package/dist/tool-call-visualization/components/ArtifactResultBar.js +4 -4
  50. package/dist/tool-call-visualization/components/ChatResultColumn.d.ts +1 -1
  51. package/dist/tool-call-visualization/components/ToolCallBatch.js +2 -2
  52. package/dist/tool-call-visualization/components/ToolCallVisualization.js +5 -5
  53. package/dist/tool-call-visualization/components/ToolTabBodies.js +12 -12
  54. package/dist/tool-call-visualization/components/ToolUpdatesOverlay.js +4 -4
  55. package/dist/tool-call-visualization/configured-rows/ConfiguredToolRow.js +8 -8
  56. package/dist/tool-call-visualization/configured-rows/CopyToolButton.js +1 -1
  57. package/dist/tool-call-visualization/configured-rows/ToolProgressView.js +7 -7
  58. package/dist/tool-call-visualization/configured-rows/field-components.js +6 -6
  59. package/dist/tool-call-visualization/registry/GenericRenderer.js +4 -4
  60. package/dist/tool-call-visualization/renderers/_shared-entity/EmptyResultCard.js +1 -1
  61. package/dist/tool-call-visualization/renderers/_shared-entity/EntityCard.js +5 -5
  62. package/dist/tool-call-visualization/renderers/_shared-entity/PartPeekPopover.js +2 -2
  63. package/dist/tool-call-visualization/renderers/_shared-entity/ToolGlyph.js +1 -1
  64. package/dist/tool-call-visualization/renderers/_shared-entity/ToolResultCard.js +6 -6
  65. package/dist/tool-call-visualization/renderers/agent-call/AgentCallInline.js +5 -5
  66. package/dist/tool-call-visualization/renderers/agent-call/CollabCallCard.js +4 -4
  67. package/dist/tool-call-visualization/renderers/agent-call/ImageGenerationResult.js +1 -1
  68. package/dist/tool-call-visualization/renderers/ask/AskInline.js +3 -3
  69. package/dist/tool-call-visualization/renderers/ask-person/AskPersonInline.js +2 -2
  70. package/dist/tool-call-visualization/renderers/cloud-browser/CloudBrowserRunCard.js +5 -5
  71. package/dist/tool-call-visualization/renderers/ctx/CtxBatchInline.js +3 -3
  72. package/dist/tool-call-visualization/renderers/ctx/CtxGetInline.js +2 -2
  73. package/dist/tool-call-visualization/renderers/ctx/CtxItemCard.js +3 -3
  74. package/dist/tool-call-visualization/renderers/ctx/CtxPatchInline.js +6 -6
  75. package/dist/tool-call-visualization/renderers/dictionary/DictEntryList.js +12 -12
  76. package/dist/tool-call-visualization/renderers/dictionary/DictionaryOverlay.js +5 -5
  77. package/dist/tool-call-visualization/renderers/fs/FsInline.js +7 -7
  78. package/dist/tool-call-visualization/renderers/news-api/NewsInline.js +17 -17
  79. package/dist/tool-call-visualization/renderers/news-api/NewsOverlay.js +12 -12
  80. package/dist/tool-call-visualization/renderers/random-wheel/RandomWheelInline.js +34 -34
  81. package/dist/tool-call-visualization/renderers/records/RecordsInline.js +1 -1
  82. package/dist/tool-call-visualization/renderers/research/ResearchInline.js +10 -10
  83. package/dist/tool-call-visualization/renderers/research/ResearchOverlay.js +19 -19
  84. package/dist/tool-call-visualization/renderers/research/SubagentReportBlock.js +11 -11
  85. package/dist/tool-call-visualization/renderers/scrape/ScrapeInline.js +18 -18
  86. package/dist/tool-call-visualization/renderers/scrape/ScrapeOverlay.js +17 -17
  87. package/dist/tool-call-visualization/renderers/search/SearchInline.js +30 -30
  88. package/dist/tool-call-visualization/renderers/search/SearchOverlay.js +40 -40
  89. package/dist/tool-call-visualization/renderers/shell/ShellInline.js +3 -3
  90. package/dist/tool-call-visualization/renderers/skill/SkillInline.js +5 -5
  91. package/dist/tool-call-visualization/renderers/sql/DbSchemaInline.js +7 -7
  92. package/dist/tool-call-visualization/renderers/sql/SqlInline.js +4 -4
  93. package/dist/tool-call-visualization/renderers/workbook/WorkbookGrid.js +4 -4
  94. package/dist/tool-call-visualization/renderers/workbook/WorkbookInline.js +2 -2
  95. package/dist/tool-call-visualization/renderers/workbook/WorkbookOverlay.js +7 -7
  96. package/dist/tool-call-visualization/renderers/working-document/PatchDiffInline.js +3 -3
  97. package/dist/tool-call-visualization/result-fields/EmptyResult.js +1 -1
  98. package/dist/tool-call-visualization/result-fields/KeyValueGrid.js +9 -9
  99. package/dist/tool-call-visualization/result-fields/ResultFile.js +4 -4
  100. package/dist/tool-call-visualization/result-fields/ResultJson.js +1 -1
  101. package/dist/tool-call-visualization/result-fields/ResultMedia.js +2 -2
  102. package/dist/tool-call-visualization/result-fields/ResultScalar.js +2 -2
  103. package/dist/tool-call-visualization/result-fields/ResultTable.js +10 -10
  104. package/dist/tool-call-visualization/result-fields/ResultValue.js +7 -7
  105. package/dist/tool-call-visualization/result-fields/ShortId.js +3 -3
  106. package/dist/tool-call-visualization/result-fields/ToolErrorCard.js +4 -4
  107. package/dist/tool-call-visualization/result-fields/UrlChips.js +3 -3
  108. package/dist/tool-call-visualization/surface-write/SurfaceWriteDiff.js +2 -2
  109. package/dist/tool-call-visualization/surface-write/SurfaceWriteStress.js +1 -1
  110. package/dist/tool-call-visualization/window-panel/ToolCallWindowPanel.js +9 -9
  111. package/dist/ui/mandates-storage/mandateStorage.d.ts +420 -0
  112. package/dist/ui/mandates-storage/shortcutStorage.d.ts +105 -0
  113. package/dist/ui/projectCreateAiDebug.d.ts +0 -5
  114. package/dist/ui/projectCreateAiDebug.js +2 -1
  115. package/package.json +23 -13
@@ -45,7 +45,7 @@ function RadioSelect({
45
45
  onClick: () => onChange(opt.value),
46
46
  className: cn(
47
47
  "flex items-center gap-2 px-3 py-1.5 rounded-md text-sm transition-colors text-left",
48
- value === opt.value ? "bg-primary/10 text-primary-ink font-medium" : "text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))] hover:bg-[var(--mx-chat-fill,hsl(var(--muted)))] hover:text-[color:var(--mx-chat-text,hsl(var(--foreground)))]"
48
+ value === opt.value ? "bg-primary/10 text-primary-ink font-medium" : "text-muted-foreground hover:bg-muted hover:text-foreground"
49
49
  ),
50
50
  children: [
51
51
  /* @__PURE__ */ jsx(
@@ -86,7 +86,7 @@ function MultiSelectChips({
86
86
  };
87
87
  return /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
88
88
  items.length > 5 && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 px-2 h-7 rounded-md bg-muted/50 border border-border/50", children: [
89
- /* @__PURE__ */ jsx(Search, { className: "h-3 w-3 text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))] shrink-0" }),
89
+ /* @__PURE__ */ jsx(Search, { className: "h-3 w-3 text-muted-foreground shrink-0" }),
90
90
  /* @__PURE__ */ jsx(
91
91
  "input",
92
92
  {
@@ -94,7 +94,7 @@ function MultiSelectChips({
94
94
  placeholder: searchPlaceholder,
95
95
  value: searchQ,
96
96
  onChange: (e) => setSearchQ(e.target.value),
97
- className: "flex-1 bg-transparent text-xs text-[color:var(--mx-chat-text,hsl(var(--foreground)))] placeholder:text-muted-foreground/50 outline-none"
97
+ className: "flex-1 bg-transparent text-xs text-foreground placeholder:text-muted-foreground/50 outline-none"
98
98
  }
99
99
  ),
100
100
  searchQ && /* @__PURE__ */ jsx(Button, { variant: "quiet", icon: /* @__PURE__ */ jsx(X, {}), "aria-label": "Clear search", onClick: () => setSearchQ("") })
@@ -107,7 +107,7 @@ function MultiSelectChips({
107
107
  return /* @__PURE__ */ jsx(Chip, { asChild: true, pressed: isSelected, label: item, children: /* @__PURE__ */ jsx("button", { type: "button", onClick: () => toggle(item) }) }, item);
108
108
  })
109
109
  ] }) }),
110
- filtered.length === 0 && searchQ && /* @__PURE__ */ jsx("p", { className: "text-xs text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]", children: "No matches" })
110
+ filtered.length === 0 && searchQ && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "No matches" })
111
111
  ] });
112
112
  }
113
113
  function FilterSection({
@@ -117,7 +117,7 @@ function FilterSection({
117
117
  }) {
118
118
  return /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
119
119
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
120
- /* @__PURE__ */ jsx("span", { className: "text-xs font-semibold text-[color:var(--mx-chat-text,hsl(var(--foreground)))] uppercase tracking-wider", children: label }),
120
+ /* @__PURE__ */ jsx("span", { className: "text-xs font-semibold text-foreground uppercase tracking-wider", children: label }),
121
121
  active && /* @__PURE__ */ jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-primary" })
122
122
  ] }),
123
123
  children
@@ -194,7 +194,7 @@ function DesktopFilterPanel({
194
194
  maxHeight: "var(--radix-popover-content-available-height, calc(100dvh - 120px))"
195
195
  },
196
196
  children: [
197
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-2.5 border-b border-[color:var(--mx-chat-border,hsl(var(--border)))] shrink-0", children: [
197
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-2.5 border-b border-border shrink-0", children: [
198
198
  /* @__PURE__ */ jsx("span", { className: "text-sm font-semibold", children: "Filters & Sort" }),
199
199
  activeFilterCount > 0 && /* @__PURE__ */ jsx(Button, { variant: "quiet", tone: "primary", icon: /* @__PURE__ */ jsx(RotateCcw, {}), onClick: resetFilters, children: "Reset all" })
200
200
  ] }),
@@ -267,7 +267,7 @@ function DesktopFilterPanel({
267
267
  {
268
268
  className: cn(
269
269
  "w-8 h-[18px] rounded-full relative transition-colors shrink-0",
270
- favoritesFirst ? "bg-primary" : "bg-[var(--mx-chat-fill,hsl(var(--muted)))] border border-[color:var(--mx-chat-border,hsl(var(--border)))]"
270
+ favoritesFirst ? "bg-primary" : "bg-muted border border-border"
271
271
  ),
272
272
  children: /* @__PURE__ */ jsx(
273
273
  "span",
@@ -280,7 +280,7 @@ function DesktopFilterPanel({
280
280
  )
281
281
  }
282
282
  ),
283
- /* @__PURE__ */ jsx("span", { className: "text-[color:var(--mx-chat-text,hsl(var(--foreground)))]", children: "Pin favorites to top" })
283
+ /* @__PURE__ */ jsx("span", { className: "text-foreground", children: "Pin favorites to top" })
284
284
  ]
285
285
  }
286
286
  ) })
@@ -1,24 +1,25 @@
1
1
  /**
2
2
  * How a host lays the ONE conversation column out (HOST-OWNED-SOURCE-PLAN P28e look bar).
3
3
  *
4
- * Knobs, never forks: every value has today's web default, and a host that says nothing gets
5
- * exactly the web chat. Matrx 2 (desktop) fills its pane, starts at the left edge and draws the
4
+ * Knobs, never forks: a host that says nothing gets the default look (flat compact user turn,
5
+ * actions on hover). Matrx 2 (desktop) fills its pane, starts at the left edge and draws the
6
6
  * person's turn as a compact block — the look its coding screen had before the column.
7
7
  *
8
8
  * - `width`: "reading" (the canonical `max-w-3xl` reading column) | "fill" (the host's pane).
9
9
  * - `align`: "center" | "start" — where a reading-width column sits in a wider pane.
10
- * - `userMessage`: "card" (the bordered card that collapses a long message behind a chevron) |
11
- * "compact" (a tight block; only a genuinely long message collapses).
12
- * - `answerActions`: "shown" (the answer's action row always visible on the latest answer) |
13
- * "hover" (revealed on hover / keyboard focus — a finished answer ends on its last word, not on
14
- * a lone ⋯ that reads as "still writing" in a host with few actions).
10
+ * - `userMessage`: "compact" (DEFAULT: a flat tight block; only a genuinely long message
11
+ * collapses) | "card" (the bordered card that collapses a long message behind a chevron).
12
+ * - `answerActions`: "hover" (DEFAULT: the action row is revealed on hover / keyboard focus, and
13
+ * always on touch — its height is reserved, so revealing it moves nothing; a finished answer ends
14
+ * on its last word) | "latest" (the latest answer's row is always visible, older ones on hover) |
15
+ * "shown" (every answer's row always visible).
15
16
  */
16
17
  import { type ReactNode } from "react";
17
18
  export interface TranscriptLayout {
18
19
  width?: "reading" | "fill";
19
20
  align?: "center" | "start";
20
21
  userMessage?: "card" | "compact";
21
- answerActions?: "shown" | "hover";
22
+ answerActions?: "shown" | "latest" | "hover";
22
23
  }
23
24
  export declare const DEFAULT_TRANSCRIPT_LAYOUT: Required<TranscriptLayout>;
24
25
  export declare function resolveTranscriptLayout(layout?: TranscriptLayout): Required<TranscriptLayout>;
@@ -6,8 +6,8 @@ import {
6
6
  const DEFAULT_TRANSCRIPT_LAYOUT = {
7
7
  width: "reading",
8
8
  align: "center",
9
- userMessage: "card",
10
- answerActions: "shown"
9
+ userMessage: "compact",
10
+ answerActions: "hover"
11
11
  };
12
12
  const TranscriptLayoutContext = createContext(DEFAULT_TRANSCRIPT_LAYOUT);
13
13
  function resolveTranscriptLayout(layout) {
@@ -130,7 +130,7 @@ function AgentRunnerFrame({
130
130
  {
131
131
  className: `relative mx-auto h-full w-full max-w-[800px] overflow-hidden bg-background ${className}`,
132
132
  children: [
133
- showTitle && title && /* @__PURE__ */ jsx("div", { className: "absolute top-0 left-0 right-0 z-10 px-4 py-2 border-b border-[color:var(--mx-chat-border,hsl(var(--border)))] bg-background", children: /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-[color:var(--mx-chat-text,hsl(var(--foreground)))] truncate", children: title }) }),
133
+ showTitle && title && /* @__PURE__ */ jsx("div", { className: "absolute top-0 left-0 right-0 z-10 px-4 py-2 border-b border-border bg-background", children: /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-foreground truncate", children: title }) }),
134
134
  /* @__PURE__ */ jsx(
135
135
  "div",
136
136
  {
@@ -71,7 +71,7 @@ function CreateWithAiTabs({
71
71
  };
72
72
  return /* @__PURE__ */ jsxs("div", { className: cn("flex h-full min-h-0 flex-col", className), children: [
73
73
  /* @__PURE__ */ jsx("div", { className: cn("flex-shrink-0 px-1 pb-3", headerClassName), children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
74
- /* @__PURE__ */ jsxs("div", { className: "inline-flex w-full items-center gap-1 rounded-lg bg-[var(--mx-chat-fill,hsl(var(--muted)))] p-1", children: [
74
+ /* @__PURE__ */ jsxs("div", { className: "inline-flex w-full items-center gap-1 rounded-lg bg-muted p-1", children: [
75
75
  /* @__PURE__ */ jsx(
76
76
  ModeButton,
77
77
  {
@@ -5,11 +5,6 @@ import type { WelcomeAgent } from "../ChatWelcomeServer.js";
5
5
  * demo root page resolves it.
6
6
  */
7
7
  export declare const CX_DEFAULT_MANDATE_KEY: "chat.cx_default";
8
- /**
9
- * SEED MIRROR of the `chat.cx_default` mandate's system default — kept only
10
- * as the loud-fallback display seed (`getDefaultAgent`) when resolution fails
11
- * on this dev surface. Nothing launches from it.
12
- */
13
8
  export declare const DEFAULT_AGENT_ID = "ce7c5e71-cbdc-4ed1-8dd9-a7eac930b6b8";
14
9
  export declare const MATRX_CHAT_AGENT: WelcomeAgent;
15
10
  /**
@@ -1,8 +1,9 @@
1
1
  import { MANDATE_KEYS } from "@ai-matrx/agents/mandates";
2
2
  const CX_DEFAULT_MANDATE_KEY = MANDATE_KEYS.chat__cx_default;
3
- const DEFAULT_AGENT_ID = "ce7c5e71-cbdc-4ed1-8dd9-a7eac930b6b8";
3
+ const MATRX_CHAT_SEED_AGENT_ID = "ce7c5e71-cbdc-4ed1-8dd9-a7eac930b6b8";
4
+ const DEFAULT_AGENT_ID = MATRX_CHAT_SEED_AGENT_ID;
4
5
  const MATRX_CHAT_AGENT = {
5
- promptId: "ce7c5e71-cbdc-4ed1-8dd9-a7eac930b6b8",
6
+ promptId: MATRX_CHAT_SEED_AGENT_ID,
6
7
  name: "Matrx Chat",
7
8
  description: "Fully customizable agent.",
8
9
  variableDefaults: [
@@ -86,7 +87,7 @@ const MATRX_CHAT_AGENT = {
86
87
  ]
87
88
  };
88
89
  const BUILTIN_AGENTS = {
89
- "ce7c5e71-cbdc-4ed1-8dd9-a7eac930b6b8": MATRX_CHAT_AGENT,
90
+ [MATRX_CHAT_SEED_AGENT_ID]: MATRX_CHAT_AGENT,
90
91
  "3ca61863-43cf-49cd-8da5-7e0a4b192867": {
91
92
  promptId: "3ca61863-43cf-49cd-8da5-7e0a4b192867",
92
93
  name: "Custom Chat",
@@ -9,12 +9,6 @@ export interface AgentOption {
9
9
  promptId: string;
10
10
  variableDefaults?: VariableDefinition[];
11
11
  }
12
- /**
13
- * SEED MIRROR of the `chat.default_new_chat` mandate's system default. Runtime
14
- * paths resolve the mandate (see `features/mandates`); this constant remains
15
- * only as the demo conversation page's loud-fallback and for the (currently
16
- * unconsumed) `useInstanceBootstrap` URL-parse fallback.
17
- */
18
12
  export declare const DEFAULT_AGENT_ID = "6b6b4e45-4699-4860-8dea-d8a60e07d69a";
19
13
  export declare const DEFAULT_AGENTS: AgentOption[];
20
14
  /** The response-mode strip under the composer, in render order. */
@@ -8,14 +8,15 @@ import {
8
8
  Lightbulb
9
9
  } from "lucide-react";
10
10
  import { MANDATE_KEYS } from "@ai-matrx/agents/mandates";
11
- const DEFAULT_AGENT_ID = "6b6b4e45-4699-4860-8dea-d8a60e07d69a";
11
+ const GENERAL_CHAT_SEED_AGENT_ID = "6b6b4e45-4699-4860-8dea-d8a60e07d69a";
12
+ const DEFAULT_AGENT_ID = GENERAL_CHAT_SEED_AGENT_ID;
12
13
  const DEFAULT_AGENTS = [
13
14
  {
14
15
  id: "general-chat",
15
16
  name: "General Chat",
16
17
  description: "Helpful general assistant.",
17
18
  icon: React.createElement(MessageCircle, { size: 18 }),
18
- promptId: "6b6b4e45-4699-4860-8dea-d8a60e07d69a",
19
+ promptId: GENERAL_CHAT_SEED_AGENT_ID,
19
20
  variableDefaults: []
20
21
  },
21
22
  {
@@ -1,5 +1,6 @@
1
1
  import { credentialToHeaders } from "@ai-matrx/data";
2
2
  import { adminLaneHeadersFor } from "./server/admin-lane.js";
3
+ import { isChatHostConfigured } from "./configure.js";
3
4
  function chatRequestHeaders(credential, organizationId) {
4
5
  const presented = credential.accessToken ? { kind: "user", accessToken: credential.accessToken } : credential.fingerprintId ? { kind: "guest", fingerprintId: credential.fingerprintId } : null;
5
6
  const headers = credentialToHeaders(presented);
@@ -7,7 +8,8 @@ function chatRequestHeaders(credential, organizationId) {
7
8
  return {
8
9
  ...headers,
9
10
  "X-Organization-Id": organizationId,
10
- ...adminLaneHeadersFor(organizationId)
11
+ // The admin lane is the configured host's rule; a host still being resolved has none yet.
12
+ ...isChatHostConfigured() ? adminLaneHeadersFor(organizationId) : {}
11
13
  };
12
14
  }
13
15
  export {
@@ -80,4 +80,12 @@ export declare function createAgentBuilderScope(values: {
80
80
  variable_custom_component?: unknown;
81
81
  variable_binding?: unknown;
82
82
  variable_json?: object;
83
+ test_run_conversation_id?: string;
84
+ test_run_variables?: Record<string, unknown>;
85
+ test_run_user_input?: string;
86
+ test_run_response?: string;
87
+ test_run_transcript?: {
88
+ role: string;
89
+ text: string;
90
+ }[];
83
91
  }): SurfaceScopePayload;
@@ -42,9 +42,66 @@ const groups = [
42
42
  label: "Focused variable",
43
43
  sortOrder: 700,
44
44
  description: "The single variable definition the user is editing right now in the variable editor."
45
+ },
46
+ {
47
+ key: "test_run",
48
+ label: "Test run",
49
+ sortOrder: 800,
50
+ description: "The person's latest run of this agent in the builder's test panel: the values it ran with, what they typed, the answer and the whole exchange."
45
51
  }
46
52
  ];
47
53
  const surfaceSpecific = [
54
+ // ── Test run (800-840) — Agent Factory R58: the helper beside the builder sees the run ──
55
+ {
56
+ name: "test_run_conversation_id",
57
+ label: "Test run conversation",
58
+ description: "Id of the conversation the person last ran this agent in, in the builder's test panel. Absent until they run it.",
59
+ valueType: "string",
60
+ alwaysAvailable: false,
61
+ typicalCharCount: 36,
62
+ group: "test_run",
63
+ sortOrder: 800
64
+ },
65
+ {
66
+ name: "test_run_variables",
67
+ label: "Test run variables",
68
+ description: "The variable values the agent ran with in that test run (name \u2192 value). Absent until the person runs it.",
69
+ valueType: "object",
70
+ alwaysAvailable: false,
71
+ typicalCharCount: 600,
72
+ group: "test_run",
73
+ sortOrder: 810
74
+ },
75
+ {
76
+ name: "test_run_user_input",
77
+ label: "Test run input",
78
+ description: "What the person typed in their latest test-run turn. Empty when they only filled variables.",
79
+ valueType: "string",
80
+ alwaysAvailable: false,
81
+ typicalCharCount: 300,
82
+ group: "test_run",
83
+ sortOrder: 820
84
+ },
85
+ {
86
+ name: "test_run_response",
87
+ label: "Test run answer",
88
+ description: "The agent's latest answer in the test run, as the person read it. Absent while it is still answering.",
89
+ valueType: "string",
90
+ alwaysAvailable: false,
91
+ typicalCharCount: 3e3,
92
+ group: "test_run",
93
+ sortOrder: 830
94
+ },
95
+ {
96
+ name: "test_run_transcript",
97
+ label: "Test run transcript",
98
+ description: "The whole test-run conversation in order, one { role, text } per message (person and agent turns). Use it to judge the answer against what was asked.",
99
+ valueType: "array",
100
+ alwaysAvailable: false,
101
+ typicalCharCount: 6e3,
102
+ group: "test_run",
103
+ sortOrder: 840
104
+ },
48
105
  // ── Agent identity (300-339) ──────────────────────────────────────────
49
106
  {
50
107
  name: "agent_id",
@@ -577,8 +634,11 @@ Read the values this way:
577
634
  - \`agent_is_read_only\` being true means the user cannot save \u2014 propose, do not
578
635
  promise to apply.
579
636
 
580
- You are helping AUTHOR an agent. Nothing here has run yet; the run transcript
581
- lives on the separate Agent Run surface.
637
+ You are helping AUTHOR an agent. When the person runs it in the builder's test
638
+ panel, the \`test_run_*\` values carry that run: the variables it ran with, what
639
+ they typed, the answer, and the whole exchange \u2014 judge the answer against the
640
+ agent's job and suggest what to change. Absent \`test_run_*\` values mean it has
641
+ not been run here yet.
582
642
 
583
643
  You can also WRITE here, but only to the authored prose: the system
584
644
  instruction, description, name, category, and tags. Everything that decides
@@ -92,7 +92,7 @@ function ArtifactResultBar({
92
92
  }
93
93
  },
94
94
  className: cn(
95
- "group/bar flex w-full cursor-pointer items-center gap-3 border border-border/50 bg-[var(--mx-chat-card,hsl(var(--card)))] px-4 py-2.5 text-left transition-colors hover:bg-accent/30",
95
+ "group/bar flex w-full cursor-pointer items-center gap-3 border border-border/50 bg-card px-4 py-2.5 text-left transition-colors hover:bg-accent/30",
96
96
  // Collapsed: a full pill. Expanded: the letterhead of the attached
97
97
  // document — square bottom, no bottom border, the body continues it.
98
98
  peekExpanded ? "rounded-t-xl border-b-0" : "rounded-xl"
@@ -106,8 +106,8 @@ function ArtifactResultBar({
106
106
  }
107
107
  ),
108
108
  /* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1", children: [
109
- /* @__PURE__ */ jsx("span", { className: "block truncate text-sm font-medium text-[color:var(--mx-chat-text,hsl(var(--foreground)))]", children: title }),
110
- /* @__PURE__ */ jsxs("span", { className: "block truncate text-xs text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]", children: [
109
+ /* @__PURE__ */ jsx("span", { className: "block truncate text-sm font-medium text-foreground", children: title }),
110
+ /* @__PURE__ */ jsxs("span", { className: "block truncate text-xs text-muted-foreground", children: [
111
111
  meta.noun,
112
112
  " \xB7 ",
113
113
  artifact.verbPast
@@ -121,7 +121,7 @@ function ArtifactResultBar({
121
121
  tabIndex: 0,
122
122
  onClick: (e) => e.stopPropagation(),
123
123
  onKeyDown: (e) => e.stopPropagation(),
124
- className: "flex shrink-0 cursor-pointer items-center gap-1.5 rounded-xl border border-border/70 bg-background/60 px-2.5 py-1.5 text-xs font-medium text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))] transition-colors hover:bg-accent/40 hover:text-[color:var(--mx-chat-text,hsl(var(--foreground)))]",
124
+ className: "flex shrink-0 cursor-pointer items-center gap-1.5 rounded-xl border border-border/70 bg-background/60 px-2.5 py-1.5 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent/40 hover:text-foreground",
125
125
  "aria-label": "Open options",
126
126
  children: [
127
127
  /* @__PURE__ */ jsx(PanelRightOpen, { className: "size-3.5" }),
@@ -6,7 +6,7 @@ import React from "react";
6
6
  * In the real conversation, a tool card sits inside `AgentConversationColumn`'s
7
7
  * centered content (`w-full max-w-3xl mx-auto px-2`) directly on the plain
8
8
  * conversation surface — NO surrounding card, border, padding, or background
9
- * change. Tools that look fine inside a decorative `bg-[var(--mx-chat-card,hsl(var(--card)))]` demo panel can
9
+ * change. Tools that look fine inside a decorative `bg-card` demo panel can
10
10
  * render badly in chat (stray borders, odd bg shifts). Previewing in anything
11
11
  * but this column lies about how the tool actually renders, so every gallery /
12
12
  * "in action" preview must wrap its `ToolCallVisualization` in this.
@@ -131,8 +131,8 @@ const ToolCallBatch = ({
131
131
  text: `Running ${count} tools\u2026`,
132
132
  className: "truncate font-sans text-sm leading-relaxed tracking-wide"
133
133
  }
134
- ) : /* @__PURE__ */ jsx("span", { className: "truncate font-sans text-sm leading-relaxed tracking-wide text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]", children: label }),
135
- isExpanded ? /* @__PURE__ */ jsx(ChevronDown, { className: "h-3.5 w-3.5 shrink-0 text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]" }) : /* @__PURE__ */ jsx(ChevronRight, { className: "h-3.5 w-3.5 shrink-0 text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]" })
134
+ ) : /* @__PURE__ */ jsx("span", { className: "truncate font-sans text-sm leading-relaxed tracking-wide text-muted-foreground", children: label }),
135
+ isExpanded ? /* @__PURE__ */ jsx(ChevronDown, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground" }) : /* @__PURE__ */ jsx(ChevronRight, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground" })
136
136
  ]
137
137
  }
138
138
  ),
@@ -282,7 +282,7 @@ const ToolCallVisualizationInner = ({
282
282
  ) : /* @__PURE__ */ jsx(
283
283
  "span",
284
284
  {
285
- className: "truncate font-sans text-sm leading-relaxed tracking-wide text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]",
285
+ className: "truncate font-sans text-sm leading-relaxed tracking-wide text-muted-foreground",
286
286
  title: guardRouting?.tooltip,
287
287
  children: phaseLabel
288
288
  }
@@ -298,7 +298,7 @@ const ToolCallVisualizationInner = ({
298
298
  querySubtitle
299
299
  ] }))
300
300
  ] }),
301
- isExpanded ? /* @__PURE__ */ jsx(ChevronDown, { className: "h-3.5 w-3.5 shrink-0 text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]" }) : /* @__PURE__ */ jsx(ChevronRight, { className: "h-3.5 w-3.5 shrink-0 text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]" }),
301
+ isExpanded ? /* @__PURE__ */ jsx(ChevronDown, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground" }) : /* @__PURE__ */ jsx(ChevronRight, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground" }),
302
302
  /* @__PURE__ */ jsxs("span", { className: "flex shrink-0 items-center gap-0.5 opacity-0 transition-opacity focus-within:opacity-100 group-hover/toolcard:opacity-100", children: [
303
303
  /* @__PURE__ */ jsx(
304
304
  "span",
@@ -316,7 +316,7 @@ const ToolCallVisualizationInner = ({
316
316
  handleOpenWindowPanel();
317
317
  }
318
318
  },
319
- className: "cursor-pointer rounded p-0.5 text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))] transition-colors hover:bg-[var(--mx-chat-fill,hsl(var(--muted)))] hover:text-[color:var(--mx-chat-text,hsl(var(--foreground)))]",
319
+ className: "cursor-pointer rounded p-0.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
320
320
  title: "Open in floating window",
321
321
  children: /* @__PURE__ */ jsx(PanelRightOpen, { className: "h-3 w-3" })
322
322
  }
@@ -339,7 +339,7 @@ const ToolCallVisualizationInner = ({
339
339
  setIsOverlayOpen(true);
340
340
  }
341
341
  },
342
- className: "cursor-pointer rounded p-0.5 text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))] transition-colors hover:bg-[var(--mx-chat-fill,hsl(var(--muted)))] hover:text-[color:var(--mx-chat-text,hsl(var(--foreground)))]",
342
+ className: "cursor-pointer rounded p-0.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
343
343
  title: "Open fullscreen overlay",
344
344
  children: /* @__PURE__ */ jsx(Maximize2, { className: "h-3 w-3" })
345
345
  }
@@ -372,7 +372,7 @@ const ToolCallVisualizationInner = ({
372
372
  const entryParked = parkedOnPersonOf(entry, suspendedCallIds);
373
373
  const InlineRenderer = isErrored || entryWait || entryParked ? null : getInlineRenderer(entry.toolName);
374
374
  return /* @__PURE__ */ jsxs("div", { children: [
375
- entries.length > 1 && /* @__PURE__ */ jsx("div", { className: "mb-1 text-[10px] font-semibold uppercase tracking-wide text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]", children: groupDisplayName }),
375
+ entries.length > 1 && /* @__PURE__ */ jsx("div", { className: "mb-1 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground", children: groupDisplayName }),
376
376
  entryParked ? /* @__PURE__ */ jsx(
377
377
  ParkedOnPersonCard,
378
378
  {
@@ -34,8 +34,8 @@ const InputView = ({
34
34
  const args = entry.arguments ?? {};
35
35
  const argCount = Object.keys(args).length;
36
36
  return /* @__PURE__ */ jsxs("div", { className: "flex h-full flex-col", children: [
37
- /* @__PURE__ */ jsxs("div", { className: "flex flex-shrink-0 items-center justify-between border-b border-[color:var(--mx-chat-border,hsl(var(--border)))] bg-muted/30 px-3 py-1.5", children: [
38
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-xs text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]", children: [
37
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-shrink-0 items-center justify-between border-b border-border bg-muted/30 px-3 py-1.5", children: [
38
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-xs text-muted-foreground", children: [
39
39
  /* @__PURE__ */ jsx(Settings2, { className: "h-3.5 w-3.5" }),
40
40
  /* @__PURE__ */ jsx("span", { children: "Tool input" }),
41
41
  /* @__PURE__ */ jsxs(Badge, { variant: "outline", className: "px-1.5 py-0 text-[10px]", children: [
@@ -102,9 +102,9 @@ const ErrorView = ({
102
102
  const hasArgs = Object.keys(args).length > 0;
103
103
  const bundle = buildToolEntryBundle(entry);
104
104
  return /* @__PURE__ */ jsxs("div", { className: "flex h-full flex-col", children: [
105
- /* @__PURE__ */ jsxs("div", { className: "flex flex-shrink-0 items-center justify-between border-b border-[color:var(--mx-chat-border,hsl(var(--border)))] bg-muted/30 px-3 py-1.5", children: [
106
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-xs text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]", children: [
107
- routed ? /* @__PURE__ */ jsx(Route, { className: "h-3.5 w-3.5 text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]" }) : /* @__PURE__ */ jsx(CircleAlert, { className: "h-3.5 w-3.5 text-destructive" }),
105
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-shrink-0 items-center justify-between border-b border-border bg-muted/30 px-3 py-1.5", children: [
106
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-xs text-muted-foreground", children: [
107
+ routed ? /* @__PURE__ */ jsx(Route, { className: "h-3.5 w-3.5 text-muted-foreground" }) : /* @__PURE__ */ jsx(CircleAlert, { className: "h-3.5 w-3.5 text-destructive" }),
108
108
  /* @__PURE__ */ jsx("span", { children: routed ? "Routed" : "Error" }),
109
109
  entry.errorType && /* @__PURE__ */ jsxs(
110
110
  Badge,
@@ -134,11 +134,11 @@ const ErrorView = ({
134
134
  ] }),
135
135
  /* @__PURE__ */ jsxs("div", { className: "flex-1 space-y-4 overflow-auto px-3 py-3", children: [
136
136
  /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
137
- /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-[color:var(--mx-chat-text,hsl(var(--foreground)))]", children: label }),
138
- message ? /* @__PURE__ */ jsx("p", { className: "whitespace-pre-wrap break-words text-sm leading-relaxed text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]", children: message }) : /* @__PURE__ */ jsx("p", { className: "text-sm italic text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]", children: "No error message was recorded. Check the Raw tab for events." })
137
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-foreground", children: label }),
138
+ message ? /* @__PURE__ */ jsx("p", { className: "whitespace-pre-wrap break-words text-sm leading-relaxed text-muted-foreground", children: message }) : /* @__PURE__ */ jsx("p", { className: "text-sm italic text-muted-foreground", children: "No error message was recorded. Check the Raw tab for events." })
139
139
  ] }),
140
- hasArgs && /* @__PURE__ */ jsxs("div", { className: "space-y-1.5 border-t border-[color:var(--mx-chat-border,hsl(var(--border)))] pt-3", children: [
141
- /* @__PURE__ */ jsx("p", { className: "text-[11px] font-medium uppercase tracking-wide text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]", children: "Input that failed" }),
140
+ hasArgs && /* @__PURE__ */ jsxs("div", { className: "space-y-1.5 border-t border-border pt-3", children: [
141
+ /* @__PURE__ */ jsx("p", { className: "text-[11px] font-medium uppercase tracking-wide text-muted-foreground", children: "Input that failed" }),
142
142
  /* @__PURE__ */ jsx(KeyValueGrid, { value: args, density: "full" })
143
143
  ] })
144
144
  ] })
@@ -149,8 +149,8 @@ const RawDataView = ({
149
149
  }) => {
150
150
  const bundle = buildToolEntryBundle(entry);
151
151
  return /* @__PURE__ */ jsxs("div", { className: "flex h-full flex-col", children: [
152
- /* @__PURE__ */ jsxs("div", { className: "flex flex-shrink-0 items-center justify-between border-b border-[color:var(--mx-chat-border,hsl(var(--border)))] bg-muted/30 px-3 py-1.5", children: [
153
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-xs text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]", children: [
152
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-shrink-0 items-center justify-between border-b border-border bg-muted/30 px-3 py-1.5", children: [
153
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-xs text-muted-foreground", children: [
154
154
  /* @__PURE__ */ jsx(FileCode2, { className: "h-3.5 w-3.5" }),
155
155
  /* @__PURE__ */ jsx("span", { children: "All" }),
156
156
  /* @__PURE__ */ jsxs(Badge, { variant: "outline", className: "px-1.5 py-0 text-[10px]", children: [
@@ -172,7 +172,7 @@ const RawDataView = ({
172
172
  }
173
173
  )
174
174
  ] }),
175
- /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-hidden p-2", children: /* @__PURE__ */ jsx("div", { className: "h-full min-h-[280px] overflow-hidden rounded-md border border-[color:var(--mx-chat-border,hsl(var(--border)))] bg-[var(--mx-chat-card,hsl(var(--card)))]", children: /* @__PURE__ */ jsx(JsonInspector, { showSource: true, data: bundle }) }) })
175
+ /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-hidden p-2", children: /* @__PURE__ */ jsx("div", { className: "h-full min-h-[280px] overflow-hidden rounded-md border border-border bg-card", children: /* @__PURE__ */ jsx(JsonInspector, { showSource: true, data: bundle }) }) })
176
176
  ] });
177
177
  };
178
178
  const EntryResultsBody = ({ entry, conversationId: conversationIdProp }) => {
@@ -19,8 +19,8 @@ import {
19
19
  import { Button } from "@ai-matrx/design-system/controls";
20
20
  const EntrySelector = ({ entries, selectedCallId, onSelect }) => {
21
21
  if (entries.length <= 1) return null;
22
- return /* @__PURE__ */ jsxs("div", { className: "flex flex-shrink-0 items-center gap-1.5 overflow-x-auto border-b border-[color:var(--mx-chat-border,hsl(var(--border)))] bg-muted/40 px-3 py-1.5 scrollbar-none", children: [
23
- /* @__PURE__ */ jsx("span", { className: "mr-1 flex-shrink-0 text-xs text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]", children: "Tool" }),
22
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-shrink-0 items-center gap-1.5 overflow-x-auto border-b border-border bg-muted/40 px-3 py-1.5 scrollbar-none", children: [
23
+ /* @__PURE__ */ jsx("span", { className: "mr-1 flex-shrink-0 text-xs text-muted-foreground", children: "Tool" }),
24
24
  entries.map((entry, idx) => {
25
25
  const label = getToolDisplayName(entry.toolName);
26
26
  const isActive = entry.callId === selectedCallId;
@@ -72,7 +72,7 @@ const InputTabContent = ({ entries, selectedCallId, onSelect }) => {
72
72
  onSelect
73
73
  }
74
74
  ),
75
- /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-hidden", children: entry ? /* @__PURE__ */ jsx(InputView, { entry }) : /* @__PURE__ */ jsx("div", { className: "p-8 text-center text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]", children: /* @__PURE__ */ jsx("p", { className: "text-sm", children: "No tool data available" }) }) })
75
+ /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-hidden", children: entry ? /* @__PURE__ */ jsx(InputView, { entry }) : /* @__PURE__ */ jsx("div", { className: "p-8 text-center text-muted-foreground", children: /* @__PURE__ */ jsx("p", { className: "text-sm", children: "No tool data available" }) }) })
76
76
  ] });
77
77
  };
78
78
  const RawTabContent = ({ entries, selectedCallId, onSelect }) => {
@@ -86,7 +86,7 @@ const RawTabContent = ({ entries, selectedCallId, onSelect }) => {
86
86
  onSelect
87
87
  }
88
88
  ),
89
- /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-hidden", children: entry ? /* @__PURE__ */ jsx(RawDataView, { entry }) : /* @__PURE__ */ jsx("div", { className: "p-8 text-center text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]", children: /* @__PURE__ */ jsx("p", { className: "text-sm", children: "No tool data available" }) }) })
89
+ /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-hidden", children: entry ? /* @__PURE__ */ jsx(RawDataView, { entry }) : /* @__PURE__ */ jsx("div", { className: "p-8 text-center text-muted-foreground", children: /* @__PURE__ */ jsx("p", { className: "text-sm", children: "No tool data available" }) }) })
90
90
  ] });
91
91
  };
92
92
  const ToolUpdatesOverlay = ({
@@ -40,7 +40,7 @@ function ConfiguredToolRow({ entry, kind, cfg }) {
40
40
  kind === "server" && /* @__PURE__ */ jsx(
41
41
  ChevronRight,
42
42
  {
43
- className: `size-3 shrink-0 text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))] transition-transform ${open ? "rotate-90" : ""}`
43
+ className: `size-3 shrink-0 text-muted-foreground transition-transform ${open ? "rotate-90" : ""}`
44
44
  }
45
45
  ),
46
46
  /* @__PURE__ */ jsx(
@@ -53,18 +53,18 @@ function ConfiguredToolRow({ entry, kind, cfg }) {
53
53
  spin: shouldSpin
54
54
  }
55
55
  ),
56
- headerLabel && /* @__PURE__ */ jsx("span", { className: cn("truncate text-[color:var(--mx-chat-text,hsl(var(--foreground)))]", shimmer && "min-w-0"), children: shimmer ? /* @__PURE__ */ jsx(ShimmerText, { text: headerLabel }) : headerLabel }),
56
+ headerLabel && /* @__PURE__ */ jsx("span", { className: cn("truncate text-foreground", shimmer && "min-w-0"), children: shimmer ? /* @__PURE__ */ jsx(ShimmerText, { text: headerLabel }) : headerLabel }),
57
57
  infoText && /* @__PURE__ */ jsx(
58
58
  "span",
59
59
  {
60
60
  className: cn(
61
- "text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]",
61
+ "text-muted-foreground",
62
62
  inline.isMultiline ? "whitespace-pre-wrap" : "truncate"
63
63
  ),
64
64
  children: infoText
65
65
  }
66
66
  ),
67
- phase !== "started" && entry.endedAt && /* @__PURE__ */ jsxs("span", { className: "ml-auto text-[10px] text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]", children: [
67
+ phase !== "started" && entry.endedAt && /* @__PURE__ */ jsxs("span", { className: "ml-auto text-[10px] text-muted-foreground", children: [
68
68
  Math.max(1, entry.endedAt - entry.startedAt),
69
69
  "ms"
70
70
  ] })
@@ -144,7 +144,7 @@ function ExpandedBody({ entry, cfg, skipResults = false }) {
144
144
  const preClass = "mt-0.5 max-h-48 overflow-auto rounded-md bg-background/60 p-1.5 text-[11px] leading-snug";
145
145
  function SectionLabel({ label, children }) {
146
146
  return /* @__PURE__ */ jsxs("div", { children: [
147
- /* @__PURE__ */ jsx("div", { className: "text-[10px] uppercase tracking-wide text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]", children: label }),
147
+ /* @__PURE__ */ jsx("div", { className: "text-[10px] uppercase tracking-wide text-muted-foreground", children: label }),
148
148
  children
149
149
  ] });
150
150
  }
@@ -167,7 +167,7 @@ function renderStandardDisplay(value, displayType) {
167
167
  const entries = Object.entries(value);
168
168
  if (entries.length === 0) return null;
169
169
  if (displayType === "values-only") {
170
- return /* @__PURE__ */ jsx("ul", { className: "mt-0.5 list-disc space-y-0.5 pl-4 text-[11px] text-[color:var(--mx-chat-text,hsl(var(--foreground)))]", children: entries.map(([k, v]) => /* @__PURE__ */ jsx("li", { children: stringifyValue(v) }, k)) });
170
+ return /* @__PURE__ */ jsx("ul", { className: "mt-0.5 list-disc space-y-0.5 pl-4 text-[11px] text-foreground", children: entries.map(([k, v]) => /* @__PURE__ */ jsx("li", { children: stringifyValue(v) }, k)) });
171
171
  }
172
172
  return /* @__PURE__ */ jsx("div", { className: "mt-0.5 grid grid-cols-[minmax(0,auto)_1fr] gap-x-2 gap-y-0.5 text-[11px]", children: entries.map(([k, v]) => /* @__PURE__ */ jsx(FieldRow, { k, v }, k)) });
173
173
  }
@@ -175,8 +175,8 @@ function renderStandardDisplay(value, displayType) {
175
175
  }
176
176
  function FieldRow({ k, v }) {
177
177
  return /* @__PURE__ */ jsxs(Fragment, { children: [
178
- /* @__PURE__ */ jsx("span", { className: "font-medium text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]", children: k }),
179
- /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate text-[color:var(--mx-chat-text,hsl(var(--foreground)))]", children: stringifyValue(v) })
178
+ /* @__PURE__ */ jsx("span", { className: "font-medium text-muted-foreground", children: k }),
179
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate text-foreground", children: stringifyValue(v) })
180
180
  ] });
181
181
  }
182
182
  function CustomResults({ result, keysInfo }) {
@@ -49,7 +49,7 @@ function CopyToolButton({ data, className }) {
49
49
  title: copied ? "Copied!" : "Copy tool data",
50
50
  "aria-label": "Copy tool data",
51
51
  className: cn(
52
- "inline-flex size-5 shrink-0 items-center justify-center rounded text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))] opacity-0 transition-opacity hover:bg-muted/60 hover:text-[color:var(--mx-chat-text,hsl(var(--foreground)))] focus:opacity-100 group-hover:opacity-100",
52
+ "inline-flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground opacity-0 transition-opacity hover:bg-muted/60 hover:text-foreground focus:opacity-100 group-hover:opacity-100",
53
53
  copied && "opacity-100 text-emerald-600 dark:text-emerald-400",
54
54
  className
55
55
  ),