@invergent/agent-chat-react 2.1.4 → 2.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +173 -73
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +173 -74
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.cts
CHANGED
|
@@ -735,6 +735,7 @@ interface AgentChatAdapterContextValue {
|
|
|
735
735
|
declare const AgentChatAdapterProvider: React.Provider<AgentChatAdapterContextValue | null>;
|
|
736
736
|
declare function useAgentChatAdapterContext(): AgentChatAdapterContextValue;
|
|
737
737
|
|
|
738
|
+
declare function useChatViewMode(): "simple" | "expert";
|
|
738
739
|
interface UseAgentChatRuntimeInput {
|
|
739
740
|
adapter: AgentChatAdapter;
|
|
740
741
|
agentId?: string;
|
|
@@ -846,4 +847,4 @@ interface SessionTreePanelProps {
|
|
|
846
847
|
}
|
|
847
848
|
declare function SessionTreePanel({ adapter, sessionId, activeSessionId, agentId, title, sessionListLimit, hideRoot, hideHeader, loadList, onSessionSelect, onSessionDelete, }: SessionTreePanelProps): react_jsx_runtime.JSX.Element | null;
|
|
848
849
|
|
|
849
|
-
export { ACTIVE_MISSION_STATUSES, AgentChat, type AgentChatAdapter, type AgentChatAdapterContextValue, AgentChatAdapterProvider, type AgentChatArtifactKind, type AgentChatArtifactMeta, type AgentChatArtifactPayload, type AgentChatAskUserQuestionAnswer, type AgentChatAskUserQuestionArgs, type AgentChatAskUserQuestionChoice, type AgentChatAskUserQuestionQuestion, type AgentChatAttachment, type AgentChatChartArtifactSpec, type AgentChatDisplayAttachment, type AgentChatErrorCategory, type AgentChatErrorInfo, type AgentChatEventStream, type AgentChatEventType, type AgentChatExpertFeedbackRating, type AgentChatHtmlArtifactSpec, type AgentChatImageAttachment, type AgentChatInboxEventStream, type AgentChatInboxItem, type AgentChatInboxKind, type AgentChatInboxList, type AgentChatInboxListInput, type AgentChatInboxStatus, type AgentChatInboxStreamEvent, type AgentChatMarkdownArtifactSpec, type AgentChatMessage, type AgentChatMessageStatus, type AgentChatMissionList, type AgentChatMissionStatus, type AgentChatMissionSummary, type AgentChatMissionTask, type AgentChatMissionWorker, type AgentChatPendingAttachment, type AgentChatProps, type AgentChatRole, type AgentChatRuntimeApi, type AgentChatRuntimeEvent, type AgentChatScheduledWorkItem, type AgentChatScheduledWorkKind, type AgentChatScheduledWorkList, type AgentChatSession, type AgentChatSessionList, type AgentChatSessionTree, type AgentChatSessionTreeNode, type AgentChatSlashCommand, type AgentChatSseMessageEvent, type AgentChatState, type AgentChatSvgArtifactSpec, type AgentChatSystemKind, type AgentChatTableArtifactSpec, type AgentChatTokenUsage, type AgentChatToolCallInfo, type AgentChatWorkspaceEntry, type AgentChatWorkspaceFile, type AgentChatWorkspaceTree, type AgentChatWorkspaceUpload, type ArtifactKind, type ArtifactPayload, type AskUserQuestionAnswer, type AskUserQuestionArgs, type AskUserQuestionChoice, type AskUserQuestionQuestion, type ChartArtifactSpec, type ChatComposerError, type ChatMessage, type ErrorInfo, type HtmlArtifactSpec, type InboxItem, type InboxList, InboxPanel, type InboxPanelProps, type InboxUnreadCountState, type MarkdownArtifactSpec, MessageResponse, type MessageResponseProps, MissionDashboard, type MissionDashboardProps, type MissionTaskBucket, MissionsPanel, type MissionsPanelProps, type RetryIndicator, type ScheduledWorkItem, type ScheduledWorkList, ScheduledWorkPanel, type ScheduledWorkPanelProps, type SessionTree, type SessionTreeNode, SessionTreePanel, type SessionTreePanelProps, type SvgArtifactSpec, type TableArtifactSpec, type TokenUsage, type ToolCallInfo, type WorkspaceEntry, type WorkspaceFile, type WorkspaceTree, type WorkspaceUpload, deriveMissionWorkerActivityLabel, groupMissionTasksByBucket, isTerminalMissionStatus, missionTaskBucket, useAgentChatAdapterContext, useAgentChatRuntime, useInboxUnreadCount };
|
|
850
|
+
export { ACTIVE_MISSION_STATUSES, AgentChat, type AgentChatAdapter, type AgentChatAdapterContextValue, AgentChatAdapterProvider, type AgentChatArtifactKind, type AgentChatArtifactMeta, type AgentChatArtifactPayload, type AgentChatAskUserQuestionAnswer, type AgentChatAskUserQuestionArgs, type AgentChatAskUserQuestionChoice, type AgentChatAskUserQuestionQuestion, type AgentChatAttachment, type AgentChatChartArtifactSpec, type AgentChatDisplayAttachment, type AgentChatErrorCategory, type AgentChatErrorInfo, type AgentChatEventStream, type AgentChatEventType, type AgentChatExpertFeedbackRating, type AgentChatHtmlArtifactSpec, type AgentChatImageAttachment, type AgentChatInboxEventStream, type AgentChatInboxItem, type AgentChatInboxKind, type AgentChatInboxList, type AgentChatInboxListInput, type AgentChatInboxStatus, type AgentChatInboxStreamEvent, type AgentChatMarkdownArtifactSpec, type AgentChatMessage, type AgentChatMessageStatus, type AgentChatMissionList, type AgentChatMissionStatus, type AgentChatMissionSummary, type AgentChatMissionTask, type AgentChatMissionWorker, type AgentChatPendingAttachment, type AgentChatProps, type AgentChatRole, type AgentChatRuntimeApi, type AgentChatRuntimeEvent, type AgentChatScheduledWorkItem, type AgentChatScheduledWorkKind, type AgentChatScheduledWorkList, type AgentChatSession, type AgentChatSessionList, type AgentChatSessionTree, type AgentChatSessionTreeNode, type AgentChatSlashCommand, type AgentChatSseMessageEvent, type AgentChatState, type AgentChatSvgArtifactSpec, type AgentChatSystemKind, type AgentChatTableArtifactSpec, type AgentChatTokenUsage, type AgentChatToolCallInfo, type AgentChatWorkspaceEntry, type AgentChatWorkspaceFile, type AgentChatWorkspaceTree, type AgentChatWorkspaceUpload, type ArtifactKind, type ArtifactPayload, type AskUserQuestionAnswer, type AskUserQuestionArgs, type AskUserQuestionChoice, type AskUserQuestionQuestion, type ChartArtifactSpec, type ChatComposerError, type ChatMessage, type ErrorInfo, type HtmlArtifactSpec, type InboxItem, type InboxList, InboxPanel, type InboxPanelProps, type InboxUnreadCountState, type MarkdownArtifactSpec, MessageResponse, type MessageResponseProps, MissionDashboard, type MissionDashboardProps, type MissionTaskBucket, MissionsPanel, type MissionsPanelProps, type RetryIndicator, type ScheduledWorkItem, type ScheduledWorkList, ScheduledWorkPanel, type ScheduledWorkPanelProps, type SessionTree, type SessionTreeNode, SessionTreePanel, type SessionTreePanelProps, type SvgArtifactSpec, type TableArtifactSpec, type TokenUsage, type ToolCallInfo, type WorkspaceEntry, type WorkspaceFile, type WorkspaceTree, type WorkspaceUpload, deriveMissionWorkerActivityLabel, groupMissionTasksByBucket, isTerminalMissionStatus, missionTaskBucket, useAgentChatAdapterContext, useAgentChatRuntime, useChatViewMode, useInboxUnreadCount };
|
package/dist/index.d.ts
CHANGED
|
@@ -735,6 +735,7 @@ interface AgentChatAdapterContextValue {
|
|
|
735
735
|
declare const AgentChatAdapterProvider: React.Provider<AgentChatAdapterContextValue | null>;
|
|
736
736
|
declare function useAgentChatAdapterContext(): AgentChatAdapterContextValue;
|
|
737
737
|
|
|
738
|
+
declare function useChatViewMode(): "simple" | "expert";
|
|
738
739
|
interface UseAgentChatRuntimeInput {
|
|
739
740
|
adapter: AgentChatAdapter;
|
|
740
741
|
agentId?: string;
|
|
@@ -846,4 +847,4 @@ interface SessionTreePanelProps {
|
|
|
846
847
|
}
|
|
847
848
|
declare function SessionTreePanel({ adapter, sessionId, activeSessionId, agentId, title, sessionListLimit, hideRoot, hideHeader, loadList, onSessionSelect, onSessionDelete, }: SessionTreePanelProps): react_jsx_runtime.JSX.Element | null;
|
|
848
849
|
|
|
849
|
-
export { ACTIVE_MISSION_STATUSES, AgentChat, type AgentChatAdapter, type AgentChatAdapterContextValue, AgentChatAdapterProvider, type AgentChatArtifactKind, type AgentChatArtifactMeta, type AgentChatArtifactPayload, type AgentChatAskUserQuestionAnswer, type AgentChatAskUserQuestionArgs, type AgentChatAskUserQuestionChoice, type AgentChatAskUserQuestionQuestion, type AgentChatAttachment, type AgentChatChartArtifactSpec, type AgentChatDisplayAttachment, type AgentChatErrorCategory, type AgentChatErrorInfo, type AgentChatEventStream, type AgentChatEventType, type AgentChatExpertFeedbackRating, type AgentChatHtmlArtifactSpec, type AgentChatImageAttachment, type AgentChatInboxEventStream, type AgentChatInboxItem, type AgentChatInboxKind, type AgentChatInboxList, type AgentChatInboxListInput, type AgentChatInboxStatus, type AgentChatInboxStreamEvent, type AgentChatMarkdownArtifactSpec, type AgentChatMessage, type AgentChatMessageStatus, type AgentChatMissionList, type AgentChatMissionStatus, type AgentChatMissionSummary, type AgentChatMissionTask, type AgentChatMissionWorker, type AgentChatPendingAttachment, type AgentChatProps, type AgentChatRole, type AgentChatRuntimeApi, type AgentChatRuntimeEvent, type AgentChatScheduledWorkItem, type AgentChatScheduledWorkKind, type AgentChatScheduledWorkList, type AgentChatSession, type AgentChatSessionList, type AgentChatSessionTree, type AgentChatSessionTreeNode, type AgentChatSlashCommand, type AgentChatSseMessageEvent, type AgentChatState, type AgentChatSvgArtifactSpec, type AgentChatSystemKind, type AgentChatTableArtifactSpec, type AgentChatTokenUsage, type AgentChatToolCallInfo, type AgentChatWorkspaceEntry, type AgentChatWorkspaceFile, type AgentChatWorkspaceTree, type AgentChatWorkspaceUpload, type ArtifactKind, type ArtifactPayload, type AskUserQuestionAnswer, type AskUserQuestionArgs, type AskUserQuestionChoice, type AskUserQuestionQuestion, type ChartArtifactSpec, type ChatComposerError, type ChatMessage, type ErrorInfo, type HtmlArtifactSpec, type InboxItem, type InboxList, InboxPanel, type InboxPanelProps, type InboxUnreadCountState, type MarkdownArtifactSpec, MessageResponse, type MessageResponseProps, MissionDashboard, type MissionDashboardProps, type MissionTaskBucket, MissionsPanel, type MissionsPanelProps, type RetryIndicator, type ScheduledWorkItem, type ScheduledWorkList, ScheduledWorkPanel, type ScheduledWorkPanelProps, type SessionTree, type SessionTreeNode, SessionTreePanel, type SessionTreePanelProps, type SvgArtifactSpec, type TableArtifactSpec, type TokenUsage, type ToolCallInfo, type WorkspaceEntry, type WorkspaceFile, type WorkspaceTree, type WorkspaceUpload, deriveMissionWorkerActivityLabel, groupMissionTasksByBucket, isTerminalMissionStatus, missionTaskBucket, useAgentChatAdapterContext, useAgentChatRuntime, useInboxUnreadCount };
|
|
850
|
+
export { ACTIVE_MISSION_STATUSES, AgentChat, type AgentChatAdapter, type AgentChatAdapterContextValue, AgentChatAdapterProvider, type AgentChatArtifactKind, type AgentChatArtifactMeta, type AgentChatArtifactPayload, type AgentChatAskUserQuestionAnswer, type AgentChatAskUserQuestionArgs, type AgentChatAskUserQuestionChoice, type AgentChatAskUserQuestionQuestion, type AgentChatAttachment, type AgentChatChartArtifactSpec, type AgentChatDisplayAttachment, type AgentChatErrorCategory, type AgentChatErrorInfo, type AgentChatEventStream, type AgentChatEventType, type AgentChatExpertFeedbackRating, type AgentChatHtmlArtifactSpec, type AgentChatImageAttachment, type AgentChatInboxEventStream, type AgentChatInboxItem, type AgentChatInboxKind, type AgentChatInboxList, type AgentChatInboxListInput, type AgentChatInboxStatus, type AgentChatInboxStreamEvent, type AgentChatMarkdownArtifactSpec, type AgentChatMessage, type AgentChatMessageStatus, type AgentChatMissionList, type AgentChatMissionStatus, type AgentChatMissionSummary, type AgentChatMissionTask, type AgentChatMissionWorker, type AgentChatPendingAttachment, type AgentChatProps, type AgentChatRole, type AgentChatRuntimeApi, type AgentChatRuntimeEvent, type AgentChatScheduledWorkItem, type AgentChatScheduledWorkKind, type AgentChatScheduledWorkList, type AgentChatSession, type AgentChatSessionList, type AgentChatSessionTree, type AgentChatSessionTreeNode, type AgentChatSlashCommand, type AgentChatSseMessageEvent, type AgentChatState, type AgentChatSvgArtifactSpec, type AgentChatSystemKind, type AgentChatTableArtifactSpec, type AgentChatTokenUsage, type AgentChatToolCallInfo, type AgentChatWorkspaceEntry, type AgentChatWorkspaceFile, type AgentChatWorkspaceTree, type AgentChatWorkspaceUpload, type ArtifactKind, type ArtifactPayload, type AskUserQuestionAnswer, type AskUserQuestionArgs, type AskUserQuestionChoice, type AskUserQuestionQuestion, type ChartArtifactSpec, type ChatComposerError, type ChatMessage, type ErrorInfo, type HtmlArtifactSpec, type InboxItem, type InboxList, InboxPanel, type InboxPanelProps, type InboxUnreadCountState, type MarkdownArtifactSpec, MessageResponse, type MessageResponseProps, MissionDashboard, type MissionDashboardProps, type MissionTaskBucket, MissionsPanel, type MissionsPanelProps, type RetryIndicator, type ScheduledWorkItem, type ScheduledWorkList, ScheduledWorkPanel, type ScheduledWorkPanelProps, type SessionTree, type SessionTreeNode, SessionTreePanel, type SessionTreePanelProps, type SvgArtifactSpec, type TableArtifactSpec, type TokenUsage, type ToolCallInfo, type WorkspaceEntry, type WorkspaceFile, type WorkspaceTree, type WorkspaceUpload, deriveMissionWorkerActivityLabel, groupMissionTasksByBucket, isTerminalMissionStatus, missionTaskBucket, useAgentChatAdapterContext, useAgentChatRuntime, useChatViewMode, useInboxUnreadCount };
|
package/dist/index.js
CHANGED
|
@@ -686,7 +686,7 @@ var ConversationEmptyState = ({
|
|
|
686
686
|
icon && /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center size-14 rounded-2xl bg-muted/60 text-muted-foreground/60", children: icon }),
|
|
687
687
|
/* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
688
688
|
/* @__PURE__ */ jsx("h3", { className: "font-semibold text-base text-foreground/80", children: title }),
|
|
689
|
-
description && /* @__PURE__ */ jsx("p", { className: "text-
|
|
689
|
+
description && /* @__PURE__ */ jsx("p", { className: "text-foreground/60 text-sm max-w-sm", children: description })
|
|
690
690
|
] })
|
|
691
691
|
] })
|
|
692
692
|
}
|
|
@@ -5012,12 +5012,16 @@ var PromptInput = ({
|
|
|
5012
5012
|
const formData = new FormData(form);
|
|
5013
5013
|
return formData.get("message") || "";
|
|
5014
5014
|
})();
|
|
5015
|
+
const submittedFiles = files;
|
|
5015
5016
|
if (!usingProvider) {
|
|
5016
5017
|
form.reset();
|
|
5018
|
+
} else {
|
|
5019
|
+
controller.textInput.clear();
|
|
5017
5020
|
}
|
|
5021
|
+
clear();
|
|
5018
5022
|
try {
|
|
5019
5023
|
const convertedFiles = await Promise.all(
|
|
5020
|
-
|
|
5024
|
+
submittedFiles.map(async (entry) => {
|
|
5021
5025
|
const isBlob = entry.url?.startsWith("blob:");
|
|
5022
5026
|
const isImage = entry.mediaType?.startsWith("image/");
|
|
5023
5027
|
if (isBlob && isImage && entry.url) {
|
|
@@ -5030,22 +5034,7 @@ var PromptInput = ({
|
|
|
5030
5034
|
return entry;
|
|
5031
5035
|
})
|
|
5032
5036
|
);
|
|
5033
|
-
|
|
5034
|
-
if (result instanceof Promise) {
|
|
5035
|
-
try {
|
|
5036
|
-
await result;
|
|
5037
|
-
clear();
|
|
5038
|
-
if (usingProvider) {
|
|
5039
|
-
controller.textInput.clear();
|
|
5040
|
-
}
|
|
5041
|
-
} catch {
|
|
5042
|
-
}
|
|
5043
|
-
} else {
|
|
5044
|
-
clear();
|
|
5045
|
-
if (usingProvider) {
|
|
5046
|
-
controller.textInput.clear();
|
|
5047
|
-
}
|
|
5048
|
-
}
|
|
5037
|
+
await onSubmit({ files: convertedFiles, text }, event);
|
|
5049
5038
|
} catch {
|
|
5050
5039
|
}
|
|
5051
5040
|
},
|
|
@@ -6111,36 +6100,6 @@ function ChatComposerInner({
|
|
|
6111
6100
|
}
|
|
6112
6101
|
)
|
|
6113
6102
|
] }),
|
|
6114
|
-
onViewModeChange && /* @__PURE__ */ jsxs(
|
|
6115
|
-
"div",
|
|
6116
|
-
{
|
|
6117
|
-
role: "group",
|
|
6118
|
-
"aria-label": "Chat view mode",
|
|
6119
|
-
className: "inline-flex overflow-hidden rounded-md border border-border",
|
|
6120
|
-
children: [
|
|
6121
|
-
/* @__PURE__ */ jsx(
|
|
6122
|
-
"button",
|
|
6123
|
-
{
|
|
6124
|
-
type: "button",
|
|
6125
|
-
"aria-pressed": viewMode === "simple",
|
|
6126
|
-
onClick: () => onViewModeChange("simple"),
|
|
6127
|
-
className: viewMode === "simple" ? "bg-accent px-2 py-1 text-xs text-foreground" : "px-2 py-1 text-xs text-muted-foreground hover:text-foreground",
|
|
6128
|
-
children: "Simple"
|
|
6129
|
-
}
|
|
6130
|
-
),
|
|
6131
|
-
/* @__PURE__ */ jsx(
|
|
6132
|
-
"button",
|
|
6133
|
-
{
|
|
6134
|
-
type: "button",
|
|
6135
|
-
"aria-pressed": viewMode === "expert",
|
|
6136
|
-
onClick: () => onViewModeChange("expert"),
|
|
6137
|
-
className: viewMode === "expert" ? "bg-accent px-2 py-1 text-xs text-foreground" : "px-2 py-1 text-xs text-muted-foreground hover:text-foreground",
|
|
6138
|
-
children: "Expert"
|
|
6139
|
-
}
|
|
6140
|
-
)
|
|
6141
|
-
]
|
|
6142
|
-
}
|
|
6143
|
-
),
|
|
6144
6103
|
canShowBrowser && onToggleBrowser && /* @__PURE__ */ jsx(
|
|
6145
6104
|
PromptInputButton,
|
|
6146
6105
|
{
|
|
@@ -6220,7 +6179,46 @@ function ChatComposerInner({
|
|
|
6220
6179
|
}
|
|
6221
6180
|
)
|
|
6222
6181
|
] }),
|
|
6223
|
-
/* @__PURE__ */
|
|
6182
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
6183
|
+
onViewModeChange && /* @__PURE__ */ jsxs(
|
|
6184
|
+
"div",
|
|
6185
|
+
{
|
|
6186
|
+
role: "group",
|
|
6187
|
+
"aria-label": "Chat view mode",
|
|
6188
|
+
className: "inline-flex overflow-hidden rounded-md border border-border",
|
|
6189
|
+
children: [
|
|
6190
|
+
/* @__PURE__ */ jsx(
|
|
6191
|
+
"button",
|
|
6192
|
+
{
|
|
6193
|
+
type: "button",
|
|
6194
|
+
"aria-pressed": viewMode === "simple",
|
|
6195
|
+
onClick: () => onViewModeChange("simple"),
|
|
6196
|
+
className: viewMode === "simple" ? "bg-accent px-2 py-1 text-xs text-foreground" : "px-2 py-1 text-xs text-muted-foreground hover:text-foreground",
|
|
6197
|
+
children: "Simple"
|
|
6198
|
+
}
|
|
6199
|
+
),
|
|
6200
|
+
/* @__PURE__ */ jsx(
|
|
6201
|
+
"button",
|
|
6202
|
+
{
|
|
6203
|
+
type: "button",
|
|
6204
|
+
"aria-pressed": viewMode === "expert",
|
|
6205
|
+
onClick: () => onViewModeChange("expert"),
|
|
6206
|
+
className: viewMode === "expert" ? "bg-accent px-2 py-1 text-xs text-foreground" : "px-2 py-1 text-xs text-muted-foreground hover:text-foreground",
|
|
6207
|
+
children: "Advanced"
|
|
6208
|
+
}
|
|
6209
|
+
)
|
|
6210
|
+
]
|
|
6211
|
+
}
|
|
6212
|
+
),
|
|
6213
|
+
/* @__PURE__ */ jsx(
|
|
6214
|
+
PromptInputSubmit,
|
|
6215
|
+
{
|
|
6216
|
+
status,
|
|
6217
|
+
onStop,
|
|
6218
|
+
className: "md:size-8"
|
|
6219
|
+
}
|
|
6220
|
+
)
|
|
6221
|
+
] })
|
|
6224
6222
|
] })
|
|
6225
6223
|
]
|
|
6226
6224
|
}
|
|
@@ -6394,7 +6392,7 @@ function TurnFeedback({ msg }) {
|
|
|
6394
6392
|
{
|
|
6395
6393
|
type: "button",
|
|
6396
6394
|
variant: "ghost",
|
|
6397
|
-
size: "icon-
|
|
6395
|
+
size: "icon-sm",
|
|
6398
6396
|
"aria-label": "Good response",
|
|
6399
6397
|
title: alreadyRated && rating === "up" ? "Good response (recorded)" : "Good response",
|
|
6400
6398
|
disabled: pending !== null || alreadyRated,
|
|
@@ -6402,7 +6400,7 @@ function TurnFeedback({ msg }) {
|
|
|
6402
6400
|
className: cn(
|
|
6403
6401
|
rating === "up" ? "text-foreground" : "text-muted-foreground/60"
|
|
6404
6402
|
),
|
|
6405
|
-
children: /* @__PURE__ */ jsx(ThumbsUpIcon, { className: "size-
|
|
6403
|
+
children: /* @__PURE__ */ jsx(ThumbsUpIcon, { className: "size-4.5" })
|
|
6406
6404
|
}
|
|
6407
6405
|
),
|
|
6408
6406
|
/* @__PURE__ */ jsx(
|
|
@@ -6410,7 +6408,7 @@ function TurnFeedback({ msg }) {
|
|
|
6410
6408
|
{
|
|
6411
6409
|
type: "button",
|
|
6412
6410
|
variant: "ghost",
|
|
6413
|
-
size: "icon-
|
|
6411
|
+
size: "icon-sm",
|
|
6414
6412
|
"aria-label": "Poor response",
|
|
6415
6413
|
title: alreadyRated && rating === "down" ? "Poor response (recorded)" : "Poor response",
|
|
6416
6414
|
disabled: pending !== null || reasonDraft !== null || alreadyRated,
|
|
@@ -6418,7 +6416,7 @@ function TurnFeedback({ msg }) {
|
|
|
6418
6416
|
className: cn(
|
|
6419
6417
|
rating === "down" ? "text-foreground" : "text-muted-foreground/60"
|
|
6420
6418
|
),
|
|
6421
|
-
children: /* @__PURE__ */ jsx(ThumbsDownIcon, { className: "size-
|
|
6419
|
+
children: /* @__PURE__ */ jsx(ThumbsDownIcon, { className: "size-4.5" })
|
|
6422
6420
|
}
|
|
6423
6421
|
),
|
|
6424
6422
|
alreadyRated && msg.userFeedback?.reason && /* @__PURE__ */ jsxs(
|
|
@@ -7177,7 +7175,8 @@ function FileViewer({
|
|
|
7177
7175
|
error,
|
|
7178
7176
|
downloadUrl,
|
|
7179
7177
|
onDelete,
|
|
7180
|
-
onClose
|
|
7178
|
+
onClose,
|
|
7179
|
+
hideHeader = false
|
|
7181
7180
|
}) {
|
|
7182
7181
|
const visible = loading || file !== null || error !== null;
|
|
7183
7182
|
if (!visible) return null;
|
|
@@ -7187,7 +7186,7 @@ function FileViewer({
|
|
|
7187
7186
|
const isImage = file?.encoding === "base64" && !isPdf;
|
|
7188
7187
|
const HeaderIcon = isImage ? ImageIcon : FileTextIcon;
|
|
7189
7188
|
return /* @__PURE__ */ jsxs("div", { className: "flex min-h-0 flex-1 flex-col border-t border-line", children: [
|
|
7190
|
-
/* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2 border-b border-line px-3 py-2", children: [
|
|
7189
|
+
!hideHeader && /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2 border-b border-line px-3 py-2", children: [
|
|
7191
7190
|
/* @__PURE__ */ jsx(HeaderIcon, { className: "size-3.5 shrink-0 text-muted-foreground" }),
|
|
7192
7191
|
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
7193
7192
|
/* @__PURE__ */ jsx("div", { className: "truncate text-xs font-medium", children: fileName2 }),
|
|
@@ -7232,7 +7231,12 @@ function FileViewer({
|
|
|
7232
7231
|
}
|
|
7233
7232
|
)
|
|
7234
7233
|
] }),
|
|
7235
|
-
|
|
7234
|
+
file && isPdf && file.encoding === "base64" ? (
|
|
7235
|
+
// PDF has its own scrollable container — bypass ScrollArea so
|
|
7236
|
+
// it can grow with the parent's flex height (Radix Viewport's
|
|
7237
|
+
// internal table wrapper sizes to content and breaks h-full).
|
|
7238
|
+
/* @__PURE__ */ jsx(PdfPreview, { file, fileName: fileName2 })
|
|
7239
|
+
) : /* @__PURE__ */ jsxs(ScrollArea, { className: "min-h-0 flex-1", children: [
|
|
7236
7240
|
loading && /* @__PURE__ */ jsx("div", { className: "space-y-1.5 p-3", children: Array.from({ length: 10 }).map((_, index) => /* @__PURE__ */ jsx(
|
|
7237
7241
|
Skeleton,
|
|
7238
7242
|
{
|
|
@@ -7248,7 +7252,6 @@ function FileViewer({
|
|
|
7248
7252
|
/* @__PURE__ */ jsx("span", { children: error })
|
|
7249
7253
|
] }),
|
|
7250
7254
|
file && isPdf && file.encoding !== "base64" && /* @__PURE__ */ jsx(FileViewerError, { message: "PDF preview requires base64 file content." }),
|
|
7251
|
-
file && isPdf && file.encoding === "base64" && /* @__PURE__ */ jsx(PdfPreview, { file, fileName: fileName2 }),
|
|
7252
7255
|
file && isImage && /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center p-4", children: /* @__PURE__ */ jsx(
|
|
7253
7256
|
"img",
|
|
7254
7257
|
{
|
|
@@ -7512,7 +7515,7 @@ function PdfPreview({
|
|
|
7512
7515
|
/* @__PURE__ */ jsx(AlertCircleIcon, { className: "mt-0.5 size-3.5 shrink-0" }),
|
|
7513
7516
|
/* @__PURE__ */ jsx("span", { children: error })
|
|
7514
7517
|
] }),
|
|
7515
|
-
!error && /* @__PURE__ */ jsx("div", { className: "relative
|
|
7518
|
+
!error && /* @__PURE__ */ jsx("div", { className: "relative min-h-105 flex-1 bg-muted/20", children: /* @__PURE__ */ jsx(
|
|
7516
7519
|
"div",
|
|
7517
7520
|
{
|
|
7518
7521
|
ref: containerRef,
|
|
@@ -7713,8 +7716,23 @@ function WorkspaceFilePreviewDialog({
|
|
|
7713
7716
|
cancelled = true;
|
|
7714
7717
|
};
|
|
7715
7718
|
}, [adapter, sessionId, path, open]);
|
|
7716
|
-
return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(DialogContent, { className: "flex h-[
|
|
7717
|
-
/* @__PURE__ */
|
|
7719
|
+
return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(DialogContent, { className: "flex h-[85vh] w-[95vw] max-w-350! flex-col gap-0 overflow-hidden p-0", children: [
|
|
7720
|
+
/* @__PURE__ */ jsxs(DialogHeader, { className: "flex flex-row items-center gap-2 border-b border-line px-4 py-3", children: [
|
|
7721
|
+
/* @__PURE__ */ jsx(DialogTitle, { className: "min-w-0 flex-1 truncate text-sm", children: _basename(path) }),
|
|
7722
|
+
/* @__PURE__ */ jsxs(
|
|
7723
|
+
"a",
|
|
7724
|
+
{
|
|
7725
|
+
href: downloadUrl,
|
|
7726
|
+
download: _basename(path),
|
|
7727
|
+
className: "mr-8 inline-flex shrink-0 items-center gap-1.5 rounded-md border border-border bg-background px-2.5 py-1 text-xs font-medium text-foreground transition-colors hover:bg-muted",
|
|
7728
|
+
"aria-label": `Download ${_basename(path)}`,
|
|
7729
|
+
children: [
|
|
7730
|
+
/* @__PURE__ */ jsx(DownloadIcon, { className: "size-3.5", "aria-hidden": true }),
|
|
7731
|
+
"Download"
|
|
7732
|
+
]
|
|
7733
|
+
}
|
|
7734
|
+
)
|
|
7735
|
+
] }),
|
|
7718
7736
|
/* @__PURE__ */ jsx("div", { className: "flex min-h-0 flex-1 flex-col", children: /* @__PURE__ */ jsx(
|
|
7719
7737
|
FileViewer,
|
|
7720
7738
|
{
|
|
@@ -7723,7 +7741,8 @@ function WorkspaceFilePreviewDialog({
|
|
|
7723
7741
|
error,
|
|
7724
7742
|
downloadUrl,
|
|
7725
7743
|
onDelete: null,
|
|
7726
|
-
onClose: () => onOpenChange(false)
|
|
7744
|
+
onClose: () => onOpenChange(false),
|
|
7745
|
+
hideHeader: true
|
|
7727
7746
|
}
|
|
7728
7747
|
) })
|
|
7729
7748
|
] }) });
|
|
@@ -7750,7 +7769,8 @@ function TurnSummaryCard({
|
|
|
7750
7769
|
const hasRecap = summary.recap.trim().length > 0;
|
|
7751
7770
|
const hasArtifacts = summary.artifacts.length > 0;
|
|
7752
7771
|
if (!hasRecap && !hasArtifacts) return null;
|
|
7753
|
-
return /* @__PURE__ */ jsxs("div", { className: "mt-3 rounded border border-border bg-muted/
|
|
7772
|
+
return /* @__PURE__ */ jsxs("div", { className: "mt-3 rounded border border-border bg-muted/50 px-3 py-2 text-sm", children: [
|
|
7773
|
+
/* @__PURE__ */ jsx("div", { className: "mb-2 text-xs font-semibold uppercase tracking-wide", children: "Summary" }),
|
|
7754
7774
|
hasRecap && /* @__PURE__ */ jsx("p", { className: "mb-2 whitespace-pre-wrap text-foreground", children: summary.recap }),
|
|
7755
7775
|
hasArtifacts && /* @__PURE__ */ jsx("div", { className: "space-y-2", children: summary.artifacts.map((artifact, i) => {
|
|
7756
7776
|
const key = `${artifact.kind}:${artifact.ref}:${i}`;
|
|
@@ -7804,6 +7824,16 @@ function TurnSummaryCard({
|
|
|
7804
7824
|
}) })
|
|
7805
7825
|
] });
|
|
7806
7826
|
}
|
|
7827
|
+
function TurnSummaryPending() {
|
|
7828
|
+
return /* @__PURE__ */ jsxs("div", { className: "mt-3 rounded border border-border bg-muted/50 px-3 py-2 text-sm", children: [
|
|
7829
|
+
/* @__PURE__ */ jsx("div", { className: "mb-2 text-xs font-semibold uppercase tracking-wide", children: "Summary" }),
|
|
7830
|
+
/* @__PURE__ */ jsx(Shimmer, { duration: 3, spread: 3, className: "mb-2 text-sm", children: "Summarizing conversation..." }),
|
|
7831
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
7832
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-3/4" }),
|
|
7833
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-2/3" })
|
|
7834
|
+
] })
|
|
7835
|
+
] });
|
|
7836
|
+
}
|
|
7807
7837
|
function ArtifactRow({
|
|
7808
7838
|
artifact,
|
|
7809
7839
|
sessionId,
|
|
@@ -8537,7 +8567,7 @@ function IterationGroup({
|
|
|
8537
8567
|
type: "button",
|
|
8538
8568
|
onClick: () => setOpen((prev) => !prev),
|
|
8539
8569
|
"aria-expanded": open,
|
|
8540
|
-
className: "flex w-full items-center gap-2 rounded
|
|
8570
|
+
className: "flex w-full items-center gap-2 rounded py-0.5 text-left text-sm hover:bg-muted/40",
|
|
8541
8571
|
children: [
|
|
8542
8572
|
/* @__PURE__ */ jsx("span", { className: cn("flex-1 truncate", labelTone), children: label }),
|
|
8543
8573
|
/* @__PURE__ */ jsx(
|
|
@@ -8565,6 +8595,18 @@ function IterationGroup({
|
|
|
8565
8595
|
] });
|
|
8566
8596
|
}
|
|
8567
8597
|
function deriveFileArtifactsFromMessages(messages) {
|
|
8598
|
+
const terminalCommands = [];
|
|
8599
|
+
for (const msg of messages) {
|
|
8600
|
+
if (msg.role !== "assistant" || !msg.toolCalls) continue;
|
|
8601
|
+
for (const tc of msg.toolCalls) {
|
|
8602
|
+
if (tc.toolName !== "terminal") continue;
|
|
8603
|
+
const status = effectiveStatus(tc);
|
|
8604
|
+
if (status === "error" || status === "cancelled") continue;
|
|
8605
|
+
const args = parseArgs(tc.args);
|
|
8606
|
+
const cmd = typeof args?.command === "string" ? args.command : "";
|
|
8607
|
+
if (cmd) terminalCommands.push(cmd);
|
|
8608
|
+
}
|
|
8609
|
+
}
|
|
8568
8610
|
const seen = /* @__PURE__ */ new Set();
|
|
8569
8611
|
const out = [];
|
|
8570
8612
|
for (const msg of messages) {
|
|
@@ -8577,6 +8619,8 @@ function deriveFileArtifactsFromMessages(messages) {
|
|
|
8577
8619
|
if (tc.toolName === "write_file" || tc.toolName === "patch") {
|
|
8578
8620
|
const path = typeof args.path === "string" ? args.path : typeof args.file_path === "string" ? args.file_path : "";
|
|
8579
8621
|
if (!path || seen.has(`file:${path}`)) continue;
|
|
8622
|
+
const executed = terminalCommands.some((cmd) => cmd.includes(path));
|
|
8623
|
+
if (executed) continue;
|
|
8580
8624
|
seen.add(`file:${path}`);
|
|
8581
8625
|
out.push({
|
|
8582
8626
|
kind: "file",
|
|
@@ -8617,11 +8661,13 @@ function SimpleAssistantGroup({
|
|
|
8617
8661
|
const isTailGroup = lastGlobalIndex === totalMessages - 1;
|
|
8618
8662
|
const showThinkingShim = isTailGroup && isRunning && (!tail && messages.some((m) => m.role !== "assistant") || tailIsTextOnly && tail.status === "streaming" && !tail.content);
|
|
8619
8663
|
const showErrorInfo = !!tail && tail.status === "error" && !!tail.errorInfo;
|
|
8664
|
+
const turnComplete = !isRunning && tail?.status === "complete";
|
|
8620
8665
|
const effectiveTurnSummary = (() => {
|
|
8621
8666
|
const fromHarness = tail?.turnSummary;
|
|
8622
8667
|
if (fromHarness && fromHarness.artifacts.length > 0) {
|
|
8623
8668
|
return fromHarness;
|
|
8624
8669
|
}
|
|
8670
|
+
if (!turnComplete) return fromHarness;
|
|
8625
8671
|
const derived = deriveFileArtifactsFromMessages(messages);
|
|
8626
8672
|
if (derived.length === 0) return fromHarness;
|
|
8627
8673
|
return {
|
|
@@ -8662,7 +8708,7 @@ function SimpleAssistantGroup({
|
|
|
8662
8708
|
/* @__PURE__ */ jsx(MessageResponse, { children: finalText }),
|
|
8663
8709
|
tail?.status === "complete" && /* @__PURE__ */ jsx(TurnFeedback, { msg: tail })
|
|
8664
8710
|
] }),
|
|
8665
|
-
effectiveTurnSummary
|
|
8711
|
+
effectiveTurnSummary ? /* @__PURE__ */ jsx(
|
|
8666
8712
|
TurnSummaryCard,
|
|
8667
8713
|
{
|
|
8668
8714
|
summary: effectiveTurnSummary,
|
|
@@ -8670,6 +8716,14 @@ function SimpleAssistantGroup({
|
|
|
8670
8716
|
messages,
|
|
8671
8717
|
onFileSelect
|
|
8672
8718
|
}
|
|
8719
|
+
) : (
|
|
8720
|
+
// The harness summarizer runs after the last assistant
|
|
8721
|
+
// response and before ``session.complete``. Show a pending
|
|
8722
|
+
// placeholder during that window so users aren't surprised
|
|
8723
|
+
// when the Summary card pops in. Gated on the tail group +
|
|
8724
|
+
// a complete final answer + still-running session so the
|
|
8725
|
+
// placeholder doesn't show on historic turns or mid-stream.
|
|
8726
|
+
isTailGroup && isRunning && !!finalText && tail?.status === "complete" && /* @__PURE__ */ jsx(TurnSummaryPending, {})
|
|
8673
8727
|
),
|
|
8674
8728
|
showErrorInfo && /* @__PURE__ */ jsx("div", { className: "mt-3", children: /* @__PURE__ */ jsx(ErrorMessage, { errorInfo: tail.errorInfo, onRetry }) })
|
|
8675
8729
|
] }) });
|
|
@@ -9115,6 +9169,27 @@ function findEntry(entries, path) {
|
|
|
9115
9169
|
}
|
|
9116
9170
|
return null;
|
|
9117
9171
|
}
|
|
9172
|
+
var FILENAME_MAX_CHARS = 42;
|
|
9173
|
+
function truncateFilename(name, max) {
|
|
9174
|
+
if (name.length <= max) return name;
|
|
9175
|
+
const dot = name.lastIndexOf(".");
|
|
9176
|
+
if (dot > 0 && name.length - dot <= 12) {
|
|
9177
|
+
const ext = name.slice(dot);
|
|
9178
|
+
const head = name.slice(0, Math.max(1, max - ext.length - 1));
|
|
9179
|
+
return `${head}\u2026${ext}`;
|
|
9180
|
+
}
|
|
9181
|
+
return `${name.slice(0, max - 1)}\u2026`;
|
|
9182
|
+
}
|
|
9183
|
+
function TruncatedFileName({ name }) {
|
|
9184
|
+
const truncated = truncateFilename(name, FILENAME_MAX_CHARS);
|
|
9185
|
+
const isTruncated = truncated !== name;
|
|
9186
|
+
const node = /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate", children: truncated });
|
|
9187
|
+
if (!isTruncated) return node;
|
|
9188
|
+
return /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
9189
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: node }),
|
|
9190
|
+
/* @__PURE__ */ jsx(TooltipContent, { side: "top", className: "max-w-md break-all", children: name })
|
|
9191
|
+
] });
|
|
9192
|
+
}
|
|
9118
9193
|
function RenderEntries({
|
|
9119
9194
|
entries,
|
|
9120
9195
|
onDelete,
|
|
@@ -9134,7 +9209,7 @@ function RenderEntries({
|
|
|
9134
9209
|
const fileName2 = entry.name;
|
|
9135
9210
|
return /* @__PURE__ */ jsxs(FileTreeFile, { name: entry.name, path: entry.path, children: [
|
|
9136
9211
|
/* @__PURE__ */ jsx("span", { className: "size-4 shrink-0" }),
|
|
9137
|
-
/* @__PURE__ */ jsx(
|
|
9212
|
+
/* @__PURE__ */ jsx(TruncatedFileName, { name: entry.name }),
|
|
9138
9213
|
entry.size != null && /* @__PURE__ */ jsx("span", { className: "ml-1 shrink-0 text-xs text-muted-foreground/60", children: formatFileSize(entry.size) }),
|
|
9139
9214
|
/* @__PURE__ */ jsxs("div", { className: "ml-1 flex shrink-0 items-center gap-0 opacity-100 transition-opacity md:opacity-0 md:group-hover:opacity-100", children: [
|
|
9140
9215
|
/* @__PURE__ */ jsx(
|
|
@@ -9178,7 +9253,6 @@ function WorkspacePanel({
|
|
|
9178
9253
|
}) {
|
|
9179
9254
|
const fileInputRef = useRef(null);
|
|
9180
9255
|
const [entries, setEntries] = useState([]);
|
|
9181
|
-
const [rootName, setRootName] = useState("workspace");
|
|
9182
9256
|
const [treeLoading, setTreeLoading] = useState(false);
|
|
9183
9257
|
const [treeError, setTreeError] = useState(null);
|
|
9184
9258
|
const [file, setFile] = useState(null);
|
|
@@ -9197,7 +9271,6 @@ function WorkspacePanel({
|
|
|
9197
9271
|
const fetchTree = useCallback(async () => {
|
|
9198
9272
|
if (!sessionId) {
|
|
9199
9273
|
setEntries([]);
|
|
9200
|
-
setRootName("workspace");
|
|
9201
9274
|
setExpandedPaths(/* @__PURE__ */ new Set());
|
|
9202
9275
|
setTreeLoading(false);
|
|
9203
9276
|
setTreeError(null);
|
|
@@ -9212,12 +9285,10 @@ function WorkspacePanel({
|
|
|
9212
9285
|
});
|
|
9213
9286
|
if (sessionIdRef.current !== requestedSessionId) return;
|
|
9214
9287
|
setEntries(tree.entries);
|
|
9215
|
-
setRootName(tree.root || "workspace");
|
|
9216
9288
|
setExpandedPaths(new Set(collectExpandedPaths(tree.entries)));
|
|
9217
9289
|
} catch (error) {
|
|
9218
9290
|
if (sessionIdRef.current !== requestedSessionId) return;
|
|
9219
9291
|
setEntries([]);
|
|
9220
|
-
setRootName("workspace");
|
|
9221
9292
|
setTreeError(error.message);
|
|
9222
9293
|
} finally {
|
|
9223
9294
|
if (sessionIdRef.current === requestedSessionId) {
|
|
@@ -9407,10 +9478,7 @@ function WorkspacePanel({
|
|
|
9407
9478
|
),
|
|
9408
9479
|
/* @__PURE__ */ jsxs("div", { className: "flex min-h-14 items-center gap-2 border-b border-line px-3 py-3", children: [
|
|
9409
9480
|
/* @__PURE__ */ jsx(FolderOpenIcon, { className: "size-4 shrink-0 text-amber-500" }),
|
|
9410
|
-
/* @__PURE__ */
|
|
9411
|
-
/* @__PURE__ */ jsx("div", { className: "truncate text-sm font-medium text-foreground", children: rootName }),
|
|
9412
|
-
/* @__PURE__ */ jsx("div", { className: "truncate text-xs text-faint", children: disabled ? "Workspace - Read-only" : "Workspace" })
|
|
9413
|
-
] }),
|
|
9481
|
+
/* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsx("div", { className: "truncate text-sm font-medium text-foreground", children: disabled ? "Workspace - Read-only" : "Workspace" }) }),
|
|
9414
9482
|
/* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
9415
9483
|
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
9416
9484
|
Button,
|
|
@@ -10527,6 +10595,7 @@ function readTurnMeta(data) {
|
|
|
10527
10595
|
|
|
10528
10596
|
// src/runtime/use-agent-chat-runtime.ts
|
|
10529
10597
|
var VIEW_MODE_KEY = "@invergent/agent-chat-react:viewMode";
|
|
10598
|
+
var VIEW_MODE_EVENT = "@invergent/agent-chat-react:viewMode:change";
|
|
10530
10599
|
function readPersistedViewMode() {
|
|
10531
10600
|
if (typeof window === "undefined") return null;
|
|
10532
10601
|
try {
|
|
@@ -10542,6 +10611,36 @@ function writePersistedViewMode(mode) {
|
|
|
10542
10611
|
window.localStorage.setItem(VIEW_MODE_KEY, mode);
|
|
10543
10612
|
} catch {
|
|
10544
10613
|
}
|
|
10614
|
+
try {
|
|
10615
|
+
window.dispatchEvent(
|
|
10616
|
+
new CustomEvent(VIEW_MODE_EVENT, { detail: mode })
|
|
10617
|
+
);
|
|
10618
|
+
} catch {
|
|
10619
|
+
}
|
|
10620
|
+
}
|
|
10621
|
+
function useChatViewMode() {
|
|
10622
|
+
const [mode, setMode] = useState(
|
|
10623
|
+
() => readPersistedViewMode() ?? "simple"
|
|
10624
|
+
);
|
|
10625
|
+
useEffect(() => {
|
|
10626
|
+
if (typeof window === "undefined") return;
|
|
10627
|
+
const onSameTab = (event) => {
|
|
10628
|
+
const detail = event.detail;
|
|
10629
|
+
if (detail === "simple" || detail === "expert") setMode(detail);
|
|
10630
|
+
};
|
|
10631
|
+
const onCrossTab = (event) => {
|
|
10632
|
+
if (event.key !== VIEW_MODE_KEY) return;
|
|
10633
|
+
const next = event.newValue;
|
|
10634
|
+
if (next === "simple" || next === "expert") setMode(next);
|
|
10635
|
+
};
|
|
10636
|
+
window.addEventListener(VIEW_MODE_EVENT, onSameTab);
|
|
10637
|
+
window.addEventListener("storage", onCrossTab);
|
|
10638
|
+
return () => {
|
|
10639
|
+
window.removeEventListener(VIEW_MODE_EVENT, onSameTab);
|
|
10640
|
+
window.removeEventListener("storage", onCrossTab);
|
|
10641
|
+
};
|
|
10642
|
+
}, []);
|
|
10643
|
+
return mode;
|
|
10545
10644
|
}
|
|
10546
10645
|
function useAgentChatRuntime({
|
|
10547
10646
|
adapter,
|
|
@@ -13576,6 +13675,6 @@ function SessionTreePanel({
|
|
|
13576
13675
|
] });
|
|
13577
13676
|
}
|
|
13578
13677
|
|
|
13579
|
-
export { ACTIVE_MISSION_STATUSES, AgentChat, AgentChatAdapterProvider, InboxPanel, MessageResponse, MissionDashboard, MissionsPanel, ScheduledWorkPanel, SessionTreePanel, deriveMissionWorkerActivityLabel, groupMissionTasksByBucket, isTerminalMissionStatus, missionTaskBucket, useAgentChatAdapterContext, useAgentChatRuntime, useInboxUnreadCount };
|
|
13678
|
+
export { ACTIVE_MISSION_STATUSES, AgentChat, AgentChatAdapterProvider, InboxPanel, MessageResponse, MissionDashboard, MissionsPanel, ScheduledWorkPanel, SessionTreePanel, deriveMissionWorkerActivityLabel, groupMissionTasksByBucket, isTerminalMissionStatus, missionTaskBucket, useAgentChatAdapterContext, useAgentChatRuntime, useChatViewMode, useInboxUnreadCount };
|
|
13580
13679
|
//# sourceMappingURL=index.js.map
|
|
13581
13680
|
//# sourceMappingURL=index.js.map
|