@tutti-os/agent-gui 0.0.124 → 0.0.126
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/{AgentGUI-D-Ktaq3h.d.ts → AgentGUI-CKk3WQrn.d.ts} +3 -1
- package/dist/{AgentRichTextReadonly-ZWKC3FJE.js → AgentRichTextReadonly-KOUZGF5Q.js} +5 -5
- package/dist/agent-conversation/index.js +7 -7
- package/dist/agent-gui.d.ts +3 -2
- package/dist/agent-gui.js +15 -15
- package/dist/agent-message-center/index.js +6 -6
- package/dist/{agentFileMentionContracts-DY4Z70CN.d.ts → agentFileMentionContracts-CWAeuL7S.d.ts} +1 -1
- package/dist/{chunk-OKGXHKJ2.js → chunk-2JFMGOHU.js} +2 -2
- package/dist/{chunk-KACVD2GZ.js → chunk-2ZVXN2Z7.js} +5 -5
- package/dist/chunk-2ZVXN2Z7.js.map +1 -0
- package/dist/{chunk-XXACYFIR.js → chunk-4CACBXIB.js} +2 -2
- package/dist/{chunk-ZCNZ53CF.js → chunk-6RMVLH3G.js} +2 -2
- package/dist/{chunk-WEHEJ25P.js → chunk-ADQENNSG.js} +53 -61
- package/dist/chunk-ADQENNSG.js.map +1 -0
- package/dist/{chunk-C3IGPKCP.js → chunk-BDWZUA3L.js} +10 -9
- package/dist/chunk-BDWZUA3L.js.map +1 -0
- package/dist/{chunk-3XS6P7BA.js → chunk-CO6XO5A2.js} +5 -5
- package/dist/{chunk-6NUOJ6PS.js → chunk-F2Z7P7BB.js} +4 -4
- package/dist/{chunk-DXIL75XS.js → chunk-G3XB4FAQ.js} +3 -3
- package/dist/{chunk-2EH3KOJV.js → chunk-PRE4IT6E.js} +170 -18
- package/dist/chunk-PRE4IT6E.js.map +1 -0
- package/dist/{chunk-NWPGWLWP.js → chunk-QDNOOAAS.js} +21 -57
- package/dist/chunk-QDNOOAAS.js.map +1 -0
- package/dist/{chunk-PPOCDOYZ.js → chunk-QWKJ646Z.js} +176 -145
- package/dist/chunk-QWKJ646Z.js.map +1 -0
- package/dist/{chunk-RQDDJHEO.js → chunk-RB6ZYQBA.js} +2 -2
- package/dist/{chunk-JM24HADP.js → chunk-RMQREVJY.js} +1 -1
- package/dist/chunk-RMQREVJY.js.map +1 -0
- package/dist/{chunk-RN7DI3Y2.js → chunk-X22KJXVG.js} +2 -2
- package/dist/context-mention-palette/index.d.ts +1 -1
- package/dist/context-mention-palette/index.js +8 -8
- package/dist/context-mention-provider.d.ts +15 -2
- package/dist/context-mention-provider.js +1 -1
- package/dist/i18n/index.d.ts +4 -4
- package/dist/i18n/index.js +2 -2
- package/dist/index.d.ts +4 -3
- package/dist/index.js +15 -15
- package/dist/mention-search.d.ts +8 -3
- package/dist/mention-search.js +6 -6
- package/dist/workbench/contribution.js +3 -3
- package/dist/workbench/index.js +3 -3
- package/dist/workbench/sessionTitle.js +2 -2
- package/package.json +14 -14
- package/dist/chunk-2EH3KOJV.js.map +0 -1
- package/dist/chunk-C3IGPKCP.js.map +0 -1
- package/dist/chunk-JM24HADP.js.map +0 -1
- package/dist/chunk-KACVD2GZ.js.map +0 -1
- package/dist/chunk-NWPGWLWP.js.map +0 -1
- package/dist/chunk-PPOCDOYZ.js.map +0 -1
- package/dist/chunk-WEHEJ25P.js.map +0 -1
- /package/dist/{AgentRichTextReadonly-ZWKC3FJE.js.map → AgentRichTextReadonly-KOUZGF5Q.js.map} +0 -0
- /package/dist/{chunk-OKGXHKJ2.js.map → chunk-2JFMGOHU.js.map} +0 -0
- /package/dist/{chunk-XXACYFIR.js.map → chunk-4CACBXIB.js.map} +0 -0
- /package/dist/{chunk-ZCNZ53CF.js.map → chunk-6RMVLH3G.js.map} +0 -0
- /package/dist/{chunk-3XS6P7BA.js.map → chunk-CO6XO5A2.js.map} +0 -0
- /package/dist/{chunk-6NUOJ6PS.js.map → chunk-F2Z7P7BB.js.map} +0 -0
- /package/dist/{chunk-DXIL75XS.js.map → chunk-G3XB4FAQ.js.map} +0 -0
- /package/dist/{chunk-RQDDJHEO.js.map → chunk-RB6ZYQBA.js.map} +0 -0
- /package/dist/{chunk-RN7DI3Y2.js.map → chunk-X22KJXVG.js.map} +0 -0
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
agentMentionFilterLabel,
|
|
6
6
|
agentMentionGroupLabel,
|
|
7
7
|
mentionGroupExpandCount
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-PRE4IT6E.js";
|
|
9
9
|
import {
|
|
10
10
|
resolveAgentMentionFileThumbnailUrl,
|
|
11
11
|
resolveAgentMentionFileVisualKind
|
|
@@ -13,13 +13,13 @@ import {
|
|
|
13
13
|
import {
|
|
14
14
|
userAvatarPlaceholderUrl,
|
|
15
15
|
workspaceAgentActivityStatusLabel
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-4CACBXIB.js";
|
|
17
17
|
import {
|
|
18
18
|
managedAgentRoundedIconUrl
|
|
19
19
|
} from "./chunk-EDNJMG5T.js";
|
|
20
20
|
import {
|
|
21
21
|
translate
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-6RMVLH3G.js";
|
|
23
23
|
|
|
24
24
|
// agent-gui/agentGuiNode/AgentFileMentionPalette.tsx
|
|
25
25
|
import {
|
|
@@ -202,10 +202,10 @@ function AgentFileMentionPalette({
|
|
|
202
202
|
highlightedKey,
|
|
203
203
|
getItemKey: agentMentionItemKey,
|
|
204
204
|
isItemDisabled: isAgentMentionItemDisabled,
|
|
205
|
-
renderItem: (item
|
|
205
|
+
renderItem: (item) => renderMentionRow(agentMentionItemToRowItem(item), {
|
|
206
206
|
classNames: AGENT_MENTION_ROW_CLASS_NAMES,
|
|
207
207
|
dataAttributeMode: "agent",
|
|
208
|
-
...onNavigateIntoItem && canNavigateIntoMentionItem(item
|
|
208
|
+
...onNavigateIntoItem && canNavigateIntoMentionItem(item) ? {
|
|
209
209
|
onNavigateInto: () => onNavigateIntoItem(item),
|
|
210
210
|
navigateIntoLabel
|
|
211
211
|
} : {},
|
|
@@ -319,7 +319,8 @@ function agentMentionItemToRowItem(item) {
|
|
|
319
319
|
name: item.name,
|
|
320
320
|
path: item.path
|
|
321
321
|
});
|
|
322
|
-
const
|
|
322
|
+
const isNavigableFolder = item.mentionNavigation === "agent-generated-folder" || item.mentionNavigation === "workspace-folder";
|
|
323
|
+
const childCountLabel = isNavigableFolder && typeof item.childCount === "number" ? translate("agentHost.agentGui.mentionFolderChildCount", {
|
|
323
324
|
count: item.childCount
|
|
324
325
|
}) : null;
|
|
325
326
|
return {
|
|
@@ -406,8 +407,8 @@ function isReferenceableMentionItem(item) {
|
|
|
406
407
|
}
|
|
407
408
|
return false;
|
|
408
409
|
}
|
|
409
|
-
function canNavigateIntoMentionItem(item
|
|
410
|
-
return
|
|
410
|
+
function canNavigateIntoMentionItem(item) {
|
|
411
|
+
return item.kind === "file" && (item.mentionNavigation === "agent-generated-folder" || item.mentionNavigation === "workspace-folder");
|
|
411
412
|
}
|
|
412
413
|
function mentionSessionAgentProvider(item) {
|
|
413
414
|
const queryStart = item.href.indexOf("?");
|
|
@@ -516,4 +517,4 @@ export {
|
|
|
516
517
|
AgentFileMentionPalette,
|
|
517
518
|
AgentContextMentionPalette
|
|
518
519
|
};
|
|
519
|
-
//# sourceMappingURL=chunk-
|
|
520
|
+
//# sourceMappingURL=chunk-BDWZUA3L.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 isAgentMentionItemDisabled(\n item: AgentContextMentionItem\n): boolean {\n return (\n item.kind === \"agent-target\" &&\n item.availabilityStatus !== undefined &&\n item.availabilityStatus !== \"ready\" &&\n item.availabilityStatus !== \"available\"\n );\n}\n\nexport function flattenAgentMentionPaletteEntries(\n state: AgentMentionSearchState\n): AgentMentionPaletteEntry[] {\n return flattenMentionPaletteEntries(\n state,\n (item) => agentMentionItemKey(item),\n isAgentMentionItemDisabled\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.find(\n (item) => !isAgentMentionItemDisabled(item)\n );\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 isItemDisabled={isAgentMentionItemDisabled}\n renderItem={(item) =>\n renderMentionRow(agentMentionItemToRowItem(item), {\n classNames: AGENT_MENTION_ROW_CLASS_NAMES,\n dataAttributeMode: \"agent\",\n ...(onNavigateIntoItem && canNavigateIntoMentionItem(item)\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 isNavigableFolder =\n item.mentionNavigation === \"agent-generated-folder\" ||\n item.mentionNavigation === \"workspace-folder\";\n const childCountLabel =\n isNavigableFolder && typeof item.childCount === \"number\"\n ? translate(\"agentHost.agentGui.mentionFolderChildCount\", {\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: agentTargetAvailabilityStatusTag(item.availabilityStatus)\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(item: AgentContextMentionItem): boolean {\n return (\n item.kind === \"file\" &&\n (item.mentionNavigation === \"agent-generated-folder\" ||\n item.mentionNavigation === \"workspace-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 * Shared agent targets remain discoverable while their owner is offline. Their\n * availability badge communicates whether the target can currently be invoked.\n */\nfunction agentTargetAvailabilityStatusTag(\n availabilityStatus: string | undefined\n): MentionRowStatusTag {\n const available =\n availabilityStatus === undefined ||\n availabilityStatus === \"ready\" ||\n availabilityStatus === \"available\";\n return {\n label: translate(\n available\n ? \"agentHost.agentGui.mentionAgentTargetAvailable\"\n : \"agentHost.agentGui.mentionAgentTargetUnavailable\"\n ),\n tone: available ? \"green\" : \"neutral\",\n variant: \"activity\",\n dataStatus: available ? \"available\" : \"unavailable\"\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":[]}
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
AgentRichTextReadonly,
|
|
3
3
|
promptForProviderSkills,
|
|
4
4
|
skillTriggerForPrefix
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-RB6ZYQBA.js";
|
|
6
6
|
import {
|
|
7
7
|
classifyRecoverableAgentMessage,
|
|
8
8
|
isProviderPlanLimitMessage,
|
|
@@ -38,7 +38,7 @@ import {
|
|
|
38
38
|
resolveWorkspaceFileLinkAction,
|
|
39
39
|
resolveWorkspaceFilePathCandidate,
|
|
40
40
|
resolveWorkspaceLinkAction
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-ADQENNSG.js";
|
|
42
42
|
import {
|
|
43
43
|
cn
|
|
44
44
|
} from "./chunk-KPMQGPYU.js";
|
|
@@ -46,7 +46,7 @@ import {
|
|
|
46
46
|
useOptionalAgentActivityRuntime,
|
|
47
47
|
useOptionalAgentHostApi,
|
|
48
48
|
workspaceAgentProviderLabel
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-2JFMGOHU.js";
|
|
50
50
|
import {
|
|
51
51
|
fileChangeCountFromChanges,
|
|
52
52
|
fileChangeEntriesFromChanges,
|
|
@@ -56,7 +56,7 @@ import {
|
|
|
56
56
|
getActiveUiLanguage,
|
|
57
57
|
translate,
|
|
58
58
|
useTranslation
|
|
59
|
-
} from "./chunk-
|
|
59
|
+
} from "./chunk-6RMVLH3G.js";
|
|
60
60
|
import {
|
|
61
61
|
normalizeAgentTitleText
|
|
62
62
|
} from "./chunk-MIJXEELH.js";
|
|
@@ -14224,4 +14224,4 @@ export {
|
|
|
14224
14224
|
AgentConversationFlow,
|
|
14225
14225
|
useProjectedAgentConversation
|
|
14226
14226
|
};
|
|
14227
|
-
//# sourceMappingURL=chunk-
|
|
14227
|
+
//# sourceMappingURL=chunk-CO6XO5A2.js.map
|
|
@@ -2,17 +2,17 @@ import {
|
|
|
2
2
|
AgentGUIConversation_styles_default,
|
|
3
3
|
MessageSquareMoreIcon,
|
|
4
4
|
extractAgentMcpToolTarget
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-ADQENNSG.js";
|
|
6
6
|
import {
|
|
7
7
|
getOptionalAgentHostApi,
|
|
8
8
|
useOptionalAgentHostApi
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-2JFMGOHU.js";
|
|
10
10
|
import {
|
|
11
11
|
fileChangePathsFromChanges
|
|
12
12
|
} from "./chunk-F5UR6EJG.js";
|
|
13
13
|
import {
|
|
14
14
|
translate
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-6RMVLH3G.js";
|
|
16
16
|
|
|
17
17
|
// shared/agentConversation/planImplementationPresentation.ts
|
|
18
18
|
var PLAN_IMPLEMENTATION_PROMPT = "Implement the plan.";
|
|
@@ -1471,4 +1471,4 @@ export {
|
|
|
1471
1471
|
isPromptRequestIdTitle,
|
|
1472
1472
|
AgentInteractivePromptSurface
|
|
1473
1473
|
};
|
|
1474
|
-
//# sourceMappingURL=chunk-
|
|
1474
|
+
//# sourceMappingURL=chunk-F2Z7P7BB.js.map
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
resolveAgentGUIConversationTitleDisplayPrompt,
|
|
10
10
|
resolveAgentGuiWorkbenchHeaderTitle,
|
|
11
11
|
resolveAgentGuiWorkbenchSessionTitle
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-X22KJXVG.js";
|
|
13
13
|
import {
|
|
14
14
|
createAgentGuiWorkbenchNodeStateSource,
|
|
15
15
|
migrateLegacyAgentGuiWorkbenchState,
|
|
@@ -276,7 +276,7 @@ function useAgentGuiWorkbenchBodyRenderError(nodeId) {
|
|
|
276
276
|
|
|
277
277
|
// workbench/header.ts
|
|
278
278
|
var LazyAgentRichTextReadonly = lazy(
|
|
279
|
-
() => import("./AgentRichTextReadonly-
|
|
279
|
+
() => import("./AgentRichTextReadonly-KOUZGF5Q.js").then((module) => ({
|
|
280
280
|
default: module.AgentRichTextReadonly
|
|
281
281
|
}))
|
|
282
282
|
);
|
|
@@ -1482,4 +1482,4 @@ export {
|
|
|
1482
1482
|
AGENT_GUI_WORKBENCH_OPEN_EXTERNAL_IMPORT_EVENT,
|
|
1483
1483
|
createAgentGuiWorkbenchContribution
|
|
1484
1484
|
};
|
|
1485
|
-
//# sourceMappingURL=chunk-
|
|
1485
|
+
//# sourceMappingURL=chunk-G3XB4FAQ.js.map
|
|
@@ -7,24 +7,24 @@ import {
|
|
|
7
7
|
} from "./chunk-XJ34OIEQ.js";
|
|
8
8
|
import {
|
|
9
9
|
normalizeAgentSessionMentionTitle
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-QDNOOAAS.js";
|
|
11
11
|
import {
|
|
12
12
|
resolveAgentMentionFileThumbnailUrl
|
|
13
13
|
} from "./chunk-LUGELG5V.js";
|
|
14
14
|
import {
|
|
15
15
|
AGENT_CONTEXT_MENTION_PROVIDER_IDS
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-RMQREVJY.js";
|
|
17
17
|
import {
|
|
18
18
|
resolveWorkspaceAgentSessionSortTimeUnixMs
|
|
19
19
|
} from "./chunk-YMXYBG7U.js";
|
|
20
20
|
import {
|
|
21
21
|
getOptionalAgentHostApi,
|
|
22
22
|
workspaceAgentProviderLabel
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-2JFMGOHU.js";
|
|
24
24
|
import {
|
|
25
25
|
translate,
|
|
26
26
|
translateInUiLanguage
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-6RMVLH3G.js";
|
|
28
28
|
import {
|
|
29
29
|
normalizeAgentTitleText
|
|
30
30
|
} from "./chunk-MIJXEELH.js";
|
|
@@ -594,7 +594,7 @@ function createAgentGeneratedFolderBackItem(browsePath) {
|
|
|
594
594
|
kind: "file",
|
|
595
595
|
href: "",
|
|
596
596
|
path: browsePath,
|
|
597
|
-
name: translate("agentHost.agentGui.
|
|
597
|
+
name: translate("agentHost.agentGui.mentionFolderBack"),
|
|
598
598
|
entryKind: "unknown",
|
|
599
599
|
directoryPath: parentAgentGeneratedDirectoryPath(browsePath),
|
|
600
600
|
mentionNavigation: "agent-generated-folder-back"
|
|
@@ -953,13 +953,22 @@ function providerItemToAgentMentionItem(input) {
|
|
|
953
953
|
}
|
|
954
954
|
if (input.insertResult.kind === "markdown-link") {
|
|
955
955
|
const href = input.insertResult.href.trim();
|
|
956
|
+
const directoryPath = input.directory?.path.trim() ?? "";
|
|
956
957
|
return {
|
|
957
958
|
kind: "file",
|
|
958
959
|
href,
|
|
959
|
-
path: href,
|
|
960
|
+
path: directoryPath || href,
|
|
960
961
|
name: label,
|
|
961
|
-
entryKind: href.endsWith("/") ? "directory" : "unknown",
|
|
962
|
-
directoryPath: dirnameFromProviderWorkspaceFileHref(
|
|
962
|
+
entryKind: directoryPath || href.endsWith("/") ? "directory" : "unknown",
|
|
963
|
+
directoryPath: dirnameFromProviderWorkspaceFileHref(
|
|
964
|
+
directoryPath || href
|
|
965
|
+
),
|
|
966
|
+
...directoryPath ? {
|
|
967
|
+
childCount: normalizeMentionDirectoryChildCount(
|
|
968
|
+
input.directory?.childCount
|
|
969
|
+
),
|
|
970
|
+
mentionNavigation: "workspace-folder"
|
|
971
|
+
} : {}
|
|
963
972
|
};
|
|
964
973
|
}
|
|
965
974
|
if (input.insertResult.kind !== "mention") {
|
|
@@ -974,6 +983,7 @@ function providerItemToAgentMentionItem(input) {
|
|
|
974
983
|
const presentation = mention.presentation ?? {};
|
|
975
984
|
const workspaceId = scope.workspaceId || input.workspaceId;
|
|
976
985
|
if (input.providerId === FILE_PROVIDER_ID || input.providerId === AGENT_GENERATED_FILE_PROVIDER_ID) {
|
|
986
|
+
const directoryPath = input.directory?.path.trim() ?? "";
|
|
977
987
|
return {
|
|
978
988
|
kind: "file",
|
|
979
989
|
href: createRichTextMentionHref2({
|
|
@@ -982,10 +992,18 @@ function providerItemToAgentMentionItem(input) {
|
|
|
982
992
|
label,
|
|
983
993
|
scope
|
|
984
994
|
}),
|
|
985
|
-
path: targetId,
|
|
995
|
+
path: directoryPath || targetId,
|
|
986
996
|
name: label,
|
|
987
|
-
entryKind: targetId.endsWith("/") ? "directory" : "unknown",
|
|
988
|
-
directoryPath: dirnameFromProviderWorkspaceFileHref(
|
|
997
|
+
entryKind: directoryPath || targetId.endsWith("/") ? "directory" : "unknown",
|
|
998
|
+
directoryPath: dirnameFromProviderWorkspaceFileHref(
|
|
999
|
+
directoryPath || targetId
|
|
1000
|
+
),
|
|
1001
|
+
...directoryPath ? {
|
|
1002
|
+
childCount: normalizeMentionDirectoryChildCount(
|
|
1003
|
+
input.directory?.childCount
|
|
1004
|
+
),
|
|
1005
|
+
mentionNavigation: "workspace-folder"
|
|
1006
|
+
} : {},
|
|
989
1007
|
thumbnailUrl: presentation.thumbnailUrl?.trim() || void 0
|
|
990
1008
|
};
|
|
991
1009
|
}
|
|
@@ -1084,6 +1102,12 @@ function providerItemToAgentMentionItem(input) {
|
|
|
1084
1102
|
}
|
|
1085
1103
|
return null;
|
|
1086
1104
|
}
|
|
1105
|
+
function normalizeMentionDirectoryChildCount(value) {
|
|
1106
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value < 0) {
|
|
1107
|
+
return void 0;
|
|
1108
|
+
}
|
|
1109
|
+
return Math.floor(value);
|
|
1110
|
+
}
|
|
1087
1111
|
function normalizeMentionScope(scope) {
|
|
1088
1112
|
return Object.fromEntries(
|
|
1089
1113
|
Object.entries(scope ?? {}).map(([key, value]) => [key.trim(), value.trim()]).filter(([key, value]) => key.length > 0 && value.length > 0)
|
|
@@ -1633,7 +1657,7 @@ async function fetchAgentMentionFilterResult(input) {
|
|
|
1633
1657
|
}
|
|
1634
1658
|
}
|
|
1635
1659
|
async function queryAgentMentionProviderItems(input) {
|
|
1636
|
-
const
|
|
1660
|
+
const queryInput = {
|
|
1637
1661
|
keyword: input.query,
|
|
1638
1662
|
maxResults: input.limit,
|
|
1639
1663
|
abortSignal: input.abortSignal,
|
|
@@ -1648,7 +1672,11 @@ async function queryAgentMentionProviderItems(input) {
|
|
|
1648
1672
|
referenceProvenanceFilter: input.provenanceFilter ?? void 0
|
|
1649
1673
|
}
|
|
1650
1674
|
}
|
|
1651
|
-
}
|
|
1675
|
+
};
|
|
1676
|
+
const items = input.directoryPath && input.provider.queryDirectory ? await input.provider.queryDirectory({
|
|
1677
|
+
...queryInput,
|
|
1678
|
+
directoryPath: input.directoryPath
|
|
1679
|
+
}) : await input.provider.query(queryInput);
|
|
1652
1680
|
if (input.abortSignal.aborted) {
|
|
1653
1681
|
return [];
|
|
1654
1682
|
}
|
|
@@ -1764,6 +1792,7 @@ async function mapProviderItemsToAgentMentionItems(input) {
|
|
|
1764
1792
|
insertResult: input.provider.toInsertResult(item),
|
|
1765
1793
|
label: input.provider.getItemLabel(item),
|
|
1766
1794
|
providerId: input.provider.id,
|
|
1795
|
+
directory: input.provider.getItemDirectory?.(item) ?? null,
|
|
1767
1796
|
subtitle: input.provider.getItemSubtitle?.(item) ?? "",
|
|
1768
1797
|
workspaceId: input.workspaceId
|
|
1769
1798
|
});
|
|
@@ -1838,6 +1867,7 @@ var AgentMentionSearchControllerBase = class {
|
|
|
1838
1867
|
currentFileSearchLimit;
|
|
1839
1868
|
currentIssueSearchLimit;
|
|
1840
1869
|
agentGeneratedBrowsePath = null;
|
|
1870
|
+
workspaceFileBrowsePaths = [];
|
|
1841
1871
|
rawGroups = emptyAgentMentionRawGroups();
|
|
1842
1872
|
issueTopicGroups = null;
|
|
1843
1873
|
state = {
|
|
@@ -2145,6 +2175,7 @@ var AgentMentionSearchControllerBase = class {
|
|
|
2145
2175
|
provider,
|
|
2146
2176
|
workspaceId: input.workspaceId,
|
|
2147
2177
|
currentUserId: input.currentUserId,
|
|
2178
|
+
directoryPath: input.directoryPath,
|
|
2148
2179
|
query: input.query,
|
|
2149
2180
|
limit: input.limit,
|
|
2150
2181
|
sectionKey: input.sectionKey ?? this.currentSectionKey,
|
|
@@ -2253,6 +2284,9 @@ var AgentMentionSearchControllerBase = class {
|
|
|
2253
2284
|
resetAgentGeneratedBrowsePath() {
|
|
2254
2285
|
this.agentGeneratedBrowsePath = null;
|
|
2255
2286
|
}
|
|
2287
|
+
resetWorkspaceFileBrowsePaths() {
|
|
2288
|
+
this.workspaceFileBrowsePaths = [];
|
|
2289
|
+
}
|
|
2256
2290
|
resetTotalCounts() {
|
|
2257
2291
|
for (const groupId of [
|
|
2258
2292
|
"files",
|
|
@@ -2341,6 +2375,32 @@ var AgentMentionSearchControllerBase = class {
|
|
|
2341
2375
|
|
|
2342
2376
|
// agent-gui/agentGuiNode/AgentMentionSearchController.ts
|
|
2343
2377
|
import { referenceProvenanceFilterCacheKey as referenceProvenanceFilterCacheKey2 } from "@tutti-os/workspace-file-reference/core";
|
|
2378
|
+
|
|
2379
|
+
// agent-gui/agentGuiNode/agentMentionWorkspaceFilesPresentation.ts
|
|
2380
|
+
function presentWorkspaceFileDirectoryMentionItems(input) {
|
|
2381
|
+
return [createWorkspaceFileFolderBackItem(input.browsePath), ...input.items];
|
|
2382
|
+
}
|
|
2383
|
+
function createWorkspaceFileFolderBackItem(browsePath) {
|
|
2384
|
+
return {
|
|
2385
|
+
kind: "file",
|
|
2386
|
+
href: "",
|
|
2387
|
+
path: browsePath,
|
|
2388
|
+
name: translate("agentHost.agentGui.mentionFolderBack"),
|
|
2389
|
+
entryKind: "unknown",
|
|
2390
|
+
directoryPath: parentWorkspaceFileDirectoryPath(browsePath),
|
|
2391
|
+
mentionNavigation: "workspace-folder-back"
|
|
2392
|
+
};
|
|
2393
|
+
}
|
|
2394
|
+
function parentWorkspaceFileDirectoryPath(path) {
|
|
2395
|
+
const normalized = path.trim().replace(/\\/g, "/").replace(/\/+$/, "");
|
|
2396
|
+
const index = normalized.lastIndexOf("/");
|
|
2397
|
+
if (index <= 0) {
|
|
2398
|
+
return "/";
|
|
2399
|
+
}
|
|
2400
|
+
return normalized.slice(0, index);
|
|
2401
|
+
}
|
|
2402
|
+
|
|
2403
|
+
// agent-gui/agentGuiNode/AgentMentionSearchController.ts
|
|
2344
2404
|
var AgentMentionSearchController = class extends AgentMentionSearchControllerBase {
|
|
2345
2405
|
issueLoadMoreRequests = /* @__PURE__ */ new Map();
|
|
2346
2406
|
setProvenanceCatalog(catalog) {
|
|
@@ -2389,6 +2449,7 @@ var AgentMentionSearchController = class extends AgentMentionSearchControllerBas
|
|
|
2389
2449
|
this.cancelIssueLoadMoreRequests();
|
|
2390
2450
|
const requestId = ++this.requestId;
|
|
2391
2451
|
this.resetAgentGeneratedBrowsePath();
|
|
2452
|
+
this.resetWorkspaceFileBrowsePaths();
|
|
2392
2453
|
this.resetExpandedCounts();
|
|
2393
2454
|
this.resetSearchLimits();
|
|
2394
2455
|
this.resetRawGroups();
|
|
@@ -2442,6 +2503,7 @@ var AgentMentionSearchController = class extends AgentMentionSearchControllerBas
|
|
|
2442
2503
|
this.cancelIssueLoadMoreRequests();
|
|
2443
2504
|
const requestId = ++this.requestId;
|
|
2444
2505
|
this.resetAgentGeneratedBrowsePath();
|
|
2506
|
+
this.resetWorkspaceFileBrowsePaths();
|
|
2445
2507
|
this.resetExpandedCounts();
|
|
2446
2508
|
this.resetSearchLimits();
|
|
2447
2509
|
this.resetRawGroups();
|
|
@@ -2582,11 +2644,12 @@ var AgentMentionSearchController = class extends AgentMentionSearchControllerBas
|
|
|
2582
2644
|
enterCategory(category) {
|
|
2583
2645
|
this.setFilter(category);
|
|
2584
2646
|
}
|
|
2585
|
-
|
|
2647
|
+
selectFileMentionNavigationItem(item) {
|
|
2586
2648
|
if (item.kind !== "file" || !item.mentionNavigation) {
|
|
2587
2649
|
return false;
|
|
2588
2650
|
}
|
|
2589
2651
|
if (item.mentionNavigation === "agent-generated-folder") {
|
|
2652
|
+
this.resetWorkspaceFileBrowsePaths();
|
|
2590
2653
|
this.agentGeneratedBrowsePath = item.path;
|
|
2591
2654
|
this.expandedCounts.agent_generated_files = mentionGroupPageSize(
|
|
2592
2655
|
this.currentFilter,
|
|
@@ -2616,12 +2679,26 @@ var AgentMentionSearchController = class extends AgentMentionSearchControllerBas
|
|
|
2616
2679
|
});
|
|
2617
2680
|
return true;
|
|
2618
2681
|
}
|
|
2682
|
+
if (item.mentionNavigation === "workspace-folder") {
|
|
2683
|
+
const path = item.path.trim();
|
|
2684
|
+
if (!path || this.currentFilter !== "file" || this.currentQuery) {
|
|
2685
|
+
return false;
|
|
2686
|
+
}
|
|
2687
|
+
this.resetAgentGeneratedBrowsePath();
|
|
2688
|
+
this.workspaceFileBrowsePaths.push(path);
|
|
2689
|
+
this.loadWorkspaceFileDirectory(path);
|
|
2690
|
+
return true;
|
|
2691
|
+
}
|
|
2692
|
+
if (item.mentionNavigation === "workspace-folder-back") {
|
|
2693
|
+
return this.exitWorkspaceFileBrowse();
|
|
2694
|
+
}
|
|
2619
2695
|
return false;
|
|
2620
2696
|
}
|
|
2621
|
-
|
|
2622
|
-
if (
|
|
2623
|
-
return
|
|
2697
|
+
exitFileMentionBrowse() {
|
|
2698
|
+
if (this.workspaceFileBrowsePaths.length > 0) {
|
|
2699
|
+
return this.exitWorkspaceFileBrowse();
|
|
2624
2700
|
}
|
|
2701
|
+
if (!this.agentGeneratedBrowsePath) return false;
|
|
2625
2702
|
this.resetAgentGeneratedBrowsePath();
|
|
2626
2703
|
this.setState({
|
|
2627
2704
|
status: this.state.status === "loading" ? "loading" : "ready",
|
|
@@ -2634,6 +2711,80 @@ var AgentMentionSearchController = class extends AgentMentionSearchControllerBas
|
|
|
2634
2711
|
});
|
|
2635
2712
|
return true;
|
|
2636
2713
|
}
|
|
2714
|
+
exitWorkspaceFileBrowse() {
|
|
2715
|
+
if (this.workspaceFileBrowsePaths.length === 0) {
|
|
2716
|
+
return false;
|
|
2717
|
+
}
|
|
2718
|
+
this.workspaceFileBrowsePaths.pop();
|
|
2719
|
+
const parentPath = this.workspaceFileBrowsePaths.at(-1);
|
|
2720
|
+
if (parentPath) {
|
|
2721
|
+
this.loadWorkspaceFileDirectory(parentPath);
|
|
2722
|
+
return true;
|
|
2723
|
+
}
|
|
2724
|
+
this.startBrowseModeFetch("file");
|
|
2725
|
+
return true;
|
|
2726
|
+
}
|
|
2727
|
+
loadWorkspaceFileDirectory(directoryPath) {
|
|
2728
|
+
this.clearTimer();
|
|
2729
|
+
this.abortActiveRequest();
|
|
2730
|
+
this.cancelIssueLoadMoreRequests();
|
|
2731
|
+
const requestId = ++this.requestId;
|
|
2732
|
+
const workspaceId = this.activeWorkspaceId;
|
|
2733
|
+
this.setState({
|
|
2734
|
+
status: "loading",
|
|
2735
|
+
query: "",
|
|
2736
|
+
mode: "browse",
|
|
2737
|
+
filter: this.currentFilter,
|
|
2738
|
+
categories: buildBrowseCategories(),
|
|
2739
|
+
groups: this.groupsFromRawGroups(),
|
|
2740
|
+
error: null
|
|
2741
|
+
});
|
|
2742
|
+
const abortSignal = this.beginActiveRequest();
|
|
2743
|
+
const diagnostics = [];
|
|
2744
|
+
void this.queryProviderMentionItemsById({
|
|
2745
|
+
abortSignal,
|
|
2746
|
+
diagnostics,
|
|
2747
|
+
directoryPath,
|
|
2748
|
+
providerId: FILE_PROVIDER_ID,
|
|
2749
|
+
workspaceId,
|
|
2750
|
+
currentUserId: this.currentUserId,
|
|
2751
|
+
query: "",
|
|
2752
|
+
provenanceFilter: this.currentProvenanceFilter
|
|
2753
|
+
}).then((items) => {
|
|
2754
|
+
if (!this.canApply(requestId, workspaceId, "", "file") || this.workspaceFileBrowsePaths.at(-1) !== directoryPath) {
|
|
2755
|
+
return;
|
|
2756
|
+
}
|
|
2757
|
+
this.rawGroups.opened_files = presentWorkspaceFileDirectoryMentionItems(
|
|
2758
|
+
{
|
|
2759
|
+
browsePath: directoryPath,
|
|
2760
|
+
items
|
|
2761
|
+
}
|
|
2762
|
+
);
|
|
2763
|
+
this.totalCounts.opened_files = this.rawGroups.opened_files.length;
|
|
2764
|
+
this.setState({
|
|
2765
|
+
status: "ready",
|
|
2766
|
+
query: "",
|
|
2767
|
+
mode: "browse",
|
|
2768
|
+
filter: "file",
|
|
2769
|
+
categories: buildBrowseCategories(),
|
|
2770
|
+
groups: this.groupsFromRawGroups(),
|
|
2771
|
+
error: null
|
|
2772
|
+
});
|
|
2773
|
+
}).catch((error) => {
|
|
2774
|
+
if (!this.canApply(requestId, workspaceId, "", "file") || this.workspaceFileBrowsePaths.at(-1) !== directoryPath) {
|
|
2775
|
+
return;
|
|
2776
|
+
}
|
|
2777
|
+
this.setState({
|
|
2778
|
+
status: "error",
|
|
2779
|
+
query: "",
|
|
2780
|
+
mode: "browse",
|
|
2781
|
+
filter: "file",
|
|
2782
|
+
categories: buildBrowseCategories(),
|
|
2783
|
+
groups: this.groupsFromRawGroups(),
|
|
2784
|
+
error: error instanceof Error ? error.message : String(error)
|
|
2785
|
+
});
|
|
2786
|
+
});
|
|
2787
|
+
}
|
|
2637
2788
|
expandGroup(groupId) {
|
|
2638
2789
|
if (groupId.startsWith("issue-topic:")) {
|
|
2639
2790
|
this.loadMoreIssueTopic(groupId);
|
|
@@ -2706,6 +2857,7 @@ var AgentMentionSearchController = class extends AgentMentionSearchControllerBas
|
|
|
2706
2857
|
this.requestId += 1;
|
|
2707
2858
|
this.currentFilter = DEFAULT_AGENT_MENTION_FILTER;
|
|
2708
2859
|
this.resetAgentGeneratedBrowsePath();
|
|
2860
|
+
this.resetWorkspaceFileBrowsePaths();
|
|
2709
2861
|
this.resetExpandedCounts();
|
|
2710
2862
|
this.resetSearchLimits();
|
|
2711
2863
|
this.resetRawGroups();
|
|
@@ -2902,4 +3054,4 @@ export {
|
|
|
2902
3054
|
AgentMentionSearchController,
|
|
2903
3055
|
preloadAgentMentionBrowse
|
|
2904
3056
|
};
|
|
2905
|
-
//# sourceMappingURL=chunk-
|
|
3057
|
+
//# sourceMappingURL=chunk-PRE4IT6E.js.map
|