@ai-matrx/chat 0.5.0 → 0.5.3

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 (512) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/dist/action-requests/components/ActionRequestAnswerForm.js +313 -209
  3. package/dist/action-requests/components/ActionRequestInlineAnswer.js +9 -2
  4. package/dist/action-requests/components/ParkedOnPersonCard.js +17 -4
  5. package/dist/action-requests/hooks/useToolAction.js +25 -15
  6. package/dist/agent-copy/AlchemySurfaceBridge.js +2 -1
  7. package/dist/agent-copy/RichCopySplit.js +20 -15
  8. package/dist/agents/coding-session-reply/CodingReplyNotice.js +39 -14
  9. package/dist/agents/components/AutoSubmitForm.js +2 -1
  10. package/dist/agents/components/agent-widgets/AgentChatBubble.js +44 -32
  11. package/dist/agents/components/agent-widgets/AgentChatHistorySidebar.js +46 -27
  12. package/dist/agents/components/agent-widgets/AgentCompactModal.js +16 -13
  13. package/dist/agents/components/agent-widgets/AgentFlexiblePanel.js +11 -10
  14. package/dist/agents/components/agent-widgets/AgentFloatingChat.js +6 -5
  15. package/dist/agents/components/agent-widgets/AgentFullModal.js +15 -12
  16. package/dist/agents/components/agent-widgets/AgentInlineOverlay.js +40 -32
  17. package/dist/agents/components/agent-widgets/AgentPanelOverlay.js +11 -10
  18. package/dist/agents/components/agent-widgets/AgentSidebarOverlay.js +11 -10
  19. package/dist/agents/components/agent-widgets/AgentToastOverlay.js +107 -86
  20. package/dist/agents/components/agent-widgets/ChatCollapsible.js +51 -42
  21. package/dist/agents/components/agent-widgets/chat-assistant/AgentChatAssistant.js +43 -30
  22. package/dist/agents/components/agent-widgets/chat-assistant/AssistantCardStack.js +49 -41
  23. package/dist/agents/components/agent-widgets/chat-assistant/AssistantControlBar.js +59 -45
  24. package/dist/agents/components/agent-widgets/chat-assistant/AssistantMessageCard.js +21 -14
  25. package/dist/agents/components/agent-widgets/chat-assistant/ChatAssistantVariableInputs.js +87 -67
  26. package/dist/agents/components/agent-widgets/chat-assistant/CompactAssistantInput.js +91 -73
  27. package/dist/agents/components/agent-widgets/chat-assistant/StatusCard.js +8 -1
  28. package/dist/agents/components/agent-widgets/chat-assistant/UserMessageCard.js +5 -1
  29. package/dist/agents/components/agent-widgets/execution-gates/AgentGateInput.js +36 -35
  30. package/dist/agents/components/agent-widgets/execution-gates/PreExecutionCard.js +39 -27
  31. package/dist/agents/components/ambient-assistant/ScrollAssistantLauncher.js +3 -2
  32. package/dist/agents/components/ambient-assistant/ScrollAssistantLauncherImpl.js +117 -105
  33. package/dist/agents/components/ambient-assistant/ScrollVoiceAssistantLauncherImpl.js +193 -155
  34. package/dist/agents/components/chat/ChatConversationRoom.js +8 -7
  35. package/dist/agents/components/chat/ChatConversationSurface.js +5 -4
  36. package/dist/agents/components/chat/ChatHistorySidebar.js +2 -2
  37. package/dist/agents/components/chat/ChatIncognitoHeaderButton.js +3 -2
  38. package/dist/agents/components/chat/ChatIncognitoProvider.js +2 -1
  39. package/dist/agents/components/chat/ChatNewClient.js +37 -22
  40. package/dist/agents/components/chat/ChatNewHeader.js +4 -3
  41. package/dist/agents/components/chat/ChatRoomClient.js +36 -33
  42. package/dist/agents/components/chat/ChatRoomSkeleton.js +49 -32
  43. package/dist/agents/components/chat/ChatRunHeader.js +26 -18
  44. package/dist/agents/components/chat/ChatSidebarMenu.js +204 -183
  45. package/dist/agents/components/chat/ConversationAttachmentsChip.js +53 -29
  46. package/dist/agents/components/chat/ConversationPageMenu.js +39 -35
  47. package/dist/agents/components/chat/ConversationRecordsChip.js +28 -19
  48. package/dist/agents/components/chat/ConversationRoomNotice.js +18 -14
  49. package/dist/agents/components/chat/NewChatGreeting.js +29 -23
  50. package/dist/agents/components/chat/PinnedAgentsSection.js +58 -49
  51. package/dist/agents/components/chat/SandboxPanel.js +203 -147
  52. package/dist/agents/components/chat/sandbox-insight/SandboxActivityFeed.js +70 -39
  53. package/dist/agents/components/chat/sandbox-insight/SandboxCanvasBody.js +87 -67
  54. package/dist/agents/components/coming-soon/AgentComingSoonContent.js +22 -9
  55. package/dist/agents/components/context-items/ContextItemViewer.js +43 -12
  56. package/dist/agents/components/context-items/bodies/BookmarkReferenceBody.js +6 -5
  57. package/dist/agents/components/context-items/bodies/ContextInputBody.js +15 -5
  58. package/dist/agents/components/context-items/bodies/ContextLayerBodies.js +100 -61
  59. package/dist/agents/components/context-items/bodies/DataBody.js +3 -2
  60. package/dist/agents/components/context-items/bodies/EntityReferenceBody.js +26 -19
  61. package/dist/agents/components/context-items/bodies/GenericBody.js +7 -6
  62. package/dist/agents/components/context-items/bodies/MediaBody.js +39 -32
  63. package/dist/agents/components/context-items/bodies/NoteBody.js +2 -1
  64. package/dist/agents/components/context-items/bodies/ProcessedDocumentBody.js +7 -3
  65. package/dist/agents/components/context-items/bodies/ProcessedDocumentTitle.js +2 -1
  66. package/dist/agents/components/context-items/bodies/RemarkBody.js +3 -2
  67. package/dist/agents/components/context-items/bodies/ResourceSnapshotView.js +10 -3
  68. package/dist/agents/components/context-items/bodies/TaskBody.js +2 -1
  69. package/dist/agents/components/context-items/bodies/UnregisteredBody.js +2 -1
  70. package/dist/agents/components/context-items/bodies/WebpageBody.js +38 -24
  71. package/dist/agents/components/context-items/bodies/WorkingDocumentBody.js +3 -2
  72. package/dist/agents/components/context-policies-display/ContextPolicyChip.js +2 -1
  73. package/dist/agents/components/context-policies-display/ContextPolicyChipStrip.js +23 -16
  74. package/dist/agents/components/context-policies-display/ContextPolicyDetail.js +54 -29
  75. package/dist/agents/components/context-policies-display/ContextPolicyItemsPopover.js +51 -41
  76. package/dist/agents/components/context-policies-display/ContextPolicyTile.js +13 -7
  77. package/dist/agents/components/context-policies-display/ContextRulesPanel.js +19 -12
  78. package/dist/agents/components/context-policies-display/ContextValueBody.js +20 -17
  79. package/dist/agents/components/context-policies-display/MessageContextReceipt.js +71 -30
  80. package/dist/agents/components/context-policies-display/ValueCountPill.js +6 -5
  81. package/dist/agents/components/context-policies-display/knownContextValues.js +20 -16
  82. package/dist/agents/components/context-preview/AttachedContextSection.js +169 -85
  83. package/dist/agents/components/context-preview/ContextCompareView.js +413 -196
  84. package/dist/agents/components/context-preview/ContextPreviewPanel.js +220 -105
  85. package/dist/agents/components/context-preview/SystemItemsLine.js +27 -13
  86. package/dist/agents/components/context-preview/inspector/ContextInspector.js +63 -31
  87. package/dist/agents/components/context-preview/inspector/ContextParityLastRun.js +48 -12
  88. package/dist/agents/components/conversation-actions/conversationActionRegistry.js +6 -1
  89. package/dist/agents/components/conversation-actions/rename/ConversationRenameDialogHost.js +2 -1
  90. package/dist/agents/components/conversation-actions/rename/ConversationRenameDialogHostImpl.js +4 -3
  91. package/dist/agents/components/conversation-history/ConversationHistorySidebar.js +450 -358
  92. package/dist/agents/components/conversation-history/ConversationLaneToggles.js +30 -28
  93. package/dist/agents/components/conversation-history/ConversationPickerWindow.js +20 -19
  94. package/dist/agents/components/conversation-history/ConversationSearchStatus.js +19 -5
  95. package/dist/agents/components/conversation-history/ConversationSourceFilterTree.js +242 -184
  96. package/dist/agents/components/conversation-history/ConversationTrashSection.js +53 -36
  97. package/dist/agents/components/custom-agent/CustomAgentWindow.js +97 -62
  98. package/dist/agents/components/debug/RoutingPanel.js +58 -15
  99. package/dist/agents/components/debug/SandboxFileViewer.js +56 -38
  100. package/dist/agents/components/debug/SandboxInsightPanel.js +27 -2
  101. package/dist/agents/components/debug/StreamDebugFloating.js +12 -12
  102. package/dist/agents/components/debug/StreamDebugPanel.js +1012 -597
  103. package/dist/agents/components/inputs/AgentVariablesInline.js +200 -177
  104. package/dist/agents/components/inputs/BoundVariableChips.js +117 -76
  105. package/dist/agents/components/inputs/DataBoundVariableChips.js +36 -23
  106. package/dist/agents/components/inputs/PreExecutionAgentInput.js +20 -9
  107. package/dist/agents/components/inputs/RowChoicesButton.js +27 -21
  108. package/dist/agents/components/inputs/input-components/AudioVariableInput.js +2 -1
  109. package/dist/agents/components/inputs/input-components/CheckboxGroupInput.js +72 -63
  110. package/dist/agents/components/inputs/input-components/CurrencyVariableInput.js +36 -30
  111. package/dist/agents/components/inputs/input-components/DocumentVariableInput.js +2 -1
  112. package/dist/agents/components/inputs/input-components/ImageVariableInput.js +2 -1
  113. package/dist/agents/components/inputs/input-components/MediaVariableInput.js +177 -126
  114. package/dist/agents/components/inputs/input-components/NumberInput.js +52 -47
  115. package/dist/agents/components/inputs/input-components/PicklistVariableInput.js +11 -11
  116. package/dist/agents/components/inputs/input-components/PillToggleInput.js +2 -2
  117. package/dist/agents/components/inputs/input-components/RadioGroupInput.js +53 -43
  118. package/dist/agents/components/inputs/input-components/ScalarVariableInput.js +46 -39
  119. package/dist/agents/components/inputs/input-components/SelectInput.js +91 -74
  120. package/dist/agents/components/inputs/input-components/SliderInput.js +37 -30
  121. package/dist/agents/components/inputs/input-components/TableVariableInput.js +29 -23
  122. package/dist/agents/components/inputs/input-components/TextareaInput.js +3 -2
  123. package/dist/agents/components/inputs/input-components/ToggleInput.js +24 -22
  124. package/dist/agents/components/inputs/input-components/VariableInputComponent.js +53 -40
  125. package/dist/agents/components/inputs/input-components/VideoVariableInput.js +2 -1
  126. package/dist/agents/components/inputs/input-components/YoutubeVariableInput.js +29 -17
  127. package/dist/agents/components/inputs/resources/AttachedDocumentChip.js +83 -57
  128. package/dist/agents/components/inputs/resources/AttachedDocumentChips.js +68 -62
  129. package/dist/agents/components/inputs/resources/ResourceFamilyPolicyEditor.js +214 -144
  130. package/dist/agents/components/inputs/resources/SmartAgentResourceChips.js +70 -69
  131. package/dist/agents/components/inputs/resources/SmartAgentResourcePickerButton.js +22 -18
  132. package/dist/agents/components/inputs/smart-input/AgentMicrophoneButton.js +3 -2
  133. package/dist/agents/components/inputs/smart-input/AgentTextarea.js +70 -58
  134. package/dist/agents/components/inputs/smart-input/ChatConnectionsStrip.js +172 -142
  135. package/dist/agents/components/inputs/smart-input/ComposerChip.js +30 -22
  136. package/dist/agents/components/inputs/smart-input/ComposerDraftNotice.js +15 -2
  137. package/dist/agents/components/inputs/smart-input/ComposerToolsNotice.js +12 -7
  138. package/dist/agents/components/inputs/smart-input/ComputeLensBar.js +141 -106
  139. package/dist/agents/components/inputs/smart-input/ContextDocsMenu.js +139 -91
  140. package/dist/agents/components/inputs/smart-input/ConversationContextChip.js +9 -6
  141. package/dist/agents/components/inputs/smart-input/ConversationContextRail.js +106 -80
  142. package/dist/agents/components/inputs/smart-input/DesktopPresenceIndicator.js +58 -37
  143. package/dist/agents/components/inputs/smart-input/InboxQueueStrip.js +227 -190
  144. package/dist/agents/components/inputs/smart-input/InputActionButtons.js +80 -36
  145. package/dist/agents/components/inputs/smart-input/PlusAttachMenu.js +163 -118
  146. package/dist/agents/components/inputs/smart-input/QuicksetPanel.js +147 -110
  147. package/dist/agents/components/inputs/smart-input/RunControlsMenu.js +105 -90
  148. package/dist/agents/components/inputs/smart-input/RunControlsTabPanel.js +86 -62
  149. package/dist/agents/components/inputs/smart-input/RunPicksSurface.js +157 -110
  150. package/dist/agents/components/inputs/smart-input/RunSkillPicker.js +12 -11
  151. package/dist/agents/components/inputs/smart-input/RunToolPicker.js +42 -38
  152. package/dist/agents/components/inputs/smart-input/ShapeChipsRow.js +20 -16
  153. package/dist/agents/components/inputs/smart-input/SmartAgentInput.js +40 -33
  154. package/dist/agents/components/inputs/smart-input/SmartAgentInputStacked.js +203 -177
  155. package/dist/agents/components/inputs/smart-input/SmartInputFileDropTarget.js +30 -21
  156. package/dist/agents/components/inputs/smart-input/UninitializedShell.js +22 -19
  157. package/dist/agents/components/inputs/smart-input/ViewOnlyComposerBar.js +8 -5
  158. package/dist/agents/components/inputs/smart-input/composer/ComposerAgentPeek.js +3 -2
  159. package/dist/agents/components/inputs/smart-input/composer/ComposerAgentPill.js +129 -99
  160. package/dist/agents/components/inputs/smart-input/composer/ComposerChipsRow.js +53 -47
  161. package/dist/agents/components/inputs/smart-input/composer/ComposerConnectPromo.js +25 -21
  162. package/dist/agents/components/inputs/smart-input/composer/ComposerConnectorsPanel.js +91 -55
  163. package/dist/agents/components/inputs/smart-input/composer/ComposerEffortPill.js +51 -42
  164. package/dist/agents/components/inputs/smart-input/composer/ComposerMenu.js +143 -115
  165. package/dist/agents/components/inputs/smart-input/composer/ComposerMenuSheet.js +26 -23
  166. package/dist/agents/components/inputs/smart-input/composer/ComposerMetaRow.js +41 -30
  167. package/dist/agents/components/inputs/smart-input/composer/ComposerModeSwitch.js +38 -26
  168. package/dist/agents/components/inputs/smart-input/composer/ComposerOutput.js +150 -101
  169. package/dist/agents/components/inputs/smart-input/composer/ComposerPlusMenu.js +264 -198
  170. package/dist/agents/components/inputs/smart-input/composer/ComposerSplash.js +54 -38
  171. package/dist/agents/components/inputs/variable-input-variations/AgentVariableCards.js +144 -127
  172. package/dist/agents/components/inputs/variable-input-variations/AgentVariableForm.js +247 -165
  173. package/dist/agents/components/inputs/variable-input-variations/AgentVariablesGuided.js +323 -244
  174. package/dist/agents/components/inputs/variable-input-variations/AgentVariablesStacked.js +32 -28
  175. package/dist/agents/components/inputs/variable-input-variations/AgentVariablesWizard.js +43 -16
  176. package/dist/agents/components/inputs/variable-input-variations/SmartAgentVariables.js +7 -6
  177. package/dist/agents/components/live-run/LiveRunDisplay.js +81 -53
  178. package/dist/agents/components/live-run/LiveRunProgress.js +72 -48
  179. package/dist/agents/components/live-run/RunSetDisplay.js +20 -17
  180. package/dist/agents/components/memory/components/AgentMemoryAllView.js +45 -27
  181. package/dist/agents/components/memory/components/AgentMemoryBody.js +4 -3
  182. package/dist/agents/components/memory/components/AgentMemoryEditor.js +52 -36
  183. package/dist/agents/components/memory/components/AgentMemoryFooter.js +66 -44
  184. package/dist/agents/components/memory/components/AgentMemoryInlinePanel.js +10 -2
  185. package/dist/agents/components/memory/components/AgentMemorySidebar.js +125 -89
  186. package/dist/agents/components/messages-display/AgentConversationDisplay.js +130 -119
  187. package/dist/agents/components/messages-display/MessageAttachmentStrip.js +8 -7
  188. package/dist/agents/components/messages-display/MessageTimestamp.js +8 -5
  189. package/dist/agents/components/messages-display/TranscriptIntegrityCopyButton.js +4 -3
  190. package/dist/agents/components/messages-display/assistant/AgentAssistantMessage.js +135 -108
  191. package/dist/agents/components/messages-display/assistant/AgentEmptyMessageDisplay.js +20 -9
  192. package/dist/agents/components/messages-display/assistant/AssistantMessageFooter.js +76 -65
  193. package/dist/agents/components/messages-display/assistant/AssistantNoAnswer.js +28 -17
  194. package/dist/agents/components/messages-display/assistant/AssistantTurnGroup.js +65 -62
  195. package/dist/agents/components/messages-display/assistant/BreathingOrb.js +70 -57
  196. package/dist/agents/components/messages-display/assistant/InPlaceAnswerEditor.js +7 -3
  197. package/dist/agents/components/messages-display/assistant/ProviderRetryCard.js +61 -36
  198. package/dist/agents/components/messages-display/citations/MessageCitationsContext.js +2 -1
  199. package/dist/agents/components/messages-display/citations/MessageSourcesRow.js +25 -21
  200. package/dist/agents/components/messages-display/conversation-tools/ConversationFindBar.js +46 -43
  201. package/dist/agents/components/messages-display/conversation-tools/FollowUpSuggestions.js +2 -2
  202. package/dist/agents/components/messages-display/message-options/DeleteMessageDialog.js +61 -40
  203. package/dist/agents/components/messages-display/message-options/EditHistoryDialog.js +91 -56
  204. package/dist/agents/components/messages-display/message-options/shareMessageAsWebpage.js +1 -1
  205. package/dist/agents/components/messages-display/user/AgentUserMessage.js +180 -144
  206. package/dist/agents/components/messages-display/user/CollabNoteMessage.js +16 -6
  207. package/dist/agents/components/messages-display/user/FirstTurnVariables.js +51 -40
  208. package/dist/agents/components/messages-display/user/PendingSendMessage.js +60 -37
  209. package/dist/agents/components/messages-display/user/RemarksTranscriptView.js +22 -5
  210. package/dist/agents/components/messages-display/user/ResourceAttachmentTile.js +187 -147
  211. package/dist/agents/components/messages-display/user/ResourceEditableToggleSamples.js +17 -1
  212. package/dist/agents/components/messages-display/user/UserActionBar.js +77 -62
  213. package/dist/agents/components/messages-display/user/UserMessageAttachmentStyleComparison.js +82 -39
  214. package/dist/agents/components/messages-display/user/UserMessageChipsDemo.js +189 -105
  215. package/dist/agents/components/messages-display/user/UserMessageHybridTileSamples.js +212 -130
  216. package/dist/agents/components/model/AgentModelPanel.js +2 -1
  217. package/dist/agents/components/model-tiers/ModelTierIdentityList.js +18 -15
  218. package/dist/agents/components/notifications/ImageArrivalPeek.js +45 -34
  219. package/dist/agents/components/notifications/ImageArrivalPeekHost.js +14 -13
  220. package/dist/agents/components/observational-memory/ObservationalMemoryCore.js +46 -31
  221. package/dist/agents/components/observational-memory/components/MemoryControls.js +84 -48
  222. package/dist/agents/components/observational-memory/components/MemoryCostCard.js +136 -84
  223. package/dist/agents/components/observational-memory/components/MemoryEventTimeline.js +127 -78
  224. package/dist/agents/components/observational-memory/components/MemoryOverviewCard.js +113 -72
  225. package/dist/agents/components/observational-memory/components/MemoryStateInspector.js +384 -216
  226. package/dist/agents/components/run/AgentRunHeader.js +44 -27
  227. package/dist/agents/components/run/AgentRunnerPage.js +47 -31
  228. package/dist/agents/components/run/AgentStatusIndicator.js +2 -1
  229. package/dist/agents/components/run/AssistantError.js +61 -27
  230. package/dist/agents/components/run/AssistantWarning.js +18 -2
  231. package/dist/agents/components/run/GenerationJobCard.js +19 -6
  232. package/dist/agents/components/run/IncompleteNote.js +11 -1
  233. package/dist/agents/components/run/RunJobWorkingLine.js +14 -11
  234. package/dist/agents/components/run/run-sidebar/SidebarHeader.js +25 -18
  235. package/dist/agents/components/run-controls/AdvancedRunSettings/AdvancedRunSettings.js +72 -56
  236. package/dist/agents/components/run-controls/AdvancedRunSettings/ComplexityBadge.js +10 -8
  237. package/dist/agents/components/run-controls/AdvancedRunSettings/primitives.js +84 -66
  238. package/dist/agents/components/run-controls/ContextPoliciesTab.js +194 -130
  239. package/dist/agents/components/run-controls/RunConfigOverrides.js +245 -179
  240. package/dist/agents/components/run-controls/RunInputCapabilities.js +24 -20
  241. package/dist/agents/components/run-controls/RunModelPicker.js +35 -25
  242. package/dist/agents/components/run-controls/RunSettingsEditor.js +356 -267
  243. package/dist/agents/components/run-controls/RunSettingsModal.js +8 -1
  244. package/dist/agents/components/run-controls/SimpleRunSettings/CapabilityGrid.js +25 -20
  245. package/dist/agents/components/run-controls/SimpleRunSettings/ReasoningLevelSelector.js +14 -11
  246. package/dist/agents/components/run-controls/SimpleRunSettings/SimpleRunSettings.js +32 -21
  247. package/dist/agents/components/run-controls/SimpleRunSettings/SimpleRunSettingsButton.js +41 -35
  248. package/dist/agents/components/run-controls/StoredModelOverridesField.js +38 -27
  249. package/dist/agents/components/run-controls/SurfaceSimulatorSelect.js +117 -69
  250. package/dist/agents/components/run-controls/panels/BackendTargetPanel.js +81 -35
  251. package/dist/agents/components/run-controls/panels/ClientMetricsPanel.js +65 -33
  252. package/dist/agents/components/run-controls/panels/ModelContextPanel.js +94 -46
  253. package/dist/agents/components/run-controls/panels/RequestStatsPanel.js +82 -53
  254. package/dist/agents/components/run-controls/panels/SessionStatsPanel.js +33 -9
  255. package/dist/agents/components/run-controls/panels/shared.js +10 -4
  256. package/dist/agents/components/send-to-agent/SendToAgentWindow.js +89 -57
  257. package/dist/agents/components/shared/AgentConversationColumn.js +135 -123
  258. package/dist/agents/components/shared/AgentHeader.js +47 -29
  259. package/dist/agents/components/shared/AgentHeaderMobile.js +173 -133
  260. package/dist/agents/components/shared/AgentModeController.js +58 -43
  261. package/dist/agents/components/shared/AgentNewRunButton.js +2 -1
  262. package/dist/agents/components/shared/AgentPlanningIndicator.js +2 -1
  263. package/dist/agents/components/shared/AgentReferenceCopyButton.js +2 -1
  264. package/dist/agents/components/shared/AgentSelectorIsland.js +26 -18
  265. package/dist/agents/components/shared/AutoInjectionSwitch.js +66 -55
  266. package/dist/agents/components/shared/DesktopFilterPanel.js +183 -140
  267. package/dist/agents/components/shared/OlderMessagesSentinel.js +2 -1
  268. package/dist/agents/components/shared/StreamProfilerOverlay.js +64 -5
  269. package/dist/agents/components/shared/transcript-audience.js +2 -1
  270. package/dist/agents/components/shell/AgentBuildSidebarExtras.js +14 -3
  271. package/dist/agents/components/shell/AgentRunSidebarMenu.js +82 -58
  272. package/dist/agents/components/smart/AgentRunWrapper.js +2 -1
  273. package/dist/agents/components/smart/AgentRunner.js +45 -40
  274. package/dist/agents/components/smart/CreateWithAiTabs.js +88 -73
  275. package/dist/agents/components/working-document/DocumentLinkPicker.js +74 -47
  276. package/dist/agents/components/working-document/ScratchpadQuickPanel.js +3 -2
  277. package/dist/agents/components/working-document/ScratchpadSwitcherMenu.js +58 -35
  278. package/dist/agents/components/working-document/WorkingDocumentAgentDiff.js +8 -4
  279. package/dist/agents/components/working-document/WorkingDocumentEditor.js +35 -34
  280. package/dist/agents/components/working-document/WorkingDocumentLatestVersionDiff.js +15 -5
  281. package/dist/agents/components/working-document/WorkingDocumentPanel.js +250 -174
  282. package/dist/agents/components/working-document/WorkingDocumentVersionHistory.js +82 -46
  283. package/dist/agents/components/working-document/WorkingDocumentViewControls.js +64 -52
  284. package/dist/agents/components/working-document/documents-workspace/DocumentsListRail.js +127 -106
  285. package/dist/agents/components/working-document/documents-workspace/DocumentsWorkspace.js +116 -103
  286. package/dist/agents/decision-answers/DecisionAnswers.js +164 -107
  287. package/dist/agents/image-roles/ImageRoleSelector.js +60 -50
  288. package/dist/agents/image-roles/ReferenceRoleCaption.js +5 -4
  289. package/dist/agents/message-flags/ExampleTurnsGroup.js +8 -1
  290. package/dist/agents/message-flags/MessageFlagToggles.js +72 -56
  291. package/dist/agents/message-flags/MessageFlagsPreview.js +35 -10
  292. package/dist/agents/message-flags/PrefillNote.js +5 -4
  293. package/dist/agents/message-flags/StoppedNote.js +8 -5
  294. package/dist/agents/prompt-preview/PromptPreviewContent.js +72 -34
  295. package/dist/agents/redux/execution-system/host-conversations/conversation-abilities.js +2 -1
  296. package/dist/agents/redux/execution-system/inbox/inbox.thunks.js +19 -10
  297. package/dist/agents/redux/execution-system/instance-ui-state/components/InstanceUIStateCore.js +430 -313
  298. package/dist/agents/redux/execution-system/instance-ui-state/components/InstanceUIStateList.js +120 -104
  299. package/dist/agents/redux/execution-system/instance-variable-values/instance-variable-values.persistence.d.ts +6 -0
  300. package/dist/agents/redux/execution-system/instance-variable-values/instance-variable-values.persistence.js +4 -2
  301. package/dist/agents/redux/execution-system/thunks/execute-instance.thunk.js +24 -8
  302. package/dist/agents/resources/ResourceChips.js +37 -34
  303. package/dist/agents/resources/ResourceDisplay.js +51 -32
  304. package/dist/agents/route/AgentHydratorServer.js +2 -1
  305. package/dist/agents/routing/ConfidentialToggle.js +8 -6
  306. package/dist/agents/runtime-reconnect/ServerOperationBanner.js +33 -28
  307. package/dist/agents/speech-script/SpeechScriptTranscriptView.js +20 -1
  308. package/dist/agents/ui-first-tools/ui/AgentCardShell.js +78 -67
  309. package/dist/agents/ui-first-tools/ui/ApprovalCard.js +136 -102
  310. package/dist/agents/ui-first-tools/ui/AskCard.js +383 -293
  311. package/dist/agents/ui-first-tools/ui/AskCardCountdown.js +10 -9
  312. package/dist/agents/ui-first-tools/ui/AskWizard.js +91 -70
  313. package/dist/agents/ui-first-tools/ui/BatchAskCard.js +2 -1
  314. package/dist/agents/ui-first-tools/ui/CredentialCaptureCard.js +54 -33
  315. package/dist/agents/ui-first-tools/ui/PendingAsksZone.js +66 -55
  316. package/dist/agents/ui-first-tools/ui/QuestionsAskForm.js +2 -1
  317. package/dist/agents/ui-first-tools/ui/lists/ListsHubView.js +112 -63
  318. package/dist/agents/ui-first-tools/ui/lists/TaskPanel.js +209 -140
  319. package/dist/agents/ui-first-tools/ui/lists/TaskPanelChip.js +7 -6
  320. package/dist/canvas/workspace/CanvasChatColumn.js +28 -17
  321. package/dist/canvas/workspace/CanvasPropertiesPanel.js +38 -32
  322. package/dist/canvas/workspace/ChatCanvasWorkspace.js +87 -53
  323. package/dist/canvas/workspace/ChatPanelTitleMenu.js +56 -44
  324. package/dist/canvas/workspace/ShellChatDock.js +71 -54
  325. package/dist/context-menu/types.d.ts +12 -6
  326. package/dist/cx-chat/components/ChatConversationSkeleton.js +35 -2
  327. package/dist/cx-chat/components/ChatHeaderControls.js +35 -23
  328. package/dist/cx-chat/components/ChatInstanceManager.js +3 -2
  329. package/dist/cx-chat/components/ChatMobileAdminToggles.js +16 -11
  330. package/dist/cx-chat/components/ChatMobileAgentName.js +13 -9
  331. package/dist/cx-chat/components/ChatMobileHeaderBar.js +25 -22
  332. package/dist/cx-chat/components/ChatPanelBackButton.js +2 -1
  333. package/dist/cx-chat/components/ChatSidebarClient.js +164 -135
  334. package/dist/cx-chat/components/ChatWelcomeClient.js +27 -17
  335. package/dist/cx-chat/components/ChatWelcomeServer.js +3 -2
  336. package/dist/cx-chat/components/ContextGaugeWidget.js +22 -13
  337. package/dist/cx-chat/components/SsrSidebarAgents.js +4 -3
  338. package/dist/cx-chat/components/SsrSidebarChats.js +159 -105
  339. package/dist/cx-chat/components/agent/AgentPickerSheet.js +16 -3
  340. package/dist/cx-chat/components/core/ChatConversationClient.js +47 -32
  341. package/dist/cx-chat/components/messages/MessageErrorBoundary.js +8 -1
  342. package/dist/cx-chat/components/messages/UserMessage.js +142 -116
  343. package/dist/cx-chat/components/sidebar/SidebarActions.js +24 -16
  344. package/dist/cx-chat/components/sidebar/SidebarUserFooter.js +43 -30
  345. package/dist/cx-chat/components/user-input/ConversationInput.js +157 -136
  346. package/dist/cx-chat/components/user-input/InpuControlButtons.js +18 -17
  347. package/dist/cx-chat/components/user-input/InputActionButtons.js +33 -28
  348. package/dist/cx-chat/components/user-input/StackedVariableInputs.js +79 -65
  349. package/dist/cx-chat/components/variable-inputs/CheckboxGroupInput.js +90 -63
  350. package/dist/cx-chat/components/variable-inputs/NumberInput.js +41 -30
  351. package/dist/cx-chat/components/variable-inputs/RadioGroupInput.js +64 -46
  352. package/dist/cx-chat/components/variable-inputs/SelectInput.js +32 -15
  353. package/dist/cx-chat/components/variable-inputs/TextareaInput.js +3 -2
  354. package/dist/cx-chat/components/variable-inputs/ToggleInput.js +28 -8
  355. package/dist/host/bare-host-chrome.js +2 -1
  356. package/dist/host/chrome.js +10 -9
  357. package/dist/host/configure.js +7 -1
  358. package/dist/host/conversation-hooks-react.d.ts +7 -0
  359. package/dist/host/conversation-hooks-react.js +15 -2
  360. package/dist/host/conversation-hooks.d.ts +10 -0
  361. package/dist/host/conversation-hooks.js +7 -0
  362. package/dist/host/defaults/memory-navigation.js +5 -4
  363. package/dist/host/defaults/resource-picker-menu.js +30 -25
  364. package/dist/host/defaults/setting-control-input.js +13 -10
  365. package/dist/host/defaults/window-panel.js +38 -17
  366. package/dist/host/defaults/workspace-gate.js +31 -20
  367. package/dist/host/navigation.js +2 -1
  368. package/dist/host/react.js +3 -2
  369. package/dist/host/ui-slots.d.ts +3 -2
  370. package/dist/mandates/RunFailureCard.js +27 -16
  371. package/dist/public-chat/components/AgentSelector.js +26 -26
  372. package/dist/public-chat/components/GuidedVariableInputs.js +282 -216
  373. package/dist/public-chat/components/PublicMessageOptionsMenu.js +36 -31
  374. package/dist/public-chat/components/PublicVariableInputs.js +79 -65
  375. package/dist/quick-actions/components/QuickChatSheet.js +83 -59
  376. package/dist/surfaces/components/chrome/PageIntelligenceSection.js +36 -22
  377. package/dist/surfaces/components/chrome/SurfaceAgentsHeaderButton.js +31 -21
  378. package/dist/surfaces/components/chrome/SurfaceAgentsPanelImpl.js +109 -64
  379. package/dist/surfaces/components/chrome/SurfaceConversationsSection.js +87 -41
  380. package/dist/surfaces/components/chrome/SurfaceMandatesSection.js +118 -75
  381. package/dist/surfaces/components/chrome/SurfaceRoleAgentButton.js +8 -5
  382. package/dist/surfaces/runtime/StaticSurfaceRuntimeProvider.js +2 -1
  383. package/dist/surfaces/runtime/SurfaceRuntimeContext.js +8 -7
  384. package/dist/surfaces/runtime/intelligence.js +2 -1
  385. package/dist/testing/chat-host-test-provider.js +2 -1
  386. package/dist/testing/render-hook.js +2 -2
  387. package/dist/tool-call-visualization/components/AgentWorkGroup.js +15 -11
  388. package/dist/tool-call-visualization/components/ArtifactResultBar.js +78 -51
  389. package/dist/tool-call-visualization/components/ChatResultColumn.js +2 -2
  390. package/dist/tool-call-visualization/components/LiveToolCallCard.js +2 -1
  391. package/dist/tool-call-visualization/components/ToolCallBatch.js +35 -29
  392. package/dist/tool-call-visualization/components/ToolCallVisualization.js +217 -200
  393. package/dist/tool-call-visualization/components/ToolConversationContext.js +3 -2
  394. package/dist/tool-call-visualization/components/ToolTabBodies.js +122 -70
  395. package/dist/tool-call-visualization/components/ToolUpdatesOverlay.js +68 -50
  396. package/dist/tool-call-visualization/components/agentWorkTurn.js +8 -8
  397. package/dist/tool-call-visualization/db-renderer/DbToolRenderer.js +2 -2
  398. package/dist/tool-call-visualization/db-renderer/DbToolRendererImpl.js +7 -6
  399. package/dist/tool-call-visualization/grouping/foldAgentWork.js +10 -3
  400. package/dist/tool-call-visualization/registry/GenericRenderer.js +68 -51
  401. package/dist/tool-call-visualization/registry/registry.js +62 -10
  402. package/dist/tool-call-visualization/renderers/_shared-entity/EmptyResultCard.js +9 -4
  403. package/dist/tool-call-visualization/renderers/_shared-entity/EntityCard.js +116 -85
  404. package/dist/tool-call-visualization/renderers/_shared-entity/EntityOpenActions.js +16 -9
  405. package/dist/tool-call-visualization/renderers/_shared-entity/PartPeekPopover.js +24 -18
  406. package/dist/tool-call-visualization/renderers/_shared-entity/ToolGlyph.js +2 -1
  407. package/dist/tool-call-visualization/renderers/_shared-entity/ToolResultCard.js +89 -65
  408. package/dist/tool-call-visualization/renderers/agent-call/AgentCallInline.js +71 -54
  409. package/dist/tool-call-visualization/renderers/agent-call/CollabCallCard.js +90 -54
  410. package/dist/tool-call-visualization/renderers/agent-call/ImageGenerationResult.js +39 -31
  411. package/dist/tool-call-visualization/renderers/ask/AskInline.js +20 -15
  412. package/dist/tool-call-visualization/renderers/ask-person/AskPersonInline.js +17 -8
  413. package/dist/tool-call-visualization/renderers/cloud-browser/CloudBrowserRunCard.js +89 -55
  414. package/dist/tool-call-visualization/renderers/ctx/ContextActionInline.js +4 -4
  415. package/dist/tool-call-visualization/renderers/ctx/CtxBatchInline.js +50 -18
  416. package/dist/tool-call-visualization/renderers/ctx/CtxGetInline.js +13 -5
  417. package/dist/tool-call-visualization/renderers/ctx/CtxItemCard.js +22 -13
  418. package/dist/tool-call-visualization/renderers/ctx/CtxPatchInline.js +25 -6
  419. package/dist/tool-call-visualization/renderers/dictionary/DictEntryList.js +37 -5
  420. package/dist/tool-call-visualization/renderers/dictionary/DictionaryInline.js +5 -4
  421. package/dist/tool-call-visualization/renderers/dictionary/DictionaryOverlay.js +18 -2
  422. package/dist/tool-call-visualization/renderers/fs/FsInline.js +73 -55
  423. package/dist/tool-call-visualization/renderers/news-api/NewsInline.js +90 -41
  424. package/dist/tool-call-visualization/renderers/news-api/NewsOverlay.js +152 -84
  425. package/dist/tool-call-visualization/renderers/random-wheel/RandomWheelInline.js +297 -180
  426. package/dist/tool-call-visualization/renderers/records/RecordsInline.js +7 -2
  427. package/dist/tool-call-visualization/renderers/research/ResearchInline.js +88 -45
  428. package/dist/tool-call-visualization/renderers/research/ResearchOverlay.js +102 -54
  429. package/dist/tool-call-visualization/renderers/research/SubagentReportBlock.js +95 -65
  430. package/dist/tool-call-visualization/renderers/scrape/ScrapeInline.js +170 -100
  431. package/dist/tool-call-visualization/renderers/scrape/ScrapeOverlay.js +109 -55
  432. package/dist/tool-call-visualization/renderers/search/SearchInline.js +297 -186
  433. package/dist/tool-call-visualization/renderers/search/SearchOverlay.js +240 -105
  434. package/dist/tool-call-visualization/renderers/shell/ShellInline.js +52 -33
  435. package/dist/tool-call-visualization/renderers/skill/SkillInline.js +44 -36
  436. package/dist/tool-call-visualization/renderers/sql/DbSchemaInline.js +33 -7
  437. package/dist/tool-call-visualization/renderers/sql/SqlInline.js +46 -14
  438. package/dist/tool-call-visualization/renderers/web/WebInline.js +4 -4
  439. package/dist/tool-call-visualization/renderers/web/WebOverlay.js +4 -4
  440. package/dist/tool-call-visualization/renderers/workbook/WorkbookGrid.js +25 -15
  441. package/dist/tool-call-visualization/renderers/workbook/WorkbookInline.js +24 -15
  442. package/dist/tool-call-visualization/renderers/workbook/WorkbookOverlay.js +25 -11
  443. package/dist/tool-call-visualization/renderers/working-document/PatchDiffInline.js +11 -10
  444. package/dist/tool-call-visualization/result-fields/EmptyResult.js +8 -6
  445. package/dist/tool-call-visualization/result-fields/KeyValueGrid.js +121 -78
  446. package/dist/tool-call-visualization/result-fields/KindValueNode.js +4 -3
  447. package/dist/tool-call-visualization/result-fields/ResultFile.js +28 -19
  448. package/dist/tool-call-visualization/result-fields/ResultJson.js +2 -2
  449. package/dist/tool-call-visualization/result-fields/ResultMarkdown.js +31 -24
  450. package/dist/tool-call-visualization/result-fields/ResultMedia.js +23 -19
  451. package/dist/tool-call-visualization/result-fields/ResultRecordRef.js +3 -2
  452. package/dist/tool-call-visualization/result-fields/ResultScalar.js +4 -4
  453. package/dist/tool-call-visualization/result-fields/ResultTable.js +144 -107
  454. package/dist/tool-call-visualization/result-fields/ResultValue.js +78 -61
  455. package/dist/tool-call-visualization/result-fields/ShortId.js +21 -13
  456. package/dist/tool-call-visualization/result-fields/ToolErrorCard.js +22 -17
  457. package/dist/tool-call-visualization/result-fields/ToolResultValue.js +3 -3
  458. package/dist/tool-call-visualization/result-fields/UrlChips.js +13 -11
  459. package/dist/tool-call-visualization/result-fields/document-presentation.js +3 -2
  460. package/dist/tool-call-visualization/surface-write/SurfaceWriteDiff.js +69 -55
  461. package/dist/tool-call-visualization/surface-write/SurfaceWriteStress.js +8 -1
  462. package/dist/tool-call-visualization/surface-write/withSurfaceWriteDiff.js +3 -2
  463. package/dist/tool-call-visualization/window-panel/ToolCallWindowPanel.js +140 -120
  464. package/dist/ui/AudioOutputBlockSkeleton.js +61 -21
  465. package/dist/ui/chat-panel/ChatPanel.js +61 -45
  466. package/dist/ui/checkbox.js +2 -1
  467. package/dist/ui/html-preview/HtmlPreviewBridge.js +3 -2
  468. package/dist/ui/lazy/SurfaceAgentsPanelImpl.js +5 -1
  469. package/dist/ui/markdown-stream/EnhancedChatMarkdown.js +141 -131
  470. package/dist/ui/markdown-stream/MarkdownStreamImpl.js +42 -42
  471. package/dist/ui/markdown-stream/StreamAwareChatMarkdown.js +19 -18
  472. package/dist/ui/markdown-stream/internal-handlers/AgentCallChildTrace.js +59 -56
  473. package/dist/ui/markdown-stream/internal-handlers/InlineAssistantError.js +2 -1
  474. package/dist/ui/markdown-stream/internal-handlers/InlineThinkingSlot.js +3 -3
  475. package/dist/ui/markdown-stream/internal-handlers/ToolHandlers.js +34 -31
  476. package/dist/ui/scroll-fade.js +5 -4
  477. package/dist/ui/tabs.js +2 -1
  478. package/dist/ui/usages/DriftSeverityBadge.js +9 -6
  479. package/dist/utils/connectors/marks.js +122 -59
  480. package/dist/utils/resource-picker/ResourcePickerSubViewHeader.js +66 -40
  481. package/dist/voice-agent/components/GoogleLiveSurface.js +127 -90
  482. package/dist/voice-agent/components/LiveVoiceDoor.js +10 -7
  483. package/dist/voice-agent/components/VoiceAgentSurface.js +114 -92
  484. package/dist/voice-agent/components/VoiceControlCluster.js +5 -1
  485. package/dist/voice-agent/components/VoiceDebugPanel.js +212 -107
  486. package/dist/voice-agent/components/VoiceEdgeRibbon.js +63 -60
  487. package/dist/voice-agent/components/VoiceErrorBanner.js +20 -17
  488. package/dist/voice-agent/components/VoiceMicButton.js +5 -4
  489. package/dist/voice-agent/components/VoiceMuteButton.js +5 -4
  490. package/dist/voice-agent/components/VoiceOrb.js +84 -81
  491. package/dist/voice-agent/components/VoiceStatusPill.js +12 -11
  492. package/dist/voice-agent/components/VoiceTranscriptStream.js +8 -5
  493. package/dist/voice-agent/components/VoiceTranscriptTurn.js +20 -17
  494. package/dist/voice-agent/components/playground/InstructionsEditor.js +34 -27
  495. package/dist/voice-agent/components/playground/PlaygroundSettingsSheet.js +27 -15
  496. package/dist/voice-agent/components/playground/ToolToggleList.js +34 -25
  497. package/dist/voice-agent/components/playground/VoicePicker.js +17 -10
  498. package/dist/voice-agent/relay/VoiceChatClient.js +3 -2
  499. package/dist/voice-agent/relay/VoiceRelayBar.js +60 -53
  500. package/dist/voice-agent/relay/VoiceRelayDock.js +26 -14
  501. package/dist/voice-agent/relay/VoiceRelayPanel.js +21 -10
  502. package/dist/window-panels/windows/agents/AgentAssistantMarkdownDebugWindow.js +74 -59
  503. package/dist/window-panels/windows/agents/AgentMemoryWindow.js +24 -20
  504. package/dist/window-panels/windows/agents/AgentPickerFrame.js +14 -13
  505. package/dist/window-panels/windows/agents/AgentRunHistoryWindow.js +151 -112
  506. package/dist/window-panels/windows/agents/AgentRunWindow.js +118 -78
  507. package/dist/window-panels/windows/agents/ChatHistoryWindow.js +49 -38
  508. package/dist/window-panels/windows/agents/LiveRunWindow.js +34 -31
  509. package/dist/window-panels/windows/agents/MessageAnalysisWindow.js +39 -34
  510. package/dist/window-panels/windows/agents/ObservationalMemoryWindow.js +189 -137
  511. package/dist/window-panels/windows/agents/RunControlsWindow.js +50 -49
  512. package/package.json +9 -9
@@ -1,4 +1,5 @@
1
1
  "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
3
  import { useState } from "react";
3
4
  import { DiffViewer } from "@ai-matrx/diff/react";
4
5
  import { AlertTriangle, ChevronDown, GitCompareArrows, MessageSquareText, RefreshCw } from "lucide-react";
@@ -87,37 +88,72 @@ function Block({
87
88
  const fullBlock = side.block ?? "";
88
89
  const focused = focus ? focusLines(fullBlock, focus.key) : null;
89
90
  const block = focused ? focused.join("\n") : fullBlock;
90
- return /* @__PURE__ */ React.createElement("div", { className: "min-w-0 flex-1", "data-compare-side": side.path }, /* @__PURE__ */ React.createElement("div", { className: "flex items-baseline gap-2" }, /* @__PURE__ */ React.createElement("h4", { className: "text-[11px] font-semibold uppercase tracking-wider text-primary" }, title), /* @__PURE__ */ React.createElement("span", { className: "text-[10px] tabular-nums text-muted-foreground" }, side.scope_ids?.length ?? 0, " scope", (side.scope_ids?.length ?? 0) === 1 ? "" : "s", typeof side.resolve_ms === "number" ? ` \xB7 ${Math.round(side.resolve_ms)} ms` : "")), !side.available ? /* @__PURE__ */ React.createElement("div", { className: "mt-1.5 rounded-md border border-border bg-muted/30 px-2.5 py-2 text-xs text-foreground" }, side.unavailable_reason ?? "This side did not answer.") : focus && focused && focused.length === 0 ? /* @__PURE__ */ React.createElement(
91
- "div",
92
- {
93
- className: "mt-1.5 rounded-md border border-border bg-muted/30 px-2.5 py-2 text-xs text-foreground",
94
- "data-focus-absent": true
95
- },
96
- notInBlockSentence(side, focus)
97
- ) : block ? /* @__PURE__ */ React.createElement("div", { className: "group/block relative mt-1.5" }, /* @__PURE__ */ React.createElement("pre", { "data-kind-source": "explicit", className: "whitespace-pre-wrap break-words rounded-md border border-border bg-muted/40 px-2.5 py-2 font-mono text-[11px] leading-relaxed text-foreground" }, block), /* @__PURE__ */ React.createElement(
98
- CopyButtons,
99
- {
100
- label: "Copy",
101
- human: block,
102
- size: "sm",
103
- className: "absolute top-1 right-1 z-10 opacity-0 transition-opacity pointer-coarse:opacity-100 group-hover/block:opacity-100"
104
- }
105
- )) : /* @__PURE__ */ React.createElement("div", { className: "mt-1.5 rounded-md border border-border bg-muted/30 px-2.5 py-2 text-xs italic text-muted-foreground" }, "No block \u2014 this side delivers no context for this selection."), /* @__PURE__ */ React.createElement("p", { className: "mt-1 text-[11px] leading-snug text-muted-foreground", "data-provenance-values": side.path }, VALUES_PROVENANCE[side.path]));
91
+ return /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", "data-compare-side": side.path, children: [
92
+ /* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-2", children: [
93
+ /* @__PURE__ */ jsx("h4", { className: "text-[11px] font-semibold uppercase tracking-wider text-primary", children: title }),
94
+ /* @__PURE__ */ jsxs("span", { className: "text-[10px] tabular-nums text-muted-foreground", children: [
95
+ side.scope_ids?.length ?? 0,
96
+ " scope",
97
+ (side.scope_ids?.length ?? 0) === 1 ? "" : "s",
98
+ typeof side.resolve_ms === "number" ? ` \xB7 ${Math.round(side.resolve_ms)} ms` : ""
99
+ ] })
100
+ ] }),
101
+ !side.available ? /* @__PURE__ */ jsx("div", { className: "mt-1.5 rounded-md border border-border bg-muted/30 px-2.5 py-2 text-xs text-foreground", children: side.unavailable_reason ?? "This side did not answer." }) : focus && focused && focused.length === 0 ? /* @__PURE__ */ jsx(
102
+ "div",
103
+ {
104
+ className: "mt-1.5 rounded-md border border-border bg-muted/30 px-2.5 py-2 text-xs text-foreground",
105
+ "data-focus-absent": true,
106
+ children: notInBlockSentence(side, focus)
107
+ }
108
+ ) : block ? /* @__PURE__ */ jsxs("div", { className: "group/block relative mt-1.5", children: [
109
+ /* @__PURE__ */ jsx("pre", { "data-kind-source": "explicit", className: "whitespace-pre-wrap break-words rounded-md border border-border bg-muted/40 px-2.5 py-2 font-mono text-[11px] leading-relaxed text-foreground", children: block }),
110
+ /* @__PURE__ */ jsx(
111
+ CopyButtons,
112
+ {
113
+ label: "Copy",
114
+ human: block,
115
+ size: "sm",
116
+ className: "absolute top-1 right-1 z-10 opacity-0 transition-opacity pointer-coarse:opacity-100 group-hover/block:opacity-100"
117
+ }
118
+ )
119
+ ] }) : /* @__PURE__ */ jsx("div", { className: "mt-1.5 rounded-md border border-border bg-muted/30 px-2.5 py-2 text-xs italic text-muted-foreground", children: "No block \u2014 this side delivers no context for this selection." }),
120
+ /* @__PURE__ */ jsx("p", { className: "mt-1 text-[11px] leading-snug text-muted-foreground", "data-provenance-values": side.path, children: VALUES_PROVENANCE[side.path] })
121
+ ] });
106
122
  }
107
123
  function ProvenanceLine({ stamp }) {
108
124
  if (!stamp) return null;
109
- return /* @__PURE__ */ React.createElement("p", { className: "text-[11px] leading-snug text-muted-foreground", "data-provenance": stamp.resolver }, stamp.says, " ", /* @__PURE__ */ React.createElement("span", { className: "font-mono text-foreground/70" }, stamp.module, ".", stamp.function, " @ ", stamp.git_sha.slice(0, 10)));
125
+ return /* @__PURE__ */ jsxs("p", { className: "text-[11px] leading-snug text-muted-foreground", "data-provenance": stamp.resolver, children: [
126
+ stamp.says,
127
+ " ",
128
+ /* @__PURE__ */ jsxs("span", { className: "font-mono text-foreground/70", children: [
129
+ stamp.module,
130
+ ".",
131
+ stamp.function,
132
+ " @ ",
133
+ stamp.git_sha.slice(0, 10)
134
+ ] })
135
+ ] });
110
136
  }
111
137
  function FedBlock({ label, text, slot }) {
112
- return /* @__PURE__ */ React.createElement("div", { className: "min-w-0", "data-fed-block": slot }, /* @__PURE__ */ React.createElement("div", { className: "text-[10px] font-medium uppercase tracking-wider text-muted-foreground" }, label), text ? /* @__PURE__ */ React.createElement("div", { className: "group/block relative mt-1" }, /* @__PURE__ */ React.createElement("pre", { "data-kind-source": "explicit", className: "max-h-[28rem] overflow-auto whitespace-pre-wrap break-words rounded-md border border-border bg-muted/40 px-2.5 py-2 font-mono text-[11px] leading-relaxed text-foreground" }, text), /* @__PURE__ */ React.createElement(
113
- CopyButtons,
114
- {
115
- label: "Copy",
116
- human: text,
117
- size: "sm",
118
- className: "absolute top-1 right-1 z-10 opacity-0 transition-opacity pointer-coarse:opacity-100 group-hover/block:opacity-100"
119
- }
120
- )) : /* @__PURE__ */ React.createElement("p", { className: "mt-1 rounded-md border border-border bg-muted/30 px-2.5 py-2 text-xs italic text-muted-foreground" }, "Nothing \u2014 this turn is fed no ", slot === "intro" ? "intro" : "selection block", "."));
138
+ return /* @__PURE__ */ jsxs("div", { className: "min-w-0", "data-fed-block": slot, children: [
139
+ /* @__PURE__ */ jsx("div", { className: "text-[10px] font-medium uppercase tracking-wider text-muted-foreground", children: label }),
140
+ text ? /* @__PURE__ */ jsxs("div", { className: "group/block relative mt-1", children: [
141
+ /* @__PURE__ */ jsx("pre", { "data-kind-source": "explicit", className: "max-h-[28rem] overflow-auto whitespace-pre-wrap break-words rounded-md border border-border bg-muted/40 px-2.5 py-2 font-mono text-[11px] leading-relaxed text-foreground", children: text }),
142
+ /* @__PURE__ */ jsx(
143
+ CopyButtons,
144
+ {
145
+ label: "Copy",
146
+ human: text,
147
+ size: "sm",
148
+ className: "absolute top-1 right-1 z-10 opacity-0 transition-opacity pointer-coarse:opacity-100 group-hover/block:opacity-100"
149
+ }
150
+ )
151
+ ] }) : /* @__PURE__ */ jsxs("p", { className: "mt-1 rounded-md border border-border bg-muted/30 px-2.5 py-2 text-xs italic text-muted-foreground", children: [
152
+ "Nothing \u2014 this turn is fed no ",
153
+ slot === "intro" ? "intro" : "selection block",
154
+ "."
155
+ ] })
156
+ ] });
121
157
  }
122
158
  function bytesLine(side) {
123
159
  if (!side.available) return side.unavailable_reason ?? "This side did not answer.";
@@ -131,10 +167,21 @@ function FedSide({
131
167
  says,
132
168
  focus
133
169
  }) {
134
- return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3 px-4 pt-3", "data-fed-side": side?.path ?? "missing" }, side ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(ProvenanceLine, { stamp: side.provenance }), /* @__PURE__ */ React.createElement("p", { className: "text-xs tabular-nums text-foreground", "data-fed-bytes": true }, bytesLine(side)), side.available && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(FedBlock, { label: "System prompt \u2014 the first turn only", text: side.intro, slot: "intro" }), /* @__PURE__ */ React.createElement(FedBlock, { label: "Every message \u2014 the selection", text: side.active, slot: "active" })), says && /* @__PURE__ */ React.createElement("p", { className: "text-xs text-muted-foreground" }, says)) : /* @__PURE__ */ React.createElement(NoDelivered, null), /* @__PURE__ */ React.createElement(Block, { side: values, title: valuesTitle, focus }));
170
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3 px-4 pt-3", "data-fed-side": side?.path ?? "missing", children: [
171
+ side ? /* @__PURE__ */ jsxs(Fragment, { children: [
172
+ /* @__PURE__ */ jsx(ProvenanceLine, { stamp: side.provenance }),
173
+ /* @__PURE__ */ jsx("p", { className: "text-xs tabular-nums text-foreground", "data-fed-bytes": true, children: bytesLine(side) }),
174
+ side.available && /* @__PURE__ */ jsxs(Fragment, { children: [
175
+ /* @__PURE__ */ jsx(FedBlock, { label: "System prompt \u2014 the first turn only", text: side.intro, slot: "intro" }),
176
+ /* @__PURE__ */ jsx(FedBlock, { label: "Every message \u2014 the selection", text: side.active, slot: "active" })
177
+ ] }),
178
+ says && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: says })
179
+ ] }) : /* @__PURE__ */ jsx(NoDelivered, {}),
180
+ /* @__PURE__ */ jsx(Block, { side: values, title: valuesTitle, focus })
181
+ ] });
135
182
  }
136
183
  function NoDelivered() {
137
- return /* @__PURE__ */ React.createElement("p", { className: "rounded-md border border-border bg-muted/30 px-3 py-2 text-xs text-foreground", "data-fed-missing": true }, "This server version doesn't report what the model is fed yet");
184
+ return /* @__PURE__ */ jsx("p", { className: "rounded-md border border-border bg-muted/30 px-3 py-2 text-xs text-foreground", "data-fed-missing": true, children: "This server version doesn't report what the model is fed yet" });
138
185
  }
139
186
  function DiffTab({
140
187
  compare,
@@ -155,133 +202,214 @@ function DiffTab({
155
202
  fedVerdict = `Byte-identical \u2014 both systems feed the model the same ${formatCount(today.block_byte_length)} bytes (sha256 ${(today.block_sha256 ?? "").slice(0, 12)}).`;
156
203
  else
157
204
  fedVerdict = `Different \u2014 ${formatCount(today.block_byte_length)} bytes today, ${formatCount(store.block_byte_length)} bytes from the record store.`;
158
- return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col", "data-compare-diff": true, "data-kind-source": "explicit" }, /* @__PURE__ */ React.createElement(Summary, { compare }), /* @__PURE__ */ React.createElement("section", { className: "px-4 pt-4", "data-diff-fed": true }, /* @__PURE__ */ React.createElement("h3", { className: "text-[11px] font-semibold uppercase tracking-wider text-primary" }, "What the model is fed"), today ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
159
- "p",
160
- {
161
- className: cn(
162
- "mt-1 text-sm font-medium",
163
- delivered?.identical ? "text-foreground" : "text-amber-700 dark:text-amber-300"
164
- ),
165
- "data-fed-identical": String(Boolean(delivered?.identical))
166
- },
167
- fedVerdict
168
- ), /* @__PURE__ */ React.createElement("div", { className: "mt-1 space-y-0.5" }, /* @__PURE__ */ React.createElement(ProvenanceLine, { stamp: today.provenance }), store?.available && /* @__PURE__ */ React.createElement(ProvenanceLine, { stamp: store.provenance })), store?.available && /* @__PURE__ */ React.createElement("div", { className: "mt-2 overflow-hidden rounded-md border border-border", "data-diff-viewer": "fed" }, /* @__PURE__ */ React.createElement(
169
- DiffViewer,
170
- {
171
- original: today.injected_block ?? "",
172
- modified: store.injected_block ?? "",
173
- originalLabel: "What the model gets today",
174
- modifiedLabel: "Record store",
175
- engine: "light",
176
- defaultView: "inline",
177
- showLineNumbers: true,
178
- wrap: true,
179
- readOnly: true
180
- }
181
- ))) : /* @__PURE__ */ React.createElement("div", { className: "mt-1" }, /* @__PURE__ */ React.createElement(NoDelivered, null))), /* @__PURE__ */ React.createElement("section", { className: "px-4 pt-4", "data-diff-values": true }, /* @__PURE__ */ React.createElement("h3", { className: "text-[11px] font-semibold uppercase tracking-wider text-primary" }, "The values each system answered"), /* @__PURE__ */ React.createElement("p", { className: "mt-1 text-xs text-muted-foreground" }, focus ? `${focus.label} only. ` : "", "With an organization, agents fetch these with tools"), compare.old.available && compare.new.available ? shownOld === shownNew ? /* @__PURE__ */ React.createElement("div", { className: "mt-1.5 rounded-md border border-border bg-muted/30 px-2.5 py-2 text-xs text-foreground", "data-values-identical": true }, shownOld ? "Identical on both systems:" : "Neither system delivers a value here.", shownOld && /* @__PURE__ */ React.createElement("pre", { className: "mt-1 whitespace-pre-wrap break-words font-mono text-[11px] leading-relaxed" }, shownOld)) : /* @__PURE__ */ React.createElement("div", { className: "mt-2 overflow-hidden rounded-md border border-border", "data-diff-viewer": "values" }, /* @__PURE__ */ React.createElement(
182
- DiffViewer,
183
- {
184
- original: shownOld,
185
- modified: shownNew,
186
- originalLabel: "Current system",
187
- modifiedLabel: "Record store",
188
- engine: "light",
189
- defaultView: "inline",
190
- showLineNumbers: true,
191
- wrap: true,
192
- readOnly: true
193
- }
194
- )) : /* @__PURE__ */ React.createElement("p", { className: "mt-1.5 rounded-md border border-border bg-muted/30 px-2.5 py-2 text-xs text-foreground" }, (!compare.old.available ? compare.old.unavailable_reason : compare.new.unavailable_reason) ?? "One side did not answer.")), /* @__PURE__ */ React.createElement(
195
- Differences,
196
- {
197
- differences: focus ? (compare.differences ?? []).filter((d) => d.item_id === focus.itemId) : compare.differences ?? []
198
- }
199
- ));
205
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col", "data-compare-diff": true, "data-kind-source": "explicit", children: [
206
+ /* @__PURE__ */ jsx(Summary, { compare }),
207
+ /* @__PURE__ */ jsxs("section", { className: "px-4 pt-4", "data-diff-fed": true, children: [
208
+ /* @__PURE__ */ jsx("h3", { className: "text-[11px] font-semibold uppercase tracking-wider text-primary", children: "What the model is fed" }),
209
+ today ? /* @__PURE__ */ jsxs(Fragment, { children: [
210
+ /* @__PURE__ */ jsx(
211
+ "p",
212
+ {
213
+ className: cn(
214
+ "mt-1 text-sm font-medium",
215
+ delivered?.identical ? "text-foreground" : "text-amber-700 dark:text-amber-300"
216
+ ),
217
+ "data-fed-identical": String(Boolean(delivered?.identical)),
218
+ children: fedVerdict
219
+ }
220
+ ),
221
+ /* @__PURE__ */ jsxs("div", { className: "mt-1 space-y-0.5", children: [
222
+ /* @__PURE__ */ jsx(ProvenanceLine, { stamp: today.provenance }),
223
+ store?.available && /* @__PURE__ */ jsx(ProvenanceLine, { stamp: store.provenance })
224
+ ] }),
225
+ store?.available && /* @__PURE__ */ jsx("div", { className: "mt-2 overflow-hidden rounded-md border border-border", "data-diff-viewer": "fed", children: /* @__PURE__ */ jsx(
226
+ DiffViewer,
227
+ {
228
+ original: today.injected_block ?? "",
229
+ modified: store.injected_block ?? "",
230
+ originalLabel: "What the model gets today",
231
+ modifiedLabel: "Record store",
232
+ engine: "light",
233
+ defaultView: "inline",
234
+ showLineNumbers: true,
235
+ wrap: true,
236
+ readOnly: true
237
+ }
238
+ ) })
239
+ ] }) : /* @__PURE__ */ jsx("div", { className: "mt-1", children: /* @__PURE__ */ jsx(NoDelivered, {}) })
240
+ ] }),
241
+ /* @__PURE__ */ jsxs("section", { className: "px-4 pt-4", "data-diff-values": true, children: [
242
+ /* @__PURE__ */ jsx("h3", { className: "text-[11px] font-semibold uppercase tracking-wider text-primary", children: "The values each system answered" }),
243
+ /* @__PURE__ */ jsxs("p", { className: "mt-1 text-xs text-muted-foreground", children: [
244
+ focus ? `${focus.label} only. ` : "",
245
+ "With an organization, agents fetch these with tools"
246
+ ] }),
247
+ compare.old.available && compare.new.available ? shownOld === shownNew ? /* @__PURE__ */ jsxs("div", { className: "mt-1.5 rounded-md border border-border bg-muted/30 px-2.5 py-2 text-xs text-foreground", "data-values-identical": true, children: [
248
+ shownOld ? "Identical on both systems:" : "Neither system delivers a value here.",
249
+ shownOld && /* @__PURE__ */ jsx("pre", { className: "mt-1 whitespace-pre-wrap break-words font-mono text-[11px] leading-relaxed", children: shownOld })
250
+ ] }) : /* @__PURE__ */ jsx("div", { className: "mt-2 overflow-hidden rounded-md border border-border", "data-diff-viewer": "values", children: /* @__PURE__ */ jsx(
251
+ DiffViewer,
252
+ {
253
+ original: shownOld,
254
+ modified: shownNew,
255
+ originalLabel: "Current system",
256
+ modifiedLabel: "Record store",
257
+ engine: "light",
258
+ defaultView: "inline",
259
+ showLineNumbers: true,
260
+ wrap: true,
261
+ readOnly: true
262
+ }
263
+ ) }) : /* @__PURE__ */ jsx("p", { className: "mt-1.5 rounded-md border border-border bg-muted/30 px-2.5 py-2 text-xs text-foreground", children: (!compare.old.available ? compare.old.unavailable_reason : compare.new.unavailable_reason) ?? "One side did not answer." })
264
+ ] }),
265
+ /* @__PURE__ */ jsx(
266
+ Differences,
267
+ {
268
+ differences: focus ? (compare.differences ?? []).filter((d) => d.item_id === focus.itemId) : compare.differences ?? []
269
+ }
270
+ )
271
+ ] });
200
272
  }
201
273
  function JsonBlock({ label, value, slot }) {
202
274
  const text = JSON.stringify(value ?? null, null, 2);
203
- return /* @__PURE__ */ React.createElement("div", { className: "min-w-0", "data-selection-block": slot }, /* @__PURE__ */ React.createElement("div", { className: "text-[10px] font-medium uppercase tracking-wider text-muted-foreground" }, label), /* @__PURE__ */ React.createElement("div", { className: "group/block relative mt-1" }, /* @__PURE__ */ React.createElement("pre", { "data-kind-source": "explicit", className: "overflow-auto whitespace-pre-wrap break-all rounded-md border border-border bg-muted/40 px-2.5 py-2 font-mono text-[11px] leading-relaxed text-foreground" }, text), /* @__PURE__ */ React.createElement(
204
- CopyButtons,
205
- {
206
- label: "Copy",
207
- human: text,
208
- size: "sm",
209
- className: "absolute top-1 right-1 z-10 opacity-0 transition-opacity pointer-coarse:opacity-100 group-hover/block:opacity-100"
210
- }
211
- )));
275
+ return /* @__PURE__ */ jsxs("div", { className: "min-w-0", "data-selection-block": slot, children: [
276
+ /* @__PURE__ */ jsx("div", { className: "text-[10px] font-medium uppercase tracking-wider text-muted-foreground", children: label }),
277
+ /* @__PURE__ */ jsxs("div", { className: "group/block relative mt-1", children: [
278
+ /* @__PURE__ */ jsx("pre", { "data-kind-source": "explicit", className: "overflow-auto whitespace-pre-wrap break-all rounded-md border border-border bg-muted/40 px-2.5 py-2 font-mono text-[11px] leading-relaxed text-foreground", children: text }),
279
+ /* @__PURE__ */ jsx(
280
+ CopyButtons,
281
+ {
282
+ label: "Copy",
283
+ human: text,
284
+ size: "sm",
285
+ className: "absolute top-1 right-1 z-10 opacity-0 transition-opacity pointer-coarse:opacity-100 group-hover/block:opacity-100"
286
+ }
287
+ )
288
+ ] })
289
+ ] });
212
290
  }
213
291
  function SelectionTab({
214
292
  sent,
215
293
  compare,
216
294
  delivered
217
295
  }) {
218
- return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3 px-4 pt-3", "data-compare-selection": true }, sent && /* @__PURE__ */ React.createElement(JsonBlock, { label: "What this page sent", value: sent, slot: "sent" }), /* @__PURE__ */ React.createElement(JsonBlock, { label: "The scopes the values compare read", value: compare.selection, slot: "expanded" }), delivered ? /* @__PURE__ */ React.createElement(JsonBlock, { label: "The assembler's arguments (both sides)", value: delivered.arguments, slot: "arguments" }) : /* @__PURE__ */ React.createElement(NoDelivered, null));
296
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3 px-4 pt-3", "data-compare-selection": true, children: [
297
+ sent && /* @__PURE__ */ jsx(JsonBlock, { label: "What this page sent", value: sent, slot: "sent" }),
298
+ /* @__PURE__ */ jsx(JsonBlock, { label: "The scopes the values compare read", value: compare.selection, slot: "expanded" }),
299
+ delivered ? /* @__PURE__ */ jsx(JsonBlock, { label: "The assembler's arguments (both sides)", value: delivered.arguments, slot: "arguments" }) : /* @__PURE__ */ jsx(NoDelivered, {})
300
+ ] });
219
301
  }
220
302
  function Summary({ compare }) {
221
303
  const counts = compare.counts ?? {};
222
304
  const total = (compare.differences ?? []).length;
223
- return /* @__PURE__ */ React.createElement("section", { className: "px-4 pt-3" }, /* @__PURE__ */ React.createElement(
305
+ return /* @__PURE__ */ jsx("section", { className: "px-4 pt-3", children: /* @__PURE__ */ jsxs(
224
306
  "div",
225
307
  {
226
308
  className: cn(
227
309
  "rounded-md border px-3 py-2",
228
310
  (compare.defects ?? 0) > 0 ? "border-destructive/40 bg-destructive/5" : "border-primary/20 bg-primary/5"
229
311
  ),
230
- "data-compare-summary": true
231
- },
232
- /* @__PURE__ */ React.createElement("p", { className: "text-sm font-medium text-foreground" }, (compare.defects ?? 0) > 0 ? `${compare.defects} defect${compare.defects === 1 ? "" : "s"} \u2014 the two systems disagree where they should not.` : total === 0 ? "Identical \u2014 both systems hand the agent the same values." : "No defects \u2014 every difference below has a known reason."),
233
- /* @__PURE__ */ React.createElement("p", { className: "mt-0.5 text-xs tabular-nums text-muted-foreground" }, compare.identical_cells ?? 0, " identical value", compare.identical_cells === 1 ? "" : "s", CLASS_ORDER.filter((c) => counts[c]).map((c) => ` \xB7 ${counts[c]} ${CLASS_LOOK[c].label.toLowerCase()}`)),
234
- /* @__PURE__ */ React.createElement("p", { className: "mt-1.5 text-xs text-foreground/90" }, compare.ruling),
235
- /* @__PURE__ */ React.createElement(
236
- "p",
237
- {
238
- className: cn(
239
- "mt-1 text-xs",
240
- compare.follow.alert ? "font-medium text-destructive" : "text-muted-foreground"
312
+ "data-compare-summary": true,
313
+ children: [
314
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-foreground", children: (compare.defects ?? 0) > 0 ? `${compare.defects} defect${compare.defects === 1 ? "" : "s"} \u2014 the two systems disagree where they should not.` : total === 0 ? "Identical \u2014 both systems hand the agent the same values." : "No defects \u2014 every difference below has a known reason." }),
315
+ /* @__PURE__ */ jsxs("p", { className: "mt-0.5 text-xs tabular-nums text-muted-foreground", children: [
316
+ compare.identical_cells ?? 0,
317
+ " identical value",
318
+ compare.identical_cells === 1 ? "" : "s",
319
+ CLASS_ORDER.filter((c) => counts[c]).map((c) => ` \xB7 ${counts[c]} ${CLASS_LOOK[c].label.toLowerCase()}`)
320
+ ] }),
321
+ /* @__PURE__ */ jsx("p", { className: "mt-1.5 text-xs text-foreground/90", children: compare.ruling }),
322
+ /* @__PURE__ */ jsx(
323
+ "p",
324
+ {
325
+ className: cn(
326
+ "mt-1 text-xs",
327
+ compare.follow.alert ? "font-medium text-destructive" : "text-muted-foreground"
328
+ ),
329
+ "data-follow-alert": compare.follow.alert ? "true" : void 0,
330
+ children: compare.follow.says
331
+ }
241
332
  ),
242
- "data-follow-alert": compare.follow.alert ? "true" : void 0
243
- },
244
- compare.follow.says
245
- ),
246
- (compare.excluded ?? []).map((e) => /* @__PURE__ */ React.createElement("p", { key: e, className: "mt-1 text-xs text-muted-foreground" }, e)),
247
- /* @__PURE__ */ React.createElement(SystemItemsLine, { items: compare.system_items })
248
- ));
333
+ (compare.excluded ?? []).map((e) => /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: e }, e)),
334
+ /* @__PURE__ */ jsx(SystemItemsLine, { items: compare.system_items })
335
+ ]
336
+ }
337
+ ) });
249
338
  }
250
339
  function Differences({ differences }) {
251
340
  if (differences.length === 0) return null;
252
341
  const sorted = [...differences].sort(
253
342
  (a, b) => CLASS_ORDER.indexOf(a.difference_class) - CLASS_ORDER.indexOf(b.difference_class)
254
343
  );
255
- return /* @__PURE__ */ React.createElement("section", { className: "px-4 pt-4" }, /* @__PURE__ */ React.createElement("h3", { className: "text-[11px] font-semibold uppercase tracking-wider text-primary" }, "Every difference"), /* @__PURE__ */ React.createElement("ul", { className: "mt-1.5 divide-y divide-border/60 rounded-md border border-border" }, sorted.map((d, i) => {
256
- const look = CLASS_LOOK[d.difference_class];
257
- return /* @__PURE__ */ React.createElement(
258
- "li",
259
- {
260
- key: `${d.item_id}:${d.scope_id ?? ""}:${i}`,
261
- className: "px-2.5 py-2",
262
- "data-difference-class": d.difference_class
263
- },
264
- /* @__PURE__ */ React.createElement("div", { className: "flex flex-wrap items-center gap-2" }, /* @__PURE__ */ React.createElement("span", { className: "min-w-0 truncate font-mono text-xs font-semibold text-foreground" }, humanizeIdentifier(d.key)), d.scope_name && /* @__PURE__ */ React.createElement("span", { className: "text-[11px] text-muted-foreground" }, "on ", d.scope_name), /* @__PURE__ */ React.createElement("span", { className: "flex-1" }), /* @__PURE__ */ React.createElement("span", { className: cn("shrink-0 rounded-full border px-1.5 py-0.5 text-[10px] font-medium", look.className) }, look.label)),
265
- /* @__PURE__ */ React.createElement("p", { className: "mt-1 text-xs leading-relaxed text-foreground/90" }, d.why),
266
- (d.old_value !== void 0 || d.new_value !== void 0) && show(d.old_value) !== show(d.new_value) && /* @__PURE__ */ React.createElement("div", { className: "mt-1.5 grid gap-1.5 sm:grid-cols-2" }, ["old", "new"].map((p) => {
267
- const v = show(p === "old" ? d.old_value : d.new_value);
268
- return /* @__PURE__ */ React.createElement("div", { key: p, className: "min-w-0" }, /* @__PURE__ */ React.createElement("div", { className: "text-[10px] font-medium uppercase tracking-wider text-muted-foreground" }, p === "old" ? "Current system" : "Record store"), /* @__PURE__ */ React.createElement("div", { "data-kind-source": "explicit", className: "whitespace-pre-wrap break-words rounded bg-muted/40 px-2 py-1 font-mono text-[11px] text-foreground/90" }, v || /* @__PURE__ */ React.createElement("span", { className: "italic text-muted-foreground" }, "(not delivered)")));
269
- }))
270
- );
271
- })));
344
+ return /* @__PURE__ */ jsxs("section", { className: "px-4 pt-4", children: [
345
+ /* @__PURE__ */ jsx("h3", { className: "text-[11px] font-semibold uppercase tracking-wider text-primary", children: "Every difference" }),
346
+ /* @__PURE__ */ jsx("ul", { className: "mt-1.5 divide-y divide-border/60 rounded-md border border-border", children: sorted.map((d, i) => {
347
+ const look = CLASS_LOOK[d.difference_class];
348
+ return /* @__PURE__ */ jsxs(
349
+ "li",
350
+ {
351
+ className: "px-2.5 py-2",
352
+ "data-difference-class": d.difference_class,
353
+ children: [
354
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
355
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate font-mono text-xs font-semibold text-foreground", children: humanizeIdentifier(d.key) }),
356
+ d.scope_name && /* @__PURE__ */ jsxs("span", { className: "text-[11px] text-muted-foreground", children: [
357
+ "on ",
358
+ d.scope_name
359
+ ] }),
360
+ /* @__PURE__ */ jsx("span", { className: "flex-1" }),
361
+ /* @__PURE__ */ jsx("span", { className: cn("shrink-0 rounded-full border px-1.5 py-0.5 text-[10px] font-medium", look.className), children: look.label })
362
+ ] }),
363
+ /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs leading-relaxed text-foreground/90", children: d.why }),
364
+ (d.old_value !== void 0 || d.new_value !== void 0) && show(d.old_value) !== show(d.new_value) && /* @__PURE__ */ jsx("div", { className: "mt-1.5 grid gap-1.5 sm:grid-cols-2", children: ["old", "new"].map((p) => {
365
+ const v = show(p === "old" ? d.old_value : d.new_value);
366
+ return /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
367
+ /* @__PURE__ */ jsx("div", { className: "text-[10px] font-medium uppercase tracking-wider text-muted-foreground", children: p === "old" ? "Current system" : "Record store" }),
368
+ /* @__PURE__ */ jsx("div", { "data-kind-source": "explicit", className: "whitespace-pre-wrap break-words rounded bg-muted/40 px-2 py-1 font-mono text-[11px] text-foreground/90", children: v || /* @__PURE__ */ jsx("span", { className: "italic text-muted-foreground", children: "(not delivered)" }) })
369
+ ] }, p);
370
+ }) })
371
+ ]
372
+ },
373
+ `${d.item_id}:${d.scope_id ?? ""}:${i}`
374
+ );
375
+ }) })
376
+ ] });
272
377
  }
273
378
  function Checks({ side }) {
274
379
  const checks = side.checks ?? [];
275
380
  const withheld = side.withheld ?? [];
276
381
  if (checks.length === 0 && withheld.length === 0) return null;
277
- return /* @__PURE__ */ React.createElement("section", { className: "px-4 pt-4" }, /* @__PURE__ */ React.createElement("h3", { className: "text-[11px] font-semibold uppercase tracking-wider text-primary" }, "Checked for you on the new side"), /* @__PURE__ */ React.createElement("ul", { className: "mt-1.5 divide-y divide-border/60 rounded-md border border-border" }, checks.map((c, i) => /* @__PURE__ */ React.createElement("li", { key: `${c.record_id}:${c.via}:${i}`, className: "px-2.5 py-2 text-xs", "data-check-admitted": c.admitted }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React.createElement("span", { className: "min-w-0 flex-1 truncate font-medium text-foreground" }, c.name || "A scope you were given"), /* @__PURE__ */ React.createElement("span", { className: "shrink-0 text-[10px] text-muted-foreground" }, c.via === "selection" ? "you selected it" : c.via === "entity_tag" ? "tagged to this chat" : c.via === "project_tag" ? "tagged to its project" : c.via), /* @__PURE__ */ React.createElement(Badge, { className: "shrink-0", tone: c.admitted ? "primary" : "neutral" }, c.admitted ? "you may read it" : "not delivered")), c.says && /* @__PURE__ */ React.createElement("p", { className: "mt-1 text-muted-foreground" }, c.says))), withheld.map((w, i) => /* @__PURE__ */ React.createElement("li", { key: `w:${i}`, className: "px-2.5 py-2 text-xs" }, /* @__PURE__ */ React.createElement("span", { className: "font-mono font-semibold text-foreground" }, show(w.key)), w.record_name ? /* @__PURE__ */ React.createElement("span", { className: "text-muted-foreground" }, " on ", show(w.record_name)) : null, /* @__PURE__ */ React.createElement("span", { className: "text-muted-foreground" }, " \u2014 withheld: ", show(w.reason))))));
382
+ return /* @__PURE__ */ jsxs("section", { className: "px-4 pt-4", children: [
383
+ /* @__PURE__ */ jsx("h3", { className: "text-[11px] font-semibold uppercase tracking-wider text-primary", children: "Checked for you on the new side" }),
384
+ /* @__PURE__ */ jsxs("ul", { className: "mt-1.5 divide-y divide-border/60 rounded-md border border-border", children: [
385
+ checks.map((c, i) => /* @__PURE__ */ jsxs("li", { className: "px-2.5 py-2 text-xs", "data-check-admitted": c.admitted, children: [
386
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
387
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate font-medium text-foreground", children: c.name || "A scope you were given" }),
388
+ /* @__PURE__ */ jsx("span", { className: "shrink-0 text-[10px] text-muted-foreground", children: c.via === "selection" ? "you selected it" : c.via === "entity_tag" ? "tagged to this chat" : c.via === "project_tag" ? "tagged to its project" : c.via }),
389
+ /* @__PURE__ */ jsx(Badge, { className: "shrink-0", tone: c.admitted ? "primary" : "neutral", children: c.admitted ? "you may read it" : "not delivered" })
390
+ ] }),
391
+ c.says && /* @__PURE__ */ jsx("p", { className: "mt-1 text-muted-foreground", children: c.says })
392
+ ] }, `${c.record_id}:${c.via}:${i}`)),
393
+ withheld.map((w, i) => /* @__PURE__ */ jsxs("li", { className: "px-2.5 py-2 text-xs", children: [
394
+ /* @__PURE__ */ jsx("span", { className: "font-mono font-semibold text-foreground", children: show(w.key) }),
395
+ w.record_name ? /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground", children: [
396
+ " on ",
397
+ show(w.record_name)
398
+ ] }) : null,
399
+ /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground", children: [
400
+ " \u2014 withheld: ",
401
+ show(w.reason)
402
+ ] })
403
+ ] }, `w:${i}`))
404
+ ] })
405
+ ] });
278
406
  }
279
407
  function AnswerAgentPicker({
280
408
  agentId,
281
409
  onAgentChange
282
410
  }) {
283
411
  const chosenName = useAgentName(agentId) ?? null;
284
- return /* @__PURE__ */ React.createElement("div", { "data-answer-agent": agentId ?? "" }, /* @__PURE__ */ React.createElement(
412
+ return /* @__PURE__ */ jsx("div", { "data-answer-agent": agentId ?? "", children: /* @__PURE__ */ jsx(
285
413
  AgentListDropdown,
286
414
  {
287
415
  consumerId: "context-inspector-answer-both",
@@ -289,9 +417,12 @@ function AnswerAgentPicker({
289
417
  onSelect: (id) => onAgentChange(id || null),
290
418
  label: chosenName ?? "Choose an agent",
291
419
  showPinnedAgent: Boolean(agentId),
292
- triggerSlot: /* @__PURE__ */ React.createElement(Button, { iconEnd: /* @__PURE__ */ React.createElement(ChevronDown, { className: "text-muted-foreground" }), type: "button", variant: "outline", className: "max-w-full justify-between" }, /* @__PURE__ */ React.createElement("span", { className: "flex min-w-0 items-center gap-1.5" }, /* @__PURE__ */ React.createElement(AGENT_ICON, { className: "h-3 w-3 shrink-0 text-muted-foreground" }), /* @__PURE__ */ React.createElement("span", { className: "truncate" }, chosenName ?? (agentId ? "This agent" : "Choose an agent"))))
420
+ triggerSlot: /* @__PURE__ */ jsx(Button, { iconEnd: /* @__PURE__ */ jsx(ChevronDown, { className: "text-muted-foreground" }), type: "button", variant: "outline", className: "max-w-full justify-between", children: /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 items-center gap-1.5", children: [
421
+ /* @__PURE__ */ jsx(AGENT_ICON, { className: "h-3 w-3 shrink-0 text-muted-foreground" }),
422
+ /* @__PURE__ */ jsx("span", { className: "truncate", children: chosenName ?? (agentId ? "This agent" : "Choose an agent") })
423
+ ] }) })
293
424
  }
294
- ));
425
+ ) });
295
426
  }
296
427
  function AnswerBoth({
297
428
  agentId,
@@ -324,10 +455,17 @@ function AnswerBoth({
324
455
  ],
325
456
  `${agentId}|${agentName}|${running}|${error}|${result ? "r" : ""}|${question.length}`
326
457
  );
327
- const heading = /* @__PURE__ */ React.createElement("h3", { className: "flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wider text-primary" }, /* @__PURE__ */ React.createElement(MessageSquareText, { className: "h-3 w-3" }), "Answer on both paths");
328
- const picker = onAgentChange ? /* @__PURE__ */ React.createElement(AnswerAgentPicker, { agentId, onAgentChange }) : null;
458
+ const heading = /* @__PURE__ */ jsxs("h3", { className: "flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wider text-primary", children: [
459
+ /* @__PURE__ */ jsx(MessageSquareText, { className: "h-3 w-3" }),
460
+ "Answer on both paths"
461
+ ] });
462
+ const picker = onAgentChange ? /* @__PURE__ */ jsx(AnswerAgentPicker, { agentId, onAgentChange }) : null;
329
463
  if (!agentId) {
330
- return /* @__PURE__ */ React.createElement("section", { className: "px-4 pt-4", "data-answer-both-needs-agent": true }, heading, /* @__PURE__ */ React.createElement("p", { className: "mt-1 text-xs text-muted-foreground" }, picker ? "Choose the agent to compare" : "Open this from a chat with the agent to compare"), picker && /* @__PURE__ */ React.createElement("div", { className: "mt-1.5" }, picker));
464
+ return /* @__PURE__ */ jsxs("section", { className: "px-4 pt-4", "data-answer-both-needs-agent": true, children: [
465
+ heading,
466
+ /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: picker ? "Choose the agent to compare" : "Open this from a chat with the agent to compare" }),
467
+ picker && /* @__PURE__ */ jsx("div", { className: "mt-1.5", children: picker })
468
+ ] });
331
469
  }
332
470
  const run = () => {
333
471
  const q = question.trim();
@@ -360,32 +498,64 @@ function AnswerBoth({
360
498
  setResult(res.data ?? null);
361
499
  });
362
500
  };
363
- return /* @__PURE__ */ React.createElement("section", { className: "px-4 pt-4", "data-answer-both": true }, heading, picker && /* @__PURE__ */ React.createElement("div", { className: "mt-1.5" }, picker), /* @__PURE__ */ React.createElement("p", { className: "mt-1 text-xs text-muted-foreground" }, "One real turn per system, tools off, nothing saved"), /* @__PURE__ */ React.createElement(
364
- Textarea,
365
- {
366
- value: question,
367
- onChange: (e) => setQuestion(e.target.value),
368
- placeholder: "Ask the question you want both systems to answer",
369
- className: "mt-1.5 min-h-[64px] text-base md:text-sm"
370
- }
371
- ), /* @__PURE__ */ React.createElement("div", { className: "mt-1.5 flex items-center gap-2" }, /* @__PURE__ */ React.createElement(Button, { icon: running ? /* @__PURE__ */ React.createElement(RefreshCw, { className: "animate-spin" }) : /* @__PURE__ */ React.createElement(GitCompareArrows, null), variant: "primary", onClick: run, disabled: running || !question.trim() }, running ? "Answering twice\u2026" : "Answer on both paths")), error && /* @__PURE__ */ React.createElement("div", { className: "mt-2 rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive-ink" }, error, /* @__PURE__ */ React.createElement(ErrorAlchemyMenu, { error })), result && /* @__PURE__ */ React.createElement("div", { className: "mt-2" }, /* @__PURE__ */ React.createElement("p", { className: "text-xs text-muted-foreground" }, result.says), /* @__PURE__ */ React.createElement("div", { className: "mt-1.5 grid gap-2 sm:grid-cols-2" }, ["old", "new"].map((p) => {
372
- const a = result.answers.find((x) => x.path === p);
373
- return /* @__PURE__ */ React.createElement("div", { key: p, className: "min-w-0 rounded-md border border-border px-2.5 py-2", "data-answer-path": p }, /* @__PURE__ */ React.createElement("div", { className: "flex items-baseline gap-2" }, /* @__PURE__ */ React.createElement("span", { className: "text-[11px] font-semibold uppercase tracking-wider text-primary" }, p === "old" ? "Current system" : "Record store"), /* @__PURE__ */ React.createElement("span", { className: "text-[10px] tabular-nums text-muted-foreground" }, a?.model && !/^[0-9a-f-]{36}$/i.test(a.model) ? a.model : "", typeof a?.duration_ms === "number" ? ` ${formatDurationMs(a.duration_ms, { style: "compact" })}` : "", typeof a?.input_tokens === "number" ? ` \xB7 ${formatCount(a.input_tokens)} tokens in` : "")), a?.error ? /* @__PURE__ */ React.createElement("p", { className: "mt-1 text-xs text-destructive" }, a.error, " ", /* @__PURE__ */ React.createElement(ErrorAlchemyMenu, { error: a.error })) : (
374
- // The platform's markdown renderer — the one a chat answer goes through — so an
375
- // answer reads as it would in chat, never as raw text with asterisks.
376
- /* @__PURE__ */ React.createElement("div", { className: "mt-1 min-w-0 break-words text-sm text-foreground", "data-answer-markdown": true }, /* @__PURE__ */ React.createElement(RichContent, { level: "full", imagePolicy: "ai", source: a?.answer ?? "", hideCopyButton: true }))
377
- ), typeof a?.system_byte_length === "number" && /* @__PURE__ */ React.createElement(
378
- "p",
501
+ return /* @__PURE__ */ jsxs("section", { className: "px-4 pt-4", "data-answer-both": true, children: [
502
+ heading,
503
+ picker && /* @__PURE__ */ jsx("div", { className: "mt-1.5", children: picker }),
504
+ /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: "One real turn per system, tools off, nothing saved" }),
505
+ /* @__PURE__ */ jsx(
506
+ Textarea,
379
507
  {
380
- className: "mt-1.5 text-[10px] tabular-nums text-muted-foreground",
381
- "data-answer-bytes": p
382
- },
383
- "Ran on ",
384
- a.system_byte_length.toLocaleString(),
385
- " bytes of system text",
386
- a.context_sha256 ? ` \xB7 context sha ${a.context_sha256.slice(0, 12)}` : ""
387
- ), /* @__PURE__ */ React.createElement("div", { className: "mt-1", "data-answer-provenance": p }, /* @__PURE__ */ React.createElement(ProvenanceLine, { stamp: a?.provenance })));
388
- }))));
508
+ value: question,
509
+ onChange: (e) => setQuestion(e.target.value),
510
+ placeholder: "Ask the question you want both systems to answer",
511
+ className: "mt-1.5 min-h-[64px] text-base md:text-sm"
512
+ }
513
+ ),
514
+ /* @__PURE__ */ jsx("div", { className: "mt-1.5 flex items-center gap-2", children: /* @__PURE__ */ jsx(Button, { icon: running ? /* @__PURE__ */ jsx(RefreshCw, { className: "animate-spin" }) : /* @__PURE__ */ jsx(GitCompareArrows, {}), variant: "primary", onClick: run, disabled: running || !question.trim(), children: running ? "Answering twice\u2026" : "Answer on both paths" }) }),
515
+ error && /* @__PURE__ */ jsxs("div", { className: "mt-2 rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive-ink", children: [
516
+ error,
517
+ /* @__PURE__ */ jsx(ErrorAlchemyMenu, { error })
518
+ ] }),
519
+ result && /* @__PURE__ */ jsxs("div", { className: "mt-2", children: [
520
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: result.says }),
521
+ /* @__PURE__ */ jsx("div", { className: "mt-1.5 grid gap-2 sm:grid-cols-2", children: ["old", "new"].map((p) => {
522
+ const a = result.answers.find((x) => x.path === p);
523
+ return /* @__PURE__ */ jsxs("div", { className: "min-w-0 rounded-md border border-border px-2.5 py-2", "data-answer-path": p, children: [
524
+ /* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-2", children: [
525
+ /* @__PURE__ */ jsx("span", { className: "text-[11px] font-semibold uppercase tracking-wider text-primary", children: p === "old" ? "Current system" : "Record store" }),
526
+ /* @__PURE__ */ jsxs("span", { className: "text-[10px] tabular-nums text-muted-foreground", children: [
527
+ a?.model && !/^[0-9a-f-]{36}$/i.test(a.model) ? a.model : "",
528
+ typeof a?.duration_ms === "number" ? ` ${formatDurationMs(a.duration_ms, { style: "compact" })}` : "",
529
+ typeof a?.input_tokens === "number" ? ` \xB7 ${formatCount(a.input_tokens)} tokens in` : ""
530
+ ] })
531
+ ] }),
532
+ a?.error ? /* @__PURE__ */ jsxs("p", { className: "mt-1 text-xs text-destructive", children: [
533
+ a.error,
534
+ " ",
535
+ /* @__PURE__ */ jsx(ErrorAlchemyMenu, { error: a.error })
536
+ ] }) : (
537
+ // The platform's markdown renderer — the one a chat answer goes through — so an
538
+ // answer reads as it would in chat, never as raw text with asterisks.
539
+ /* @__PURE__ */ jsx("div", { className: "mt-1 min-w-0 break-words text-sm text-foreground", "data-answer-markdown": true, children: /* @__PURE__ */ jsx(RichContent, { level: "full", imagePolicy: "ai", source: a?.answer ?? "", hideCopyButton: true }) })
540
+ ),
541
+ typeof a?.system_byte_length === "number" && /* @__PURE__ */ jsxs(
542
+ "p",
543
+ {
544
+ className: "mt-1.5 text-[10px] tabular-nums text-muted-foreground",
545
+ "data-answer-bytes": p,
546
+ children: [
547
+ "Ran on ",
548
+ a.system_byte_length.toLocaleString(),
549
+ " bytes of system text",
550
+ a.context_sha256 ? ` \xB7 context sha ${a.context_sha256.slice(0, 12)}` : ""
551
+ ]
552
+ }
553
+ ),
554
+ /* @__PURE__ */ jsx("div", { className: "mt-1", "data-answer-provenance": p, children: /* @__PURE__ */ jsx(ProvenanceLine, { stamp: a?.provenance }) })
555
+ ] }, p);
556
+ }) })
557
+ ] })
558
+ ] });
389
559
  }
390
560
  function ContextCompareView({
391
561
  conversationId,
@@ -475,54 +645,101 @@ function ContextCompareView({
475
645
  },
476
646
  `${status}|${error}|${compare ? `${compare.defects}:${(compare.differences ?? []).length}:${compare.old.block?.length}:${compare.new.block?.length}` : ""}|${focus?.key ?? ""}`
477
647
  );
478
- return /* @__PURE__ */ React.createElement("div", { className: "flex min-h-0 flex-1 flex-col", "data-context-compare": true }, /* @__PURE__ */ React.createElement("div", { className: "flex shrink-0 items-center gap-2 border-b border-border px-4 py-1.5" }, /* @__PURE__ */ React.createElement(
479
- Chip,
480
- {
481
- tone: "primary",
482
- icon: /* @__PURE__ */ React.createElement(GitCompareArrows, null),
483
- label: status === "loading" ? "Resolving both\u2026" : "Current system \xB7 Record store"
484
- }
485
- ), /* @__PURE__ */ React.createElement("span", { className: "flex-1" }), /* @__PURE__ */ React.createElement(
486
- Button,
487
- {
488
- icon: /* @__PURE__ */ React.createElement(RefreshCw, { className: cn("h-3 w-3", status === "loading" && "animate-spin") }),
489
- variant: "quiet",
490
- onClick: refresh,
491
- disabled: status === "loading"
492
- },
493
- "Refresh"
494
- )), /* @__PURE__ */ React.createElement("div", { className: "min-h-0 flex-1 overflow-y-auto pb-4 scrollbar-thin-auto" }, status === "loading" && !data && /* @__PURE__ */ React.createElement("div", { className: "space-y-2.5 px-4 py-4" }, /* @__PURE__ */ React.createElement(Skeleton, { className: "h-10 w-full" }), /* @__PURE__ */ React.createElement("div", { className: "flex gap-3" }, /* @__PURE__ */ React.createElement(Skeleton, { className: "h-40 flex-1" }), /* @__PURE__ */ React.createElement(Skeleton, { className: "h-40 flex-1" }))), status === "error" && /* @__PURE__ */ React.createElement("div", { className: "mx-4 mt-4 rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2.5" }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-2 text-sm font-medium text-destructive" }, /* @__PURE__ */ React.createElement(AlertTriangle, { className: "h-4 w-4 shrink-0" }), "Comparison unavailable"), /* @__PURE__ */ React.createElement("div", { className: "mt-1 break-words text-xs text-destructive/90" }, error), /* @__PURE__ */ React.createElement(ErrorAlchemyMenu, { error })), data && !compare && /* @__PURE__ */ React.createElement("div", { className: "mx-4 mt-4 rounded-md border border-border bg-muted/30 px-3 py-2.5 text-xs text-foreground" }, "This server version has no compare mode yet"), compare && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Tabs, { value: activeTab, onValueChange: chooseTab, className: "pt-2", "data-compare-tabs": activeTab }, /* @__PURE__ */ React.createElement("div", { className: "overflow-x-auto px-4 scrollbar-none" }, /* @__PURE__ */ React.createElement(TabsList, { className: "w-max flex-nowrap" }, /* @__PURE__ */ React.createElement(TabsTrigger, { value: "diff", className: "shrink-0 whitespace-nowrap", "data-compare-tab": "diff" }, "Diff"), /* @__PURE__ */ React.createElement(TabsTrigger, { value: "today", className: "shrink-0 whitespace-nowrap", "data-compare-tab": "today" }, "What the model gets today"), /* @__PURE__ */ React.createElement(TabsTrigger, { value: "store", className: "shrink-0 whitespace-nowrap", "data-compare-tab": "store" }, "Record store"), /* @__PURE__ */ React.createElement(TabsTrigger, { value: "selection", className: "shrink-0 whitespace-nowrap", "data-compare-tab": "selection" }, "Selection"))), focus && /* @__PURE__ */ React.createElement("p", { className: "px-4 pt-2 text-xs text-muted-foreground", "data-compare-focus": focus.key }, "Showing ", focus.label, " only; the model always gets the whole turn"), /* @__PURE__ */ React.createElement(TabsContent, { value: "diff", className: "mt-0" }, /* @__PURE__ */ React.createElement(DiffTab, { compare, delivered, focus })), /* @__PURE__ */ React.createElement(TabsContent, { value: "today", className: "mt-0" }, /* @__PURE__ */ React.createElement(
495
- FedSide,
496
- {
497
- side: delivered?.today,
498
- values: compare.old,
499
- valuesTitle: "Values the current system answered",
500
- says: delivered?.says,
501
- focus
502
- }
503
- )), /* @__PURE__ */ React.createElement(TabsContent, { value: "store", className: "mt-0" }, /* @__PURE__ */ React.createElement(
504
- FedSide,
505
- {
506
- side: delivered ? delivered.record_store ?? {
507
- path: "record_store",
508
- available: false,
509
- unavailable_reason: "The server ran no record-store side for this preview."
510
- } : void 0,
511
- values: compare.new,
512
- valuesTitle: "Values the record store answered",
513
- says: delivered?.says,
514
- focus
515
- }
516
- ), /* @__PURE__ */ React.createElement(Checks, { side: compare.new })), /* @__PURE__ */ React.createElement(TabsContent, { value: "selection", className: "mt-0" }, /* @__PURE__ */ React.createElement(SelectionTab, { sent: selection, compare, delivered }))), /* @__PURE__ */ React.createElement(
517
- AnswerBoth,
518
- {
519
- key: agentId ?? "no-agent",
520
- agentId,
521
- onAgentChange,
522
- conversationId,
523
- selection
524
- }
525
- ))));
648
+ return /* @__PURE__ */ jsxs("div", { className: "flex min-h-0 flex-1 flex-col", "data-context-compare": true, children: [
649
+ /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2 border-b border-border px-4 py-1.5", children: [
650
+ /* @__PURE__ */ jsx(
651
+ Chip,
652
+ {
653
+ tone: "primary",
654
+ icon: /* @__PURE__ */ jsx(GitCompareArrows, {}),
655
+ label: status === "loading" ? "Resolving both\u2026" : "Current system \xB7 Record store"
656
+ }
657
+ ),
658
+ /* @__PURE__ */ jsx("span", { className: "flex-1" }),
659
+ /* @__PURE__ */ jsx(
660
+ Button,
661
+ {
662
+ icon: /* @__PURE__ */ jsx(RefreshCw, { className: cn("h-3 w-3", status === "loading" && "animate-spin") }),
663
+ variant: "quiet",
664
+ onClick: refresh,
665
+ disabled: status === "loading",
666
+ children: "Refresh"
667
+ }
668
+ )
669
+ ] }),
670
+ /* @__PURE__ */ jsxs("div", { className: "min-h-0 flex-1 overflow-y-auto pb-4 scrollbar-thin-auto", children: [
671
+ status === "loading" && !data && /* @__PURE__ */ jsxs("div", { className: "space-y-2.5 px-4 py-4", children: [
672
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-10 w-full" }),
673
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-3", children: [
674
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-40 flex-1" }),
675
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-40 flex-1" })
676
+ ] })
677
+ ] }),
678
+ status === "error" && /* @__PURE__ */ jsxs("div", { className: "mx-4 mt-4 rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2.5", children: [
679
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-sm font-medium text-destructive", children: [
680
+ /* @__PURE__ */ jsx(AlertTriangle, { className: "h-4 w-4 shrink-0" }),
681
+ "Comparison unavailable"
682
+ ] }),
683
+ /* @__PURE__ */ jsx("div", { className: "mt-1 break-words text-xs text-destructive/90", children: error }),
684
+ /* @__PURE__ */ jsx(ErrorAlchemyMenu, { error })
685
+ ] }),
686
+ data && !compare && /* @__PURE__ */ jsx("div", { className: "mx-4 mt-4 rounded-md border border-border bg-muted/30 px-3 py-2.5 text-xs text-foreground", children: "This server version has no compare mode yet" }),
687
+ compare && /* @__PURE__ */ jsxs(Fragment, { children: [
688
+ /* @__PURE__ */ jsxs(Tabs, { value: activeTab, onValueChange: chooseTab, className: "pt-2", "data-compare-tabs": activeTab, children: [
689
+ /* @__PURE__ */ jsx("div", { className: "overflow-x-auto px-4 scrollbar-none", children: /* @__PURE__ */ jsxs(TabsList, { className: "w-max flex-nowrap", children: [
690
+ /* @__PURE__ */ jsx(TabsTrigger, { value: "diff", className: "shrink-0 whitespace-nowrap", "data-compare-tab": "diff", children: "Diff" }),
691
+ /* @__PURE__ */ jsx(TabsTrigger, { value: "today", className: "shrink-0 whitespace-nowrap", "data-compare-tab": "today", children: "What the model gets today" }),
692
+ /* @__PURE__ */ jsx(TabsTrigger, { value: "store", className: "shrink-0 whitespace-nowrap", "data-compare-tab": "store", children: "Record store" }),
693
+ /* @__PURE__ */ jsx(TabsTrigger, { value: "selection", className: "shrink-0 whitespace-nowrap", "data-compare-tab": "selection", children: "Selection" })
694
+ ] }) }),
695
+ focus && /* @__PURE__ */ jsxs("p", { className: "px-4 pt-2 text-xs text-muted-foreground", "data-compare-focus": focus.key, children: [
696
+ "Showing ",
697
+ focus.label,
698
+ " only; the model always gets the whole turn"
699
+ ] }),
700
+ /* @__PURE__ */ jsx(TabsContent, { value: "diff", className: "mt-0", children: /* @__PURE__ */ jsx(DiffTab, { compare, delivered, focus }) }),
701
+ /* @__PURE__ */ jsx(TabsContent, { value: "today", className: "mt-0", children: /* @__PURE__ */ jsx(
702
+ FedSide,
703
+ {
704
+ side: delivered?.today,
705
+ values: compare.old,
706
+ valuesTitle: "Values the current system answered",
707
+ says: delivered?.says,
708
+ focus
709
+ }
710
+ ) }),
711
+ /* @__PURE__ */ jsxs(TabsContent, { value: "store", className: "mt-0", children: [
712
+ /* @__PURE__ */ jsx(
713
+ FedSide,
714
+ {
715
+ side: delivered ? delivered.record_store ?? {
716
+ path: "record_store",
717
+ available: false,
718
+ unavailable_reason: "The server ran no record-store side for this preview."
719
+ } : void 0,
720
+ values: compare.new,
721
+ valuesTitle: "Values the record store answered",
722
+ says: delivered?.says,
723
+ focus
724
+ }
725
+ ),
726
+ /* @__PURE__ */ jsx(Checks, { side: compare.new })
727
+ ] }),
728
+ /* @__PURE__ */ jsx(TabsContent, { value: "selection", className: "mt-0", children: /* @__PURE__ */ jsx(SelectionTab, { sent: selection, compare, delivered }) })
729
+ ] }),
730
+ /* @__PURE__ */ jsx(
731
+ AnswerBoth,
732
+ {
733
+ agentId,
734
+ onAgentChange,
735
+ conversationId,
736
+ selection
737
+ },
738
+ agentId ?? "no-agent"
739
+ )
740
+ ] })
741
+ ] })
742
+ ] });
526
743
  }
527
744
  export {
528
745
  ContextCompareView,