@tutti-os/agent-gui 0.0.157 → 0.0.158

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.
Files changed (76) hide show
  1. package/dist/{AgentRichTextReadonly-J5GZIS7X.js → AgentRichTextReadonly-ZGW4IZ6O.js} +7 -7
  2. package/dist/agent-conversation/index.js +10 -10
  3. package/dist/agent-env/index.d.ts +6 -1
  4. package/dist/agent-env/index.js +1 -1
  5. package/dist/agent-gui.d.ts +1 -1
  6. package/dist/agent-gui.js +21 -21
  7. package/dist/agent-message-center/index.js +7 -7
  8. package/dist/{chunk-3VKRWAKQ.js → chunk-3PSYZ53C.js} +3 -3
  9. package/dist/{chunk-EFEOPMIV.js → chunk-55UKPTLG.js} +3 -3
  10. package/dist/{chunk-6CUELYIF.js → chunk-5CLSJWUN.js} +1 -28
  11. package/dist/chunk-5CLSJWUN.js.map +1 -0
  12. package/dist/{chunk-HBJJY2AC.js → chunk-6II57C72.js} +2 -2
  13. package/dist/{chunk-GBTKLNMX.js → chunk-ABUBJDTO.js} +6 -6
  14. package/dist/{chunk-7KVZPJ3O.js → chunk-AODSTIED.js} +2 -2
  15. package/dist/{chunk-XYKQJMVT.js → chunk-CBQMF744.js} +2 -2
  16. package/dist/{chunk-3EMKK6BN.js → chunk-GUFEHWUX.js} +5 -1
  17. package/dist/chunk-GUFEHWUX.js.map +1 -0
  18. package/dist/{chunk-ZCBP5VTT.js → chunk-J4QLQETO.js} +2 -2
  19. package/dist/{chunk-QMMWKQOT.js → chunk-LCFMJPNA.js} +1 -18
  20. package/dist/{chunk-QMMWKQOT.js.map → chunk-LCFMJPNA.js.map} +1 -1
  21. package/dist/{chunk-SFRFW3GC.js → chunk-PAVNEKRU.js} +3 -3
  22. package/dist/{chunk-AZQRB56U.js → chunk-PQPNDL4A.js} +3 -3
  23. package/dist/{chunk-R2ZADXRB.js → chunk-SZVHT57M.js} +23 -4
  24. package/dist/chunk-SZVHT57M.js.map +1 -0
  25. package/dist/{chunk-FM42UN2J.js → chunk-THBCAUBR.js} +9 -3
  26. package/dist/chunk-THBCAUBR.js.map +1 -0
  27. package/dist/{chunk-M66OSHIF.js → chunk-UMJIM225.js} +32 -33
  28. package/dist/chunk-UMJIM225.js.map +1 -0
  29. package/dist/{chunk-ESJWSRFD.js → chunk-VVB5N5ON.js} +2 -2
  30. package/dist/{chunk-BHB457ZP.js → chunk-YGBZKQ2S.js} +3 -4
  31. package/dist/chunk-YGBZKQ2S.js.map +1 -0
  32. package/dist/{chunk-IFOIUN2O.js → chunk-YRAKPTXS.js} +11 -12
  33. package/dist/{chunk-IFOIUN2O.js.map → chunk-YRAKPTXS.js.map} +1 -1
  34. package/dist/{chunk-TUWQV2MC.js → chunk-YSA4MXR5.js} +2 -2
  35. package/dist/{chunk-WNGTC3Y2.js → chunk-YUJY75WA.js} +3 -3
  36. package/dist/{chunk-UTJKC2LY.js → chunk-ZWLWT3TZ.js} +4 -4
  37. package/dist/context-mention-palette/index.js +8 -8
  38. package/dist/dock-icons.js +3 -3
  39. package/dist/index.d.ts +1 -1
  40. package/dist/index.js +21 -21
  41. package/dist/mention-search.js +7 -7
  42. package/dist/provider-icons.js +1 -1
  43. package/dist/provider-identity.js +1 -1
  44. package/dist/workbench/contribution.js +9 -9
  45. package/dist/workbench/index.js +9 -9
  46. package/dist/workbench/launch.js +3 -3
  47. package/dist/workbench/providerCatalog.d.ts +12 -3
  48. package/dist/workbench/providerCatalog.js +14 -2
  49. package/dist/workbench/sessionTitle.js +2 -2
  50. package/dist/workbench/state.js +3 -3
  51. package/dist/workspace-settings-panel.d.ts +12 -0
  52. package/dist/workspace-settings-panel.js +1 -1
  53. package/package.json +13 -13
  54. package/dist/app/renderer/assets/icons/agent-vinyls/hermes-vinyl.png +0 -0
  55. package/dist/app/renderer/assets/icons/agents/hermes-rounded.png +0 -0
  56. package/dist/app/renderer/assets/icons/agents/provider-rail-hermes-colorful.png +0 -0
  57. package/dist/chunk-3EMKK6BN.js.map +0 -1
  58. package/dist/chunk-6CUELYIF.js.map +0 -1
  59. package/dist/chunk-BHB457ZP.js.map +0 -1
  60. package/dist/chunk-FM42UN2J.js.map +0 -1
  61. package/dist/chunk-M66OSHIF.js.map +0 -1
  62. package/dist/chunk-R2ZADXRB.js.map +0 -1
  63. /package/dist/{AgentRichTextReadonly-J5GZIS7X.js.map → AgentRichTextReadonly-ZGW4IZ6O.js.map} +0 -0
  64. /package/dist/{chunk-3VKRWAKQ.js.map → chunk-3PSYZ53C.js.map} +0 -0
  65. /package/dist/{chunk-EFEOPMIV.js.map → chunk-55UKPTLG.js.map} +0 -0
  66. /package/dist/{chunk-HBJJY2AC.js.map → chunk-6II57C72.js.map} +0 -0
  67. /package/dist/{chunk-GBTKLNMX.js.map → chunk-ABUBJDTO.js.map} +0 -0
  68. /package/dist/{chunk-7KVZPJ3O.js.map → chunk-AODSTIED.js.map} +0 -0
  69. /package/dist/{chunk-XYKQJMVT.js.map → chunk-CBQMF744.js.map} +0 -0
  70. /package/dist/{chunk-ZCBP5VTT.js.map → chunk-J4QLQETO.js.map} +0 -0
  71. /package/dist/{chunk-SFRFW3GC.js.map → chunk-PAVNEKRU.js.map} +0 -0
  72. /package/dist/{chunk-AZQRB56U.js.map → chunk-PQPNDL4A.js.map} +0 -0
  73. /package/dist/{chunk-ESJWSRFD.js.map → chunk-VVB5N5ON.js.map} +0 -0
  74. /package/dist/{chunk-TUWQV2MC.js.map → chunk-YSA4MXR5.js.map} +0 -0
  75. /package/dist/{chunk-WNGTC3Y2.js.map → chunk-YUJY75WA.js.map} +0 -0
  76. /package/dist/{chunk-UTJKC2LY.js.map → chunk-ZWLWT3TZ.js.map} +0 -0
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  agentGUIProviderIdentityDisplayName,
6
6
  resolveMigratedAgentGUIProviderIdentity
7
- } from "./chunk-6CUELYIF.js";
7
+ } from "./chunk-5CLSJWUN.js";
8
8
 
9
9
  // agentActivityRuntime.tsx
10
10
  import {
@@ -213,4 +213,4 @@ export {
213
213
  getOptionalAgentHostApi,
214
214
  workspaceAgentProviderLabel
215
215
  };
216
- //# sourceMappingURL=chunk-ESJWSRFD.js.map
216
+ //# sourceMappingURL=chunk-VVB5N5ON.js.map
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-MIJXEELH.js";
7
7
  import {
8
8
  resolveAgentGUIProviderCatalogIdentity
9
- } from "./chunk-6CUELYIF.js";
9
+ } from "./chunk-5CLSJWUN.js";
10
10
 
11
11
  // contexts/settings/domain/agentSettings.providers.ts
12
12
  var AGENT_PROVIDERS = [
@@ -16,8 +16,7 @@ var AGENT_PROVIDERS = [
16
16
  "tutti-agent",
17
17
  "nexight",
18
18
  "opencode",
19
- "openclaw",
20
- "hermes"
19
+ "openclaw"
21
20
  ];
22
21
 
23
22
  // contexts/settings/domain/agentSettings.providerMeta.ts
@@ -375,4 +374,4 @@ export {
375
374
  resolveAgentGuiWorkbenchHeaderTitle,
376
375
  resolveAgentGuiWorkbenchSessionTitle
377
376
  };
378
- //# sourceMappingURL=chunk-BHB457ZP.js.map
377
+ //# sourceMappingURL=chunk-YGBZKQ2S.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../contexts/settings/domain/agentSettings.providers.ts","../contexts/settings/domain/agentSettings.providerMeta.ts","../shared/agentConversationTitleProjection.ts","../workbench/sessionTitle.ts"],"sourcesContent":["export const AGENT_PROVIDERS = [\n \"claude-code\",\n \"codex\",\n \"cursor\",\n \"tutti-agent\",\n \"nexight\",\n \"opencode\",\n \"openclaw\"\n] as const;\nexport const EXPERIMENTAL_AGENT_PROVIDERS = [] as const;\n\nexport type AgentProvider = (typeof AGENT_PROVIDERS)[number];\n\nexport function isValidProvider(value: unknown): value is AgentProvider {\n return (\n typeof value === \"string\" &&\n AGENT_PROVIDERS.includes(value as AgentProvider)\n );\n}\n\nexport function normalizeAgentProviderOrder(value: unknown): AgentProvider[] {\n if (!Array.isArray(value)) {\n return [...AGENT_PROVIDERS];\n }\n\n const normalized: AgentProvider[] = [];\n const seen = new Set<AgentProvider>();\n\n for (const item of value) {\n if (!isValidProvider(item)) {\n continue;\n }\n\n if (seen.has(item)) {\n continue;\n }\n\n seen.add(item);\n normalized.push(item);\n }\n\n for (const provider of AGENT_PROVIDERS) {\n if (seen.has(provider)) {\n continue;\n }\n\n seen.add(provider);\n normalized.push(provider);\n }\n\n return normalized;\n}\n","import { resolveAgentGUIProviderCatalogIdentity } from \"../../../providerIdentityCatalog.ts\";\nimport {\n AGENT_PROVIDERS,\n type AgentProvider\n} from \"./agentSettings.providers.ts\";\n\nexport const AGENT_PROVIDER_LABEL = Object.fromEntries(\n AGENT_PROVIDERS.map((provider) => {\n const identity = resolveAgentGUIProviderCatalogIdentity(provider);\n if (!identity) {\n throw new Error(`Missing provider identity for ${provider}`);\n }\n return [provider, identity.displayName];\n })\n) as Record<AgentProvider, string>;\n\nexport interface AgentProviderCapabilities {\n runtimeObservation: \"jsonl\" | \"provider-api\" | \"none\";\n experimental: boolean;\n}\n\nexport const AGENT_PROVIDER_CAPABILITIES: Record<\n AgentProvider,\n AgentProviderCapabilities\n> = {\n \"claude-code\": {\n runtimeObservation: \"jsonl\",\n experimental: false\n },\n codex: {\n runtimeObservation: \"jsonl\",\n experimental: false\n },\n \"tutti-agent\": {\n runtimeObservation: \"provider-api\",\n experimental: false\n },\n cursor: {\n runtimeObservation: \"jsonl\",\n experimental: false\n },\n nexight: {\n runtimeObservation: \"jsonl\",\n experimental: false\n },\n opencode: {\n runtimeObservation: \"provider-api\",\n experimental: false\n },\n openclaw: {\n runtimeObservation: \"jsonl\",\n experimental: false\n }\n};\n","import { AGENT_PROVIDER_LABEL } from \"../contexts/settings/domain/agentSettings.providerMeta.ts\";\nimport {\n isPendingActivationViable,\n type PendingActivationStatus,\n type AgentActivityMessage,\n type AgentPromptContentBlock\n} from \"@tutti-os/agent-activity-core\";\nimport {\n extractRichTextLinksFromContent,\n extractRichTextMentionsFromContent,\n removeRichTextMentionFromContent,\n type RichTextMentionRef\n} from \"@tutti-os/ui-rich-text/core\";\nimport { translateInUiLanguage } from \"../i18n/runtime.ts\";\nimport { resolveAgentGUIProviderCatalogIdentity } from \"../providerIdentityCatalog.ts\";\nimport type { AgentGUIProvider } from \"../types.ts\";\nimport type { WorkspaceAgentActivityTimelineItem } from \"./workspaceAgentTimelineTypes.ts\";\nimport { normalizeAgentTitleText } from \"./utils/agentTitleText.ts\";\n\nexport type AgentGUIResolvedProvider = AgentGUIProvider | \"unknown\";\nexport type AgentGUIConversationTitleFallback = \"untitled-conversation\" | null;\nexport type AgentGUIConversationTitleLeadingMentionKind =\n | \"agent\"\n | \"app\"\n | \"file\"\n | \"session\"\n | \"task\";\nexport type AgentGUIConversationTitleIconMentionKind = Extract<\n AgentGUIConversationTitleLeadingMentionKind,\n \"file\" | \"task\"\n>;\n\nconst AGENT_GUI_UNRESOLVED_PROVIDER: AgentGUIResolvedProvider = \"unknown\";\nconst AGENT_GUI_MAX_OPTIMISTIC_TITLE_CODE_POINTS = 120;\nconst AGENT_GUI_TRUNCATED_TITLE_SUFFIX = \"...\";\n\nexport function isAgentGUIProviderUnresolved(\n value: AgentGUIResolvedProvider\n): value is \"unknown\" {\n return value === AGENT_GUI_UNRESOLVED_PROVIDER;\n}\n\nexport interface AgentGUIConversationTitleMessage {\n id?: number | string | null;\n messageId?: string | null;\n version?: number | null;\n role?: string | null;\n kind?: string | null;\n payload?: {\n content?: unknown;\n displayPrompt?: unknown;\n text?: unknown;\n } | null;\n occurredAtUnixMs?: number | null;\n completedAtUnixMs?: number | null;\n startedAtUnixMs?: number | null;\n}\n\nexport function normalizeAgentGUIProviderIdentity(\n provider: string | null | undefined\n): AgentGUIResolvedProvider {\n const normalized = provider?.trim().toLowerCase() ?? \"\";\n const catalogIdentity = resolveAgentGUIProviderCatalogIdentity(normalized);\n if (catalogIdentity) {\n return catalogIdentity.providerId as AgentGUIProvider;\n }\n if (!/^[a-z][a-z0-9._:-]{0,127}$/.test(normalized)) {\n return \"unknown\";\n }\n return normalized as AgentGUIProvider;\n}\n\nfunction providerLabel(provider: AgentGUIProvider): string {\n return (AGENT_PROVIDER_LABEL as Record<string, string>)[provider] ?? provider;\n}\n\nexport function resolveAgentGUIProviderIdentity(input: {\n sessionProvider?: string | null;\n workspaceSessionProvider?: string | null;\n conversationProvider?: string | null;\n timelineItems?: readonly WorkspaceAgentActivityTimelineItem[];\n}): AgentGUIResolvedProvider {\n const candidates = [\n input.sessionProvider,\n input.workspaceSessionProvider,\n input.conversationProvider,\n timelineProviderHint(input.timelineItems ?? [])\n ];\n for (const candidate of candidates) {\n const normalized = normalizeAgentGUIProviderIdentity(candidate);\n if (normalized !== \"unknown\") {\n return normalized;\n }\n }\n return \"unknown\";\n}\n\nexport function resolveAgentGUIConversationTitle(\n title: string | null | undefined\n): {\n title: string;\n titleFallback: AgentGUIConversationTitleFallback;\n} {\n const normalizedTitle = stripAgentGUITitleTrailingPeriod(title?.trim() ?? \"\");\n if (normalizedTitle) {\n return {\n title: normalizedTitle,\n titleFallback: null\n };\n }\n return {\n title: \"\",\n titleFallback: \"untitled-conversation\"\n };\n}\n\nexport function deriveAgentGUIOptimisticConversationTitle(\n visiblePrompt: string | null | undefined\n): string {\n const normalizedTitle = normalizeAgentTitleText(visiblePrompt);\n const codePoints = Array.from(normalizedTitle);\n if (codePoints.length <= AGENT_GUI_MAX_OPTIMISTIC_TITLE_CODE_POINTS) {\n return normalizedTitle;\n }\n return `${codePoints\n .slice(\n 0,\n AGENT_GUI_MAX_OPTIMISTIC_TITLE_CODE_POINTS -\n AGENT_GUI_TRUNCATED_TITLE_SUFFIX.length\n )\n .join(\"\")\n .trimEnd()}${AGENT_GUI_TRUNCATED_TITLE_SUFFIX}`;\n}\n\nexport function resolveAgentGUIConversationTitleDisplayPrompt(input: {\n activation?: {\n content: readonly AgentPromptContentBlock[];\n displayPrompt?: string;\n mode: \"existing\" | \"new\";\n status: PendingActivationStatus;\n } | null;\n allowEmptyTitle?: boolean;\n firstUserDisplayPrompt?: string | null;\n messages?: readonly AgentActivityMessage[];\n title: string | null;\n}): string | null {\n const prompt = resolveAgentGUIConversationTitlePrompt(input);\n if (\n !prompt ||\n !isAgentGUIConversationTitleDisplayPromptEligible(prompt) ||\n !agentGUITitleMatchesDerivedPrompt(\n input.title,\n prompt,\n input.allowEmptyTitle\n )\n ) {\n return null;\n }\n return prompt;\n}\n\nexport function resolveAgentGUIConversationBrowserFreeTitle(input: {\n activation?: {\n content: readonly AgentPromptContentBlock[];\n displayPrompt?: string;\n mode: \"existing\" | \"new\";\n status: PendingActivationStatus;\n } | null;\n allowEmptyTitle?: boolean;\n firstUserDisplayPrompt?: string | null;\n messages?: readonly AgentActivityMessage[];\n title: string | null;\n}): string | null {\n const prompt = resolveAgentGUIConversationTitlePrompt(input);\n if (\n !prompt ||\n !agentGUITitleMatchesDerivedPrompt(\n input.title,\n prompt,\n input.allowEmptyTitle\n )\n ) {\n return input.title;\n }\n const presentationPrompt = removeAgentGUIBrowserElementMentions(prompt);\n return presentationPrompt === prompt\n ? input.title\n : deriveAgentGUIOptimisticConversationTitle(presentationPrompt);\n}\n\nexport function resolveAgentGUIConversationTitleLeadingMentionKind(\n displayPrompt: string | null | undefined\n): AgentGUIConversationTitleLeadingMentionKind | null {\n const firstMention = extractRichTextMentionsFromContent(displayPrompt)[0];\n const mentionKind = firstMention\n ? agentGUIConversationTitleMentionKind(firstMention)\n : null;\n if (isAgentGUIConversationTitleIconMentionKind(mentionKind)) {\n return mentionKind;\n }\n if (firstMention) return null;\n return extractRichTextLinksFromContent(displayPrompt).length > 0\n ? \"file\"\n : null;\n}\n\nexport function isAgentGUIConversationTitleIconMentionKind(\n kind: AgentGUIConversationTitleLeadingMentionKind | null | undefined\n): kind is AgentGUIConversationTitleIconMentionKind {\n return kind === \"file\" || kind === \"task\";\n}\n\nfunction agentGUIConversationTitleMentionKind(\n mention: RichTextMentionRef\n): AgentGUIConversationTitleLeadingMentionKind | null {\n if (\n mention.providerId === \"agent-session\" ||\n mention.providerId === \"session\"\n ) {\n return \"session\";\n }\n if (\n mention.providerId === \"workspace-issue\" ||\n mention.providerId === \"issue\" ||\n mention.providerId === \"task\"\n ) {\n return \"task\";\n }\n if (mention.providerId === \"workspace-app\") return \"app\";\n if (mention.providerId === \"agent-target\") return \"agent\";\n if (mention.providerId === \"workspace-reference\") {\n return mention.scope?.source === \"task\"\n ? \"task\"\n : mention.scope?.source === \"app\"\n ? \"app\"\n : null;\n }\n return null;\n}\n\nfunction isAgentGUIConversationTitleDisplayPromptEligible(\n displayPrompt: string\n): boolean {\n const mentions = extractRichTextMentionsFromContent(displayPrompt);\n if (\n mentions.some(\n (mention) => {\n if (mention.providerId === \"browser-element\") {\n return false;\n }\n return !isAgentGUIConversationTitleIconMentionKind(\n agentGUIConversationTitleMentionKind(mention)\n );\n }\n )\n ) {\n return false;\n }\n return (\n mentions.length > 0 ||\n extractRichTextLinksFromContent(displayPrompt).length > 0\n );\n}\n\nfunction resolveAgentGUIConversationTitlePrompt(input: {\n activation?: {\n content: readonly AgentPromptContentBlock[];\n displayPrompt?: string;\n mode: \"existing\" | \"new\";\n status: PendingActivationStatus;\n } | null;\n firstUserDisplayPrompt?: string | null;\n messages?: readonly AgentActivityMessage[];\n}): string {\n const activationPrompt =\n input.activation?.mode === \"new\" &&\n isPendingActivationViable(input.activation)\n ? agentGUIActivationPromptText(\n input.activation.content,\n input.activation.displayPrompt ?? null\n )\n : \"\";\n return (\n activationPrompt ||\n input.firstUserDisplayPrompt?.trim() ||\n resolveAgentGUIFirstUserMessageDisplayPrompt(input.messages ?? [])\n );\n}\n\nfunction removeAgentGUIBrowserElementMentions(prompt: string): string {\n return extractRichTextMentionsFromContent(prompt)\n .filter((mention) => mention.providerId === \"browser-element\")\n .reduce(\n (content, mention) => removeRichTextMentionFromContent(content, mention),\n prompt\n );\n}\n\nexport function resolveAgentGUIFirstUserMessageDisplayPrompt(\n messages: readonly AgentActivityMessage[]\n): string {\n const message = messages.find(\n (candidate) =>\n candidate.role.trim().toLowerCase() === \"user\" &&\n candidate.kind.trim().toLowerCase() === \"text\"\n );\n if (!message) {\n return \"\";\n }\n return (\n agentGUIStringValue(message.payload.displayPrompt) ||\n agentGUIPromptTextFromUnknownContent(message.payload.content) ||\n agentGUIStringValue(message.payload.text) ||\n agentGUIStringValue(message.payload.content)\n );\n}\n\nfunction agentGUIPromptTextFromUnknownContent(content: unknown): string {\n if (!Array.isArray(content)) {\n return \"\";\n }\n return content\n .flatMap((value) => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return [];\n }\n const block = value as Record<string, unknown>;\n return block.type === \"text\" && typeof block.text === \"string\"\n ? [block.text.trim()]\n : [];\n })\n .filter(Boolean)\n .join(\"\\n\");\n}\n\nfunction agentGUIActivationPromptText(\n content: readonly AgentPromptContentBlock[],\n displayPrompt: string | null\n): string {\n const display = displayPrompt?.trim() ?? \"\";\n if (display) {\n return display;\n }\n return content\n .filter((block) => block.type === \"text\")\n .map((block) => block.text?.trim() ?? \"\")\n .filter(Boolean)\n .join(\"\\n\");\n}\n\nfunction agentGUITitleMatchesDerivedPrompt(\n title: string | null,\n prompt: string,\n allowEmptyTitle = false\n): boolean {\n const canonicalTitle = title?.trim() ?? \"\";\n if (!canonicalTitle) {\n return allowEmptyTitle;\n }\n const derivedTitle = normalizeAgentTitleText(prompt);\n if (canonicalTitle === derivedTitle) {\n return true;\n }\n const runes = Array.from(derivedTitle);\n const truncatedDerivedTitle =\n runes.length > AGENT_GUI_MAX_OPTIMISTIC_TITLE_CODE_POINTS\n ? `${runes\n .slice(\n 0,\n AGENT_GUI_MAX_OPTIMISTIC_TITLE_CODE_POINTS -\n AGENT_GUI_TRUNCATED_TITLE_SUFFIX.length\n )\n .join(\"\")\n .trim()}${AGENT_GUI_TRUNCATED_TITLE_SUFFIX}`\n : derivedTitle;\n return canonicalTitle === truncatedDerivedTitle;\n}\n\nfunction agentGUIStringValue(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nexport function resolveAgentGUIConversationDisplayTitle(\n input: {\n title: string;\n titleFallback?: AgentGUIConversationTitleFallback;\n },\n untitledConversationLabel: string\n): string {\n if (input.title) {\n return stripAgentGUITitleTrailingPeriod(input.title.trim());\n }\n if (input.titleFallback === \"untitled-conversation\") {\n return stripAgentGUITitleTrailingPeriod(untitledConversationLabel);\n }\n return \"\";\n}\n\nexport function resolveAgentGUIDockConversationTitle(input: {\n provider: AgentGUIResolvedProvider;\n title: string;\n titleFallback?: AgentGUIConversationTitleFallback;\n}): string | null {\n return resolveAgentGUIExplicitConversationTitle(input);\n}\n\nexport function resolveAgentGUIExplicitConversationTitle(input: {\n provider: AgentGUIResolvedProvider;\n title: string;\n titleFallback?: AgentGUIConversationTitleFallback;\n}): string | null {\n if (input.titleFallback) {\n return null;\n }\n\n const title = stripAgentGUITitleTrailingPeriod(input.title.trim());\n if (!title) {\n return null;\n }\n if (isAgentGUIUntitledTaskTitle(title)) {\n return null;\n }\n\n if (input.provider !== \"unknown\" && title === providerLabel(input.provider)) {\n return null;\n }\n\n return title;\n}\n\nexport function resolveAgentGUIExplicitConversationTitleFromMessages(input: {\n messages: readonly AgentGUIConversationTitleMessage[];\n provider: AgentGUIResolvedProvider;\n title: string | null | undefined;\n}): string | null {\n const explicitTitle = resolveAgentGUIExplicitConversationTitle({\n provider: input.provider,\n title: input.title?.trim() ?? \"\"\n });\n if (explicitTitle) {\n return explicitTitle;\n }\n return resolveAgentGUIExplicitConversationTitle({\n provider: input.provider,\n title: firstAgentGUIUserMessageTitle(input.messages)\n });\n}\n\nexport function resolveAgentGUIProviderDisplayLabel(\n provider: string | null | undefined,\n fallbackAgentLabel: string\n): string {\n const resolvedProvider = normalizeAgentGUIProviderIdentity(provider);\n if (resolvedProvider === \"unknown\") {\n return fallbackAgentLabel;\n }\n return providerLabel(resolvedProvider);\n}\n\nexport function firstAgentGUIUserMessageTitle(\n messages: readonly AgentGUIConversationTitleMessage[]\n): string {\n const userMessage = [...messages]\n .filter(\n (message) =>\n messageRole(message) === \"user\" && messageText(message).length > 0\n )\n .sort(compareMessagesAscending)[0];\n return userMessage ? messageText(userMessage) : \"\";\n}\n\nfunction messageRole(\n message: AgentGUIConversationTitleMessage\n): \"user\" | \"agent\" | null {\n const role = message.role?.trim().toLowerCase();\n if (role === \"user\") {\n return \"user\";\n }\n if (role === \"assistant\" || role === \"agent\") {\n return \"agent\";\n }\n const kind = message.kind?.trim().toLowerCase() ?? \"\";\n if (kind === \"message.user\") {\n return \"user\";\n }\n if (kind === \"message.assistant\" || kind === \"message.agent\") {\n return \"agent\";\n }\n return null;\n}\n\nfunction messageText(message: AgentGUIConversationTitleMessage): string {\n const payload = message.payload;\n const displayPrompt =\n typeof payload?.displayPrompt === \"string\" ? payload.displayPrompt : \"\";\n const text = typeof payload?.text === \"string\" ? payload.text : \"\";\n const content = typeof payload?.content === \"string\" ? payload.content : \"\";\n return normalizeAgentTitleText(displayPrompt || text || content);\n}\n\nfunction compareMessagesAscending(\n left: AgentGUIConversationTitleMessage,\n right: AgentGUIConversationTitleMessage\n): number {\n const leftTime =\n left.occurredAtUnixMs ??\n left.completedAtUnixMs ??\n left.startedAtUnixMs ??\n 0;\n const rightTime =\n right.occurredAtUnixMs ??\n right.completedAtUnixMs ??\n right.startedAtUnixMs ??\n 0;\n const timeDiff = leftTime - rightTime;\n if (timeDiff !== 0) {\n return timeDiff;\n }\n const sequenceDiff =\n messageSequence(left) - messageSequence(right) ||\n (left.messageId ?? \"\").localeCompare(right.messageId ?? \"\");\n return sequenceDiff;\n}\n\nfunction messageSequence(message: AgentGUIConversationTitleMessage): number {\n const numericId =\n typeof message.id === \"number\" && Number.isFinite(message.id)\n ? message.id\n : 0;\n return message.version ?? numericId;\n}\n\nfunction stripAgentGUITitleTrailingPeriod(title: string): string {\n return title\n .trimEnd()\n .replace(/[.。]+$/u, \"\")\n .trimEnd();\n}\n\nfunction isAgentGUIUntitledTaskTitle(title: string): boolean {\n return localizedAgentGUIUntitledTaskLabels().has(compactTitleText(title));\n}\n\nfunction localizedAgentGUIUntitledTaskLabels(): Set<string> {\n return new Set(\n ([\"en\", \"zh-CN\"] as const)\n .map((language) =>\n compactTitleText(\n translateInUiLanguage(\n language,\n \"agentHost.workspaceAgentsUntitledConversation\"\n )\n )\n )\n .filter(Boolean)\n );\n}\n\nfunction timelineProviderHint(\n timelineItems: readonly WorkspaceAgentActivityTimelineItem[]\n): string | null {\n for (const item of timelineItems) {\n if (isUserTimelineItem(item)) {\n continue;\n }\n const normalized = normalizeAgentGUIProviderIdentity(item.actorId);\n if (normalized !== \"unknown\") {\n return normalized;\n }\n }\n return null;\n}\n\nfunction isUserTimelineItem(item: WorkspaceAgentActivityTimelineItem): boolean {\n const role = item.role?.trim().toLowerCase();\n if (role === \"user\") {\n return true;\n }\n const actorType = item.actorType.trim().toLowerCase();\n if (actorType === \"user\") {\n return true;\n }\n return item.itemType.trim().toLowerCase() === \"message.user\";\n}\n\nfunction compactTitleText(value: string): string {\n return value.trim().replace(/\\s+/g, \" \");\n}\n","import type { AgentActivitySession } from \"@tutti-os/agent-activity-core\";\nimport { resolveAgentGUIProviderDisplayLabel } from \"../shared/agentConversationTitleProjection.ts\";\n\nexport interface ResolveAgentGuiWorkbenchHeaderTitleInput {\n agentName?: string | null;\n conversationTitle?: string | null;\n provider?: string | null;\n}\n\nexport interface ResolveAgentGuiWorkbenchSessionTitleInput {\n agentSessionId?: string | null;\n fallbackTitle?: string | null;\n optimisticTitle?: string | null;\n session?: Pick<AgentActivitySession, \"title\"> | null;\n}\n\nexport interface AgentGuiWorkbenchSessionTitleResult {\n agentSessionId: string | null;\n source: \"snapshot\" | \"optimistic\" | \"fallback\" | \"none\";\n title: string | null;\n}\n\nexport function resolveAgentGuiWorkbenchHeaderTitle({\n agentName,\n conversationTitle,\n provider\n}: ResolveAgentGuiWorkbenchHeaderTitleInput): string | null {\n return (\n stripTitle(agentName) ||\n stripTitle(resolveAgentGUIProviderDisplayLabel(provider, \"\")) ||\n stripTitle(conversationTitle) ||\n null\n );\n}\n\nexport function resolveAgentGuiWorkbenchSessionTitle({\n agentSessionId,\n fallbackTitle,\n optimisticTitle,\n session = null\n}: ResolveAgentGuiWorkbenchSessionTitleInput): AgentGuiWorkbenchSessionTitleResult {\n const normalizedAgentSessionId = agentSessionId?.trim() ?? \"\";\n if (!normalizedAgentSessionId) {\n return { agentSessionId: null, source: \"none\", title: null };\n }\n\n const snapshotTitle = stripTitle(session?.title);\n if (snapshotTitle) {\n return {\n agentSessionId: normalizedAgentSessionId,\n source: \"snapshot\",\n title: snapshotTitle\n };\n }\n\n const projectedOptimisticTitle = stripTitle(optimisticTitle);\n if (projectedOptimisticTitle) {\n return {\n agentSessionId: normalizedAgentSessionId,\n source: \"optimistic\",\n title: projectedOptimisticTitle\n };\n }\n\n if (session) {\n return {\n agentSessionId: normalizedAgentSessionId,\n source: \"none\",\n title: null\n };\n }\n\n const fallbackDisplayTitle = stripTitle(fallbackTitle);\n return fallbackDisplayTitle\n ? {\n agentSessionId: normalizedAgentSessionId,\n source: \"fallback\",\n title: fallbackDisplayTitle\n }\n : {\n agentSessionId: normalizedAgentSessionId,\n source: \"none\",\n title: null\n };\n}\n\nfunction stripTitle(value: string | null | undefined): string {\n return value?.trim() ?? \"\";\n}\n"],"mappings":"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","names":[]}
@@ -3,43 +3,43 @@ import {
3
3
  migrateLegacyAgentGuiWorkbenchState,
4
4
  normalizeAgentGuiWorkbenchNodeState,
5
5
  normalizeAgentGuiWorkbenchState
6
- } from "./chunk-HBJJY2AC.js";
6
+ } from "./chunk-6II57C72.js";
7
7
  import {
8
8
  agentGuiWorkbenchDockIdentityFromIdentifier,
9
9
  agentGuiWorkbenchTypeId,
10
10
  agentGuiWorkbenchUnifiedDockEntryId,
11
11
  createAgentGuiWorkbenchLaunchDescriptor
12
- } from "./chunk-TUWQV2MC.js";
12
+ } from "./chunk-YSA4MXR5.js";
13
13
  import {
14
14
  agentGuiWorkbenchDefaultDockProviders,
15
15
  isAgentGuiWorkbenchProvider,
16
16
  resolveAgentGuiWorkbenchProviderLabel
17
- } from "./chunk-R2ZADXRB.js";
17
+ } from "./chunk-SZVHT57M.js";
18
18
  import {
19
19
  resolveAgentGUIConversationBrowserFreeTitle,
20
20
  resolveAgentGUIConversationTitleDisplayPrompt,
21
21
  resolveAgentGuiWorkbenchHeaderTitle,
22
22
  resolveAgentGuiWorkbenchSessionTitle
23
- } from "./chunk-BHB457ZP.js";
23
+ } from "./chunk-YGBZKQ2S.js";
24
24
  import {
25
25
  normalizeAgentGUIAgents,
26
26
  projectAgentGUIAgentsToTargets
27
27
  } from "./chunk-66JZ7BQM.js";
28
28
  import {
29
29
  agentGuiDockIconUrls
30
- } from "./chunk-AZQRB56U.js";
30
+ } from "./chunk-PQPNDL4A.js";
31
31
  import {
32
32
  useEngineSelector
33
33
  } from "./chunk-2RQM7PJN.js";
34
34
  import {
35
35
  normalizeManagedAgentProvider
36
- } from "./chunk-7KVZPJ3O.js";
36
+ } from "./chunk-AODSTIED.js";
37
37
  import {
38
38
  resolveProviderIconAsset
39
- } from "./chunk-QMMWKQOT.js";
39
+ } from "./chunk-LCFMJPNA.js";
40
40
  import {
41
41
  resolveAgentGUIProviderCatalogIdentity
42
- } from "./chunk-6CUELYIF.js";
42
+ } from "./chunk-5CLSJWUN.js";
43
43
 
44
44
  // workbench/contribution.ts
45
45
  import { createElement as createElement3 } from "react";
@@ -400,7 +400,7 @@ function stopPointerPropagation(event) {
400
400
 
401
401
  // workbench/header.ts
402
402
  var LazyAgentRichTextReadonly = lazy(
403
- () => import("./AgentRichTextReadonly-J5GZIS7X.js").then((module) => ({
403
+ () => import("./AgentRichTextReadonly-ZGW4IZ6O.js").then((module) => ({
404
404
  default: module.AgentRichTextReadonly
405
405
  }))
406
406
  );
@@ -927,8 +927,7 @@ var agentGuiWorkbenchProviderRailWidthPx = 52;
927
927
  var agentGuiWorkbenchUnifiedDockTileProviders = [
928
928
  "codex",
929
929
  "claude-code",
930
- "tutti-agent",
931
- "hermes"
930
+ "tutti-agent"
932
931
  ];
933
932
  var agentGuiWorkbenchDefaultCopy = {
934
933
  collapseConversationRail: "Hide sidebar",
@@ -1646,4 +1645,4 @@ export {
1646
1645
  AGENT_GUI_WORKBENCH_OPEN_EXTERNAL_IMPORT_EVENT,
1647
1646
  createAgentGuiWorkbenchContribution
1648
1647
  };
1649
- //# sourceMappingURL=chunk-IFOIUN2O.js.map
1648
+ //# sourceMappingURL=chunk-YRAKPTXS.js.map