@agent-native/core 0.35.2 → 0.36.0
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/README.md +1 -1
- package/dist/cli/context-xray-local.d.ts +2 -2
- package/dist/cli/context-xray-local.d.ts.map +1 -1
- package/dist/cli/context-xray-local.js +1449 -53
- package/dist/cli/context-xray-local.js.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +381 -73
- package/dist/cli/skills.js.map +1 -1
- package/dist/cli/templates-meta.d.ts.map +1 -1
- package/dist/cli/templates-meta.js +8 -4
- package/dist/cli/templates-meta.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +5 -11
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +6 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +50 -26
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +81 -8
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +68 -24
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/agent-chat.d.ts +39 -3
- package/dist/client/agent-chat.d.ts.map +1 -1
- package/dist/client/agent-chat.js +168 -33
- package/dist/client/agent-chat.js.map +1 -1
- package/dist/client/application-state.d.ts +13 -0
- package/dist/client/application-state.d.ts.map +1 -0
- package/dist/client/application-state.js +99 -0
- package/dist/client/application-state.js.map +1 -0
- package/dist/client/composer/ComposerPlusMenu.d.ts.map +1 -1
- package/dist/client/composer/ComposerPlusMenu.js +174 -8
- package/dist/client/composer/ComposerPlusMenu.js.map +1 -1
- package/dist/client/composer/PromptComposer.d.ts +2 -0
- package/dist/client/composer/PromptComposer.d.ts.map +1 -1
- package/dist/client/composer/PromptComposer.js +2 -2
- package/dist/client/composer/PromptComposer.js.map +1 -1
- package/dist/client/composer/TiptapComposer.js +1 -1
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/context-xray/ContextMeter.d.ts +2 -1
- package/dist/client/context-xray/ContextMeter.d.ts.map +1 -1
- package/dist/client/context-xray/ContextMeter.js +19 -25
- package/dist/client/context-xray/ContextMeter.js.map +1 -1
- package/dist/client/context-xray/ContextXRayPanel.d.ts +1 -3
- package/dist/client/context-xray/ContextXRayPanel.d.ts.map +1 -1
- package/dist/client/context-xray/ContextXRayPanel.js +27 -24
- package/dist/client/context-xray/ContextXRayPanel.js.map +1 -1
- package/dist/client/conversation/AgentConversation.d.ts.map +1 -1
- package/dist/client/conversation/AgentConversation.js +2 -1
- package/dist/client/conversation/AgentConversation.js.map +1 -1
- package/dist/client/frame-protocol.d.ts +11 -3
- package/dist/client/frame-protocol.d.ts.map +1 -1
- package/dist/client/frame-protocol.js.map +1 -1
- package/dist/client/index.d.ts +4 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +4 -2
- package/dist/client/index.js.map +1 -1
- package/dist/client/progress/RunsTray.d.ts +1 -0
- package/dist/client/progress/RunsTray.d.ts.map +1 -1
- package/dist/client/progress/RunsTray.js +50 -16
- package/dist/client/progress/RunsTray.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts +1 -0
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +62 -15
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/client/tool-display.d.ts +4 -0
- package/dist/client/tool-display.d.ts.map +1 -0
- package/dist/client/tool-display.js +28 -0
- package/dist/client/tool-display.js.map +1 -0
- package/dist/client/use-action.d.ts +12 -0
- package/dist/client/use-action.d.ts.map +1 -1
- package/dist/client/use-action.js +14 -2
- package/dist/client/use-action.js.map +1 -1
- package/dist/client/use-agent-chat-context.d.ts +15 -0
- package/dist/client/use-agent-chat-context.d.ts.map +1 -0
- package/dist/client/use-agent-chat-context.js +32 -0
- package/dist/client/use-agent-chat-context.js.map +1 -0
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +40 -31
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/client/use-external-value.d.ts.map +1 -1
- package/dist/client/use-external-value.js +14 -7
- package/dist/client/use-external-value.js.map +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +1 -2
- package/dist/deploy/build.js.map +1 -1
- package/dist/extensions/html-shell.d.ts +3 -2
- package/dist/extensions/html-shell.d.ts.map +1 -1
- package/dist/extensions/html-shell.js +12 -2
- package/dist/extensions/html-shell.js.map +1 -1
- package/dist/extensions/routes.js +2 -7
- package/dist/extensions/routes.js.map +1 -1
- package/dist/index.browser.d.ts +1 -1
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.browser.js +1 -1
- package/dist/index.browser.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts +4 -2
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +33 -4
- package/dist/mcp/server.js.map +1 -1
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/provider-api/index.js +14 -6
- package/dist/provider-api/index.js.map +1 -1
- package/dist/server/agent-teams.d.ts +4 -1
- package/dist/server/agent-teams.d.ts.map +1 -1
- package/dist/server/agent-teams.js +104 -28
- package/dist/server/agent-teams.js.map +1 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +21 -11
- package/dist/server/auth.js.map +1 -1
- package/dist/server/core-routes-plugin.js +2 -2
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/request-context.d.ts +3 -4
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-context.js.map +1 -1
- package/dist/server/security-headers.d.ts +16 -19
- package/dist/server/security-headers.d.ts.map +1 -1
- package/dist/server/security-headers.js +24 -25
- package/dist/server/security-headers.js.map +1 -1
- package/dist/server/self-dispatch.d.ts.map +1 -1
- package/dist/server/self-dispatch.js +17 -1
- package/dist/server/self-dispatch.js.map +1 -1
- package/dist/server/ssr-handler.d.ts.map +1 -1
- package/dist/server/ssr-handler.js +9 -18
- package/dist/server/ssr-handler.js.map +1 -1
- package/dist/templates/default/AGENTS.md +1 -1
- package/dist/templates/default/DEVELOPING.md +7 -13
- package/dist/templates/workspace-core/AGENTS.md +6 -4
- package/dist/templates/workspace-root/AGENTS.md +6 -4
- package/docs/content/actions.md +5 -7
- package/docs/content/client.md +49 -44
- package/docs/content/context-awareness.md +20 -33
- package/docs/content/creating-templates.md +2 -2
- package/docs/content/external-agents.md +1 -1
- package/docs/content/key-concepts.md +3 -3
- package/docs/content/sharing.md +1 -1
- package/docs/content/template-mail.md +1 -1
- package/docs/content/voice-input.md +1 -1
- package/package.json +5 -1
- package/src/templates/default/AGENTS.md +1 -1
- package/src/templates/default/DEVELOPING.md +7 -13
- package/src/templates/workspace-core/AGENTS.md +6 -4
- package/src/templates/workspace-root/AGENTS.md +6 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiTabAssistantChat.d.ts","sourceRoot":"","sources":["../../src/client/MultiTabAssistantChat.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAUf,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,oBAAoB,CAAC;AAc5B,OAAO,EAEL,KAAK,eAAe,EAErB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"MultiTabAssistantChat.d.ts","sourceRoot":"","sources":["../../src/client/MultiTabAssistantChat.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAUf,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,oBAAoB,CAAC;AAc5B,OAAO,EAEL,KAAK,eAAe,EAErB,MAAM,uBAAuB,CAAC;AAioB/B,UAAU,OAAO;IACf,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;IACzC,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA8ED,MAAM,WAAW,gCAAgC;IAC/C,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,+BAA+B;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAC3C,kBAAkB,EAClB,OAAO,GAAG,UAAU,CACrB,GAAG;IACF,sCAAsC;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iDAAiD;IACjD,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,gCAAgC,KAAK,KAAK,CAAC,SAAS,CAAC;IAC5E,2DAA2D;IAC3D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,gCAAgC,KAAK,KAAK,CAAC,SAAS,CAAC;IAC7E,sGAAsG;IACtG,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,yFAAyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,EACpC,UAAiB,EACjB,YAAY,EACZ,aAAa,EACb,aAAqB,EACrB,MAAqD,EACrD,UAAU,EACV,mBAA0B,EAC1B,YAAY,EACZ,KAAY,EACZ,GAAG,KAAK,EACT,EAAE,0BAA0B,2CAgpD5B"}
|
|
@@ -11,7 +11,7 @@ import { agentNativePath } from "./api-path.js";
|
|
|
11
11
|
import { RunStuckBanner } from "./RunStuckBanner.js";
|
|
12
12
|
import { DEFAULT_MODEL } from "../agent/default-model.js";
|
|
13
13
|
import { getReasoningEffortOptionsForModel, isReasoningEffort, } from "../shared/reasoning-effort.js";
|
|
14
|
-
import { appendAgentChatContextToMessage, normalizeAgentChatContextItem, } from "./agent-chat.js";
|
|
14
|
+
import { AGENT_CHAT_CLEAR_CONTEXT_MESSAGE_TYPE, AGENT_CHAT_REMOVE_CONTEXT_MESSAGE_TYPE, AGENT_CHAT_SET_CONTEXT_MESSAGE_TYPE, appendAgentChatContextToMessage, normalizeAgentChatContextItem, } from "./agent-chat.js";
|
|
15
15
|
const MODEL_SELECTION_STORAGE_KEY = "agent-native:chat-models:selection";
|
|
16
16
|
function readStoredModelSelection(key) {
|
|
17
17
|
if (typeof window === "undefined")
|
|
@@ -281,6 +281,7 @@ function chatTabStatusFromAgentTeamStatus(status) {
|
|
|
281
281
|
return undefined;
|
|
282
282
|
return isActiveAgentTeamStatus(status) ? "running" : "completed";
|
|
283
283
|
}
|
|
284
|
+
const STALE_THREAD_THRESHOLD_MS = 12 * 60 * 60 * 1000;
|
|
284
285
|
function runToAgentTeamTabInfo(run) {
|
|
285
286
|
if (run.sourceRecord?.type && run.sourceRecord.type !== "agent-team-task") {
|
|
286
287
|
return null;
|
|
@@ -346,6 +347,31 @@ export function MultiTabAssistantChat({ showTabBar = true, renderHeader, renderO
|
|
|
346
347
|
: existing.map((current, currentIndex) => currentIndex === index ? item : current);
|
|
347
348
|
pendingContextItems.current.set(threadId, next);
|
|
348
349
|
}, []);
|
|
350
|
+
const removeContextInTab = useCallback((threadId, key) => {
|
|
351
|
+
const ref = chatRefs.current.get(threadId);
|
|
352
|
+
if (ref) {
|
|
353
|
+
ref.removeComposerContextItem(key);
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
const existing = pendingContextItems.current.get(threadId);
|
|
357
|
+
if (!existing)
|
|
358
|
+
return;
|
|
359
|
+
const next = existing.filter((item) => item.key !== key);
|
|
360
|
+
if (next.length === 0) {
|
|
361
|
+
pendingContextItems.current.delete(threadId);
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
pendingContextItems.current.set(threadId, next);
|
|
365
|
+
}
|
|
366
|
+
}, []);
|
|
367
|
+
const clearContextInTab = useCallback((threadId) => {
|
|
368
|
+
const ref = chatRefs.current.get(threadId);
|
|
369
|
+
if (ref) {
|
|
370
|
+
ref.clearComposerContextItems();
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
pendingContextItems.current.delete(threadId);
|
|
374
|
+
}, []);
|
|
349
375
|
const resolveThreadModelSelection = useCallback((threadId) => resolveModelSelection(threadModelRef.current.get(threadId) ?? persistedModelSelection, availableModels), [availableModels, persistedModelSelection, modelSelectionVersion]);
|
|
350
376
|
const persistModelSelection = useCallback((selection) => {
|
|
351
377
|
setPersistedModelSelection(selection);
|
|
@@ -673,11 +699,12 @@ export function MultiTabAssistantChat({ showTabBar = true, renderHeader, renderO
|
|
|
673
699
|
const threadMap = new Map(threads.map((t) => [t.id, t]));
|
|
674
700
|
// Hide tabs that have had no activity for more than 12 hours. Stale tabs
|
|
675
701
|
// are removed from the sidebar on load but remain accessible via history.
|
|
676
|
-
const STALE_THRESHOLD_MS = 12 * 60 * 60 * 1000;
|
|
677
702
|
const now = Date.now();
|
|
678
703
|
const isStale = (id) => {
|
|
679
704
|
const thread = threadMap.get(id);
|
|
680
|
-
return thread
|
|
705
|
+
return thread
|
|
706
|
+
? now - thread.updatedAt > STALE_THREAD_THRESHOLD_MS
|
|
707
|
+
: false;
|
|
681
708
|
};
|
|
682
709
|
// If the active thread is a sub-agent, switch to its parent or the most recent main thread
|
|
683
710
|
if (parentMap[activeThreadId]) {
|
|
@@ -711,11 +738,22 @@ export function MultiTabAssistantChat({ showTabBar = true, renderHeader, renderO
|
|
|
711
738
|
// Ensure active thread is always in open tabs.
|
|
712
739
|
// Use functional update to check inside the setter — avoids race with the
|
|
713
740
|
// initialization effect that may have already added the ID in the same batch.
|
|
741
|
+
//
|
|
742
|
+
// Scoped navigation can reset openTabIds from a different localStorage key
|
|
743
|
+
// without changing activeThreadId. Re-check after tab-list resets so the
|
|
744
|
+
// sidebar cannot end up with a live active thread but no mounted chat.
|
|
714
745
|
useEffect(() => {
|
|
715
|
-
if (activeThreadId)
|
|
716
|
-
|
|
746
|
+
if (!activeThreadId || openTabIds.includes(activeThreadId))
|
|
747
|
+
return;
|
|
748
|
+
if (parentMap[activeThreadId])
|
|
749
|
+
return;
|
|
750
|
+
const activeThread = threads.find((thread) => thread.id === activeThreadId);
|
|
751
|
+
if (activeThread &&
|
|
752
|
+
Date.now() - activeThread.updatedAt > STALE_THREAD_THRESHOLD_MS) {
|
|
753
|
+
return;
|
|
717
754
|
}
|
|
718
|
-
|
|
755
|
+
setOpenTabIds((prev) => prev.includes(activeThreadId) ? prev : [...prev, activeThreadId]);
|
|
756
|
+
}, [activeThreadId, openTabIds, parentMap, threads]);
|
|
719
757
|
// Ensure at least one tab is always open — auto-create if sidebar is empty.
|
|
720
758
|
// Skipped when an active thread already exists (e.g. the hook generated an
|
|
721
759
|
// optimistic id for a brand-new session); the activeThreadId effect above
|
|
@@ -889,7 +927,7 @@ export function MultiTabAssistantChat({ showTabBar = true, renderHeader, renderO
|
|
|
889
927
|
const handler = (event) => {
|
|
890
928
|
if (!isTrustedFrameMessage(event))
|
|
891
929
|
return;
|
|
892
|
-
if (event.data?.type ===
|
|
930
|
+
if (event.data?.type === AGENT_CHAT_SET_CONTEXT_MESSAGE_TYPE) {
|
|
893
931
|
const item = normalizeAgentChatContextItem(event.data.data);
|
|
894
932
|
if (!item)
|
|
895
933
|
return;
|
|
@@ -905,6 +943,37 @@ export function MultiTabAssistantChat({ showTabBar = true, renderHeader, renderO
|
|
|
905
943
|
setContextInTab(currentTabId, item);
|
|
906
944
|
return;
|
|
907
945
|
}
|
|
946
|
+
if (event.data?.type === AGENT_CHAT_REMOVE_CONTEXT_MESSAGE_TYPE) {
|
|
947
|
+
const key = typeof event.data.data?.key === "string"
|
|
948
|
+
? event.data.data.key.trim()
|
|
949
|
+
: "";
|
|
950
|
+
if (!key)
|
|
951
|
+
return;
|
|
952
|
+
const openSidebar = event.data.data?.openSidebar;
|
|
953
|
+
if (openSidebar === true) {
|
|
954
|
+
window.dispatchEvent(new CustomEvent("agent-panel:open"));
|
|
955
|
+
}
|
|
956
|
+
if (postMessageSubmissionsDisabled)
|
|
957
|
+
return;
|
|
958
|
+
const currentTabId = activeThreadIdRef.current;
|
|
959
|
+
if (!currentTabId)
|
|
960
|
+
return;
|
|
961
|
+
removeContextInTab(currentTabId, key);
|
|
962
|
+
return;
|
|
963
|
+
}
|
|
964
|
+
if (event.data?.type === AGENT_CHAT_CLEAR_CONTEXT_MESSAGE_TYPE) {
|
|
965
|
+
const openSidebar = event.data.data?.openSidebar;
|
|
966
|
+
if (openSidebar === true) {
|
|
967
|
+
window.dispatchEvent(new CustomEvent("agent-panel:open"));
|
|
968
|
+
}
|
|
969
|
+
if (postMessageSubmissionsDisabled)
|
|
970
|
+
return;
|
|
971
|
+
const currentTabId = activeThreadIdRef.current;
|
|
972
|
+
if (!currentTabId)
|
|
973
|
+
return;
|
|
974
|
+
clearContextInTab(currentTabId);
|
|
975
|
+
return;
|
|
976
|
+
}
|
|
908
977
|
if (event.data?.type !== "agentNative.submitChat")
|
|
909
978
|
return;
|
|
910
979
|
const message = event.data.data?.message;
|
|
@@ -995,8 +1064,10 @@ export function MultiTabAssistantChat({ showTabBar = true, renderHeader, renderO
|
|
|
995
1064
|
}, [
|
|
996
1065
|
availableModels,
|
|
997
1066
|
bumpModelSelectionVersion,
|
|
1067
|
+
clearContextInTab,
|
|
998
1068
|
createThread,
|
|
999
1069
|
postMessageSubmissionsDisabled,
|
|
1070
|
+
removeContextInTab,
|
|
1000
1071
|
setContextInTab,
|
|
1001
1072
|
switchThread,
|
|
1002
1073
|
]);
|
|
@@ -1125,6 +1196,7 @@ export function MultiTabAssistantChat({ showTabBar = true, renderHeader, renderO
|
|
|
1125
1196
|
}
|
|
1126
1197
|
chatRefs.current.delete(key);
|
|
1127
1198
|
pendingSends.current.delete(key);
|
|
1199
|
+
pendingContextItems.current.delete(key);
|
|
1128
1200
|
newThreadIds.current.delete(key);
|
|
1129
1201
|
threadModelRef.current.delete(key);
|
|
1130
1202
|
}
|
|
@@ -1156,6 +1228,7 @@ export function MultiTabAssistantChat({ showTabBar = true, renderHeader, renderO
|
|
|
1156
1228
|
// Clean up all old refs
|
|
1157
1229
|
chatRefs.current.clear();
|
|
1158
1230
|
pendingSends.current.clear();
|
|
1231
|
+
pendingContextItems.current.clear();
|
|
1159
1232
|
threadModelRef.current.clear();
|
|
1160
1233
|
setParentMap({});
|
|
1161
1234
|
setSubAgentNames({});
|
|
@@ -1494,7 +1567,7 @@ export function MultiTabAssistantChat({ showTabBar = true, renderHeader, renderO
|
|
|
1494
1567
|
else {
|
|
1495
1568
|
chatRefs.current.delete(tabId);
|
|
1496
1569
|
}
|
|
1497
|
-
}, threadId: tabId, tabId: tabId, browserTabId: browserTabId, contextScope: tabScope, apiUrl: apiUrl, isNewThread: newThreadIds.current.has(tabId) || isNewThread(tabId), onMessageCountChange: (count) => setMessageCounts((prev) => prev[tabId] === count
|
|
1570
|
+
}, threadId: tabId, tabId: tabId, browserTabId: browserTabId, contextScope: tabScope, isActiveComposer: tabId === activeThreadId, apiUrl: apiUrl, isNewThread: newThreadIds.current.has(tabId) || isNewThread(tabId), onMessageCountChange: (count) => setMessageCounts((prev) => prev[tabId] === count
|
|
1498
1571
|
? prev
|
|
1499
1572
|
: { ...prev, [tabId]: count }), onSaveThread: handleSaveThread, onGenerateTitle: handleGenerateTitle, onSlashCommand: handleSlashCommand, selectedModel: modelSelection?.model, selectedEngine: modelSelection?.engine, selectedEffort: modelSelection?.effort ?? "auto", defaultModel: defaultModel, availableModels: availableModels, onModelChange: handleModelChange, onEffortChange: handleEffortChange, onForkChat: () => handleForkChat(tabId) })] }, tabId));
|
|
1500
1573
|
})] })] }));
|