



























@@ -445,7 +445,6 @@ type SessionOptionEntry = {
445445label: string;
446446scopeLabel: string;
447447title: string;
448-parentKey?: string;
449448};
450449451450export type SessionOptionGroup = {
@@ -478,22 +477,28 @@ function isAgentMainSessionKey(key: string): boolean {
478477479478function resolvePreferredSessionForAgent(state: AppViewState, agentId: string): string {
480479const normalizedAgentId = normalizeAgentId(agentId);
481-const defaultAgentId = normalizeAgentId(state.agentsList?.defaultId ?? "main");
482-const currentParsed = parseAgentSessionKey(state.sessionKey);
483-if (normalizeAgentId(currentParsed?.agentId ?? defaultAgentId) === normalizedAgentId) {
480+if (resolveChatAgentFilterId(state, state.sessionKey) === normalizedAgentId) {
484481return state.sessionKey;
485482}
486-const rows = state.sessionsResult?.sessions ?? [];
487-let row: (typeof rows)[number] | undefined;
488-for (const entry of rows) {
489-if (!isSessionKeyTiedToAgent(entry.key, normalizedAgentId, defaultAgentId)) {
490-continue;
491-}
492-if (!row || (entry.updatedAt ?? 0) > (row.updatedAt ?? 0)) {
493-row = entry;
494-}
483+const defaultAgentId = normalizeAgentId(state.agentsList?.defaultId ?? "main");
484+const eligible = (state.sessionsResult?.sessions ?? [])
485+.filter((row) => {
486+if (!isSessionKeyTiedToAgent(row.key, normalizedAgentId, defaultAgentId)) {
487+return false;
488+}
489+if (row.kind === "global" || row.kind === "unknown") {
490+return false;
491+}
492+if (isCronSessionKey(row.key)) {
493+return false;
494+}
495+return !isSubagentSessionKey(row.key) && !row.spawnedBy;
496+})
497+.toSorted((a, b) => (b.updatedAt ?? 0) - (a.updatedAt ?? 0));
498+if (eligible[0]?.key) {
499+return eligible[0].key;
495500}
496-return row?.key ?? buildAgentMainSessionKey({ agentId: normalizedAgentId });
501+return buildAgentMainSessionKey({ agentId: normalizedAgentId });
497502}
498503499504function resolveChatAgentFilterOptions(state: AppViewState): ChatAgentFilterOption[] {
@@ -556,7 +561,7 @@ export function resolveSessionOptionGroups(
556561return created;
557562};
558563559-const addOption = (key: string, parentKey?: string, isChild?: boolean) => {
564+const addOption = (key: string) => {
560565if (!key || seenKeys.has(key)) {
561566return;
562567}
@@ -570,16 +575,11 @@ export function resolveSessionOptionGroups(
570575)
571576 : ensureGroup("other", "Other Sessions");
572577const scopeLabel = normalizeOptionalString(parsed?.rest) ?? key;
573-let label = resolveSessionScopedOptionLabel(key, row, parsed?.rest);
574-if (isChild) {
575-label = `└─ ${label.replace(/^Subagent:\s*/i, "")}`;
576-}
577578group.options.push({
578579 key,
579- label,
580+label: resolveSessionScopedOptionLabel(key, row, parsed?.rest),
580581 scopeLabel,
581582title: key,
582- ...(parentKey ? { parentKey } : {}),
583583});
584584};
585585@@ -597,48 +597,17 @@ export function resolveSessionOptionGroups(
597597continue;
598598}
599599const isSubagent = isSubagentSessionKey(row.key) || !!row.spawnedBy;
600-if (isSubagent && row.spawnedBy && byKey.has(row.spawnedBy)) {
601-addOption(row.key, row.spawnedBy, true);
602-} else {
603-addOption(row.key);
600+if (isSubagent && row.key !== sessionKey) {
601+continue;
604602}
603+addOption(row.key);
605604}
606605if (byKey.has(sessionKey)) {
607606addOption(sessionKey);
608-} else if (isAgentMainSessionKey(sessionKey)) {
607+} else if (isAgentMainSessionKey(sessionKey) || isSubagentSessionKey(sessionKey)) {
609608addOption(sessionKey);
610609}
611610612-for (const group of groups.values()) {
613-const options = group.options;
614-const optionKeys = new Set(options.map((option) => option.key));
615-const childrenByParent = new Map<string, SessionOptionEntry[]>();
616-for (const option of options) {
617-if (option.parentKey && optionKeys.has(option.parentKey)) {
618-const siblings = childrenByParent.get(option.parentKey);
619-if (siblings) {
620-siblings.push(option);
621-} else {
622-childrenByParent.set(option.parentKey, [option]);
623-}
624-}
625-}
626-if (childrenByParent.size > 0) {
627-const reordered: SessionOptionEntry[] = [];
628-for (const option of options) {
629-if (option.parentKey && optionKeys.has(option.parentKey)) {
630-continue;
631-}
632-reordered.push(option);
633-const children = childrenByParent.get(option.key);
634-if (children) {
635-reordered.push(...children);
636-}
637-}
638-options.splice(0, options.length, ...reordered);
639-}
640-}
641-642611for (const group of groups.values()) {
643612const counts = new Map<string, number>();
644613for (const option of group.options) {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。