@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.
@@ -5,7 +5,7 @@ import {
5
5
  agentMentionFilterLabel,
6
6
  agentMentionGroupLabel,
7
7
  mentionGroupExpandCount
8
- } from "./chunk-JG7HGKZL.js";
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 ? groupId.startsWith("issue-topic:") ? group.label : agentMentionGroupLabel(groupId) : void 0,
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
- return agentMentionGroupLabel(input.groupId) !== agentMentionFilterLabel(input.filter);
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-6R7GHXRQ.js.map
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-IR2CL2X2.js";
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-6R7GHXRQ.js";
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-JG7HGKZL.js";
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 hover:bg-[var(--transparency-hover)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--border-focus)] disabled:cursor-default disabled:opacity-70 disabled:hover:bg-transparent [-webkit-app-region:no-drag] ${stateClassName}`,
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-3", children: [
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__ */ jsx15("span", { className: "text-[13px] font-semibold leading-4", children: labels.slashStatusAccount }),
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: "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",
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__ */ jsxs17("div", { className: AgentGUINode_styles_default.composerQueuedPromptActions, children: [
19295
- /* @__PURE__ */ jsx24(
19296
- CanvasNodeGhostIconButton,
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.queuedPromptMoreActions,
19397
+ "aria-label": labels.sendQueuedPromptNext,
19318
19398
  disabled: isDraining,
19319
- stopsEventPropagation: false,
19320
- onClick: (event) => event.stopPropagation(),
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
- }, [referenceProvenanceFilter?.snapshot.value]);
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-N3HTEYLZ.js.map
34774
+ //# sourceMappingURL=chunk-ZWY32ZKZ.js.map