@tutti-os/agent-gui 0.0.105 → 0.0.107
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/agent-conversation/index.js +1 -1
- package/dist/agent-gui.js +4 -4
- package/dist/app/renderer/agentactivity.css +46 -4
- package/dist/{chunk-JG7HGKZL.js → chunk-BXOKBZH4.js} +135 -18
- package/dist/chunk-BXOKBZH4.js.map +1 -0
- package/dist/{chunk-IR2CL2X2.js → chunk-F7Q7QK42.js} +5 -18
- package/dist/chunk-F7Q7QK42.js.map +1 -0
- package/dist/{chunk-6R7GHXRQ.js → chunk-P3CVAWGJ.js} +10 -5
- package/dist/chunk-P3CVAWGJ.js.map +1 -0
- package/dist/{chunk-N3HTEYLZ.js → chunk-ZWY32ZKZ.js} +158 -39
- package/dist/chunk-ZWY32ZKZ.js.map +1 -0
- package/dist/context-mention-palette/index.js +2 -2
- package/dist/index.js +4 -4
- package/dist/mention-search.d.ts +7 -3
- package/dist/mention-search.js +1 -1
- package/package.json +12 -12
- package/dist/chunk-6R7GHXRQ.js.map +0 -1
- package/dist/chunk-IR2CL2X2.js.map +0 -1
- package/dist/chunk-JG7HGKZL.js.map +0 -1
- package/dist/chunk-N3HTEYLZ.js.map +0 -1
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
agentMentionFilterLabel,
|
|
6
6
|
agentMentionGroupLabel,
|
|
7
7
|
mentionGroupExpandCount
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-BXOKBZH4.js";
|
|
9
9
|
import {
|
|
10
10
|
resolveAgentMentionFileThumbnailUrl,
|
|
11
11
|
resolveAgentMentionFileVisualKind
|
|
@@ -249,12 +249,14 @@ function decorateMentionGroup(group, index, groups, filter, query) {
|
|
|
249
249
|
filter,
|
|
250
250
|
groupCount: groups.length,
|
|
251
251
|
groupId,
|
|
252
|
+
groupLabel: group.label,
|
|
252
253
|
query
|
|
253
254
|
});
|
|
255
|
+
const groupLabel = group.label ?? agentMentionGroupLabel(groupId);
|
|
254
256
|
return {
|
|
255
257
|
...group,
|
|
256
|
-
label: showLabel ?
|
|
257
|
-
emptyLabel: suppressChrome ? void 0 : agentMentionEmptyGroupLabel(groupId, query),
|
|
258
|
+
label: showLabel ? groupLabel : void 0,
|
|
259
|
+
emptyLabel: suppressChrome ? void 0 : group.emptyLabel ?? agentMentionEmptyGroupLabel(groupId, query),
|
|
258
260
|
expandLabel: group.hasMore ? translate("agentHost.agentGui.contextPickerExpandMore", {
|
|
259
261
|
count: mentionGroupExpandCount(group, filter)
|
|
260
262
|
}) : void 0,
|
|
@@ -296,7 +298,10 @@ function shouldRenderMentionGroupLabel(input) {
|
|
|
296
298
|
if (input.groupCount !== 1) {
|
|
297
299
|
return true;
|
|
298
300
|
}
|
|
299
|
-
|
|
301
|
+
if (input.groupId.startsWith("agent:")) {
|
|
302
|
+
return true;
|
|
303
|
+
}
|
|
304
|
+
return (input.groupLabel ?? agentMentionGroupLabel(input.groupId)) !== agentMentionFilterLabel(input.filter);
|
|
300
305
|
}
|
|
301
306
|
function agentMentionItemToRowItem(item) {
|
|
302
307
|
if (item.kind === "file") {
|
|
@@ -500,4 +505,4 @@ export {
|
|
|
500
505
|
AgentFileMentionPalette,
|
|
501
506
|
AgentContextMentionPalette
|
|
502
507
|
};
|
|
503
|
-
//# sourceMappingURL=chunk-
|
|
508
|
+
//# sourceMappingURL=chunk-P3CVAWGJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../agent-gui/agentGuiNode/AgentFileMentionPalette.tsx","../shared/roomIssueStatusLabel.ts"],"sourcesContent":["import {\n normalizeAgentActivityDisplayStatus,\n type AgentActivityDisplayStatus\n} from \"@tutti-os/agent-activity-core\";\nimport {\n MentionPaletteFromState,\n flattenMentionPaletteEntries,\n renderMentionRow,\n type MentionPaletteEntry,\n type MentionPaletteState,\n type MentionPaletteTheme,\n type MentionRowClassNames,\n type MentionRowItem,\n type MentionRowStatusTag,\n type MentionRowStatusTone\n} from \"@tutti-os/ui-rich-text/at-panel\";\nimport { resolveIssueManagerStatusPresentation } from \"@tutti-os/workspace-issue-manager/ui\";\nimport { userAvatarPlaceholderUrl } from \"../../shared/userAvatarPlaceholder\";\nimport { translate } from \"../../i18n/index\";\nimport { managedAgentRoundedIconUrl } from \"../../shared/managedAgentIcons\";\nimport { workspaceAgentActivityStatusLabel } from \"../../shared/workspaceAgentActivityStatusLabel\";\nimport { roomIssueStatusLabel } from \"../../shared/roomIssueStatusLabel\";\nimport {\n resolveAgentMentionFileThumbnailUrl,\n resolveAgentMentionFileVisualKind\n} from \"../shared/mentionFilePresentation\";\nimport {\n agentMentionEmptyGroupLabel,\n agentMentionFilterLabel,\n agentMentionGroupLabel\n} from \"./AgentMentionLabels\";\nimport {\n AGENT_MENTION_FILTER_TAB_ORDER,\n mentionGroupExpandCount\n} from \"./agentMentionSearchHelpers\";\nimport {\n type AgentMentionGroup,\n type AgentMentionBrowseCategory,\n type AgentMentionFilterId,\n type AgentMentionGroupId,\n type AgentMentionSearchState\n} from \"./AgentMentionSearchController\";\nimport { agentGeneratedMentionItemKey } from \"./agentMentionAgentGeneratedFilesPresentation\";\nimport type { AgentContextMentionItem } from \"./agentRichText/agentFileMentionExtension\";\nimport type { ReactNode } from \"react\";\n\nexport interface AgentMentionPaletteEntry {\n key: string;\n type: \"category\" | \"item\" | \"expand\";\n categoryId?: AgentMentionBrowseCategory[\"id\"];\n groupId?: AgentMentionGroupId;\n item?: AgentContextMentionItem;\n}\n\nexport interface AgentFileMentionPaletteProps {\n state: AgentMentionSearchState;\n highlightedKey: string | null;\n label: string;\n loadingLabel: string;\n emptyLabel: string;\n errorLabel: string;\n tabHintLabel: string;\n maxHeightPx: number;\n shouldCenterHighlightedItem?: boolean;\n onHighlightChange: (key: string) => void;\n onSelectItem: (entry: AgentContextMentionItem) => void;\n onSelectCategory: (categoryId: AgentMentionBrowseCategory[\"id\"]) => void;\n onSelectFilter: (filter: AgentMentionFilterId) => void;\n onExpandGroup: (groupId: AgentMentionGroupId) => void;\n onNavigateHierarchy?: (delta: 1 | -1) => void;\n onNavigateIntoItem?: (item: AgentContextMentionItem) => void;\n /**\n * 可选:点击 issue / app 行末尾的「查看产物」入口时回调(打开引用 picker 并定位)。\n * 仅 workspace-issue / workspace-app 行渲染该入口。\n */\n onOpenReferences?: (item: AgentContextMentionItem) => void;\n /** Controlled provenance filter supplied by the AgentGUI orchestration layer. */\n provenanceFilterControl?: ReactNode;\n}\n\nconst AGENT_MENTION_PALETTE_THEME: MentionPaletteTheme = {\n classNames: {\n palette: \"agent-gui-node__mention-palette\",\n header: \"agent-gui-node__mention-palette-header\",\n footer: \"agent-gui-node__mention-palette-footer\",\n tabs: \"agent-gui-node__mention-palette-tabs\",\n scrollRegion: \"agent-gui-node__mention-palette-scroll-region\",\n scrollbar:\n \"workspace-agents-status-panel__scrollbar agent-gui-node__mention-palette-scrollbar\",\n scrollbarThumb: \"workspace-agents-status-panel__scrollbar-thumb\",\n hint: \"agent-gui-node__mention-palette-hint\",\n hintItem: \"agent-gui-node__mention-palette-hint-item\",\n hintButton: \"agent-gui-node__mention-palette-hint-button\",\n hintSeparator: \"agent-gui-node__mention-palette-hint-separator\",\n shortcut: \"agent-gui-node__mention-palette-shortcut\",\n shortcutArrow: \"agent-gui-node__mention-palette-shortcut--arrow\",\n shortcutButton: \"agent-gui-node__mention-palette-shortcut-button\",\n shortcutGroup: \"agent-gui-node__mention-palette-shortcut-group\"\n },\n testIds: {\n emptyState: \"agent-gui-mention-palette-empty-state\",\n hint: \"agent-gui-mention-palette-hint\",\n scrollbar: \"agent-gui-mention-palette-scrollbar\",\n loadingSpinner: \"agent-mention-loading-spinner\"\n },\n groupDividerAttribute: \"data-agent-mention-group-divider\"\n};\n\n/**\n * The agent composer's existing structural row class names. Passing these to\n * {@link renderMentionRow} keeps the rendered DOM byte-identical to the\n * pre-refactor markup (the agent stylesheet `agentactivity.css` owns these\n * rules and the agent spec greps them), while the shared component defaults to\n * package-owned `rich-text-at-mention-*` names for other surfaces.\n */\nconst AGENT_MENTION_ROW_CLASS_NAMES: MentionRowClassNames = {\n fileIcon: \"agent-gui-node__mention-file-icon\",\n fileThumb: \"agent-gui-node__mention-file-thumb\",\n kindIcon: \"tsh-agent-object-token__kind-icon\",\n avatarImgUserPlaceholder:\n \"workspace-agents-status-panel__avatar-img--user-placeholder\"\n};\n\n/**\n * Stable per-item key suffix. The shared shell composes the full entry key as\n * `${group.id}:${agentMentionItemKey(item)}`, matching the agent's historical\n * `${group.id}:${item.kind}:${...}` format so highlight keys stay compatible.\n */\nexport function agentMentionItemKey(item: AgentContextMentionItem): string {\n return `${item.kind}:${\n item.kind === \"file\" ? agentGeneratedMentionItemKey(item) : item.targetId\n }`;\n}\n\nexport function flattenAgentMentionPaletteEntries(\n state: AgentMentionSearchState\n): AgentMentionPaletteEntry[] {\n return flattenMentionPaletteEntries(state, (item) =>\n agentMentionItemKey(item)\n ).map((entry: MentionPaletteEntry): AgentMentionPaletteEntry => {\n if (entry.type === \"item\") {\n const item =\n entry.groupId !== undefined && entry.itemIndex !== undefined\n ? state.groups.find((group) => group.id === entry.groupId)?.items[\n entry.itemIndex\n ]\n : undefined;\n return {\n key: entry.key,\n type: \"item\",\n groupId: entry.groupId as AgentMentionGroupId | undefined,\n item\n };\n }\n return {\n key: entry.key,\n type: entry.type,\n categoryId: entry.categoryId as AgentMentionFilterId | undefined,\n groupId: entry.groupId as AgentMentionGroupId | undefined\n };\n });\n}\n\nexport function groupStartKeys(state: AgentMentionSearchState): string[] {\n if (state.mode === \"browse\") {\n return state.categories.map((category) => `category:${category.id}`);\n }\n return state.groups\n .map((group) => {\n const firstItem = group.items[0];\n if (firstItem) {\n return `${group.id}:${agentMentionItemKey(firstItem)}`;\n }\n if (group.hasMore) {\n return `expand:${group.id}`;\n }\n return null;\n })\n .filter((key): key is string => key !== null);\n}\n\nexport function AgentFileMentionPalette({\n state,\n highlightedKey,\n label,\n loadingLabel,\n emptyLabel,\n errorLabel,\n tabHintLabel,\n maxHeightPx,\n shouldCenterHighlightedItem = false,\n onHighlightChange,\n onSelectItem,\n onSelectCategory,\n onSelectFilter,\n onExpandGroup,\n onNavigateHierarchy,\n onNavigateIntoItem,\n onOpenReferences,\n provenanceFilterControl\n}: AgentFileMentionPaletteProps): React.JSX.Element {\n \"use memo\";\n const openReferencesLabel = translate(\n \"agentHost.agentGui.mentionOpenReferences\"\n );\n const navigateIntoLabel = translate(\n \"agentHost.agentGui.fileMentionEnterFolder\"\n );\n const filter = state.filter as AgentMentionFilterId;\n const highlightedBrowseCategory = highlightedKey?.startsWith(\"category:\")\n ? highlightedKey.slice(\"category:\".length)\n : null;\n const showBrowseHint = shouldShowBrowseSearchHint({\n browseFilter: filter,\n groups: state.groups,\n highlightedBrowseCategory,\n mode: state.mode\n });\n\n // Browse mode carries its own category list (with labels); results mode tabs\n // are the fixed agent filter order. The shared shell renders a single tab\n // source, so resolve the right one here.\n const categories =\n state.mode === \"browse\"\n ? state.categories\n : AGENT_MENTION_FILTER_TAB_ORDER.map((id) => ({\n id,\n label: agentMentionFilterLabel(id)\n }));\n\n // When the agent wants the single keyboard browse hint we hand the shell an\n // empty group list so it renders its (keyboard-icon) empty state with our\n // computed hint copy. Otherwise we map the real groups, decorating each with\n // the agent-specific label / empty / expand / spacing chrome.\n const shellState: MentionPaletteState<AgentContextMentionItem> =\n showBrowseHint\n ? { ...state, categories, groups: [] }\n : {\n ...state,\n categories,\n groups: state.groups.map((group, index) =>\n decorateMentionGroup(\n group,\n index,\n state.groups,\n filter,\n state.query\n )\n )\n };\n\n const emptyLabelForShell = showBrowseHint\n ? browseHintForFilter(filter)\n : resolveMentionPaletteEmptyLabel({\n emptyLabel,\n filter,\n mode: state.mode,\n query: state.query\n });\n\n return (\n <MentionPaletteFromState<AgentContextMentionItem>\n state={shellState}\n highlightedKey={highlightedKey}\n getItemKey={agentMentionItemKey}\n renderItem={(item, { group }) =>\n renderMentionRow(agentMentionItemToRowItem(item), {\n classNames: AGENT_MENTION_ROW_CLASS_NAMES,\n dataAttributeMode: \"agent\",\n ...(onNavigateIntoItem && canNavigateIntoMentionItem(item, group)\n ? {\n onNavigateInto: () => onNavigateIntoItem(item),\n navigateIntoLabel\n }\n : {}),\n ...(onOpenReferences && isReferenceableMentionItem(item)\n ? {\n onOpenReferences: () => onOpenReferences(item),\n openReferencesLabel\n }\n : {})\n })\n }\n labels={{\n loading: loadingLabel,\n empty: emptyLabelForShell,\n error: errorLabel,\n tabHint: tabHintLabel,\n listbox: label\n }}\n hintLabels={{\n cycleFilter: translate(\"agentHost.agentGui.fileMentionSwitchCategory\"),\n moveSelection: translate(\n \"agentHost.agentGui.fileMentionSwitchSelection\"\n ),\n navigateHierarchy: translate(\n \"agentHost.agentGui.fileMentionNavigateHierarchy\"\n )\n }}\n maxHeightPx={maxHeightPx}\n headerActions={\n filter === \"session\" || filter === \"file\" || filter === \"issue\"\n ? provenanceFilterControl\n : undefined\n }\n scrollHighlightedIntoViewCentered={shouldCenterHighlightedItem}\n theme={AGENT_MENTION_PALETTE_THEME}\n callbacks={{\n onHighlightChange,\n onActiveCategoryIdChange: (categoryId) => {\n onSelectCategory(categoryId as AgentMentionBrowseCategory[\"id\"]);\n onSelectFilter(categoryId as AgentMentionFilterId);\n },\n onExpandGroup: (groupId) =>\n onExpandGroup(groupId as AgentMentionGroupId),\n onSelectItem\n }}\n onNavigateHierarchy={onNavigateHierarchy}\n />\n );\n}\n\nexport const AgentContextMentionPalette = AgentFileMentionPalette;\nexport type AgentContextMentionPaletteProps = AgentFileMentionPaletteProps;\n\n/**\n * Map a controller group onto the shared shell group, layering in the\n * agent-specific chrome the generic shell intentionally omits: translated\n * group / empty / expand labels, file-search chrome suppression, and the extra\n * top margin between the \"my sessions\" and \"collab sessions\" groups.\n */\nfunction decorateMentionGroup(\n group: AgentMentionGroup,\n index: number,\n groups: ReadonlyArray<AgentMentionGroup>,\n filter: AgentMentionFilterId,\n query: string\n): AgentMentionGroup {\n const groupId = group.id as AgentMentionGroupId;\n const suppressChrome = shouldSuppressFileSearchGroupChrome(filter, query);\n const followsMySessions =\n groupId === \"collab_sessions\" &&\n (groups[index - 1]?.id as AgentMentionGroupId) === \"my_sessions\";\n const showLabel = shouldRenderMentionGroupLabel({\n filter,\n groupCount: groups.length,\n groupId,\n groupLabel: group.label,\n query\n });\n const groupLabel = group.label ?? agentMentionGroupLabel(groupId);\n return {\n ...group,\n label: showLabel ? groupLabel : undefined,\n emptyLabel: suppressChrome\n ? undefined\n : (group.emptyLabel ?? agentMentionEmptyGroupLabel(groupId, query)),\n expandLabel: group.hasMore\n ? translate(\"agentHost.agentGui.contextPickerExpandMore\", {\n count: mentionGroupExpandCount(group, filter)\n })\n : undefined,\n expandLoadingLabel: translate(\n \"agentHost.agentGui.contextPickerLoadMoreLoading\"\n ),\n expandErrorLabel: translate(\n \"agentHost.agentGui.contextPickerLoadMoreRetry\"\n ),\n sectionClassName: followsMySessions ? \"mt-2\" : undefined,\n hideTopDivider: suppressChrome\n };\n}\n\nfunction shouldSuppressFileSearchGroupChrome(\n filter: AgentMentionFilterId,\n query: string\n): boolean {\n return filter === \"file\" && query.trim().length > 0;\n}\n\nfunction resolveMentionPaletteEmptyLabel(input: {\n emptyLabel: string;\n filter: AgentMentionFilterId;\n mode: AgentMentionSearchState[\"mode\"];\n query: string;\n}): string {\n if (\n input.mode === \"results\" &&\n input.filter === \"file\" &&\n input.query.trim().length > 0\n ) {\n return translate(\"agentHost.agentGui.mentionNoMatchingFiles\");\n }\n if (input.filter === \"session\") {\n return agentMentionEmptyGroupLabel(\"my_sessions\", input.query);\n }\n if (input.filter === \"app\") {\n return agentMentionEmptyGroupLabel(\"apps\", input.query);\n }\n if (input.filter === \"agent\") {\n return agentMentionEmptyGroupLabel(\"agents\", input.query);\n }\n if (input.filter === \"issue\") {\n return agentMentionEmptyGroupLabel(\"issues\", input.query);\n }\n return input.emptyLabel;\n}\n\nfunction shouldRenderMentionGroupLabel(input: {\n filter: AgentMentionFilterId;\n groupCount: number;\n groupId: AgentMentionGroupId;\n groupLabel?: string;\n query: string;\n}): boolean {\n if (shouldSuppressFileSearchGroupChrome(input.filter, input.query)) {\n return false;\n }\n if (input.groupCount !== 1) {\n return true;\n }\n if (input.groupId.startsWith(\"agent:\")) {\n return true;\n }\n return (\n (input.groupLabel ?? agentMentionGroupLabel(input.groupId)) !==\n agentMentionFilterLabel(input.filter)\n );\n}\n\n/**\n * Resolve an agent mention item into the shared, display-ready\n * {@link MentionRowItem} view-model the generic {@link renderMentionRow}\n * consumes. All agent-specific bits — i18n via {@link translate}, the user\n * avatar placeholder asset, the managed-agent rounded icon, and the activity /\n * issue status labels — are resolved here so the shared renderer stays pure.\n */\nfunction agentMentionItemToRowItem(\n item: AgentContextMentionItem\n): MentionRowItem {\n if (item.kind === \"file\") {\n const visualKind = resolveAgentMentionFileVisualKind({\n entryKind: item.entryKind,\n href: item.href,\n mentionNavigation: item.mentionNavigation,\n name: item.name,\n path: item.path\n });\n const childCountLabel =\n item.mentionNavigation === \"agent-generated-folder\" &&\n typeof item.childCount === \"number\" &&\n item.childCount > 0\n ? translate(\"agentHost.agentGui.mentionAgentGeneratedFolderFileCount\", {\n count: item.childCount\n })\n : null;\n return {\n kind: \"file\",\n name: item.name,\n visualKind,\n thumbnailUrl: resolveAgentMentionFileThumbnailUrl(item) ?? null,\n childCountLabel,\n entryKind: item.entryKind,\n mentionNavigation: item.mentionNavigation\n };\n }\n\n if (item.kind === \"session\") {\n const isMySession = item.scope === \"my_sessions\";\n return {\n kind: \"session\",\n participant: isMySession\n ? item.agentName\n : `${item.initiatorName} & ${item.agentName}`,\n summary: item.title,\n userAvatarUrl: isMySession ? null : (item.initiatorAvatarUrl ?? null),\n userAvatarPlaceholderUrl,\n agentIconUrl:\n item.agentIconUrl?.trim() ||\n managedAgentRoundedIconUrl(\n mentionSessionAgentProvider(item) ?? item.agentName\n ),\n showUserAvatar: !isMySession,\n statusTag: agentSessionStatusTag(item.status)\n };\n }\n\n if (item.kind === \"workspace-app\") {\n return {\n kind: \"app\",\n name: item.name,\n description: mentionDescriptionWithoutTerminalPeriod(item.description),\n iconUrl: item.iconUrl ?? null\n };\n }\n\n if (item.kind === \"agent-target\") {\n return {\n kind: \"app\",\n name: item.name,\n description: mentionDescriptionWithoutTerminalPeriod(item.description),\n iconUrl: item.iconUrl ?? managedAgentRoundedIconUrl(item.agentProviderId),\n statusTag: agentTargetAvailableStatusTag()\n };\n }\n\n if (item.kind === \"workspace-reference\") {\n return {\n kind: \"app\",\n name: item.name,\n description: null,\n iconUrl: item.iconUrl ?? null\n };\n }\n\n if (item.kind === \"workspace-app-factory\") {\n return {\n kind: \"app-factory\",\n name: item.name\n };\n }\n\n if (item.kind === \"custom\") {\n // 自定义 mention 只经 draftPrompt prefill 进入 composer,不出现在 @ 面板候选;\n // 兜底按通用条目展示(label 即注册方给的 name)。\n return {\n kind: \"issue\",\n title: item.name,\n creatorName: null,\n statusTag: null\n };\n }\n\n return {\n kind: \"issue\",\n title: item.title,\n creatorName: item.creatorName ?? null,\n statusTag: agentIssueStatusTag(item.status)\n };\n}\n\nfunction mentionDescriptionWithoutTerminalPeriod(\n description: string | null | undefined\n): string | null {\n const normalizedDescription = description?.trimEnd();\n return normalizedDescription\n ? normalizedDescription.replace(/[。.]+$/u, \"\")\n : null;\n}\n\n/**\n * 仅 workspace-issue 行,以及声明了能够提供产物文件(reference)的 workspace-app 行,\n * 才在行末尾展示「查看产物」入口。应用是否能提供产物文件由其 manifest 的\n * references 能力决定(`referencesListSupported`),而非硬编码应用名单。\n */\nfunction isReferenceableMentionItem(item: AgentContextMentionItem): boolean {\n if (item.kind === \"workspace-issue\") {\n return true;\n }\n if (item.kind === \"workspace-app\") {\n return item.referencesListSupported === true;\n }\n return false;\n}\n\nfunction canNavigateIntoMentionItem(\n item: AgentContextMentionItem,\n group: AgentMentionGroup\n): boolean {\n return (\n group.id === \"agent_generated_files\" &&\n item.kind === \"file\" &&\n item.mentionNavigation === \"agent-generated-folder\"\n );\n}\n\nfunction mentionSessionAgentProvider(\n item: Extract<AgentContextMentionItem, { kind: \"session\" }>\n): string | null {\n const queryStart = item.href.indexOf(\"?\");\n if (queryStart < 0) {\n return null;\n }\n return new URLSearchParams(item.href.slice(queryStart + 1)).get(\"provider\");\n}\n\nfunction agentSessionStatusTag(\n status: string | undefined\n): MentionRowStatusTag | null {\n if (!status) {\n return null;\n }\n const activityStatus = normalizeAgentActivityDisplayStatus(status);\n return {\n label: workspaceAgentActivityStatusLabel(activityStatus),\n tone: mentionStatusTone(activityStatus),\n pulse: activityStatus === \"working\" || activityStatus === \"waiting\",\n variant: \"activity\",\n dataStatus: activityStatus\n };\n}\n\n/**\n * Agent targets are only surfaced when the provider is ready/available, so the\n * `@` row always shows a green \"Available\" badge at its trailing edge.\n */\nfunction agentTargetAvailableStatusTag(): MentionRowStatusTag {\n return {\n label: translate(\"agentHost.agentGui.mentionAgentTargetAvailable\"),\n tone: \"green\",\n variant: \"activity\",\n dataStatus: \"available\"\n };\n}\n\nfunction agentIssueStatusTag(\n status: string | undefined\n): MentionRowStatusTag | null {\n if (!status) {\n return null;\n }\n const presentation = resolveIssueManagerStatusPresentation(status);\n return {\n label: roomIssueStatusLabel(status),\n tone: presentation.mentionTone,\n variant: \"issue\",\n dataStatus: presentation.dataStatus\n };\n}\n\nfunction mentionStatusTone(\n status: AgentActivityDisplayStatus\n): MentionRowStatusTone {\n if (status === \"working\") {\n return \"blue\";\n }\n if (status === \"waiting\" || status === \"canceled\") {\n return \"amber\";\n }\n if (status === \"completed\" || status === \"idle\") {\n return \"green\";\n }\n if (status === \"failed\") {\n return \"red\";\n }\n return \"neutral\";\n}\n\nfunction browseHintForFilter(filter: AgentMentionFilterId): string {\n switch (filter) {\n case \"agent\":\n return translate(\"agentHost.agentGui.contextPickerBrowseAgentHint\");\n case \"app\":\n return translate(\"agentHost.agentGui.contextPickerBrowseAppHint\");\n case \"file\":\n return translate(\"agentHost.agentGui.contextPickerBrowseFileHint\");\n case \"session\":\n return translate(\"agentHost.agentGui.contextPickerBrowseSessionHint\");\n case \"issue\":\n return translate(\"agentHost.agentGui.contextPickerBrowseIssueHint\");\n }\n}\n\nfunction hasInteractiveGroupEntries(\n groups: ReadonlyArray<AgentMentionGroup>\n): boolean {\n return groups.some((group) => group.items.length > 0 || group.hasMore);\n}\n\nfunction isFileBrowseGroupsOnlyEmpty(\n groups: ReadonlyArray<AgentMentionGroup>\n): boolean {\n const fileGroups = groups.filter(\n (group) =>\n group.id === \"opened_files\" || group.id === \"agent_generated_files\"\n );\n if (fileGroups.length === 0) {\n return false;\n }\n return fileGroups.every(\n (group) => group.items.length === 0 && !group.hasMore\n );\n}\n\nfunction shouldShowBrowseSearchHint(input: {\n browseFilter: AgentMentionFilterId;\n groups: ReadonlyArray<AgentMentionGroup>;\n highlightedBrowseCategory: string | null;\n mode: AgentMentionSearchState[\"mode\"];\n}): boolean {\n if (input.mode !== \"browse\" || hasInteractiveGroupEntries(input.groups)) {\n return false;\n }\n if (input.groups.length === 0) {\n return true;\n }\n if (\n input.highlightedBrowseCategory !== null &&\n input.highlightedBrowseCategory !== input.browseFilter\n ) {\n return true;\n }\n return (\n input.browseFilter === \"file\" && isFileBrowseGroupsOnlyEmpty(input.groups)\n );\n}\n","import { translate, type TranslateFn } from \"../i18n/index\";\n\nexport function roomIssueStatusLabel(status: string, t?: TranslateFn): string {\n const translateFn = t ?? translate;\n switch (status) {\n case \"not_started\":\n return translateFn(\"agentHost.roomIssueNode.issueStatusNotStarted\");\n case \"running\":\n return translateFn(\"agentHost.roomIssueNode.issueStatusRunning\");\n case \"in_progress\":\n return translateFn(\"agentHost.roomIssueNode.issueStatusInProgress\");\n case \"pending_acceptance\":\n return translateFn(\n \"agentHost.roomIssueNode.issueStatusPendingAcceptance\"\n );\n case \"completed\":\n return translateFn(\"agentHost.roomIssueNode.issueStatusCompleted\");\n case \"failed\":\n return translateFn(\"agentHost.roomIssueNode.issueStatusFailed\");\n case \"canceled\":\n return translateFn(\"agentHost.roomIssueNode.issueStatusCanceled\");\n default:\n return (\n status || translateFn(\"agentHost.roomIssueNode.issueStatusUnknown\")\n );\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -60,7 +60,7 @@ import {
|
|
|
60
60
|
toLocalShortDateTime,
|
|
61
61
|
updateAgentComposerDraft,
|
|
62
62
|
useProjectedAgentConversation
|
|
63
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-F7Q7QK42.js";
|
|
64
64
|
import {
|
|
65
65
|
agentRichTextContentToPromptText,
|
|
66
66
|
createAgentRichTextInputExtensions,
|
|
@@ -77,7 +77,7 @@ import {
|
|
|
77
77
|
import {
|
|
78
78
|
AgentFileMentionPalette,
|
|
79
79
|
agentMentionItemKey
|
|
80
|
-
} from "./chunk-
|
|
80
|
+
} from "./chunk-P3CVAWGJ.js";
|
|
81
81
|
import {
|
|
82
82
|
normalizeAgentGUIAgents,
|
|
83
83
|
projectAgentGUIAgentsToInternalTargets
|
|
@@ -88,7 +88,7 @@ import {
|
|
|
88
88
|
DEFAULT_AGENT_MENTION_FILTER,
|
|
89
89
|
agentGuiScheduler,
|
|
90
90
|
buildWorkspaceAgentActivityListViewModel
|
|
91
|
-
} from "./chunk-
|
|
91
|
+
} from "./chunk-BXOKBZH4.js";
|
|
92
92
|
import {
|
|
93
93
|
AGENT_RICH_TEXT_CARET_ANCHOR,
|
|
94
94
|
createAgentSessionMarkdownLink,
|
|
@@ -2218,7 +2218,7 @@ function projectWorkspaceAgentMessagesToTimelineItems(messages) {
|
|
|
2218
2218
|
occurredAtUnixMs
|
|
2219
2219
|
});
|
|
2220
2220
|
}
|
|
2221
|
-
if (kind === "text" && role === "user") {
|
|
2221
|
+
if ((kind === "text" || kind === "session_audit") && role === "user") {
|
|
2222
2222
|
return messageTimelineItem({
|
|
2223
2223
|
message,
|
|
2224
2224
|
id,
|
|
@@ -5866,6 +5866,7 @@ function useAgentGUIActivation({
|
|
|
5866
5866
|
...input.initialContent ? { content: input.initialContent } : {},
|
|
5867
5867
|
...input.cwd !== void 0 ? { cwd: input.cwd } : {},
|
|
5868
5868
|
expiresAtUnixMs: requestedAtUnixMs + ACTIVATION_EXPIRY_MS,
|
|
5869
|
+
...input.initialTurnExpected !== void 0 ? { initialTurnExpected: input.initialTurnExpected } : {},
|
|
5869
5870
|
...input.initialDisplayPrompt ? { initialDisplayPrompt: input.initialDisplayPrompt } : {},
|
|
5870
5871
|
...input.runtimeContent ? { runtimeContent: input.runtimeContent } : {},
|
|
5871
5872
|
...input.submitDiagnostics ? { submitDiagnostics: input.submitDiagnostics } : {},
|
|
@@ -8482,7 +8483,7 @@ function useAgentGUINewConversationActivation(input) {
|
|
|
8482
8483
|
isConversationStale
|
|
8483
8484
|
} = input;
|
|
8484
8485
|
const startConversation = useCallback14(
|
|
8485
|
-
(initialContentInput, displayPrompt, submitOptions) => {
|
|
8486
|
+
(initialContentInput, displayPrompt, submitOptions, initialTurnExpected) => {
|
|
8486
8487
|
const target = selectedAgentTargetRef.current;
|
|
8487
8488
|
const targetData = selectedComposerTargetDataRef.current;
|
|
8488
8489
|
if (target.disabled === true) {
|
|
@@ -8584,6 +8585,7 @@ function useAgentGUINewConversationActivation(input) {
|
|
|
8584
8585
|
clientSubmitId: submitTrace.clientSubmitId,
|
|
8585
8586
|
cwd: selectedProjectPath ?? "",
|
|
8586
8587
|
initialContent: normalizedInitialContent,
|
|
8588
|
+
...initialTurnExpected !== void 0 ? { initialTurnExpected } : {},
|
|
8587
8589
|
initialDisplayPrompt,
|
|
8588
8590
|
runtimeContent: toRuntimeSendContent(normalizedInitialContent),
|
|
8589
8591
|
submitDiagnostics: agentSubmitTraceDiagnostics(submitTrace),
|
|
@@ -8889,6 +8891,29 @@ function resolveAgentGUIInteractionTarget(interactions, requestId) {
|
|
|
8889
8891
|
}
|
|
8890
8892
|
|
|
8891
8893
|
// agent-gui/agentGuiNode/controller/useAgentGUISubmitInteractionActions.ts
|
|
8894
|
+
function typedGoalControlFromComposer(content, _displayPrompt) {
|
|
8895
|
+
if (content.length !== 1 || content[0]?.type !== "text") {
|
|
8896
|
+
return null;
|
|
8897
|
+
}
|
|
8898
|
+
const prompt = (content[0].text ?? "").trim();
|
|
8899
|
+
const match = /^\/goal(?:\s+([\s\S]+))?$/iu.exec(prompt);
|
|
8900
|
+
const args = match?.[1]?.trim() ?? "";
|
|
8901
|
+
if (!match || !args) {
|
|
8902
|
+
return null;
|
|
8903
|
+
}
|
|
8904
|
+
switch (args.toLowerCase()) {
|
|
8905
|
+
case "clear":
|
|
8906
|
+
case "reset":
|
|
8907
|
+
return { action: "clear" };
|
|
8908
|
+
case "pause":
|
|
8909
|
+
return { action: "pause" };
|
|
8910
|
+
case "resume":
|
|
8911
|
+
case "active":
|
|
8912
|
+
return { action: "resume" };
|
|
8913
|
+
default:
|
|
8914
|
+
return { action: "set", objective: args };
|
|
8915
|
+
}
|
|
8916
|
+
}
|
|
8892
8917
|
function useAgentGUISubmitInteractionActions(input) {
|
|
8893
8918
|
const {
|
|
8894
8919
|
activation,
|
|
@@ -9099,7 +9124,7 @@ function useAgentGUISubmitInteractionActions(input) {
|
|
|
9099
9124
|
[activation, executePrompt, isSessionMarkedNonResumable, workspaceId]
|
|
9100
9125
|
);
|
|
9101
9126
|
const goalControl = useCallback17(
|
|
9102
|
-
(action, objective) => {
|
|
9127
|
+
(action, objective, submittedDraftScopeKey) => {
|
|
9103
9128
|
if (previewMode) {
|
|
9104
9129
|
return;
|
|
9105
9130
|
}
|
|
@@ -9107,6 +9132,13 @@ function useAgentGUISubmitInteractionActions(input) {
|
|
|
9107
9132
|
if (!agentSessionId) {
|
|
9108
9133
|
return;
|
|
9109
9134
|
}
|
|
9135
|
+
const submittedDraftSnapshot = submittedDraftScopeKey ? {
|
|
9136
|
+
sourceScopeKey: submittedDraftScopeKey,
|
|
9137
|
+
content: snapshotAgentComposerDraft(
|
|
9138
|
+
draftByScopeKeyRef.current[submittedDraftScopeKey] ?? emptyAgentComposerDraft()
|
|
9139
|
+
),
|
|
9140
|
+
targetAgentSessionId: agentSessionId
|
|
9141
|
+
} : null;
|
|
9110
9142
|
setDetailError(null);
|
|
9111
9143
|
void agentActivityRuntime.goalControl({
|
|
9112
9144
|
workspaceId,
|
|
@@ -9114,6 +9146,16 @@ function useAgentGUISubmitInteractionActions(input) {
|
|
|
9114
9146
|
action,
|
|
9115
9147
|
...objective !== void 0 ? { objective } : {}
|
|
9116
9148
|
}).then(() => {
|
|
9149
|
+
if (submittedDraftSnapshot) {
|
|
9150
|
+
setDraftByScopeKey((current) => {
|
|
9151
|
+
const next = clearSubmittedDraftIfUnchanged({
|
|
9152
|
+
drafts: current,
|
|
9153
|
+
snapshot: submittedDraftSnapshot
|
|
9154
|
+
});
|
|
9155
|
+
draftByScopeKeyRef.current = next;
|
|
9156
|
+
return next;
|
|
9157
|
+
});
|
|
9158
|
+
}
|
|
9117
9159
|
if (action !== "clear" || !isCurrentConversation(agentSessionId)) {
|
|
9118
9160
|
return;
|
|
9119
9161
|
}
|
|
@@ -9129,6 +9171,7 @@ function useAgentGUISubmitInteractionActions(input) {
|
|
|
9129
9171
|
agentActivityRuntime,
|
|
9130
9172
|
isCurrentConversation,
|
|
9131
9173
|
previewMode,
|
|
9174
|
+
setDraftByScopeKey,
|
|
9132
9175
|
setDetailError,
|
|
9133
9176
|
setGoalClearNoticeSequence,
|
|
9134
9177
|
workspaceId
|
|
@@ -9145,6 +9188,10 @@ function useAgentGUISubmitInteractionActions(input) {
|
|
|
9145
9188
|
return;
|
|
9146
9189
|
}
|
|
9147
9190
|
const displayPromptText = displayPrompt && displayPrompt.trim() ? displayPrompt : void 0;
|
|
9191
|
+
const typedGoal = typedGoalControlFromComposer(
|
|
9192
|
+
normalizedContent,
|
|
9193
|
+
displayPromptText
|
|
9194
|
+
);
|
|
9148
9195
|
if (!promptImagesSupported && agentPromptContentHasImage(normalizedContent)) {
|
|
9149
9196
|
setDetailError(translate("agentHost.agentGui.promptImagesUnsupported"));
|
|
9150
9197
|
return;
|
|
@@ -9179,6 +9226,14 @@ function useAgentGUISubmitInteractionActions(input) {
|
|
|
9179
9226
|
setActiveConversationId(recoveredAgentSessionId);
|
|
9180
9227
|
setIntent({ tag: "active", id: recoveredAgentSessionId });
|
|
9181
9228
|
persistActiveConversation(recoveredAgentSessionId);
|
|
9229
|
+
if (typedGoal) {
|
|
9230
|
+
goalControl(
|
|
9231
|
+
typedGoal.action,
|
|
9232
|
+
typedGoal.objective,
|
|
9233
|
+
resolveAgentComposerDraftScopeKey({})
|
|
9234
|
+
);
|
|
9235
|
+
return;
|
|
9236
|
+
}
|
|
9182
9237
|
submitExistingPrompt(
|
|
9183
9238
|
recoveredAgentSessionId,
|
|
9184
9239
|
normalizedContent,
|
|
@@ -9199,7 +9254,8 @@ function useAgentGUISubmitInteractionActions(input) {
|
|
|
9199
9254
|
const activationResult = startConversation(
|
|
9200
9255
|
normalizedContent,
|
|
9201
9256
|
displayPromptText,
|
|
9202
|
-
options
|
|
9257
|
+
options,
|
|
9258
|
+
typedGoal ? false : void 0
|
|
9203
9259
|
);
|
|
9204
9260
|
if (activationResult) {
|
|
9205
9261
|
draftByScopeKeyRef.current = clearSubmittedAgentGUIHomeDraft({
|
|
@@ -9217,6 +9273,14 @@ function useAgentGUISubmitInteractionActions(input) {
|
|
|
9217
9273
|
}
|
|
9218
9274
|
return;
|
|
9219
9275
|
}
|
|
9276
|
+
if (typedGoal) {
|
|
9277
|
+
goalControl(
|
|
9278
|
+
typedGoal.action,
|
|
9279
|
+
typedGoal.objective,
|
|
9280
|
+
resolveAgentComposerDraftScopeKey({ agentSessionId })
|
|
9281
|
+
);
|
|
9282
|
+
return;
|
|
9283
|
+
}
|
|
9220
9284
|
submitExistingPrompt(
|
|
9221
9285
|
agentSessionId,
|
|
9222
9286
|
normalizedContent,
|
|
@@ -9232,6 +9296,7 @@ function useAgentGUISubmitInteractionActions(input) {
|
|
|
9232
9296
|
conversationListQuery,
|
|
9233
9297
|
previewMode,
|
|
9234
9298
|
promptImagesSupported,
|
|
9299
|
+
goalControl,
|
|
9235
9300
|
persistActiveConversation,
|
|
9236
9301
|
startConversation,
|
|
9237
9302
|
submitExistingPrompt,
|
|
@@ -12776,6 +12841,7 @@ var styles = {
|
|
|
12776
12841
|
composerQueuedPromptActions: "agent-gui-node__composer-queued-prompt-actions",
|
|
12777
12842
|
composerReferenceTrigger: "agent-gui-node__composer-reference-trigger",
|
|
12778
12843
|
composerSendButton: "agent-gui-node__composer-send-button",
|
|
12844
|
+
composerStopButton: "agent-gui-node__composer-stop-button",
|
|
12779
12845
|
composerSelect: "agent-gui-node__composer-select",
|
|
12780
12846
|
composerTextarea: "agent-gui-node__composer-textarea",
|
|
12781
12847
|
composerToggle: "agent-gui-node__composer-toggle",
|
|
@@ -13039,7 +13105,7 @@ function AgentProbeUsageFreshness({
|
|
|
13039
13105
|
type: "button",
|
|
13040
13106
|
"data-testid": testId,
|
|
13041
13107
|
"data-state": isLoading ? "loading" : didFail ? "failed" : "idle",
|
|
13042
|
-
className: `nodrag inline-flex shrink-0 cursor-pointer items-center gap-1 rounded-[5px] px-1 py-0.5 text-[11px] leading-4 transition-colors
|
|
13108
|
+
className: `nodrag inline-flex shrink-0 cursor-pointer items-center gap-1 rounded-[5px] px-1 py-0.5 text-[11px] leading-4 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--border-focus)] disabled:cursor-default disabled:opacity-70 [-webkit-app-region:no-drag] ${stateClassName}`,
|
|
13043
13109
|
onClick: handleClick,
|
|
13044
13110
|
disabled: isLoading || disabled,
|
|
13045
13111
|
"aria-label": labels.refreshAria,
|
|
@@ -13387,6 +13453,7 @@ function AgentGUIConfigMenu({
|
|
|
13387
13453
|
slashStatusUsageCapturedAtUnixMs,
|
|
13388
13454
|
slashStatusUsageDidFail,
|
|
13389
13455
|
slashStatusUsageAttempted,
|
|
13456
|
+
provider,
|
|
13390
13457
|
providerAuthAccountLabel,
|
|
13391
13458
|
onAgentConfigMenuOpen,
|
|
13392
13459
|
onAgentUsageRefresh,
|
|
@@ -13395,6 +13462,9 @@ function AgentGUIConfigMenu({
|
|
|
13395
13462
|
onOpenAgentSettings
|
|
13396
13463
|
}) {
|
|
13397
13464
|
const [open, setOpen] = useState9(false);
|
|
13465
|
+
const providerFlatIconUrl = resolveAgentGuiSessionProviderFlatIconUrl(
|
|
13466
|
+
provider ?? void 0
|
|
13467
|
+
);
|
|
13398
13468
|
return /* @__PURE__ */ jsxs8(
|
|
13399
13469
|
Popover,
|
|
13400
13470
|
{
|
|
@@ -13424,10 +13494,23 @@ function AgentGUIConfigMenu({
|
|
|
13424
13494
|
align: "end",
|
|
13425
13495
|
className: "w-[300px] max-w-[calc(100vw-32px)] gap-3 p-1 text-xs",
|
|
13426
13496
|
"data-testid": "agent-gui-config-menu",
|
|
13427
|
-
children: /* @__PURE__ */ jsxs8("div", { className: "flex min-w-0 flex-col gap-
|
|
13497
|
+
children: /* @__PURE__ */ jsxs8("div", { className: "flex min-w-0 flex-col gap-1", children: [
|
|
13428
13498
|
providerScopedActionsVisible && providerAuthAccountLabel ? /* @__PURE__ */ jsxs8(Fragment2, { children: [
|
|
13429
13499
|
/* @__PURE__ */ jsxs8("div", { className: "flex min-w-0 flex-col gap-2 p-2", children: [
|
|
13430
|
-
/* @__PURE__ */
|
|
13500
|
+
/* @__PURE__ */ jsxs8("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
13501
|
+
providerFlatIconUrl ? /* @__PURE__ */ jsx15(
|
|
13502
|
+
"span",
|
|
13503
|
+
{
|
|
13504
|
+
"aria-hidden": "true",
|
|
13505
|
+
className: "size-4 shrink-0 bg-current",
|
|
13506
|
+
style: {
|
|
13507
|
+
mask: `url("${providerFlatIconUrl}") center / contain no-repeat`,
|
|
13508
|
+
WebkitMask: `url("${providerFlatIconUrl}") center / contain no-repeat`
|
|
13509
|
+
}
|
|
13510
|
+
}
|
|
13511
|
+
) : null,
|
|
13512
|
+
/* @__PURE__ */ jsx15("span", { className: "text-[13px] font-semibold leading-4", children: labels.slashStatusAccount })
|
|
13513
|
+
] }),
|
|
13431
13514
|
/* @__PURE__ */ jsx15("span", { className: "text-[13px] leading-5 text-[var(--text-secondary)]", children: providerAuthAccountLabel })
|
|
13432
13515
|
] }),
|
|
13433
13516
|
slashStatusLimits.length > 0 || slashStatusUsageAttempted || slashStatusLimitsLoading ? /* @__PURE__ */ jsx15("div", { className: "px-2", children: /* @__PURE__ */ jsx15("span", { className: "block h-px bg-[var(--border-1)]" }) }) : null
|
|
@@ -16417,6 +16500,20 @@ function useComposerLayout({
|
|
|
16417
16500
|
isHeroLayout,
|
|
16418
16501
|
paletteDraftPrompt
|
|
16419
16502
|
]);
|
|
16503
|
+
const composerStyle = useMemo20(
|
|
16504
|
+
() => isHeroLayout ? void 0 : {
|
|
16505
|
+
// The dock keeps only the collapsed 56px input row in flow; a
|
|
16506
|
+
// growing draft overhangs upward past the composer's top edge.
|
|
16507
|
+
// Floating panels anchored to that edge (queued prompts, the
|
|
16508
|
+
// interactive prompt) read this var to stay above the grown input
|
|
16509
|
+
// instead of being covered by it.
|
|
16510
|
+
"--agent-gui-composer-input-overflow": `${Math.max(
|
|
16511
|
+
0,
|
|
16512
|
+
dockComposerInputHeight - DOCK_COMPOSER_INPUT_MIN_HEIGHT
|
|
16513
|
+
)}px`
|
|
16514
|
+
},
|
|
16515
|
+
[dockComposerInputHeight, isHeroLayout]
|
|
16516
|
+
);
|
|
16420
16517
|
const inputShellStyle = useMemo20(
|
|
16421
16518
|
() => showFileMentionPalette || showFloatingCommandMenu ? { zIndex: COMPOSER_PALETTE_Z_INDEX } : void 0,
|
|
16422
16519
|
[showFileMentionPalette, showFloatingCommandMenu]
|
|
@@ -16442,6 +16539,7 @@ function useComposerLayout({
|
|
|
16442
16539
|
return {
|
|
16443
16540
|
activePromptTip,
|
|
16444
16541
|
activePromptTipText,
|
|
16542
|
+
composerStyle,
|
|
16445
16543
|
inputShellStyle,
|
|
16446
16544
|
promptInputAreaStyle,
|
|
16447
16545
|
promptTipStyle,
|
|
@@ -18727,7 +18825,7 @@ function useComposerPresentation(input) {
|
|
|
18727
18825
|
"button",
|
|
18728
18826
|
{
|
|
18729
18827
|
type: "button",
|
|
18730
|
-
className:
|
|
18828
|
+
className: `${AgentGUINode_styles_default.composerStopButton} relative inline-flex size-7 shrink-0 items-center justify-center rounded-full border border-transparent bg-transparent p-0 text-[var(--text-primary)] transition-[color,opacity] duration-150 hover:bg-transparent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[color:color-mix(in_srgb,var(--text-primary)_34%,transparent)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--background-panel)] active:bg-transparent disabled:cursor-not-allowed disabled:opacity-45`,
|
|
18731
18829
|
disabled: isInterrupting,
|
|
18732
18830
|
"aria-label": isInterrupting ? labels.stopping : labels.stop,
|
|
18733
18831
|
title: isInterrupting ? labels.stopping : labels.stop,
|
|
@@ -19291,36 +19389,45 @@ function AgentQueuedPromptPanel({
|
|
|
19291
19389
|
);
|
|
19292
19390
|
}) }) : null
|
|
19293
19391
|
] }) }),
|
|
19294
|
-
/* @__PURE__ */
|
|
19295
|
-
/* @__PURE__ */
|
|
19296
|
-
|
|
19297
|
-
{
|
|
19298
|
-
"aria-label": labels.sendQueuedPromptNext,
|
|
19299
|
-
disabled: isDraining,
|
|
19300
|
-
onClick: () => onSendQueuedPromptNext(queuedPrompt.id),
|
|
19301
|
-
children: /* @__PURE__ */ jsx24(CanvasNodeGuideLinedIcon, { "aria-hidden": "true" })
|
|
19302
|
-
}
|
|
19303
|
-
),
|
|
19304
|
-
/* @__PURE__ */ jsx24(
|
|
19305
|
-
CanvasNodeGhostIconButton,
|
|
19306
|
-
{
|
|
19307
|
-
"aria-label": labels.deleteQueuedPrompt,
|
|
19308
|
-
disabled: isDraining,
|
|
19309
|
-
onClick: () => onRemoveQueuedPrompt(queuedPrompt.id),
|
|
19310
|
-
children: /* @__PURE__ */ jsx24(CanvasNodeTrashLinedIcon, { "aria-hidden": "true" })
|
|
19311
|
-
}
|
|
19312
|
-
),
|
|
19313
|
-
/* @__PURE__ */ jsxs17(DropdownMenu2, { children: [
|
|
19314
|
-
/* @__PURE__ */ jsx24(DropdownMenuTrigger2, { asChild: true, children: /* @__PURE__ */ jsx24(
|
|
19392
|
+
/* @__PURE__ */ jsx24("div", { className: AgentGUINode_styles_default.composerQueuedPromptActions, children: /* @__PURE__ */ jsxs17(TooltipProvider, { delayDuration: 200, children: [
|
|
19393
|
+
/* @__PURE__ */ jsxs17(Tooltip, { children: [
|
|
19394
|
+
/* @__PURE__ */ jsx24(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx24(
|
|
19315
19395
|
CanvasNodeGhostIconButton,
|
|
19316
19396
|
{
|
|
19317
|
-
"aria-label": labels.
|
|
19397
|
+
"aria-label": labels.sendQueuedPromptNext,
|
|
19318
19398
|
disabled: isDraining,
|
|
19319
|
-
|
|
19320
|
-
|
|
19321
|
-
children: /* @__PURE__ */ jsx24(CanvasNodeMoreLinedIcon, { "aria-hidden": "true" })
|
|
19399
|
+
onClick: () => onSendQueuedPromptNext(queuedPrompt.id),
|
|
19400
|
+
children: /* @__PURE__ */ jsx24(CanvasNodeGuideLinedIcon, { "aria-hidden": "true" })
|
|
19322
19401
|
}
|
|
19323
19402
|
) }),
|
|
19403
|
+
/* @__PURE__ */ jsx24(TooltipContent, { children: labels.sendQueuedPromptNext })
|
|
19404
|
+
] }),
|
|
19405
|
+
/* @__PURE__ */ jsxs17(Tooltip, { children: [
|
|
19406
|
+
/* @__PURE__ */ jsx24(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx24(
|
|
19407
|
+
CanvasNodeGhostIconButton,
|
|
19408
|
+
{
|
|
19409
|
+
"aria-label": labels.deleteQueuedPrompt,
|
|
19410
|
+
disabled: isDraining,
|
|
19411
|
+
onClick: () => onRemoveQueuedPrompt(queuedPrompt.id),
|
|
19412
|
+
children: /* @__PURE__ */ jsx24(CanvasNodeTrashLinedIcon, { "aria-hidden": "true" })
|
|
19413
|
+
}
|
|
19414
|
+
) }),
|
|
19415
|
+
/* @__PURE__ */ jsx24(TooltipContent, { children: labels.deleteQueuedPrompt })
|
|
19416
|
+
] }),
|
|
19417
|
+
/* @__PURE__ */ jsxs17(DropdownMenu2, { children: [
|
|
19418
|
+
/* @__PURE__ */ jsxs17(Tooltip, { children: [
|
|
19419
|
+
/* @__PURE__ */ jsx24(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx24(DropdownMenuTrigger2, { asChild: true, children: /* @__PURE__ */ jsx24(
|
|
19420
|
+
CanvasNodeGhostIconButton,
|
|
19421
|
+
{
|
|
19422
|
+
"aria-label": labels.queuedPromptMoreActions,
|
|
19423
|
+
disabled: isDraining,
|
|
19424
|
+
stopsEventPropagation: false,
|
|
19425
|
+
onClick: (event) => event.stopPropagation(),
|
|
19426
|
+
children: /* @__PURE__ */ jsx24(CanvasNodeMoreLinedIcon, { "aria-hidden": "true" })
|
|
19427
|
+
}
|
|
19428
|
+
) }) }),
|
|
19429
|
+
/* @__PURE__ */ jsx24(TooltipContent, { children: labels.queuedPromptMoreActions })
|
|
19430
|
+
] }),
|
|
19324
19431
|
/* @__PURE__ */ jsx24(
|
|
19325
19432
|
DropdownMenuContent2,
|
|
19326
19433
|
{
|
|
@@ -19347,7 +19454,7 @@ function AgentQueuedPromptPanel({
|
|
|
19347
19454
|
}
|
|
19348
19455
|
)
|
|
19349
19456
|
] })
|
|
19350
|
-
] })
|
|
19457
|
+
] }) })
|
|
19351
19458
|
]
|
|
19352
19459
|
},
|
|
19353
19460
|
queuedPrompt.id
|
|
@@ -23392,6 +23499,7 @@ function AgentComposerView(input) {
|
|
|
23392
23499
|
const {
|
|
23393
23500
|
activePromptTip,
|
|
23394
23501
|
activePromptTipText,
|
|
23502
|
+
composerStyle,
|
|
23395
23503
|
inputShellStyle,
|
|
23396
23504
|
promptInputAreaStyle,
|
|
23397
23505
|
showEdgeGlow,
|
|
@@ -23416,6 +23524,7 @@ function AgentComposerView(input) {
|
|
|
23416
23524
|
ref: input.composerRef,
|
|
23417
23525
|
className: composerClassName,
|
|
23418
23526
|
"data-layout": layoutMode,
|
|
23527
|
+
style: composerStyle,
|
|
23419
23528
|
onSubmit: submit,
|
|
23420
23529
|
children: [
|
|
23421
23530
|
fileDropOverlay,
|
|
@@ -24081,6 +24190,9 @@ function AgentComposer(props) {
|
|
|
24081
24190
|
const controller = new AgentMentionSearchController({
|
|
24082
24191
|
contextMentionProviders
|
|
24083
24192
|
});
|
|
24193
|
+
controller.setProvenanceCatalog(
|
|
24194
|
+
referenceProvenanceFilter?.snapshot.catalog ?? null
|
|
24195
|
+
);
|
|
24084
24196
|
controller.setProvenanceFilter(
|
|
24085
24197
|
referenceProvenanceFilter?.snapshot.value ?? null
|
|
24086
24198
|
);
|
|
@@ -24108,10 +24220,16 @@ function AgentComposer(props) {
|
|
|
24108
24220
|
}
|
|
24109
24221
|
}, [draftContent, draftPrompt, goalDraftObjective]);
|
|
24110
24222
|
useEffect28(() => {
|
|
24223
|
+
mentionControllerRef.current?.setProvenanceCatalog(
|
|
24224
|
+
referenceProvenanceFilter?.snapshot.catalog ?? null
|
|
24225
|
+
);
|
|
24111
24226
|
mentionControllerRef.current?.setProvenanceFilter(
|
|
24112
24227
|
referenceProvenanceFilter?.snapshot.value ?? null
|
|
24113
24228
|
);
|
|
24114
|
-
}, [
|
|
24229
|
+
}, [
|
|
24230
|
+
referenceProvenanceFilter?.snapshot.catalog,
|
|
24231
|
+
referenceProvenanceFilter?.snapshot.value
|
|
24232
|
+
]);
|
|
24115
24233
|
useEffect28(() => {
|
|
24116
24234
|
if (previousSlashStatusAgentSessionIdRef.current === slashStatusAgentSessionId) {
|
|
24117
24235
|
return;
|
|
@@ -32657,6 +32775,7 @@ function AgentGUINodeView({
|
|
|
32657
32775
|
slashStatusUsageCapturedAtUnixMs,
|
|
32658
32776
|
slashStatusUsageDidFail,
|
|
32659
32777
|
slashStatusUsageAttempted,
|
|
32778
|
+
provider: effectiveRailConfigProvider,
|
|
32660
32779
|
providerAuthAccountLabel: effectiveProviderAuthAccountLabel,
|
|
32661
32780
|
onAgentConfigMenuOpen,
|
|
32662
32781
|
onAgentUsageRefresh,
|
|
@@ -34652,4 +34771,4 @@ export {
|
|
|
34652
34771
|
resolveAgentGUIAgentTarget,
|
|
34653
34772
|
AgentGUI
|
|
34654
34773
|
};
|
|
34655
|
-
//# sourceMappingURL=chunk-
|
|
34774
|
+
//# sourceMappingURL=chunk-ZWY32ZKZ.js.map
|