@ai-matrx/chat 0.7.6 → 0.7.7

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 (151) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/agents/api/fetch-pending-calls.js +4 -3
  3. package/dist/agents/api/submit-tool-results.js +3 -6
  4. package/dist/agents/components/chat/begin-fresh-chat.js +2 -2
  5. package/dist/agents/components/inputs/smart-input/composer/ComposerSplash.js +2 -3
  6. package/dist/agents/components/inputs/smart-input/composer/useComposerMode.js +4 -2
  7. package/dist/agents/components/live-run/LiveRunDisplay.d.ts +7 -1
  8. package/dist/agents/components/live-run/LiveRunDisplay.js +3 -1
  9. package/dist/agents/components/messages-display/AgentConversationDisplay.js +1 -1
  10. package/dist/agents/components/messages-display/assistant/AgentEmptyMessageDisplay.js +4 -4
  11. package/dist/agents/components/messages-display/assistant/AssistantNoAnswer.js +1 -1
  12. package/dist/agents/components/messages-display/assistant/BreathingOrb.js +1 -1
  13. package/dist/agents/components/messages-display/assistant/InPlaceAnswerEditor.js +1 -1
  14. package/dist/agents/components/messages-display/citations/MessageSourcesRow.js +1 -1
  15. package/dist/agents/components/messages-display/conversation-tools/ConversationFindBar.js +4 -4
  16. package/dist/agents/components/messages-display/message-options/EditHistoryDialog.js +7 -7
  17. package/dist/agents/components/messages-display/user/AgentUserMessage.js +4 -4
  18. package/dist/agents/components/messages-display/user/CollabNoteMessage.js +2 -2
  19. package/dist/agents/components/messages-display/user/FirstTurnVariables.js +3 -3
  20. package/dist/agents/components/messages-display/user/PendingSendMessage.js +4 -4
  21. package/dist/agents/components/messages-display/user/RemarksTranscriptView.js +7 -7
  22. package/dist/agents/components/messages-display/user/ResourceAttachmentTile.js +9 -9
  23. package/dist/agents/components/messages-display/user/ResourceEditableToggleSamples.js +4 -4
  24. package/dist/agents/components/messages-display/user/UserActionBar.js +3 -3
  25. package/dist/agents/components/messages-display/user/UserMessageAttachmentStyleComparison.js +12 -12
  26. package/dist/agents/components/messages-display/user/UserMessageChipsDemo.js +19 -19
  27. package/dist/agents/components/messages-display/user/UserMessageHybridTileSamples.js +22 -22
  28. package/dist/agents/components/run/AgentRunnerPage.js +4 -4
  29. package/dist/agents/components/run/AssistantError.js +1 -1
  30. package/dist/agents/components/run/AssistantWarning.js +1 -1
  31. package/dist/agents/components/run/GenerationJobCard.js +5 -5
  32. package/dist/agents/components/run/IncompleteNote.js +1 -1
  33. package/dist/agents/components/run/RunJobWorkingLine.js +1 -1
  34. package/dist/agents/components/shared/AgentConversationColumn.js +1 -1
  35. package/dist/agents/components/shared/AgentHeaderMobile.js +6 -6
  36. package/dist/agents/components/shared/AgentModeController.js +1 -1
  37. package/dist/agents/components/shared/AutoInjectionSwitch.js +6 -6
  38. package/dist/agents/components/shared/DesktopFilterPanel.js +8 -8
  39. package/dist/agents/components/smart/AgentRunner.js +1 -1
  40. package/dist/agents/components/smart/CreateWithAiTabs.js +1 -1
  41. package/dist/agents/redux/agent-definition/agent-cache-bust-request.js +7 -7
  42. package/dist/agents/redux/execution-system/context-rules/receipt-check.js +2 -2
  43. package/dist/agents/redux/execution-system/inbox/inbox.thunks.d.ts +2 -2
  44. package/dist/agents/redux/execution-system/inbox/inbox.thunks.js +7 -15
  45. package/dist/agents/redux/execution-system/observational-memory/fetch-memory-cost.thunk.d.ts +1 -1
  46. package/dist/agents/redux/execution-system/observational-memory/fetch-memory-cost.thunk.js +7 -4
  47. package/dist/agents/redux/execution-system/selectors/aggregate.selectors.d.ts +1 -114
  48. package/dist/agents/redux/execution-system/selectors/aggregate.selectors.js +28 -43
  49. package/dist/agents/redux/execution-system/thunks/call-conversation-api.d.ts +44 -0
  50. package/dist/agents/redux/execution-system/thunks/call-conversation-api.js +78 -0
  51. package/dist/agents/redux/execution-system/thunks/continue-agent-json.d.ts +41 -0
  52. package/dist/agents/redux/execution-system/thunks/continue-agent-json.js +66 -0
  53. package/dist/agents/redux/execution-system/thunks/execute-instance.thunk.d.ts +20 -0
  54. package/dist/agents/redux/execution-system/thunks/execute-instance.thunk.js +9 -2
  55. package/dist/agents/redux/execution-system/thunks/launch-agent-execution.thunk.js +4 -6
  56. package/dist/agents/redux/execution-system/thunks/notify-and-play-dispatcher.d.ts +1 -5
  57. package/dist/agents/redux/execution-system/thunks/notify-and-play-dispatcher.js +2 -1
  58. package/dist/agents/redux/execution-system/thunks/resolve-base-url.js +7 -17
  59. package/dist/agents/redux/execution-system/thunks/settle-after-stop.thunk.js +2 -2
  60. package/dist/agents/redux/execution-system/thunks/smart-execute.thunk.js +3 -3
  61. package/dist/agents/redux/execution-system/utils/continuation-body.d.ts +8 -2
  62. package/dist/agents/redux/execution-system/utils/continuation-body.js +3 -3
  63. package/dist/agents/redux/execution-system/utils/required-organization.d.ts +18 -0
  64. package/dist/agents/redux/execution-system/utils/required-organization.js +14 -10
  65. package/dist/agents/services/mcp-connections.service.js +5 -8
  66. package/dist/agents/ui-first-tools/dispatcher/dispatch-ui-first-tool.thunk.js +2 -1
  67. package/dist/host/defaults/files-host.js +11 -1
  68. package/dist/host/defaults/server-api.d.ts +1 -15
  69. package/dist/host/defaults/server-api.js +0 -21
  70. package/dist/host/defaults/server.d.ts +2 -1
  71. package/dist/host/defaults/server.js +8 -6
  72. package/dist/host/request-headers.d.ts +26 -0
  73. package/dist/host/request-headers.js +15 -0
  74. package/dist/host/server/call-api.d.ts +0 -13
  75. package/dist/host/server/call-api.js +0 -2
  76. package/dist/host/server/matrx-transport.d.ts +0 -1
  77. package/dist/host/server/matrx-transport.js +0 -2
  78. package/dist/store/root-state.d.ts +4 -21
  79. package/dist/surfaces/hooks/useSurfaceConfig.js +2 -1
  80. package/dist/surfaces/runtime/surface-feedback.js +2 -2
  81. package/dist/tool-call-visualization/components/ArtifactResultBar.js +4 -4
  82. package/dist/tool-call-visualization/components/ChatResultColumn.d.ts +1 -1
  83. package/dist/tool-call-visualization/components/ToolCallBatch.js +2 -2
  84. package/dist/tool-call-visualization/components/ToolCallVisualization.js +5 -5
  85. package/dist/tool-call-visualization/components/ToolTabBodies.js +12 -12
  86. package/dist/tool-call-visualization/components/ToolUpdatesOverlay.js +4 -4
  87. package/dist/tool-call-visualization/configured-rows/ConfiguredToolRow.js +8 -8
  88. package/dist/tool-call-visualization/configured-rows/CopyToolButton.js +1 -1
  89. package/dist/tool-call-visualization/configured-rows/ToolProgressView.js +7 -7
  90. package/dist/tool-call-visualization/configured-rows/field-components.js +6 -6
  91. package/dist/tool-call-visualization/registry/GenericRenderer.js +4 -4
  92. package/dist/tool-call-visualization/renderers/_shared-entity/EmptyResultCard.js +1 -1
  93. package/dist/tool-call-visualization/renderers/_shared-entity/EntityCard.js +5 -5
  94. package/dist/tool-call-visualization/renderers/_shared-entity/PartPeekPopover.js +2 -2
  95. package/dist/tool-call-visualization/renderers/_shared-entity/ToolGlyph.js +1 -1
  96. package/dist/tool-call-visualization/renderers/_shared-entity/ToolResultCard.js +6 -6
  97. package/dist/tool-call-visualization/renderers/agent-call/AgentCallInline.js +5 -5
  98. package/dist/tool-call-visualization/renderers/agent-call/CollabCallCard.js +4 -4
  99. package/dist/tool-call-visualization/renderers/agent-call/ImageGenerationResult.js +1 -1
  100. package/dist/tool-call-visualization/renderers/ask/AskInline.js +3 -3
  101. package/dist/tool-call-visualization/renderers/ask-person/AskPersonInline.js +2 -2
  102. package/dist/tool-call-visualization/renderers/cloud-browser/CloudBrowserRunCard.js +5 -5
  103. package/dist/tool-call-visualization/renderers/ctx/CtxBatchInline.js +3 -3
  104. package/dist/tool-call-visualization/renderers/ctx/CtxGetInline.js +2 -2
  105. package/dist/tool-call-visualization/renderers/ctx/CtxItemCard.js +3 -3
  106. package/dist/tool-call-visualization/renderers/ctx/CtxPatchInline.js +6 -6
  107. package/dist/tool-call-visualization/renderers/dictionary/DictEntryList.js +12 -12
  108. package/dist/tool-call-visualization/renderers/dictionary/DictionaryOverlay.js +5 -5
  109. package/dist/tool-call-visualization/renderers/fs/FsInline.js +7 -7
  110. package/dist/tool-call-visualization/renderers/news-api/NewsInline.js +17 -17
  111. package/dist/tool-call-visualization/renderers/news-api/NewsOverlay.js +12 -12
  112. package/dist/tool-call-visualization/renderers/random-wheel/RandomWheelInline.js +34 -34
  113. package/dist/tool-call-visualization/renderers/records/RecordsInline.js +1 -1
  114. package/dist/tool-call-visualization/renderers/research/ResearchInline.js +10 -10
  115. package/dist/tool-call-visualization/renderers/research/ResearchOverlay.js +19 -19
  116. package/dist/tool-call-visualization/renderers/research/SubagentReportBlock.js +11 -11
  117. package/dist/tool-call-visualization/renderers/scrape/ScrapeInline.js +18 -18
  118. package/dist/tool-call-visualization/renderers/scrape/ScrapeOverlay.js +17 -17
  119. package/dist/tool-call-visualization/renderers/search/SearchInline.js +30 -30
  120. package/dist/tool-call-visualization/renderers/search/SearchOverlay.js +40 -40
  121. package/dist/tool-call-visualization/renderers/shell/ShellInline.js +3 -3
  122. package/dist/tool-call-visualization/renderers/skill/SkillInline.js +5 -5
  123. package/dist/tool-call-visualization/renderers/sql/DbSchemaInline.js +7 -7
  124. package/dist/tool-call-visualization/renderers/sql/SqlInline.js +4 -4
  125. package/dist/tool-call-visualization/renderers/workbook/WorkbookGrid.js +4 -4
  126. package/dist/tool-call-visualization/renderers/workbook/WorkbookInline.js +2 -2
  127. package/dist/tool-call-visualization/renderers/workbook/WorkbookOverlay.js +7 -7
  128. package/dist/tool-call-visualization/renderers/working-document/PatchDiffInline.js +3 -3
  129. package/dist/tool-call-visualization/result-fields/EmptyResult.js +1 -1
  130. package/dist/tool-call-visualization/result-fields/KeyValueGrid.js +9 -9
  131. package/dist/tool-call-visualization/result-fields/ResultFile.js +4 -4
  132. package/dist/tool-call-visualization/result-fields/ResultJson.js +1 -1
  133. package/dist/tool-call-visualization/result-fields/ResultMedia.js +2 -2
  134. package/dist/tool-call-visualization/result-fields/ResultScalar.js +2 -2
  135. package/dist/tool-call-visualization/result-fields/ResultTable.js +10 -10
  136. package/dist/tool-call-visualization/result-fields/ResultValue.js +7 -7
  137. package/dist/tool-call-visualization/result-fields/ShortId.js +3 -3
  138. package/dist/tool-call-visualization/result-fields/ToolErrorCard.js +4 -4
  139. package/dist/tool-call-visualization/result-fields/UrlChips.js +3 -3
  140. package/dist/tool-call-visualization/surface-write/SurfaceWriteDiff.js +2 -2
  141. package/dist/tool-call-visualization/surface-write/SurfaceWriteStress.js +1 -1
  142. package/dist/tool-call-visualization/window-panel/ToolCallWindowPanel.js +9 -9
  143. package/dist/ui/mandates-storage/mandateStorage.d.ts +36 -0
  144. package/dist/ui/mandates-storage/shortcutStorage.d.ts +9 -0
  145. package/dist/ui/markdown-stream/EnhancedChatMarkdown.js +22 -0
  146. package/dist/ui/markdown-stream/MarkdownStreamImpl.js +3 -3
  147. package/dist/ui/markdown-stream/StreamTextFallback.d.ts +6 -0
  148. package/dist/ui/markdown-stream/StreamTextFallback.js +23 -0
  149. package/dist/ui/markdown-stream/merge-thinking-across-hidden.d.ts +19 -0
  150. package/dist/ui/markdown-stream/merge-thinking-across-hidden.js +21 -0
  151. package/package.json +12 -7
@@ -8,19 +8,6 @@ export declare const callApi: <T = unknown>(config: import("../defaults/server-a
8
8
  export declare const buildRequestBody: (body: unknown, scope: import("../defaults/server-api.js").DefaultCallScope) => Record<string, unknown>;
9
9
  export declare const resolveScope: (_state?: unknown, overrides?: Partial<import("../defaults/server-api.js").DefaultCallScope>) => import("../defaults/server-api.js").DefaultCallScope;
10
10
  export declare const waitForAuthReady: (_getState?: () => unknown) => Promise<boolean>;
11
- export declare const callConversationMemoryCost: (conversationId: string, options?: {
12
- signal?: AbortSignal;
13
- scopeOverrides?: Partial<import("../defaults/server-api.js").DefaultCallScope>;
14
- }) => import("../defaults/server-api.js").DefaultServerThunk<Promise<import("../defaults/server-api.js").DefaultApiCallResult<{
15
- conversation_id: string;
16
- total_cost: number;
17
- total_input_tokens: number;
18
- total_output_tokens: number;
19
- event_count: number;
20
- by_event_type: {
21
- [key: string]: import("@ai-matrx/agents/generated/api-types").components["schemas"]["MemoryCostByEventType"];
22
- };
23
- }>>>;
24
11
  export declare const callConversationFork: (options: {
25
12
  conversationId: string;
26
13
  body?: unknown;
@@ -3,7 +3,6 @@ const callApi = forwardServer("callApi");
3
3
  const buildRequestBody = forwardServer("buildRequestBody");
4
4
  const resolveScope = forwardServer("resolveScope");
5
5
  const waitForAuthReady = forwardServer("waitForAuthReady");
6
- const callConversationMemoryCost = forwardServer("callConversationMemoryCost");
7
6
  const callConversationFork = forwardServer("callConversationFork");
8
7
  const callConversationForkAndRun = forwardServer("callConversationForkAndRun");
9
8
  const callBatchDeleteMessages = forwardServer("callBatchDeleteMessages");
@@ -23,7 +22,6 @@ export {
23
22
  callConversationDelete,
24
23
  callConversationFork,
25
24
  callConversationForkAndRun,
26
- callConversationMemoryCost,
27
25
  callConversationSandboxBind,
28
26
  callConversationSandboxUnbind,
29
27
  callConversationUpdate,
@@ -17,5 +17,4 @@ export declare const createMatrxTransportFromTarget: (getState: () => unknown, r
17
17
  source?: string;
18
18
  expectedErrorStatuses?: readonly number[];
19
19
  }) => import("@ai-matrx/agents").MatrxTransport;
20
- export declare const cancelAgentRunRequest: (requestId: string, mode?: "cancel" | "interrupt", seenSeq?: number) => import("../defaults/server-api.js").DefaultServerThunk<Promise<import("../defaults/server-api.js").DefaultApiCallResult<import("@ai-matrx/agents").MatrxCancelResponse>>>;
21
20
  export type MatrxTransportOptions = ChatServerTypes["MatrxTransportOptions"];
@@ -1,9 +1,7 @@
1
1
  import { forwardServer } from "../server.js";
2
2
  const createMatrxTransport = forwardServer("createMatrxTransport");
3
3
  const createMatrxTransportFromTarget = forwardServer("createMatrxTransportFromTarget");
4
- const cancelAgentRunRequest = forwardServer("cancelAgentRunRequest");
5
4
  export {
6
- cancelAgentRunRequest,
7
5
  createMatrxTransport,
8
6
  createMatrxTransportFromTarget
9
7
  };
@@ -4,32 +4,15 @@ import type { ChatState } from "./state.js";
4
4
  export interface ChatStoreRegister {
5
5
  }
6
6
  /**
7
- * Slices the HOST owns that package code reads when present (§2.3). A private store has none of
7
+ * Slices the HOST owns that package code reads when present (§2.3). Identity, the active
8
+ * organization and the profile are NEVER read from host slices: they come from the package's own
9
+ * `chatHost` slice (the host's identity and org ports) — guard
10
+ * `store/__tests__/no-host-identity-slice-reads.test.ts`. A private store has none of
8
11
  * them, so every read is optional; a registered host store supplies the real shapes. Only the
9
12
  * fields the package reads are named, with no index signatures, so a host's concrete slice
10
13
  * interfaces (which carry extra fields) stay assignable.
11
14
  */
12
15
  export interface ChatHostReadSlices {
13
- userAuth?: {
14
- id: string | null;
15
- email?: string | null;
16
- isAnonymous?: boolean;
17
- accessToken?: string | null;
18
- isAdmin?: boolean;
19
- adminLaneOpen?: boolean;
20
- adminLevel?: string | null;
21
- };
22
- appContext?: {
23
- organization_id?: string | null;
24
- };
25
- userProfile?: {
26
- fingerprintId?: string | null;
27
- userMetadata?: {
28
- fullName?: string | null;
29
- name?: string | null;
30
- preferredUsername?: string | null;
31
- } | null;
32
- };
33
16
  cloudFiles?: {
34
17
  filesById: Record<string, {
35
18
  fileName?: string | null;
@@ -12,6 +12,7 @@ import {
12
12
  addRosterItem
13
13
  } from "../services/surface-config.service.js";
14
14
  import { getNamespaceHandler } from "../config/namespace-registry.js";
15
+ import { selectUserId } from "../../host/identity.js";
15
16
  function useSurfaceConfig(surfaceName) {
16
17
  const dispatch = useAppDispatch();
17
18
  const entry = useAppSelector((s) => selectSurfaceConfigEntry(s, surfaceName));
@@ -42,7 +43,7 @@ function useSurfaceConfig(surfaceName) {
42
43
  }
43
44
  function useSurfaceAgentRoles(surfaceName) {
44
45
  const { status, roles, refresh } = useSurfaceConfig(surfaceName);
45
- const userId = useAppSelector((s) => s.userAuth?.id ?? null);
46
+ const userId = useAppSelector(selectUserId);
46
47
  const buildView = useCallback(
47
48
  (resolved) => {
48
49
  const first = resolved.effective[0] ?? null;
@@ -6,6 +6,7 @@ import {
6
6
  SURFACE_FEEDBACK_MESSAGE_MAX,
7
7
  SURFACE_FEEDBACK_MESSAGE_MIN
8
8
  } from "../manifests/_baseline.manifest.js";
9
+ import { selectOrganizationId } from "../../host/org.js";
9
10
  const SURFACE_FEEDBACK_TARGET_NAME = PLATFORM_WRITE_TARGETS.surface_feedback.name;
10
11
  const KIND_LIST = SURFACE_FEEDBACK_KINDS.join(" | ");
11
12
  const SURFACE_FEEDBACK_TARGET = PLATFORM_WRITE_TARGETS.surface_feedback;
@@ -72,8 +73,7 @@ ${message}`,
72
73
  };
73
74
  }
74
75
  function readActiveOrganizationId() {
75
- const state = getStoreSingleton()?.getState();
76
- return state?.appContext?.organization_id ?? null;
76
+ return selectOrganizationId(getStoreSingleton()?.getState());
77
77
  }
78
78
  async function saveSurfaceFeedback(value, ctx) {
79
79
  const result = await getChatHost().feedback.submit(
@@ -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-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-[var(--mx-chat-card,hsl(var(--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-foreground", children: title }),
110
- /* @__PURE__ */ jsxs("span", { className: "block truncate text-xs text-muted-foreground", 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: [
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-muted-foreground transition-colors hover:bg-accent/40 hover:text-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-[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)))]",
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-card` demo panel can
9
+ * change. Tools that look fine inside a decorative `bg-[var(--mx-chat-card,hsl(var(--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-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" })
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)))]" })
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-muted-foreground",
285
+ className: "truncate font-sans text-sm leading-relaxed tracking-wide text-[color:var(--mx-chat-text-secondary,hsl(var(--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-muted-foreground" }) : /* @__PURE__ */ jsx(ChevronRight, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground" }),
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)))]" }),
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-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
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)))]",
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-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
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)))]",
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-muted-foreground", children: groupDisplayName }),
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 }),
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-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: [
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: [
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-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" }),
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" }),
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-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." })
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." })
139
139
  ] }),
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" }),
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" }),
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-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: [
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: [
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-border bg-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-[color:var(--mx-chat-border,hsl(var(--border)))] bg-[var(--mx-chat-card,hsl(var(--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-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" }),
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" }),
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-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-[color:var(--mx-chat-text-secondary,hsl(var(--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-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-[color:var(--mx-chat-text-secondary,hsl(var(--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-muted-foreground transition-transform ${open ? "rotate-90" : ""}`
43
+ className: `size-3 shrink-0 text-[color:var(--mx-chat-text-secondary,hsl(var(--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-foreground", shimmer && "min-w-0"), children: shimmer ? /* @__PURE__ */ jsx(ShimmerText, { text: headerLabel }) : headerLabel }),
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 }),
57
57
  infoText && /* @__PURE__ */ jsx(
58
58
  "span",
59
59
  {
60
60
  className: cn(
61
- "text-muted-foreground",
61
+ "text-[color:var(--mx-chat-text-secondary,hsl(var(--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-muted-foreground", children: [
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: [
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-muted-foreground", children: label }),
147
+ /* @__PURE__ */ jsx("div", { className: "text-[10px] uppercase tracking-wide text-[color:var(--mx-chat-text-secondary,hsl(var(--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-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-[color:var(--mx-chat-text,hsl(var(--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-muted-foreground", children: k }),
179
- /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate text-foreground", children: stringifyValue(v) })
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) })
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-muted-foreground opacity-0 transition-opacity hover:bg-muted/60 hover:text-foreground focus:opacity-100 group-hover:opacity-100",
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",
53
53
  copied && "opacity-100 text-emerald-600 dark:text-emerald-400",
54
54
  className
55
55
  ),
@@ -24,7 +24,7 @@ function ToolProgressView({ progress, phase, cfg }) {
24
24
  }
25
25
  );
26
26
  }
27
- const lineClass = "flex items-center gap-1.5 text-[11px] leading-snug text-muted-foreground";
27
+ const lineClass = "flex items-center gap-1.5 text-[11px] leading-snug text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]";
28
28
  const wrapClass = "mt-1 ml-5 border-l border-border/50 pl-2 space-y-0.5";
29
29
  function entryLabel(e) {
30
30
  return e.label ?? e.step ?? e.status ?? "\u2026";
@@ -33,7 +33,7 @@ function PercentBar({ percent }) {
33
33
  const pct = percent <= 1 ? percent * 100 : percent;
34
34
  const clamped = Math.max(0, Math.min(100, pct));
35
35
  return /* @__PURE__ */ jsxs("span", { className: "ml-auto inline-flex items-center gap-1", children: [
36
- /* @__PURE__ */ jsx("span", { className: "h-1 w-16 overflow-hidden rounded-full bg-muted", children: /* @__PURE__ */ jsx(
36
+ /* @__PURE__ */ jsx("span", { className: "h-1 w-16 overflow-hidden rounded-full bg-[var(--mx-chat-fill,hsl(var(--muted)))]", children: /* @__PURE__ */ jsx(
37
37
  "span",
38
38
  {
39
39
  className: "block h-full rounded-full bg-primary/70 transition-all",
@@ -60,7 +60,7 @@ function LogProgress({
60
60
  {
61
61
  type: "button",
62
62
  onClick: () => setOpen((v) => !v),
63
- className: "inline-flex items-center gap-1 text-[10px] text-muted-foreground hover:text-foreground",
63
+ className: "inline-flex items-center gap-1 text-[10px] text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))] hover:text-[color:var(--mx-chat-text,hsl(var(--foreground)))]",
64
64
  children: [
65
65
  open ? /* @__PURE__ */ jsx(ChevronDown, { className: "size-3" }) : /* @__PURE__ */ jsx(ChevronRight, { className: "size-3" }),
66
66
  entries.length,
@@ -89,8 +89,8 @@ function LogProgress({
89
89
  function ProgressLine({ e, active }) {
90
90
  const errored = e.status === "error";
91
91
  return /* @__PURE__ */ jsxs("div", { className: cn(lineClass, errored && "text-red-600 dark:text-red-400"), children: [
92
- active ? /* @__PURE__ */ jsx(Loader2, { className: "size-3 shrink-0 animate-spin text-primary" }) : errored ? /* @__PURE__ */ jsx(AlertTriangle, { className: "size-3 shrink-0" }) : /* @__PURE__ */ jsx("span", { className: "size-3 shrink-0 text-center text-muted-foreground/40", children: "\xB7" }),
93
- /* @__PURE__ */ jsx("span", { className: cn(active ? "truncate text-foreground" : "truncate"), children: entryLabel(e) }),
92
+ active ? /* @__PURE__ */ jsx(Loader2, { className: "size-3 shrink-0 animate-spin text-[color:var(--mx-chat-accent,hsl(var(--primary)))]" }) : errored ? /* @__PURE__ */ jsx(AlertTriangle, { className: "size-3 shrink-0" }) : /* @__PURE__ */ jsx("span", { className: "size-3 shrink-0 text-center text-muted-foreground/40", children: "\xB7" }),
93
+ /* @__PURE__ */ jsx("span", { className: cn(active ? "truncate text-[color:var(--mx-chat-text,hsl(var(--foreground)))]" : "truncate"), children: entryLabel(e) }),
94
94
  typeof e.percent === "number" && /* @__PURE__ */ jsx(PercentBar, { percent: e.percent })
95
95
  ] });
96
96
  }
@@ -123,7 +123,7 @@ function StepsProgress({
123
123
  className: cn(
124
124
  lineClass,
125
125
  status === "error" && "text-red-600 dark:text-red-400",
126
- status === "done" && "text-foreground"
126
+ status === "done" && "text-[color:var(--mx-chat-text,hsl(var(--foreground)))]"
127
127
  ),
128
128
  children: [
129
129
  /* @__PURE__ */ jsx(StepIcon, { status }),
@@ -136,7 +136,7 @@ function StepsProgress({
136
136
  }) });
137
137
  }
138
138
  function StepIcon({ status }) {
139
- if (status === "active") return /* @__PURE__ */ jsx(Loader2, { className: "size-3 shrink-0 animate-spin text-primary" });
139
+ if (status === "active") return /* @__PURE__ */ jsx(Loader2, { className: "size-3 shrink-0 animate-spin text-[color:var(--mx-chat-accent,hsl(var(--primary)))]" });
140
140
  if (status === "done")
141
141
  return /* @__PURE__ */ jsx(Check, { className: "size-3 shrink-0 text-emerald-600 dark:text-emerald-400" });
142
142
  if (status === "error") return /* @__PURE__ */ jsx(AlertTriangle, { className: "size-3 shrink-0" });
@@ -68,7 +68,7 @@ const Base64Image = ({ value, className }) => {
68
68
  className: "max-h-[28rem] w-full rounded-md border border-border/40 object-contain"
69
69
  }
70
70
  ),
71
- meta && /* @__PURE__ */ jsx("div", { className: "text-[10px] text-muted-foreground", children: meta })
71
+ meta && /* @__PURE__ */ jsx("div", { className: "text-[10px] text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]", children: meta })
72
72
  ] });
73
73
  };
74
74
  function toDataUri(value) {
@@ -122,7 +122,7 @@ const Chips = ({ value, className }) => {
122
122
  return /* @__PURE__ */ jsx("div", { className: cn("flex flex-wrap gap-1", className), children: items.map((item, i) => /* @__PURE__ */ jsx(
123
123
  "span",
124
124
  {
125
- className: "inline-flex rounded-md border border-border/50 bg-muted/40 px-1.5 py-0.5 font-mono text-[10px] text-foreground",
125
+ className: "inline-flex rounded-md border border-border/50 bg-muted/40 px-1.5 py-0.5 font-mono text-[10px] text-[color:var(--mx-chat-text,hsl(var(--foreground)))]",
126
126
  children: item
127
127
  },
128
128
  `${item}-${i}`
@@ -151,16 +151,16 @@ const TabCard = ({ value, className }) => {
151
151
  className: "size-5 shrink-0 rounded-sm object-contain",
152
152
  onError: () => setFaviconErr(true)
153
153
  }
154
- ) : /* @__PURE__ */ jsx(Globe, { className: "size-5 shrink-0 text-muted-foreground" }),
154
+ ) : /* @__PURE__ */ jsx(Globe, { className: "size-5 shrink-0 text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]" }),
155
155
  /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1 space-y-0.5", children: [
156
- title && /* @__PURE__ */ jsx("div", { className: "truncate text-[12px] font-medium text-foreground", children: title }),
156
+ title && /* @__PURE__ */ jsx("div", { className: "truncate text-[12px] font-medium text-[color:var(--mx-chat-text,hsl(var(--foreground)))]", children: title }),
157
157
  url && /* @__PURE__ */ jsx(
158
158
  "a",
159
159
  {
160
160
  href: url,
161
161
  target: "_blank",
162
162
  rel: "noreferrer noopener",
163
- className: "block truncate text-[10px] text-muted-foreground hover:text-foreground hover:underline",
163
+ className: "block truncate text-[10px] text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))] hover:text-[color:var(--mx-chat-text,hsl(var(--foreground)))] hover:underline",
164
164
  onClick: (e) => e.stopPropagation(),
165
165
  children: url
166
166
  }
@@ -201,7 +201,7 @@ const ExtractTableField = ({ value, className }) => {
201
201
  );
202
202
  }) }, r.index ?? ri)) })
203
203
  ] }),
204
- obj.truncated === true && /* @__PURE__ */ jsx("div", { className: "border-t border-border/30 bg-muted/30 px-2 py-1 text-[10px] text-muted-foreground", children: "Table was truncated" })
204
+ obj.truncated === true && /* @__PURE__ */ jsx("div", { className: "border-t border-border/30 bg-muted/30 px-2 py-1 text-[10px] text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]", children: "Table was truncated" })
205
205
  ] });
206
206
  };
207
207
  const fieldComponents = {
@@ -57,7 +57,7 @@ const ProgressLine = ({
57
57
  return /* @__PURE__ */ jsx(
58
58
  "div",
59
59
  {
60
- className: "flex min-w-0 items-center gap-2 text-xs text-muted-foreground animate-in fade-in slide-in-from-bottom-1 duration-300",
60
+ className: "flex min-w-0 items-center gap-2 text-xs text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))] animate-in fade-in slide-in-from-bottom-1 duration-300",
61
61
  style: {
62
62
  animationDelay: `${index * 60}ms`,
63
63
  animationFillMode: "backwards"
@@ -89,7 +89,7 @@ const GenericRenderer = ({
89
89
  );
90
90
  }
91
91
  if (isComplete && entry.result == null) {
92
- return /* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground", children: "Completed. No output was captured for this call." });
92
+ return /* @__PURE__ */ jsx("div", { className: "text-xs text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]", children: "Completed. No output was captured for this call." });
93
93
  }
94
94
  if (!isComplete || entry.result == null) {
95
95
  const source = events && events.length > 0 ? collectMessages(events) : entry.latestMessage ? [entry.latestMessage] : [];
@@ -104,7 +104,7 @@ const GenericRenderer = ({
104
104
  },
105
105
  `${i}-${msg.slice(0, 16)}`
106
106
  )) }) : null,
107
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-xs text-muted-foreground", children: [
107
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-xs text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]", children: [
108
108
  /* @__PURE__ */ jsx(Loader2, { className: "h-3.5 w-3.5 animate-spin" }),
109
109
  /* @__PURE__ */ jsx("span", { children: "Working\u2026" })
110
110
  ] })
@@ -150,7 +150,7 @@ const GenericRenderer = ({
150
150
  e.stopPropagation();
151
151
  onOpenOverlay(`tool-group-${groupId}`);
152
152
  },
153
- className: "group flex w-full items-center justify-between gap-2 rounded border border-border/60 px-2 py-1 text-xs text-muted-foreground transition-colors hover:border-primary/40 hover:text-foreground",
153
+ className: "group flex w-full items-center justify-between gap-2 rounded border border-border/60 px-2 py-1 text-xs text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))] transition-colors hover:border-primary/40 hover:text-[color:var(--mx-chat-text,hsl(var(--foreground)))]",
154
154
  children: [
155
155
  /* @__PURE__ */ jsx("span", { children: "View complete result" }),
156
156
  /* @__PURE__ */ jsx(Maximize2, { className: "h-3 w-3 shrink-0" })
@@ -23,7 +23,7 @@ function EmptyResultCard({
23
23
  title,
24
24
  subtitle: `${did} \xB7 nothing to show`,
25
25
  actions,
26
- children: /* @__PURE__ */ jsxs("div", { className: "px-3 py-2 text-xs leading-relaxed text-muted-foreground", children: [
26
+ children: /* @__PURE__ */ jsxs("div", { className: "px-3 py-2 text-xs leading-relaxed text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]", children: [
27
27
  did,
28
28
  ", but the tool returned nothing to open from here. ",
29
29
  remedy
@@ -38,7 +38,7 @@ function EntityCard({
38
38
  "div",
39
39
  {
40
40
  className: cn(
41
- "overflow-hidden rounded-xl border border-border bg-card text-card-foreground",
41
+ "overflow-hidden rounded-xl border border-[color:var(--mx-chat-border,hsl(var(--border)))] bg-[var(--mx-chat-card,hsl(var(--card)))] text-card-foreground",
42
42
  className
43
43
  ),
44
44
  children: [
@@ -61,7 +61,7 @@ function EntityCard({
61
61
  children: [
62
62
  /* @__PURE__ */ jsx(ToolGlyph, { icon, accent, size: "lg" }),
63
63
  /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
64
- /* @__PURE__ */ jsx("div", { className: "truncate text-sm font-semibold leading-tight text-foreground", children: title }),
64
+ /* @__PURE__ */ jsx("div", { className: "truncate text-sm font-semibold leading-tight text-[color:var(--mx-chat-text,hsl(var(--foreground)))]", children: title }),
65
65
  subtitle || hoverAct ? /* @__PURE__ */ jsxs("div", { className: "relative mt-0.5 h-4 text-xs leading-tight", children: [
66
66
  subtitle ? /* @__PURE__ */ jsx(
67
67
  "span",
@@ -69,7 +69,7 @@ function EntityCard({
69
69
  className: cn(
70
70
  // Text only: it never takes the press meant for the hover action drawn over it
71
71
  // (review 2: "Open in window" was covered by this span and could not be clicked).
72
- "pointer-events-none absolute inset-0 truncate text-muted-foreground transition-opacity",
72
+ "pointer-events-none absolute inset-0 truncate text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))] transition-opacity",
73
73
  hoverAct && "group-hover/eh:opacity-0 group-focus-within/eh:opacity-0"
74
74
  ),
75
75
  children: subtitle
@@ -84,7 +84,7 @@ function EntityCard({
84
84
  hoverAct.onSelect?.();
85
85
  },
86
86
  "data-entity-hover-action": "",
87
- className: "absolute inset-0 flex w-full items-center gap-1 truncate text-left font-medium text-primary opacity-0 transition-opacity pointer-events-none group-hover/eh:pointer-events-auto group-hover/eh:opacity-100 focus-visible:pointer-events-auto focus-visible:opacity-100",
87
+ className: "absolute inset-0 flex w-full items-center gap-1 truncate text-left font-medium text-[color:var(--mx-chat-accent,hsl(var(--primary)))] opacity-0 transition-opacity pointer-events-none group-hover/eh:pointer-events-auto group-hover/eh:opacity-100 focus-visible:pointer-events-auto focus-visible:opacity-100",
88
88
  children: [
89
89
  hoverAct.icon ? /* @__PURE__ */ jsx(hoverAct.icon, { className: "h-3 w-3 shrink-0" }) : null,
90
90
  /* @__PURE__ */ jsx("span", { className: "truncate", children: hoverAct.label }),
@@ -150,7 +150,7 @@ function EntityCard({
150
150
  "grid transition-[grid-template-rows] duration-300 ease-in-out",
151
151
  open ? "grid-rows-[1fr]" : "grid-rows-[0fr]"
152
152
  ),
153
- children: /* @__PURE__ */ jsx("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsx("div", { className: "border-t border-border", children }) })
153
+ children: /* @__PURE__ */ jsx("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsx("div", { className: "border-t border-[color:var(--mx-chat-border,hsl(var(--border)))]", children }) })
154
154
  }
155
155
  ) : null
156
156
  ]
@@ -28,13 +28,13 @@ function PartPeekPopover({
28
28
  "div",
29
29
  {
30
30
  className: cn(
31
- "border-b border-border px-3 py-1.5 text-[11px] font-medium uppercase tracking-wide text-muted-foreground",
31
+ "border-b border-[color:var(--mx-chat-border,hsl(var(--border)))] px-3 py-1.5 text-[11px] font-medium uppercase tracking-wide text-[color:var(--mx-chat-text-secondary,hsl(var(--muted-foreground)))]",
32
32
  headerClassName ?? "bg-muted/40"
33
33
  ),
34
34
  children: header
35
35
  }
36
36
  ) : null,
37
- /* @__PURE__ */ jsx("div", { className: "px-3 py-2.5 text-xs leading-relaxed text-foreground", children: body })
37
+ /* @__PURE__ */ jsx("div", { className: "px-3 py-2.5 text-xs leading-relaxed text-[color:var(--mx-chat-text,hsl(var(--foreground)))]", children: body })
38
38
  ]
39
39
  }
40
40
  )