@agent-native/toolkit 0.204.0 → 0.204.1-nightly-20261008065100
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/agent-native.eject.json +2 -0
- package/dist/app/agent-page/AgentJobsTab.d.ts.map +1 -1
- package/dist/app/agent-page/AgentJobsTab.js +4 -2
- package/dist/app/agent-page/AgentJobsTab.js.map +1 -1
- package/dist/app/agent-page/AutomationDetailsDialog.d.ts +2 -1
- package/dist/app/agent-page/AutomationDetailsDialog.d.ts.map +1 -1
- package/dist/app/agent-page/AutomationDetailsDialog.js +8 -4
- package/dist/app/agent-page/AutomationDetailsDialog.js.map +1 -1
- package/dist/app/agent-page/ScheduledTriggerNotice.d.ts.map +1 -1
- package/dist/app/agent-page/ScheduledTriggerNotice.js +41 -19
- package/dist/app/agent-page/ScheduledTriggerNotice.js.map +1 -1
- package/dist/app/agent-page/use-jobs.d.ts +1 -1
- package/dist/app/agent-page/use-jobs.d.ts.map +1 -1
- package/dist/app/agentkit/react/components.d.ts.map +1 -1
- package/dist/app/agentkit/react/components.js +124 -45
- package/dist/app/agentkit/react/components.js.map +1 -1
- package/dist/app/agentkit/react/context.d.ts +22 -1
- package/dist/app/agentkit/react/context.d.ts.map +1 -1
- package/dist/app/agentkit/react/context.js +14 -1
- package/dist/app/agentkit/react/context.js.map +1 -1
- package/dist/app/agentkit/react/root.d.ts +3 -2
- package/dist/app/agentkit/react/root.d.ts.map +1 -1
- package/dist/app/agentkit/react/root.js +2 -2
- package/dist/app/agentkit/react/root.js.map +1 -1
- package/dist/app/agentkit/react/styles.css +32 -2
- package/dist/app/chat/AgentKitAssistantChat.d.ts.map +1 -1
- package/dist/app/chat/AgentKitAssistantChat.js +74 -7
- package/dist/app/chat/AgentKitAssistantChat.js.map +1 -1
- package/dist/app/chat/AgentPanel.js +1 -1
- package/dist/app/chat/AgentPanel.js.map +1 -1
- package/dist/app/chat/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/app/chat/MultiTabAssistantChat.js +10 -9
- package/dist/app/chat/MultiTabAssistantChat.js.map +1 -1
- package/dist/app/chat/RunStuckBanner.d.ts +8 -1
- package/dist/app/chat/RunStuckBanner.d.ts.map +1 -1
- package/dist/app/chat/RunStuckBanner.js +68 -6
- package/dist/app/chat/RunStuckBanner.js.map +1 -1
- package/dist/app/chat/chat/run-recovery.d.ts +4 -2
- package/dist/app/chat/chat/run-recovery.d.ts.map +1 -1
- package/dist/app/chat/chat/run-recovery.js +3 -3
- package/dist/app/chat/chat/run-recovery.js.map +1 -1
- package/dist/app/chat/chat/surface-types.d.ts +1 -0
- package/dist/app/chat/chat/surface-types.d.ts.map +1 -1
- package/dist/app/chat/composer/use-mention-search.d.ts +1 -0
- package/dist/app/chat/composer/use-mention-search.d.ts.map +1 -1
- package/dist/app/chat/fallback-chat-title.d.ts +2 -0
- package/dist/app/chat/fallback-chat-title.d.ts.map +1 -0
- package/dist/app/chat/fallback-chat-title.js +11 -0
- package/dist/app/chat/fallback-chat-title.js.map +1 -0
- package/dist/app/chat/feedback-report.d.ts +12 -0
- package/dist/app/chat/feedback-report.d.ts.map +1 -0
- package/dist/app/chat/feedback-report.js +21 -0
- package/dist/app/chat/feedback-report.js.map +1 -0
- package/dist/app/chat/reconcile-settled-run.d.ts +15 -0
- package/dist/app/chat/reconcile-settled-run.d.ts.map +1 -0
- package/dist/app/chat/reconcile-settled-run.js +41 -0
- package/dist/app/chat/reconcile-settled-run.js.map +1 -0
- package/dist/app/i18n/catalogs/ar-SA.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ar-SA.js +9 -0
- package/dist/app/i18n/catalogs/ar-SA.js.map +1 -1
- package/dist/app/i18n/catalogs/de-DE.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/de-DE.js +9 -0
- package/dist/app/i18n/catalogs/de-DE.js.map +1 -1
- package/dist/app/i18n/catalogs/en-US.d.ts +9 -0
- package/dist/app/i18n/catalogs/en-US.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/en-US.js +9 -0
- package/dist/app/i18n/catalogs/en-US.js.map +1 -1
- package/dist/app/i18n/catalogs/es-ES.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/es-ES.js +9 -0
- package/dist/app/i18n/catalogs/es-ES.js.map +1 -1
- package/dist/app/i18n/catalogs/fr-FR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/fr-FR.js +9 -0
- package/dist/app/i18n/catalogs/fr-FR.js.map +1 -1
- package/dist/app/i18n/catalogs/hi-IN.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/hi-IN.js +9 -0
- package/dist/app/i18n/catalogs/hi-IN.js.map +1 -1
- package/dist/app/i18n/catalogs/ja-JP.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ja-JP.js +9 -0
- package/dist/app/i18n/catalogs/ja-JP.js.map +1 -1
- package/dist/app/i18n/catalogs/ko-KR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ko-KR.js +9 -0
- package/dist/app/i18n/catalogs/ko-KR.js.map +1 -1
- package/dist/app/i18n/catalogs/pt-BR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/pt-BR.js +9 -0
- package/dist/app/i18n/catalogs/pt-BR.js.map +1 -1
- package/dist/app/i18n/catalogs/zh-CN.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/zh-CN.js +9 -0
- package/dist/app/i18n/catalogs/zh-CN.js.map +1 -1
- package/dist/app/i18n/catalogs/zh-TW.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/zh-TW.js +9 -0
- package/dist/app/i18n/catalogs/zh-TW.js.map +1 -1
- package/dist/app/providers/AppProviders.d.ts.map +1 -1
- package/dist/app/providers/AppProviders.js +7 -1
- package/dist/app/providers/AppProviders.js.map +1 -1
- package/dist/app/settings/shell/pages/audit.d.ts.map +1 -1
- package/dist/app/settings/shell/pages/audit.js +11 -2
- package/dist/app/settings/shell/pages/audit.js.map +1 -1
- package/dist/app/shared/AppShellSkeleton.d.ts.map +1 -1
- package/dist/app/shared/AppShellSkeleton.js +4 -0
- package/dist/app/shared/AppShellSkeleton.js.map +1 -1
- package/dist/composer/ComposerContextMenu.d.ts +14 -1
- package/dist/composer/ComposerContextMenu.d.ts.map +1 -1
- package/dist/composer/ComposerContextMenu.js +65 -19
- package/dist/composer/ComposerContextMenu.js.map +1 -1
- package/dist/composer/MentionPopover.d.ts.map +1 -1
- package/dist/composer/MentionPopover.js +3 -3
- package/dist/composer/MentionPopover.js.map +1 -1
- package/dist/composer/PromptComposer.d.ts +1 -1
- package/dist/composer/PromptComposer.d.ts.map +1 -1
- package/dist/composer/TiptapComposer.d.ts +2 -2
- package/dist/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/composer/TiptapComposer.js +92 -36
- package/dist/composer/TiptapComposer.js.map +1 -1
- package/dist/composer/use-mention-search.d.ts +1 -0
- package/dist/composer/use-mention-search.d.ts.map +1 -1
- package/dist/composer/use-mention-search.js +8 -1
- package/dist/composer/use-mention-search.js.map +1 -1
- package/package.json +4 -4
- package/src/app/agent-page/AgentJobsTab.blocked.spec.tsx +43 -0
- package/src/app/agent-page/AgentJobsTab.tsx +14 -5
- package/src/app/agent-page/AutomationDetailsDialog.tsx +22 -8
- package/src/app/agent-page/ScheduledTriggerNotice.spec.tsx +45 -3
- package/src/app/agent-page/ScheduledTriggerNotice.tsx +52 -31
- package/src/app/agent-page/use-jobs.ts +1 -1
- package/src/app/agentkit/react/components.interaction.spec.tsx +311 -1
- package/src/app/agentkit/react/components.spec.tsx +106 -2
- package/src/app/agentkit/react/components.tsx +217 -80
- package/src/app/agentkit/react/context.tsx +36 -0
- package/src/app/agentkit/react/root.tsx +4 -0
- package/src/app/agentkit/react/styles.css +32 -2
- package/src/app/chat/AgentKitAssistantChat.spec.tsx +140 -18
- package/src/app/chat/AgentKitAssistantChat.tsx +123 -7
- package/src/app/chat/AgentPanel.header.spec.ts +43 -7
- package/src/app/chat/AgentPanel.tsx +1 -1
- package/src/app/chat/MultiTabAssistantChat.spec.tsx +34 -0
- package/src/app/chat/MultiTabAssistantChat.tsx +10 -9
- package/src/app/chat/RunStuckBanner.spec.tsx +258 -17
- package/src/app/chat/RunStuckBanner.tsx +107 -5
- package/src/app/chat/chat/run-recovery.tsx +10 -2
- package/src/app/chat/chat/surface-types.ts +1 -0
- package/src/app/chat/fallback-chat-title.ts +10 -0
- package/src/app/chat/feedback-report.spec.ts +45 -0
- package/src/app/chat/feedback-report.ts +27 -0
- package/src/app/chat/reconcile-settled-run.spec.ts +112 -0
- package/src/app/chat/reconcile-settled-run.ts +57 -0
- package/src/app/i18n/catalogs/ar-SA.ts +12 -0
- package/src/app/i18n/catalogs/de-DE.ts +12 -0
- package/src/app/i18n/catalogs/en-US.ts +12 -0
- package/src/app/i18n/catalogs/es-ES.ts +12 -0
- package/src/app/i18n/catalogs/fr-FR.ts +12 -0
- package/src/app/i18n/catalogs/hi-IN.ts +12 -0
- package/src/app/i18n/catalogs/ja-JP.ts +12 -0
- package/src/app/i18n/catalogs/ko-KR.ts +12 -0
- package/src/app/i18n/catalogs/pt-BR.ts +12 -0
- package/src/app/i18n/catalogs/zh-CN.ts +10 -0
- package/src/app/i18n/catalogs/zh-TW.ts +10 -0
- package/src/app/providers/AppProviders.spec.tsx +29 -0
- package/src/app/providers/AppProviders.tsx +13 -0
- package/src/app/settings/shell/pages/audit.spec.tsx +30 -0
- package/src/app/settings/shell/pages/audit.tsx +12 -1
- package/src/app/shared/AppShellSkeleton.tsx +4 -0
- package/src/composer/ComposerContextMenu.tsx +94 -22
- package/src/composer/ComposerPlusMenu.parity.spec.tsx +218 -233
- package/src/composer/MentionPopover.tsx +12 -3
- package/src/composer/PromptComposer.context.spec.tsx +527 -195
- package/src/composer/PromptComposer.tsx +1 -1
- package/src/composer/TiptapComposer.tsx +105 -37
- package/src/composer/use-mention-search.ts +8 -1
|
@@ -11,6 +11,7 @@ import { Popover, PopoverAnchor, PopoverContent, PopoverTrigger, } from "../ui/p
|
|
|
11
11
|
import { Tooltip, TooltipContent, TooltipTrigger } from "../ui/tooltip.js";
|
|
12
12
|
import { formatAttachmentError } from "./attachment-accept.js";
|
|
13
13
|
import { BuilderBMark } from "./BuilderBMark.js";
|
|
14
|
+
import { searchComposerContextActions, } from "./ComposerContextMenu.js";
|
|
14
15
|
import { ComposerPlusMenu, } from "./ComposerPlusMenu.js";
|
|
15
16
|
import { areComposerContextItemsReady, ComposerContextError, snapshotComposerContextItems, } from "./context-items.js";
|
|
16
17
|
import { getComposerDraftKey } from "./draft-key.js";
|
|
@@ -167,6 +168,9 @@ function isSameComposerAttachment(current, submitted) {
|
|
|
167
168
|
function isSameComposerAttachmentSnapshot(current, snapshot) {
|
|
168
169
|
return current.id === snapshot.id && current.file === snapshot.file;
|
|
169
170
|
}
|
|
171
|
+
// Host Add-menu actions listed among "@" suggestions. Picking one runs the
|
|
172
|
+
// action or opens its picker as a dialog instead of inserting a mention.
|
|
173
|
+
const COMPOSER_CONTEXT_ENTRY_SOURCE = "composer-context";
|
|
170
174
|
function composerReferenceFromMentionItem(item) {
|
|
171
175
|
return {
|
|
172
176
|
label: item.referenceLabel ?? item.label,
|
|
@@ -1338,6 +1342,7 @@ export function TiptapComposer({ placeholder, ariaLabel, disabled = false, conte
|
|
|
1338
1342
|
});
|
|
1339
1343
|
const [popover, setPopover] = useState(null);
|
|
1340
1344
|
const [contextMenuOpen, setContextMenuOpen] = useState(false);
|
|
1345
|
+
const [contextEntryRequest, setContextEntryRequest] = useState(null);
|
|
1341
1346
|
const popoverRef = useRef(null);
|
|
1342
1347
|
const composerRuntime = useComposerRuntime();
|
|
1343
1348
|
const lastComposerRuntimeSyncRef = useRef(null);
|
|
@@ -1418,13 +1423,48 @@ export function TiptapComposer({ placeholder, ariaLabel, disabled = false, conte
|
|
|
1418
1423
|
onExecModeChangeRef.current = onExecModeChange;
|
|
1419
1424
|
const planModeDisabledRef = useRef(planModeDisabled);
|
|
1420
1425
|
planModeDisabledRef.current = planModeDisabled;
|
|
1421
|
-
const { items: mentionItems, isLoading: mentionsLoading, error: mentionsError, retry: retryMentions, } = useMentionSearch(popover?.type === "@" ? popover.query : "", includeDefaultMentionSearch && (contextMenuOpen || popover?.type === "@"));
|
|
1426
|
+
const { items: mentionItems, isLoading: mentionsLoading, error: mentionsError, retry: retryMentions, settledQuery: settledMentionQuery, } = useMentionSearch(popover?.type === "@" ? popover.query : "", includeDefaultMentionSearch && (contextMenuOpen || popover?.type === "@"));
|
|
1422
1427
|
const mentionQuery = popover?.type === "@" ? popover.query : "";
|
|
1423
1428
|
const filteredMentionItems = useMemo(() => filterMentionItemsForSlots([
|
|
1424
1429
|
// Host items arrive unfiltered; the default search filters itself.
|
|
1425
1430
|
...hostMentionItems.filter((item) => mentionItemMatchesQuery(item, mentionQuery)),
|
|
1426
1431
|
...mentionItems,
|
|
1427
1432
|
].filter((item, index, items) => items.findIndex((candidate) => candidate.id === item.id) === index), slotReferences), [hostMentionItems, mentionItems, mentionQuery, slotReferences]);
|
|
1433
|
+
const inlineMentionItems = useMemo(() => {
|
|
1434
|
+
if (popover?.type !== "@" ||
|
|
1435
|
+
!hasContextMenu ||
|
|
1436
|
+
disabled ||
|
|
1437
|
+
contextControlsDisabled ||
|
|
1438
|
+
!contextMenuItems?.length)
|
|
1439
|
+
return filteredMentionItems;
|
|
1440
|
+
const addContextLabel = t("agentChat.composer.addContext", {
|
|
1441
|
+
defaultValue: "Add context",
|
|
1442
|
+
});
|
|
1443
|
+
return [
|
|
1444
|
+
...searchComposerContextActions(contextMenuItems, mentionQuery)
|
|
1445
|
+
// Custom pages only render inside the + menu.
|
|
1446
|
+
.filter(({ action }) => !action.disabled && !action.render)
|
|
1447
|
+
.map(({ action, categories }) => ({
|
|
1448
|
+
id: `${COMPOSER_CONTEXT_ENTRY_SOURCE}:${action.id}`,
|
|
1449
|
+
label: action.label,
|
|
1450
|
+
description: action.description,
|
|
1451
|
+
source: COMPOSER_CONTEXT_ENTRY_SOURCE,
|
|
1452
|
+
refType: COMPOSER_CONTEXT_ENTRY_SOURCE,
|
|
1453
|
+
refId: action.id,
|
|
1454
|
+
section: categories[0] ?? addContextLabel,
|
|
1455
|
+
})),
|
|
1456
|
+
...filteredMentionItems,
|
|
1457
|
+
];
|
|
1458
|
+
}, [
|
|
1459
|
+
popover?.type,
|
|
1460
|
+
hasContextMenu,
|
|
1461
|
+
disabled,
|
|
1462
|
+
contextControlsDisabled,
|
|
1463
|
+
contextMenuItems,
|
|
1464
|
+
mentionQuery,
|
|
1465
|
+
filteredMentionItems,
|
|
1466
|
+
t,
|
|
1467
|
+
]);
|
|
1428
1468
|
const { skills, hint, isLoading: skillsLoading, } = useSkills(includeDefaultSlashSkills && popover?.type === "/");
|
|
1429
1469
|
const allSlashCommands = useMemo(() => {
|
|
1430
1470
|
// A command without a host callback would be deleted as an invisible no-op.
|
|
@@ -1458,14 +1498,17 @@ export function TiptapComposer({ placeholder, ariaLabel, disabled = false, conte
|
|
|
1458
1498
|
s.description?.toLowerCase().includes(q));
|
|
1459
1499
|
}, [allSlashSkills, popover]);
|
|
1460
1500
|
// Keep refs in sync with state
|
|
1461
|
-
|
|
1462
|
-
|
|
1501
|
+
// Results for an earlier query are stale until the search for this one
|
|
1502
|
+
// settles, so auto-close may not treat them as final. Host mention items
|
|
1503
|
+
// carry no readiness signal (they may still be loading), so only a settled
|
|
1504
|
+
// default search can end a query as "nothing matches".
|
|
1505
|
+
const mentionSearchSettled = includeDefaultMentionSearch &&
|
|
1506
|
+
!mentionsLoading &&
|
|
1507
|
+
settledMentionQuery === mentionQuery;
|
|
1463
1508
|
const filteredCommandsRef = useRef(filteredCommands);
|
|
1464
1509
|
filteredCommandsRef.current = filteredCommands;
|
|
1465
1510
|
const filteredSkillsRef = useRef(filteredSkills);
|
|
1466
1511
|
filteredSkillsRef.current = filteredSkills;
|
|
1467
|
-
const hasContextMenuRef = useRef(hasContextMenu);
|
|
1468
|
-
hasContextMenuRef.current = hasContextMenu;
|
|
1469
1512
|
const launchersDisabledRef = useRef(disabled || contextControlsDisabled);
|
|
1470
1513
|
launchersDisabledRef.current = disabled || contextControlsDisabled;
|
|
1471
1514
|
const onSlashCommandRef = useRef(onSlashCommand);
|
|
@@ -1510,6 +1553,21 @@ export function TiptapComposer({ placeholder, ariaLabel, disabled = false, conte
|
|
|
1510
1553
|
setPopover(null);
|
|
1511
1554
|
popoverStateRef.current = null;
|
|
1512
1555
|
}, []);
|
|
1556
|
+
// A query nothing matches is plain text ("@builder.io", "@3pm"), so end the
|
|
1557
|
+
// mention there instead of holding later keys.
|
|
1558
|
+
useEffect(() => {
|
|
1559
|
+
if (mentionQuery &&
|
|
1560
|
+
mentionSearchSettled &&
|
|
1561
|
+
inlineMentionItems.length === 0) {
|
|
1562
|
+
closePopover();
|
|
1563
|
+
}
|
|
1564
|
+
}, [mentionQuery, mentionSearchSettled, inlineMentionItems, closePopover]);
|
|
1565
|
+
// The + menu runs a request from its own effect, which fires before this one;
|
|
1566
|
+
// clear it so a remounted menu cannot run the same action again.
|
|
1567
|
+
useEffect(() => {
|
|
1568
|
+
if (contextEntryRequest)
|
|
1569
|
+
setContextEntryRequest(null);
|
|
1570
|
+
}, [contextEntryRequest]);
|
|
1513
1571
|
// Persist draft to localStorage so refreshes don't lose the prompt.
|
|
1514
1572
|
const hasDraftScope = Boolean(draftScope?.trim());
|
|
1515
1573
|
const draftKey = hasDraftScope || initialText === undefined
|
|
@@ -1910,14 +1968,6 @@ export function TiptapComposer({ placeholder, ariaLabel, disabled = false, conte
|
|
|
1910
1968
|
const pop = popoverStateRef.current;
|
|
1911
1969
|
// Handle popover keyboard nav
|
|
1912
1970
|
if (pop) {
|
|
1913
|
-
if (event.key === " " && pop.type === "@" && pop.query) {
|
|
1914
|
-
const exact = findExactMentionItem(mentionItemsRef.current, pop.query);
|
|
1915
|
-
if (exact) {
|
|
1916
|
-
event.preventDefault();
|
|
1917
|
-
selectMention(view, pop, exact);
|
|
1918
|
-
return true;
|
|
1919
|
-
}
|
|
1920
|
-
}
|
|
1921
1971
|
if (event.key === "ArrowUp") {
|
|
1922
1972
|
event.preventDefault();
|
|
1923
1973
|
popoverRef.current?.moveUp();
|
|
@@ -1928,7 +1978,19 @@ export function TiptapComposer({ placeholder, ariaLabel, disabled = false, conte
|
|
|
1928
1978
|
popoverRef.current?.moveDown();
|
|
1929
1979
|
return true;
|
|
1930
1980
|
}
|
|
1931
|
-
|
|
1981
|
+
// A mention comes only from an explicit pick of a highlighted row. With
|
|
1982
|
+
// nothing highlighted, even while a search is pending, the "@" is
|
|
1983
|
+
// plain text: Enter submits it and a late result changes nothing.
|
|
1984
|
+
const highlighted = pop.type === "@" ? popoverRef.current?.getSelectedMention() : null;
|
|
1985
|
+
if (event.key === "Enter" && pop.type === "@" && !highlighted) {
|
|
1986
|
+
closePopover();
|
|
1987
|
+
}
|
|
1988
|
+
else if (event.key === "Tab" && !event.shiftKey && highlighted) {
|
|
1989
|
+
event.preventDefault();
|
|
1990
|
+
selectMention(view, pop, highlighted);
|
|
1991
|
+
return true;
|
|
1992
|
+
}
|
|
1993
|
+
else if (event.key === "Enter") {
|
|
1932
1994
|
event.preventDefault();
|
|
1933
1995
|
const idx = popoverRef.current?.getSelectedIndex() ?? 0;
|
|
1934
1996
|
const currentCommands = filteredCommandsRef.current;
|
|
@@ -2035,20 +2097,15 @@ export function TiptapComposer({ placeholder, ariaLabel, disabled = false, conte
|
|
|
2035
2097
|
return true;
|
|
2036
2098
|
}
|
|
2037
2099
|
// Detect @ trigger — only when preceded by start-of-text, space, or newline
|
|
2038
|
-
// (not after alphanumeric chars, which would indicate an email address)
|
|
2100
|
+
// (not after alphanumeric chars, which would indicate an email address).
|
|
2101
|
+
// Keep the typed "@" in the draft and focus in the editor: a focus-taking
|
|
2102
|
+
// menu here would swallow the rest of a literal like "@builder.io".
|
|
2039
2103
|
if (event.key === "@") {
|
|
2104
|
+
if (launchersDisabledRef.current)
|
|
2105
|
+
return false;
|
|
2040
2106
|
const { from } = view.state.selection;
|
|
2041
2107
|
const textBefore = view.state.doc.textBetween(Math.max(0, from - 1), from);
|
|
2042
2108
|
if (from === 1 || textBefore === "" || /\s/.test(textBefore)) {
|
|
2043
|
-
if (hasContextMenuRef.current) {
|
|
2044
|
-
if (launchersDisabledRef.current)
|
|
2045
|
-
return false;
|
|
2046
|
-
event.preventDefault();
|
|
2047
|
-
popoverStateRef.current = null;
|
|
2048
|
-
setPopover(null);
|
|
2049
|
-
setContextMenuOpen(true);
|
|
2050
|
-
return true;
|
|
2051
|
-
}
|
|
2052
2109
|
const position = getComposerPopoverAnchorPosition(view, from);
|
|
2053
2110
|
if (!position)
|
|
2054
2111
|
return false;
|
|
@@ -2234,16 +2291,7 @@ export function TiptapComposer({ placeholder, ariaLabel, disabled = false, conte
|
|
|
2234
2291
|
if (!isComposerEditorUsable(editor))
|
|
2235
2292
|
return;
|
|
2236
2293
|
editor.commands.focus();
|
|
2237
|
-
|
|
2238
|
-
const mention = text === "@";
|
|
2239
|
-
if (mention && hasContextMenuRef.current) {
|
|
2240
|
-
if (launchersDisabledRef.current)
|
|
2241
|
-
return;
|
|
2242
|
-
popoverStateRef.current = null;
|
|
2243
|
-
setPopover(null);
|
|
2244
|
-
setContextMenuOpen(true);
|
|
2245
|
-
return;
|
|
2246
|
-
}
|
|
2294
|
+
const mention = text === "@" && !launchersDisabledRef.current;
|
|
2247
2295
|
let inserted = text;
|
|
2248
2296
|
if (mention) {
|
|
2249
2297
|
const { from } = editor.state.selection;
|
|
@@ -3462,6 +3510,14 @@ export function TiptapComposer({ placeholder, ariaLabel, disabled = false, conte
|
|
|
3462
3510
|
const currentPos = ed.state.selection.from;
|
|
3463
3511
|
// startPos is after the trigger char, so -1 to include the @ or /
|
|
3464
3512
|
const deleteFrom = Math.max(0, pop.startPos - 1);
|
|
3513
|
+
if (item.source === COMPOSER_CONTEXT_ENTRY_SOURCE && item.refId) {
|
|
3514
|
+
ed.chain()
|
|
3515
|
+
.focus()
|
|
3516
|
+
.deleteRange({ from: deleteFrom, to: currentPos })
|
|
3517
|
+
.run();
|
|
3518
|
+
setContextEntryRequest({ id: item.refId });
|
|
3519
|
+
return;
|
|
3520
|
+
}
|
|
3465
3521
|
const normalized = adapters.agentChat.normalizeReference(composerReferenceFromMentionItem(item));
|
|
3466
3522
|
if (!normalized)
|
|
3467
3523
|
return;
|
|
@@ -3853,7 +3909,7 @@ export function TiptapComposer({ placeholder, ariaLabel, disabled = false, conte
|
|
|
3853
3909
|
}), className: "flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:bg-accent hover:text-foreground", children: _jsx(IconRefresh, { "aria-hidden": "true", className: "size-3.5" }) }) }), _jsx(TooltipContent, { children: t("agentChat.composer.retryContext", {
|
|
3854
3910
|
defaultValue: "Retry {{name}} context",
|
|
3855
3911
|
name: item.title,
|
|
3856
|
-
}) })] })) : null] }, item.key)))] })), contextSubmissionError ? (_jsx("p", { role: "alert", className: "px-2 text-xs text-destructive", children: contextSubmissionError })) : null, attachmentError ? (_jsx("p", { role: "alert", className: "break-words px-2.5 pt-2 text-xs text-destructive", children: attachmentError })) : null, _jsx("div", { "data-agent-composer-variant": layoutVariant, "data-agent-composer-slot": "editor-wrap", className: `agent-composer-editor-wrap ${composerMode || hasContextRows ? "px-2 pt-1 pb-1" : "px-2 pt-2 pb-1"}`, children: _jsx(EditorContent, { editor: editor, "data-agent-composer-variant": layoutVariant, "data-agent-composer-slot": "editor", className: "agent-composer-editor aui-composer flex-1 min-w-0 [&_.ProseMirror]:outline-none [&_.ProseMirror_p]:m-0 px-0.5" }) }), voiceEnabled && _jsx(VoiceRecordingOverlay, { voice: voice }), _jsxs("div", { "data-agent-composer-variant": layoutVariant, "data-agent-composer-slot": "toolbar", className: "agent-composer-toolbar flex items-center gap-1 px-2 py-1.5", children: [!launchersDisabled && attachmentsEnabled && attachButton ? (attachButton) : hasContextMenu ? (_jsx(ComposerPlusMenu, { contextMenuItems: launchersDisabled ? [] : contextLauncherItems, mode: launchersDisabled || plusMenuMode === "hidden"
|
|
3912
|
+
}) })] })) : null] }, item.key)))] })), contextSubmissionError ? (_jsx("p", { role: "alert", className: "px-2 text-xs text-destructive", children: contextSubmissionError })) : null, attachmentError ? (_jsx("p", { role: "alert", className: "break-words px-2.5 pt-2 text-xs text-destructive", children: attachmentError })) : null, _jsx("div", { "data-agent-composer-variant": layoutVariant, "data-agent-composer-slot": "editor-wrap", className: `agent-composer-editor-wrap ${composerMode || hasContextRows ? "px-2 pt-1 pb-1" : "px-2 pt-2 pb-1"}`, children: _jsx(EditorContent, { editor: editor, "data-agent-composer-variant": layoutVariant, "data-agent-composer-slot": "editor", className: "agent-composer-editor aui-composer flex-1 min-w-0 [&_.ProseMirror]:outline-none [&_.ProseMirror_p]:m-0 px-0.5" }) }), voiceEnabled && _jsx(VoiceRecordingOverlay, { voice: voice }), _jsxs("div", { "data-agent-composer-variant": layoutVariant, "data-agent-composer-slot": "toolbar", className: "agent-composer-toolbar flex items-center gap-1 px-2 py-1.5", children: [!launchersDisabled && attachmentsEnabled && attachButton ? (attachButton) : hasContextMenu ? (_jsx(ComposerPlusMenu, { contextMenuItems: launchersDisabled ? [] : contextLauncherItems, openEntry: contextEntryRequest, mode: launchersDisabled || plusMenuMode === "hidden"
|
|
3857
3913
|
? "upload-only"
|
|
3858
3914
|
: plusMenuMode, onSelectMode: handleSelectMode, terminalModeControl: terminalModeControl, extensionTools: extensionTools, attachmentsEnabled: attachmentsEnabled, open: contextMenuOpen, onOpenChange: setContextMenuOpen, loading: mentionsLoading, error: mentionsError
|
|
3859
3915
|
? t("agentChat.composer.contextLoadFailed", {
|
|
@@ -3873,6 +3929,6 @@ export function TiptapComposer({ placeholder, ariaLabel, disabled = false, conte
|
|
|
3873
3929
|
}
|
|
3874
3930
|
const pageTarget = Array.from(document.querySelectorAll('button:not(:disabled), a[href], input:not([type="hidden"]):not(:disabled), textarea:not(:disabled)')).find((element) => !root?.contains(element) && !element.closest("[hidden]"));
|
|
3875
3931
|
pageTarget?.focus();
|
|
3876
|
-
}, disabled: launchersDisabled })) : null, toolbarSlot ?? modeControl, _jsx("div", { "data-agent-composer-slot": "toolbar-spacer", className: "flex-1" }), shouldRenderModelSelector(availableModels, onModelChange) && (_jsx(ModelSelector, { model: selectedModel ?? "", selectedEngine: selectedEngine, open: modelSelectorOpen, effort: selectedEffort, engines: availableModels, agents: availableAgents, selectedAgent: selectedAgent, agentOnly: agentOnly, hostedHarness: hostedHarness, showAutoModelOption: showAutoModelOption, modelListLoading: modelListLoading, onChange: onModelChange, onEffortChange: onEffortChange, onAgentChange: onAgentChange, onModelSelectorOpenChange: onModelSelectorOpenChange, providerConnectStatusEnabled: providerConnectStatusEnabled, onConnectProvider: onConnectProvider, onConnectLocalRuntime: onConnectLocalRuntime, terminalModeControl: terminalModeControl, imageModel: imageModelMenu })), execMode && onExecModeChange && (_jsx(ModeSelector, { mode: execMode, onChange: onExecModeChange, planModeDisabled: planModeDisabled, planModeDisabledReason: planModeDisabledReason })), actionButton ?? (_jsxs(_Fragment, { children: [extraActionButton, voiceEnabled && (_jsx(VoiceButton, { voice: voice, isMac: isMac, disabled: disabled })), primaryAction === "stop" ? (stopButton) : (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: (event) => void submitComposer("immediate", undefined, event.metaKey || event.ctrlKey), disabled: !canSend || sendButtonDisabled, "aria-label": sendButtonTooltip, "data-agent-composer-slot": "send-button", className: "agent-composer-send-button shrink-0 flex h-7 w-7 items-center justify-center rounded-full bg-primary text-primary-foreground hover:opacity-90 transition-[opacity,transform] duration-150 active:scale-[0.97] disabled:opacity-30 disabled:cursor-not-allowed", children: _jsx(IconArrowUp, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: sendButtonTooltip })] }))] }))] }), _jsx(MentionPopover, { ref: popoverRef, density: mentionPopoverDensity, type: popover?.type ?? "@", position: popover?.position ?? null, mentionItems:
|
|
3932
|
+
}, disabled: launchersDisabled })) : null, toolbarSlot ?? modeControl, _jsx("div", { "data-agent-composer-slot": "toolbar-spacer", className: "flex-1" }), shouldRenderModelSelector(availableModels, onModelChange) && (_jsx(ModelSelector, { model: selectedModel ?? "", selectedEngine: selectedEngine, open: modelSelectorOpen, effort: selectedEffort, engines: availableModels, agents: availableAgents, selectedAgent: selectedAgent, agentOnly: agentOnly, hostedHarness: hostedHarness, showAutoModelOption: showAutoModelOption, modelListLoading: modelListLoading, onChange: onModelChange, onEffortChange: onEffortChange, onAgentChange: onAgentChange, onModelSelectorOpenChange: onModelSelectorOpenChange, providerConnectStatusEnabled: providerConnectStatusEnabled, onConnectProvider: onConnectProvider, onConnectLocalRuntime: onConnectLocalRuntime, terminalModeControl: terminalModeControl, imageModel: imageModelMenu })), execMode && onExecModeChange && (_jsx(ModeSelector, { mode: execMode, onChange: onExecModeChange, planModeDisabled: planModeDisabled, planModeDisabledReason: planModeDisabledReason })), actionButton ?? (_jsxs(_Fragment, { children: [extraActionButton, voiceEnabled && (_jsx(VoiceButton, { voice: voice, isMac: isMac, disabled: disabled })), primaryAction === "stop" ? (stopButton) : (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: (event) => void submitComposer("immediate", undefined, event.metaKey || event.ctrlKey), disabled: !canSend || sendButtonDisabled, "aria-label": sendButtonTooltip, "data-agent-composer-slot": "send-button", className: "agent-composer-send-button shrink-0 flex h-7 w-7 items-center justify-center rounded-full bg-primary text-primary-foreground hover:opacity-90 transition-[opacity,transform] duration-150 active:scale-[0.97] disabled:opacity-30 disabled:cursor-not-allowed", children: _jsx(IconArrowUp, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: sendButtonTooltip })] }))] }))] }), _jsx(MentionPopover, { ref: popoverRef, density: mentionPopoverDensity, type: popover?.type ?? "@", position: popover?.position ?? null, mentionItems: inlineMentionItems, skills: filteredSkills, commands: filteredCommands, hint: hint, isLoading: popover?.type === "@" ? mentionsLoading : skillsLoading, query: popover?.query ?? "", onSelectMention: handleSelectMention, onSelectSkill: handleSelectSkill, onSelectCommand: handleSelectCommand, onClose: closePopover })] }));
|
|
3877
3933
|
}
|
|
3878
3934
|
//# sourceMappingURL=TiptapComposer.js.map
|