@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.
Files changed (151) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/context-xray-local.d.ts +2 -2
  3. package/dist/cli/context-xray-local.d.ts.map +1 -1
  4. package/dist/cli/context-xray-local.js +1449 -53
  5. package/dist/cli/context-xray-local.js.map +1 -1
  6. package/dist/cli/index.js +1 -1
  7. package/dist/cli/index.js.map +1 -1
  8. package/dist/cli/skills.d.ts.map +1 -1
  9. package/dist/cli/skills.js +381 -73
  10. package/dist/cli/skills.js.map +1 -1
  11. package/dist/cli/templates-meta.d.ts.map +1 -1
  12. package/dist/cli/templates-meta.js +8 -4
  13. package/dist/cli/templates-meta.js.map +1 -1
  14. package/dist/client/AgentPanel.d.ts.map +1 -1
  15. package/dist/client/AgentPanel.js +5 -11
  16. package/dist/client/AgentPanel.js.map +1 -1
  17. package/dist/client/AssistantChat.d.ts +6 -0
  18. package/dist/client/AssistantChat.d.ts.map +1 -1
  19. package/dist/client/AssistantChat.js +50 -26
  20. package/dist/client/AssistantChat.js.map +1 -1
  21. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  22. package/dist/client/MultiTabAssistantChat.js +81 -8
  23. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  24. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  25. package/dist/client/agent-chat-adapter.js +68 -24
  26. package/dist/client/agent-chat-adapter.js.map +1 -1
  27. package/dist/client/agent-chat.d.ts +39 -3
  28. package/dist/client/agent-chat.d.ts.map +1 -1
  29. package/dist/client/agent-chat.js +168 -33
  30. package/dist/client/agent-chat.js.map +1 -1
  31. package/dist/client/application-state.d.ts +13 -0
  32. package/dist/client/application-state.d.ts.map +1 -0
  33. package/dist/client/application-state.js +99 -0
  34. package/dist/client/application-state.js.map +1 -0
  35. package/dist/client/composer/ComposerPlusMenu.d.ts.map +1 -1
  36. package/dist/client/composer/ComposerPlusMenu.js +174 -8
  37. package/dist/client/composer/ComposerPlusMenu.js.map +1 -1
  38. package/dist/client/composer/PromptComposer.d.ts +2 -0
  39. package/dist/client/composer/PromptComposer.d.ts.map +1 -1
  40. package/dist/client/composer/PromptComposer.js +2 -2
  41. package/dist/client/composer/PromptComposer.js.map +1 -1
  42. package/dist/client/composer/TiptapComposer.js +1 -1
  43. package/dist/client/composer/TiptapComposer.js.map +1 -1
  44. package/dist/client/context-xray/ContextMeter.d.ts +2 -1
  45. package/dist/client/context-xray/ContextMeter.d.ts.map +1 -1
  46. package/dist/client/context-xray/ContextMeter.js +19 -25
  47. package/dist/client/context-xray/ContextMeter.js.map +1 -1
  48. package/dist/client/context-xray/ContextXRayPanel.d.ts +1 -3
  49. package/dist/client/context-xray/ContextXRayPanel.d.ts.map +1 -1
  50. package/dist/client/context-xray/ContextXRayPanel.js +27 -24
  51. package/dist/client/context-xray/ContextXRayPanel.js.map +1 -1
  52. package/dist/client/conversation/AgentConversation.d.ts.map +1 -1
  53. package/dist/client/conversation/AgentConversation.js +2 -1
  54. package/dist/client/conversation/AgentConversation.js.map +1 -1
  55. package/dist/client/frame-protocol.d.ts +11 -3
  56. package/dist/client/frame-protocol.d.ts.map +1 -1
  57. package/dist/client/frame-protocol.js.map +1 -1
  58. package/dist/client/index.d.ts +4 -2
  59. package/dist/client/index.d.ts.map +1 -1
  60. package/dist/client/index.js +4 -2
  61. package/dist/client/index.js.map +1 -1
  62. package/dist/client/progress/RunsTray.d.ts +1 -0
  63. package/dist/client/progress/RunsTray.d.ts.map +1 -1
  64. package/dist/client/progress/RunsTray.js +50 -16
  65. package/dist/client/progress/RunsTray.js.map +1 -1
  66. package/dist/client/sse-event-processor.d.ts +1 -0
  67. package/dist/client/sse-event-processor.d.ts.map +1 -1
  68. package/dist/client/sse-event-processor.js +62 -15
  69. package/dist/client/sse-event-processor.js.map +1 -1
  70. package/dist/client/tool-display.d.ts +4 -0
  71. package/dist/client/tool-display.d.ts.map +1 -0
  72. package/dist/client/tool-display.js +28 -0
  73. package/dist/client/tool-display.js.map +1 -0
  74. package/dist/client/use-action.d.ts +12 -0
  75. package/dist/client/use-action.d.ts.map +1 -1
  76. package/dist/client/use-action.js +14 -2
  77. package/dist/client/use-action.js.map +1 -1
  78. package/dist/client/use-agent-chat-context.d.ts +15 -0
  79. package/dist/client/use-agent-chat-context.d.ts.map +1 -0
  80. package/dist/client/use-agent-chat-context.js +32 -0
  81. package/dist/client/use-agent-chat-context.js.map +1 -0
  82. package/dist/client/use-chat-threads.d.ts.map +1 -1
  83. package/dist/client/use-chat-threads.js +40 -31
  84. package/dist/client/use-chat-threads.js.map +1 -1
  85. package/dist/client/use-external-value.d.ts.map +1 -1
  86. package/dist/client/use-external-value.js +14 -7
  87. package/dist/client/use-external-value.js.map +1 -1
  88. package/dist/deploy/build.d.ts.map +1 -1
  89. package/dist/deploy/build.js +1 -2
  90. package/dist/deploy/build.js.map +1 -1
  91. package/dist/extensions/html-shell.d.ts +3 -2
  92. package/dist/extensions/html-shell.d.ts.map +1 -1
  93. package/dist/extensions/html-shell.js +12 -2
  94. package/dist/extensions/html-shell.js.map +1 -1
  95. package/dist/extensions/routes.js +2 -7
  96. package/dist/extensions/routes.js.map +1 -1
  97. package/dist/index.browser.d.ts +1 -1
  98. package/dist/index.browser.d.ts.map +1 -1
  99. package/dist/index.browser.js +1 -1
  100. package/dist/index.browser.js.map +1 -1
  101. package/dist/index.d.ts +1 -1
  102. package/dist/index.d.ts.map +1 -1
  103. package/dist/index.js +1 -1
  104. package/dist/index.js.map +1 -1
  105. package/dist/mcp/server.d.ts +4 -2
  106. package/dist/mcp/server.d.ts.map +1 -1
  107. package/dist/mcp/server.js +33 -4
  108. package/dist/mcp/server.js.map +1 -1
  109. package/dist/provider-api/index.d.ts.map +1 -1
  110. package/dist/provider-api/index.js +14 -6
  111. package/dist/provider-api/index.js.map +1 -1
  112. package/dist/server/agent-teams.d.ts +4 -1
  113. package/dist/server/agent-teams.d.ts.map +1 -1
  114. package/dist/server/agent-teams.js +104 -28
  115. package/dist/server/agent-teams.js.map +1 -1
  116. package/dist/server/auth.d.ts.map +1 -1
  117. package/dist/server/auth.js +21 -11
  118. package/dist/server/auth.js.map +1 -1
  119. package/dist/server/core-routes-plugin.js +2 -2
  120. package/dist/server/core-routes-plugin.js.map +1 -1
  121. package/dist/server/request-context.d.ts +3 -4
  122. package/dist/server/request-context.d.ts.map +1 -1
  123. package/dist/server/request-context.js.map +1 -1
  124. package/dist/server/security-headers.d.ts +16 -19
  125. package/dist/server/security-headers.d.ts.map +1 -1
  126. package/dist/server/security-headers.js +24 -25
  127. package/dist/server/security-headers.js.map +1 -1
  128. package/dist/server/self-dispatch.d.ts.map +1 -1
  129. package/dist/server/self-dispatch.js +17 -1
  130. package/dist/server/self-dispatch.js.map +1 -1
  131. package/dist/server/ssr-handler.d.ts.map +1 -1
  132. package/dist/server/ssr-handler.js +9 -18
  133. package/dist/server/ssr-handler.js.map +1 -1
  134. package/dist/templates/default/AGENTS.md +1 -1
  135. package/dist/templates/default/DEVELOPING.md +7 -13
  136. package/dist/templates/workspace-core/AGENTS.md +6 -4
  137. package/dist/templates/workspace-root/AGENTS.md +6 -4
  138. package/docs/content/actions.md +5 -7
  139. package/docs/content/client.md +49 -44
  140. package/docs/content/context-awareness.md +20 -33
  141. package/docs/content/creating-templates.md +2 -2
  142. package/docs/content/external-agents.md +1 -1
  143. package/docs/content/key-concepts.md +3 -3
  144. package/docs/content/sharing.md +1 -1
  145. package/docs/content/template-mail.md +1 -1
  146. package/docs/content/voice-input.md +1 -1
  147. package/package.json +5 -1
  148. package/src/templates/default/AGENTS.md +1 -1
  149. package/src/templates/default/DEVELOPING.md +7 -13
  150. package/src/templates/workspace-core/AGENTS.md +6 -4
  151. 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;AA8nB/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;AA4ED,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,2CAykD5B"}
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 ? now - thread.updatedAt > STALE_THRESHOLD_MS : false;
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
- setOpenTabIds((prev) => prev.includes(activeThreadId) ? prev : [...prev, activeThreadId]);
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
- }, [activeThreadId]);
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 === "agentNative.setChatContext") {
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
  })] })] }));