@tutti-os/agent-gui 0.0.109 → 0.0.111
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-BSr3cWcJ.d.ts → AgentGUI-DXwtHJnv.d.ts} +1 -1
- package/dist/{AgentRichTextReadonly-42TUVYX5.js → AgentRichTextReadonly-VKMTXBKA.js} +5 -5
- package/dist/agent-conversation/index.js +7 -7
- package/dist/agent-gui.d.ts +2 -2
- package/dist/agent-gui.js +15 -15
- package/dist/agent-message-center/index.js +6 -6
- package/dist/{agentFileMentionContracts-B70VnPWO.d.ts → agentFileMentionContracts-DY4Z70CN.d.ts} +1 -0
- package/dist/{chunk-7BN2WQ2M.js → chunk-2JPJLBER.js} +3 -1
- package/dist/chunk-2JPJLBER.js.map +1 -0
- package/dist/{chunk-BM3CSFWU.js → chunk-3QIE72RQ.js} +2 -2
- package/dist/{chunk-AIZJHA4Q.js → chunk-5O3KW33M.js} +4 -4
- package/dist/{chunk-OEYXSD3O.js → chunk-74ZOQONQ.js} +2 -2
- package/dist/{chunk-A5UXTAYJ.js → chunk-7D7L3JGA.js} +22 -11
- package/dist/chunk-7D7L3JGA.js.map +1 -0
- package/dist/{chunk-J4K7KIFZ.js → chunk-A4WCTHWS.js} +4 -13
- package/dist/chunk-A4WCTHWS.js.map +1 -0
- package/dist/{chunk-34JD75OB.js → chunk-CVPI23GJ.js} +35 -38
- package/dist/{chunk-34JD75OB.js.map → chunk-CVPI23GJ.js.map} +1 -1
- package/dist/{chunk-EBXOSQ5G.js → chunk-HGHNKOR2.js} +5 -3
- package/dist/{chunk-EBXOSQ5G.js.map → chunk-HGHNKOR2.js.map} +1 -1
- package/dist/{chunk-BRLKORQI.js → chunk-HHQTW2VC.js} +5 -5
- package/dist/{chunk-25BPR75P.js → chunk-HLSEVZCW.js} +2 -2
- package/dist/{chunk-K7WFXVSD.js → chunk-HWMDMZPV.js} +67 -23
- package/dist/chunk-HWMDMZPV.js.map +1 -0
- package/dist/{chunk-JBX3JPTC.js → chunk-QMU5KFPY.js} +2 -2
- package/dist/{chunk-E74BMFHI.js → chunk-RX6JAGC6.js} +2 -2
- package/dist/{chunk-U4CVBCHD.js → chunk-WGUEDMSP.js} +3 -3
- package/dist/{chunk-2QHKXI5N.js → chunk-Z662JCRH.js} +2 -2
- package/dist/context-mention-palette/index.d.ts +1 -1
- package/dist/context-mention-palette/index.js +7 -7
- package/dist/i18n/index.d.ts +2 -0
- package/dist/i18n/index.js +2 -2
- package/dist/index.d.ts +3 -3
- package/dist/index.js +15 -15
- package/dist/mention-search.d.ts +3 -2
- package/dist/mention-search.js +5 -5
- package/dist/workbench/contribution.js +3 -3
- package/dist/workbench/index.js +3 -3
- package/dist/workbench/sessionTitle.js +2 -2
- package/dist/workspace-query-cache.d.ts +0 -1
- package/dist/workspace-query-cache.js +1 -1
- package/package.json +12 -12
- package/dist/chunk-7BN2WQ2M.js.map +0 -1
- package/dist/chunk-A5UXTAYJ.js.map +0 -1
- package/dist/chunk-J4K7KIFZ.js.map +0 -1
- package/dist/chunk-K7WFXVSD.js.map +0 -1
- /package/dist/{AgentRichTextReadonly-42TUVYX5.js.map → AgentRichTextReadonly-VKMTXBKA.js.map} +0 -0
- /package/dist/{chunk-BM3CSFWU.js.map → chunk-3QIE72RQ.js.map} +0 -0
- /package/dist/{chunk-AIZJHA4Q.js.map → chunk-5O3KW33M.js.map} +0 -0
- /package/dist/{chunk-OEYXSD3O.js.map → chunk-74ZOQONQ.js.map} +0 -0
- /package/dist/{chunk-BRLKORQI.js.map → chunk-HHQTW2VC.js.map} +0 -0
- /package/dist/{chunk-25BPR75P.js.map → chunk-HLSEVZCW.js.map} +0 -0
- /package/dist/{chunk-JBX3JPTC.js.map → chunk-QMU5KFPY.js.map} +0 -0
- /package/dist/{chunk-E74BMFHI.js.map → chunk-RX6JAGC6.js.map} +0 -0
- /package/dist/{chunk-U4CVBCHD.js.map → chunk-WGUEDMSP.js.map} +0 -0
- /package/dist/{chunk-2QHKXI5N.js.map → chunk-Z662JCRH.js.map} +0 -0
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-MIJXEELH.js";
|
|
4
4
|
import {
|
|
5
5
|
translateInUiLanguage
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-2JPJLBER.js";
|
|
7
7
|
import {
|
|
8
8
|
resolveAgentGUIProviderCatalogIdentity
|
|
9
9
|
} from "./chunk-6CUELYIF.js";
|
|
@@ -376,4 +376,4 @@ export {
|
|
|
376
376
|
resolveAgentGuiWorkbenchHeaderTitle,
|
|
377
377
|
resolveAgentGuiWorkbenchSessionTitle
|
|
378
378
|
};
|
|
379
|
-
//# sourceMappingURL=chunk-
|
|
379
|
+
//# sourceMappingURL=chunk-3QIE72RQ.js.map
|
|
@@ -2,17 +2,17 @@ import {
|
|
|
2
2
|
AgentGUIConversation_styles_default,
|
|
3
3
|
MessageSquareMoreIcon,
|
|
4
4
|
extractAgentMcpToolTarget
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-WGUEDMSP.js";
|
|
6
6
|
import {
|
|
7
7
|
getOptionalAgentHostApi,
|
|
8
8
|
useOptionalAgentHostApi
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-RX6JAGC6.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-HLSEVZCW.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-5O3KW33M.js.map
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
import {
|
|
9
9
|
translate,
|
|
10
10
|
useTranslation
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-HLSEVZCW.js";
|
|
12
12
|
import {
|
|
13
13
|
getAgentCustomMentionKind
|
|
14
14
|
} from "./chunk-D2JUDUYY.js";
|
|
@@ -1536,4 +1536,4 @@ export {
|
|
|
1536
1536
|
exitAgentFileMentionSuggestion,
|
|
1537
1537
|
createAgentFileMentionExtension
|
|
1538
1538
|
};
|
|
1539
|
-
//# sourceMappingURL=chunk-
|
|
1539
|
+
//# sourceMappingURL=chunk-74ZOQONQ.js.map
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
agentMentionFilterLabel,
|
|
6
6
|
agentMentionGroupLabel,
|
|
7
7
|
mentionGroupExpandCount
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-HWMDMZPV.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-Z662JCRH.js";
|
|
17
17
|
import {
|
|
18
18
|
managedAgentRoundedIconUrl
|
|
19
19
|
} from "./chunk-W6TO6K2X.js";
|
|
20
20
|
import {
|
|
21
21
|
translate
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-HLSEVZCW.js";
|
|
23
23
|
|
|
24
24
|
// agent-gui/agentGuiNode/AgentFileMentionPalette.tsx
|
|
25
25
|
import {
|
|
@@ -94,10 +94,14 @@ var AGENT_MENTION_ROW_CLASS_NAMES = {
|
|
|
94
94
|
function agentMentionItemKey(item) {
|
|
95
95
|
return `${item.kind}:${item.kind === "file" ? agentGeneratedMentionItemKey(item) : item.targetId}`;
|
|
96
96
|
}
|
|
97
|
+
function isAgentMentionItemDisabled(item) {
|
|
98
|
+
return item.kind === "agent-target" && item.availabilityStatus !== void 0 && item.availabilityStatus !== "ready" && item.availabilityStatus !== "available";
|
|
99
|
+
}
|
|
97
100
|
function flattenAgentMentionPaletteEntries(state) {
|
|
98
101
|
return flattenMentionPaletteEntries(
|
|
99
102
|
state,
|
|
100
|
-
(item) => agentMentionItemKey(item)
|
|
103
|
+
(item) => agentMentionItemKey(item),
|
|
104
|
+
isAgentMentionItemDisabled
|
|
101
105
|
).map((entry) => {
|
|
102
106
|
if (entry.type === "item") {
|
|
103
107
|
const item = entry.groupId !== void 0 && entry.itemIndex !== void 0 ? state.groups.find((group) => group.id === entry.groupId)?.items[entry.itemIndex] : void 0;
|
|
@@ -121,7 +125,9 @@ function groupStartKeys(state) {
|
|
|
121
125
|
return state.categories.map((category) => `category:${category.id}`);
|
|
122
126
|
}
|
|
123
127
|
return state.groups.map((group) => {
|
|
124
|
-
const firstItem = group.items
|
|
128
|
+
const firstItem = group.items.find(
|
|
129
|
+
(item) => !isAgentMentionItemDisabled(item)
|
|
130
|
+
);
|
|
125
131
|
if (firstItem) {
|
|
126
132
|
return `${group.id}:${agentMentionItemKey(firstItem)}`;
|
|
127
133
|
}
|
|
@@ -195,6 +201,7 @@ function AgentFileMentionPalette({
|
|
|
195
201
|
state: shellState,
|
|
196
202
|
highlightedKey,
|
|
197
203
|
getItemKey: agentMentionItemKey,
|
|
204
|
+
isItemDisabled: isAgentMentionItemDisabled,
|
|
198
205
|
renderItem: (item, { group }) => renderMentionRow(agentMentionItemToRowItem(item), {
|
|
199
206
|
classNames: AGENT_MENTION_ROW_CLASS_NAMES,
|
|
200
207
|
dataAttributeMode: "agent",
|
|
@@ -354,7 +361,7 @@ function agentMentionItemToRowItem(item) {
|
|
|
354
361
|
name: item.name,
|
|
355
362
|
description: mentionDescriptionWithoutTerminalPeriod(item.description),
|
|
356
363
|
iconUrl: item.iconUrl ?? managedAgentRoundedIconUrl(item.agentProviderId),
|
|
357
|
-
statusTag:
|
|
364
|
+
statusTag: agentTargetAvailabilityStatusTag(item.availabilityStatus)
|
|
358
365
|
};
|
|
359
366
|
}
|
|
360
367
|
if (item.kind === "workspace-reference") {
|
|
@@ -422,12 +429,15 @@ function agentSessionStatusTag(status) {
|
|
|
422
429
|
dataStatus: activityStatus
|
|
423
430
|
};
|
|
424
431
|
}
|
|
425
|
-
function
|
|
432
|
+
function agentTargetAvailabilityStatusTag(availabilityStatus) {
|
|
433
|
+
const available = availabilityStatus === void 0 || availabilityStatus === "ready" || availabilityStatus === "available";
|
|
426
434
|
return {
|
|
427
|
-
label: translate(
|
|
428
|
-
|
|
435
|
+
label: translate(
|
|
436
|
+
available ? "agentHost.agentGui.mentionAgentTargetAvailable" : "agentHost.agentGui.mentionAgentTargetUnavailable"
|
|
437
|
+
),
|
|
438
|
+
tone: available ? "green" : "neutral",
|
|
429
439
|
variant: "activity",
|
|
430
|
-
dataStatus: "available"
|
|
440
|
+
dataStatus: available ? "available" : "unavailable"
|
|
431
441
|
};
|
|
432
442
|
}
|
|
433
443
|
function agentIssueStatusTag(status) {
|
|
@@ -500,9 +510,10 @@ function shouldShowBrowseSearchHint(input) {
|
|
|
500
510
|
|
|
501
511
|
export {
|
|
502
512
|
agentMentionItemKey,
|
|
513
|
+
isAgentMentionItemDisabled,
|
|
503
514
|
flattenAgentMentionPaletteEntries,
|
|
504
515
|
groupStartKeys,
|
|
505
516
|
AgentFileMentionPalette,
|
|
506
517
|
AgentContextMentionPalette
|
|
507
518
|
};
|
|
508
|
-
//# sourceMappingURL=chunk-
|
|
519
|
+
//# sourceMappingURL=chunk-7D7L3JGA.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, { 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: 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(\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 * 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":[]}
|
|
@@ -17,9 +17,8 @@ function createWorkspaceQueryCache(options) {
|
|
|
17
17
|
entries.delete(oldestKey);
|
|
18
18
|
}
|
|
19
19
|
};
|
|
20
|
-
const write = (key, value
|
|
20
|
+
const write = (key, value) => {
|
|
21
21
|
const entry = {
|
|
22
|
-
ingested,
|
|
23
22
|
resolvedAtUnixMs: now(),
|
|
24
23
|
stale: false,
|
|
25
24
|
value,
|
|
@@ -30,14 +29,6 @@ function createWorkspaceQueryCache(options) {
|
|
|
30
29
|
return entry;
|
|
31
30
|
};
|
|
32
31
|
return {
|
|
33
|
-
claimIngestion(key, expectedVersion) {
|
|
34
|
-
const entry = entries.get(key);
|
|
35
|
-
if (!entry || entry.version !== expectedVersion || entry.ingested) {
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
|
-
entry.ingested = true;
|
|
39
|
-
return true;
|
|
40
|
-
},
|
|
41
32
|
invalidate(key) {
|
|
42
33
|
if (key !== void 0) {
|
|
43
34
|
const entry = entries.get(key);
|
|
@@ -56,7 +47,7 @@ function createWorkspaceQueryCache(options) {
|
|
|
56
47
|
const active = requests.get(key);
|
|
57
48
|
if (active) return active;
|
|
58
49
|
const request = load().then((value) => {
|
|
59
|
-
return write(key, value
|
|
50
|
+
return write(key, value);
|
|
60
51
|
}).finally(() => {
|
|
61
52
|
if (requests.get(key) === request) requests.delete(key);
|
|
62
53
|
});
|
|
@@ -64,7 +55,7 @@ function createWorkspaceQueryCache(options) {
|
|
|
64
55
|
return request;
|
|
65
56
|
},
|
|
66
57
|
write(key, value) {
|
|
67
|
-
return write(key, value
|
|
58
|
+
return write(key, value);
|
|
68
59
|
}
|
|
69
60
|
};
|
|
70
61
|
}
|
|
@@ -72,4 +63,4 @@ function createWorkspaceQueryCache(options) {
|
|
|
72
63
|
export {
|
|
73
64
|
createWorkspaceQueryCache
|
|
74
65
|
};
|
|
75
|
-
//# sourceMappingURL=chunk-
|
|
66
|
+
//# sourceMappingURL=chunk-A4WCTHWS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../shared/query/workspaceQueryCache.ts"],"sourcesContent":["export interface WorkspaceQueryCacheEntry<TValue> {\n readonly resolvedAtUnixMs: number;\n readonly stale: boolean;\n readonly value: TValue;\n readonly version: number;\n}\n\nexport interface WorkspaceQueryCache<TValue> {\n invalidate(key?: string): void;\n read(key: string): WorkspaceQueryCacheEntry<TValue> | null;\n request(\n key: string,\n load: () => Promise<TValue>\n ): Promise<WorkspaceQueryCacheEntry<TValue>>;\n write(key: string, value: TValue): WorkspaceQueryCacheEntry<TValue>;\n}\n\ntype MutableWorkspaceQueryCacheEntry<TValue> = Omit<\n WorkspaceQueryCacheEntry<TValue>,\n \"stale\"\n> & { stale: boolean };\n\nconst DEFAULT_MAX_ENTRIES = 24;\n\nexport function createWorkspaceQueryCache<TValue>(options?: {\n maxEntries?: number;\n now?: () => number;\n}): WorkspaceQueryCache<TValue> {\n const maxEntries = Math.max(1, options?.maxEntries ?? DEFAULT_MAX_ENTRIES);\n const now = options?.now ?? Date.now;\n const entries = new Map<string, MutableWorkspaceQueryCacheEntry<TValue>>();\n const requests = new Map<string, Promise<WorkspaceQueryCacheEntry<TValue>>>();\n let version = 0;\n\n const touch = (\n key: string,\n entry: MutableWorkspaceQueryCacheEntry<TValue>\n ): void => {\n entries.delete(key);\n entries.set(key, entry);\n };\n\n const trim = (): void => {\n while (entries.size > maxEntries) {\n const oldestKey = entries.keys().next().value;\n if (typeof oldestKey !== \"string\") return;\n entries.delete(oldestKey);\n }\n };\n\n const write = (\n key: string,\n value: TValue\n ): MutableWorkspaceQueryCacheEntry<TValue> => {\n const entry: MutableWorkspaceQueryCacheEntry<TValue> = {\n resolvedAtUnixMs: now(),\n stale: false,\n value,\n version: ++version\n };\n touch(key, entry);\n trim();\n return entry;\n };\n\n return {\n invalidate(key) {\n if (key !== undefined) {\n const entry = entries.get(key);\n if (entry) entry.stale = true;\n return;\n }\n for (const entry of entries.values()) entry.stale = true;\n },\n read(key) {\n const entry = entries.get(key);\n if (!entry) return null;\n touch(key, entry);\n return entry;\n },\n request(key, load) {\n const active = requests.get(key);\n if (active) return active;\n const request = load()\n .then((value): WorkspaceQueryCacheEntry<TValue> => {\n return write(key, value);\n })\n .finally(() => {\n if (requests.get(key) === request) requests.delete(key);\n });\n requests.set(key, request);\n return request;\n },\n write(key, value) {\n return write(key, value);\n }\n };\n}\n"],"mappings":";AAsBA,IAAM,sBAAsB;AAErB,SAAS,0BAAkC,SAGlB;AAC9B,QAAM,aAAa,KAAK,IAAI,GAAG,SAAS,cAAc,mBAAmB;AACzE,QAAM,MAAM,SAAS,OAAO,KAAK;AACjC,QAAM,UAAU,oBAAI,IAAqD;AACzE,QAAM,WAAW,oBAAI,IAAuD;AAC5E,MAAI,UAAU;AAEd,QAAM,QAAQ,CACZ,KACA,UACS;AACT,YAAQ,OAAO,GAAG;AAClB,YAAQ,IAAI,KAAK,KAAK;AAAA,EACxB;AAEA,QAAM,OAAO,MAAY;AACvB,WAAO,QAAQ,OAAO,YAAY;AAChC,YAAM,YAAY,QAAQ,KAAK,EAAE,KAAK,EAAE;AACxC,UAAI,OAAO,cAAc,SAAU;AACnC,cAAQ,OAAO,SAAS;AAAA,IAC1B;AAAA,EACF;AAEA,QAAM,QAAQ,CACZ,KACA,UAC4C;AAC5C,UAAM,QAAiD;AAAA,MACrD,kBAAkB,IAAI;AAAA,MACtB,OAAO;AAAA,MACP;AAAA,MACA,SAAS,EAAE;AAAA,IACb;AACA,UAAM,KAAK,KAAK;AAChB,SAAK;AACL,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,WAAW,KAAK;AACd,UAAI,QAAQ,QAAW;AACrB,cAAM,QAAQ,QAAQ,IAAI,GAAG;AAC7B,YAAI,MAAO,OAAM,QAAQ;AACzB;AAAA,MACF;AACA,iBAAW,SAAS,QAAQ,OAAO,EAAG,OAAM,QAAQ;AAAA,IACtD;AAAA,IACA,KAAK,KAAK;AACR,YAAM,QAAQ,QAAQ,IAAI,GAAG;AAC7B,UAAI,CAAC,MAAO,QAAO;AACnB,YAAM,KAAK,KAAK;AAChB,aAAO;AAAA,IACT;AAAA,IACA,QAAQ,KAAK,MAAM;AACjB,YAAM,SAAS,SAAS,IAAI,GAAG;AAC/B,UAAI,OAAQ,QAAO;AACnB,YAAM,UAAU,KAAK,EAClB,KAAK,CAAC,UAA4C;AACjD,eAAO,MAAM,KAAK,KAAK;AAAA,MACzB,CAAC,EACA,QAAQ,MAAM;AACb,YAAI,SAAS,IAAI,GAAG,MAAM,QAAS,UAAS,OAAO,GAAG;AAAA,MACxD,CAAC;AACH,eAAS,IAAI,KAAK,OAAO;AACzB,aAAO;AAAA,IACT;AAAA,IACA,MAAM,KAAK,OAAO;AAChB,aAAO,MAAM,KAAK,KAAK;AAAA,IACzB;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createWorkspaceQueryCache
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-A4WCTHWS.js";
|
|
4
4
|
import {
|
|
5
5
|
AGENT_GUI_COLLAPSED_MIN_WIDTH_PX,
|
|
6
6
|
AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX,
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
resolveAgentGuiSessionProviderFlatIconUrl,
|
|
13
13
|
resolveNextAgentGUIConversationRailWidthPx,
|
|
14
14
|
shouldAutoCollapseAgentGUIConversationRail
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-HGHNKOR2.js";
|
|
16
16
|
import {
|
|
17
17
|
AGENT_PROVIDERS,
|
|
18
18
|
AGENT_PROVIDER_LABEL,
|
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
resolveAgentGUIFirstUserMessageDisplayPrompt,
|
|
30
30
|
resolveAgentGUIProviderDisplayLabel,
|
|
31
31
|
resolveAgentGUIProviderIdentity
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-3QIE72RQ.js";
|
|
33
33
|
import {
|
|
34
34
|
resolveAgentGuiWorkbenchProviderLabel
|
|
35
35
|
} from "./chunk-R2ZADXRB.js";
|
|
@@ -64,7 +64,7 @@ import {
|
|
|
64
64
|
toLocalShortDateTime,
|
|
65
65
|
updateAgentComposerDraft,
|
|
66
66
|
useProjectedAgentConversation
|
|
67
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-HHQTW2VC.js";
|
|
68
68
|
import {
|
|
69
69
|
agentRichTextContentToPromptText,
|
|
70
70
|
createAgentRichTextInputExtensions,
|
|
@@ -74,14 +74,15 @@ import {
|
|
|
74
74
|
plainTextToAgentRichTextInlineContent,
|
|
75
75
|
skillDescriptionForDisplay,
|
|
76
76
|
skillTriggerForPrefix
|
|
77
|
-
} from "./chunk-
|
|
77
|
+
} from "./chunk-QMU5KFPY.js";
|
|
78
78
|
import {
|
|
79
79
|
openAgentEnvPanel
|
|
80
80
|
} from "./chunk-VMQNG2KI.js";
|
|
81
81
|
import {
|
|
82
82
|
AgentFileMentionPalette,
|
|
83
|
-
agentMentionItemKey
|
|
84
|
-
|
|
83
|
+
agentMentionItemKey,
|
|
84
|
+
isAgentMentionItemDisabled
|
|
85
|
+
} from "./chunk-7D7L3JGA.js";
|
|
85
86
|
import {
|
|
86
87
|
normalizeAgentGUIAgents,
|
|
87
88
|
projectAgentGUIAgentsToInternalTargets
|
|
@@ -92,7 +93,7 @@ import {
|
|
|
92
93
|
DEFAULT_AGENT_MENTION_FILTER,
|
|
93
94
|
agentGuiScheduler,
|
|
94
95
|
buildWorkspaceAgentActivityListViewModel
|
|
95
|
-
} from "./chunk-
|
|
96
|
+
} from "./chunk-HWMDMZPV.js";
|
|
96
97
|
import {
|
|
97
98
|
AGENT_RICH_TEXT_CARET_ANCHOR,
|
|
98
99
|
createAgentSessionMarkdownLink,
|
|
@@ -103,7 +104,7 @@ import {
|
|
|
103
104
|
mentionItemToAttrs,
|
|
104
105
|
normalizeAgentSessionMentionTitle,
|
|
105
106
|
parseMentionItemFromHref
|
|
106
|
-
} from "./chunk-
|
|
107
|
+
} from "./chunk-74ZOQONQ.js";
|
|
107
108
|
import {
|
|
108
109
|
AgentInteractivePromptSurface,
|
|
109
110
|
PLAN_IMPLEMENTATION_ACTION_FEEDBACK,
|
|
@@ -113,7 +114,7 @@ import {
|
|
|
113
114
|
dispatchAgentPlanPromptAction,
|
|
114
115
|
latestPlanTurnId,
|
|
115
116
|
planImplementationPromptFromPlanTurn
|
|
116
|
-
} from "./chunk-
|
|
117
|
+
} from "./chunk-5O3KW33M.js";
|
|
117
118
|
import {
|
|
118
119
|
useEngineSelector
|
|
119
120
|
} from "./chunk-2RQM7PJN.js";
|
|
@@ -122,7 +123,7 @@ import {
|
|
|
122
123
|
ZoomableImage,
|
|
123
124
|
normalizeAgentApprovalPurpose,
|
|
124
125
|
resolveWorkspaceLinkAction
|
|
125
|
-
} from "./chunk-
|
|
126
|
+
} from "./chunk-WGUEDMSP.js";
|
|
126
127
|
import {
|
|
127
128
|
AgentTargetPresentationProvider,
|
|
128
129
|
cn,
|
|
@@ -140,7 +141,7 @@ import {
|
|
|
140
141
|
useAgentHostApi,
|
|
141
142
|
useOptionalAgentActivityRuntime,
|
|
142
143
|
useOptionalAgentHostApi
|
|
143
|
-
} from "./chunk-
|
|
144
|
+
} from "./chunk-RX6JAGC6.js";
|
|
144
145
|
import {
|
|
145
146
|
MANAGED_AGENT_ICON_FALLBACK_URL,
|
|
146
147
|
MANAGED_AGENT_ICON_URLS,
|
|
@@ -154,7 +155,7 @@ import {
|
|
|
154
155
|
AgentGuiI18nProvider,
|
|
155
156
|
translate,
|
|
156
157
|
useTranslation
|
|
157
|
-
} from "./chunk-
|
|
158
|
+
} from "./chunk-HLSEVZCW.js";
|
|
158
159
|
import {
|
|
159
160
|
migratedAgentGUIProviderIdentityCatalog,
|
|
160
161
|
resolveAgentGUIProviderCatalogIdentity,
|
|
@@ -18002,6 +18003,7 @@ function useComposerMentionActions(input) {
|
|
|
18002
18003
|
highlightedKey,
|
|
18003
18004
|
categoryCycleOrder: mentionSearchState.mode === "browse" ? mentionSearchState.categories : AGENT_MENTION_FILTER_TAB_ORDER,
|
|
18004
18005
|
getItemKey: agentMentionItemKey,
|
|
18006
|
+
isItemDisabled: isAgentMentionItemDisabled,
|
|
18005
18007
|
callbacks: {
|
|
18006
18008
|
onHighlightChange: (key) => {
|
|
18007
18009
|
setShouldCenterMentionHighlight(true);
|
|
@@ -24341,7 +24343,8 @@ function AgentComposer(props) {
|
|
|
24341
24343
|
state: mentionSearchState,
|
|
24342
24344
|
currentKey: null,
|
|
24343
24345
|
preferredKey,
|
|
24344
|
-
getItemKey: agentMentionItemKey
|
|
24346
|
+
getItemKey: agentMentionItemKey,
|
|
24347
|
+
isItemDisabled: isAgentMentionItemDisabled
|
|
24345
24348
|
});
|
|
24346
24349
|
autoMentionHighlightedKeyRef.current = nextKey;
|
|
24347
24350
|
setMentionHighlightedKey(nextKey);
|
|
@@ -24352,7 +24355,8 @@ function AgentComposer(props) {
|
|
|
24352
24355
|
const nextKey = repairMentionPaletteHighlight({
|
|
24353
24356
|
state: mentionSearchState,
|
|
24354
24357
|
currentKey: current,
|
|
24355
|
-
getItemKey: agentMentionItemKey
|
|
24358
|
+
getItemKey: agentMentionItemKey,
|
|
24359
|
+
isItemDisabled: isAgentMentionItemDisabled
|
|
24356
24360
|
});
|
|
24357
24361
|
if (nextKey === current && current !== autoMentionHighlightedKeyRef.current) {
|
|
24358
24362
|
return current;
|
|
@@ -29097,10 +29101,6 @@ function cachedConversationRailQueryFromFirstPages(page, scopeKey) {
|
|
|
29097
29101
|
conversationRailPageState(section)
|
|
29098
29102
|
);
|
|
29099
29103
|
}
|
|
29100
|
-
const sessions = [
|
|
29101
|
-
...page.pinned?.sessions ?? [],
|
|
29102
|
-
...page.sections.flatMap((section) => section.sessions)
|
|
29103
|
-
];
|
|
29104
29104
|
return {
|
|
29105
29105
|
queryState: {
|
|
29106
29106
|
pending: false,
|
|
@@ -29109,15 +29109,14 @@ function cachedConversationRailQueryFromFirstPages(page, scopeKey) {
|
|
|
29109
29109
|
sectionPageStates,
|
|
29110
29110
|
sections
|
|
29111
29111
|
},
|
|
29112
|
-
returnedSessionCount: sessions.length
|
|
29113
|
-
|
|
29114
|
-
|
|
29112
|
+
returnedSessionCount: (page.pinned?.sessions.length ?? 0) + page.sections.reduce(
|
|
29113
|
+
(count, section) => count + section.sessions.length,
|
|
29114
|
+
0
|
|
29115
|
+
),
|
|
29116
|
+
sectionCount: page.sections.length + (page.pinned ? 1 : 0)
|
|
29115
29117
|
};
|
|
29116
29118
|
}
|
|
29117
29119
|
function applyCachedConversationRailQuery(input) {
|
|
29118
|
-
if (input.cache.claimIngestion(input.scopeKey, input.entry.version)) {
|
|
29119
|
-
input.upsertSessions(input.entry.value.sessions);
|
|
29120
|
-
}
|
|
29121
29120
|
return input.entry.value.queryState;
|
|
29122
29121
|
}
|
|
29123
29122
|
function writeConversationRailQueryCache(input) {
|
|
@@ -29131,8 +29130,7 @@ function writeConversationRailQueryCache(input) {
|
|
|
29131
29130
|
(count, section) => count + section.sessionIds.length,
|
|
29132
29131
|
0
|
|
29133
29132
|
),
|
|
29134
|
-
sectionCount: queryState.sections.length
|
|
29135
|
-
sessions: []
|
|
29133
|
+
sectionCount: queryState.sections.length
|
|
29136
29134
|
});
|
|
29137
29135
|
}
|
|
29138
29136
|
function replaceConversationRailFirstPages(input) {
|
|
@@ -29588,7 +29586,7 @@ var AgentGUIConversationRailQueryController = class {
|
|
|
29588
29586
|
};
|
|
29589
29587
|
handleEngineState(state) {
|
|
29590
29588
|
const next = projectConversationRailMembershipRecords(state);
|
|
29591
|
-
if (this.ingestingSessions || !this.runtimeSectionsEnabled()) {
|
|
29589
|
+
if (this.ingestingSessions || !this.runtimeSectionsEnabled() || state.engineRuntime.workspaceReconcile.status === "loading") {
|
|
29592
29590
|
this.previousMembershipRecords = next;
|
|
29593
29591
|
return;
|
|
29594
29592
|
}
|
|
@@ -29631,7 +29629,7 @@ var AgentGUIConversationRailQueryController = class {
|
|
|
29631
29629
|
const cached = this.sessionSectionsQueryCache.read(scopeKey);
|
|
29632
29630
|
const cacheApplyStartedAt = cached && this.providerSwitchDiagnostics.hasPending(scopeKey) ? this.diagnosticNow() : null;
|
|
29633
29631
|
if (cached && this.queryState.resolvedScopeKey !== scopeKey) {
|
|
29634
|
-
this.applyCachedFirstPages(
|
|
29632
|
+
this.applyCachedFirstPages(cached);
|
|
29635
29633
|
this.emit();
|
|
29636
29634
|
}
|
|
29637
29635
|
if (cached && !cached.stale && this.cacheNow() - cached.resolvedAtUnixMs <= this.cacheFreshMs) {
|
|
@@ -29663,13 +29661,17 @@ var AgentGUIConversationRailQueryController = class {
|
|
|
29663
29661
|
limitPerSection: SECTION_PAGE_SIZE2,
|
|
29664
29662
|
workspaceId: this.workspaceId
|
|
29665
29663
|
});
|
|
29664
|
+
this.upsertSessions([
|
|
29665
|
+
...page.pinned?.sessions ?? [],
|
|
29666
|
+
...page.sections.flatMap((section) => section.sessions)
|
|
29667
|
+
]);
|
|
29666
29668
|
return cachedConversationRailQueryFromFirstPages(page, scopeKey);
|
|
29667
29669
|
}).then((entry) => {
|
|
29668
29670
|
if (requestSequence !== this.pagingRequestSequence || scopeKey !== this.railSectionQueryKey) {
|
|
29669
29671
|
return;
|
|
29670
29672
|
}
|
|
29671
29673
|
const requestResolvedAt = this.diagnosticNow();
|
|
29672
|
-
this.applyCachedFirstPages(
|
|
29674
|
+
this.applyCachedFirstPages(entry);
|
|
29673
29675
|
this.emit();
|
|
29674
29676
|
const completedAt = this.diagnosticNow();
|
|
29675
29677
|
this.providerSwitchDiagnostics.complete(scopeKey, {
|
|
@@ -29737,13 +29739,8 @@ var AgentGUIConversationRailQueryController = class {
|
|
|
29737
29739
|
this.emit();
|
|
29738
29740
|
});
|
|
29739
29741
|
}
|
|
29740
|
-
applyCachedFirstPages(
|
|
29741
|
-
this.queryState = applyCachedConversationRailQuery({
|
|
29742
|
-
cache: this.sessionSectionsQueryCache,
|
|
29743
|
-
entry,
|
|
29744
|
-
scopeKey,
|
|
29745
|
-
upsertSessions: (sessions) => this.upsertSessions(sessions)
|
|
29746
|
-
});
|
|
29742
|
+
applyCachedFirstPages(entry) {
|
|
29743
|
+
this.queryState = applyCachedConversationRailQuery({ entry });
|
|
29747
29744
|
}
|
|
29748
29745
|
writeCurrentQueryCache() {
|
|
29749
29746
|
writeConversationRailQueryCache({
|
|
@@ -35330,4 +35327,4 @@ export {
|
|
|
35330
35327
|
resolveAgentGUIAgentTarget,
|
|
35331
35328
|
AgentGUI
|
|
35332
35329
|
};
|
|
35333
|
-
//# sourceMappingURL=chunk-
|
|
35330
|
+
//# sourceMappingURL=chunk-CVPI23GJ.js.map
|