@tutti-os/agent-gui 0.0.66 → 0.0.67

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 (86) hide show
  1. package/dist/agent-conversation/index.d.ts +2 -2
  2. package/dist/agent-conversation/index.js +8 -8
  3. package/dist/agent-message-center/index.js +10 -10
  4. package/dist/{agentGuiNodeTypes-B9Aq3UEU.d.ts → agentGuiNodeTypes-DNXndXhV.d.ts} +1 -1
  5. package/dist/app/renderer/agentactivity.css +66 -0
  6. package/dist/app/renderer/assets/icons/agents/tutti-flat-filled.svg +12 -0
  7. package/dist/{chunk-N4I3TD4G.js → chunk-BX4UBTOI.js} +70 -2
  8. package/dist/chunk-BX4UBTOI.js.map +1 -0
  9. package/dist/{chunk-T3KGZV35.js → chunk-CTYXJGSW.js} +3 -3
  10. package/dist/{chunk-P5C3ED3V.js → chunk-DP2X4J2D.js} +3 -3
  11. package/dist/{chunk-LJE2W4EM.js → chunk-DQTBWOIK.js} +27 -4
  12. package/dist/chunk-DQTBWOIK.js.map +1 -0
  13. package/dist/chunk-IL2ORY23.js +193 -0
  14. package/dist/chunk-IL2ORY23.js.map +1 -0
  15. package/dist/{chunk-NOTZW5WH.js → chunk-JGU2VMDA.js} +3 -3
  16. package/dist/{chunk-DL6BMEHI.js → chunk-JWWHS34V.js} +3 -3
  17. package/dist/{chunk-6ULTMCKP.js → chunk-KS4ULVGM.js} +2 -2
  18. package/dist/{chunk-KRJF7WLJ.js → chunk-MA254MXR.js} +41 -7
  19. package/dist/chunk-MA254MXR.js.map +1 -0
  20. package/dist/{chunk-2IMBPRKV.js → chunk-NCAVJEHI.js} +1 -1
  21. package/dist/chunk-NCAVJEHI.js.map +1 -0
  22. package/dist/{chunk-R2NGSPQS.js → chunk-OEJQJP65.js} +3 -1
  23. package/dist/{chunk-R2NGSPQS.js.map → chunk-OEJQJP65.js.map} +1 -1
  24. package/dist/{chunk-UBBHWDMP.js → chunk-PFKY5W76.js} +9 -9
  25. package/dist/chunk-PFKY5W76.js.map +1 -0
  26. package/dist/{chunk-JTFWT6DK.js → chunk-QZYGCZNQ.js} +4 -4
  27. package/dist/{chunk-CKCUEHBW.js → chunk-RNFP7CUO.js} +9 -8
  28. package/dist/chunk-RNFP7CUO.js.map +1 -0
  29. package/dist/{chunk-UI3YDJTC.js → chunk-SKWDZTEV.js} +6 -4
  30. package/dist/chunk-SKWDZTEV.js.map +1 -0
  31. package/dist/{chunk-LQHYHF36.js → chunk-UAXKJNM2.js} +14 -7
  32. package/dist/chunk-UAXKJNM2.js.map +1 -0
  33. package/dist/{chunk-CTJQTUQ3.js → chunk-VIJQ5C33.js} +5 -5
  34. package/dist/{chunk-VBTPXEFH.js → chunk-XBR7D7X2.js} +2 -2
  35. package/dist/{chunk-DXVMRZHH.js → chunk-YU3XLPLC.js} +2 -2
  36. package/dist/{chunk-Z26P2QNT.js → chunk-YYAP6IK7.js} +4 -166
  37. package/dist/chunk-YYAP6IK7.js.map +1 -0
  38. package/dist/{chunk-HNODQVG2.js → chunk-ZABN3POD.js} +6 -2
  39. package/dist/chunk-ZABN3POD.js.map +1 -0
  40. package/dist/context-mention-palette/index.js +9 -9
  41. package/dist/cursor-flat-filled-CL7N3BTZ.svg +3 -0
  42. package/dist/i18n/index.d.ts +40 -6
  43. package/dist/i18n/index.js +2 -2
  44. package/dist/index.d.ts +48 -6
  45. package/dist/index.js +1420 -921
  46. package/dist/index.js.map +1 -1
  47. package/dist/queued-prompt-runtime.d.ts +2 -2
  48. package/dist/tutti-flat-filled-K32QBTZE.svg +12 -0
  49. package/dist/{types-Bxn8bLEp.d.ts → types-BxOwnK7K.d.ts} +3 -3
  50. package/dist/workbench/contribution.d.ts +1 -1
  51. package/dist/workbench/contribution.js +8 -8
  52. package/dist/workbench/index.d.ts +1 -1
  53. package/dist/workbench/index.js +11 -11
  54. package/dist/workbench/launch.d.ts +1 -1
  55. package/dist/workbench/launch.js +3 -3
  56. package/dist/workbench/providerCatalog.d.ts +4 -4
  57. package/dist/workbench/providerCatalog.js +1 -1
  58. package/dist/workbench/sessionTitle.d.ts +1 -1
  59. package/dist/workbench/sessionTitle.js +3 -3
  60. package/dist/workbench/state.d.ts +1 -1
  61. package/dist/workbench/state.js +3 -3
  62. package/dist/workbench/types.d.ts +2 -2
  63. package/dist/workbench/types.js +1 -1
  64. package/dist/workspace-agent-generated-files.js +4 -4
  65. package/package.json +12 -12
  66. package/dist/chunk-2IMBPRKV.js.map +0 -1
  67. package/dist/chunk-CKCUEHBW.js.map +0 -1
  68. package/dist/chunk-HNODQVG2.js.map +0 -1
  69. package/dist/chunk-KRJF7WLJ.js.map +0 -1
  70. package/dist/chunk-LJE2W4EM.js.map +0 -1
  71. package/dist/chunk-LQHYHF36.js.map +0 -1
  72. package/dist/chunk-N4I3TD4G.js.map +0 -1
  73. package/dist/chunk-TYGL25EL.js +0 -30
  74. package/dist/chunk-TYGL25EL.js.map +0 -1
  75. package/dist/chunk-UBBHWDMP.js.map +0 -1
  76. package/dist/chunk-UI3YDJTC.js.map +0 -1
  77. package/dist/chunk-Z26P2QNT.js.map +0 -1
  78. /package/dist/{chunk-T3KGZV35.js.map → chunk-CTYXJGSW.js.map} +0 -0
  79. /package/dist/{chunk-P5C3ED3V.js.map → chunk-DP2X4J2D.js.map} +0 -0
  80. /package/dist/{chunk-NOTZW5WH.js.map → chunk-JGU2VMDA.js.map} +0 -0
  81. /package/dist/{chunk-DL6BMEHI.js.map → chunk-JWWHS34V.js.map} +0 -0
  82. /package/dist/{chunk-6ULTMCKP.js.map → chunk-KS4ULVGM.js.map} +0 -0
  83. /package/dist/{chunk-JTFWT6DK.js.map → chunk-QZYGCZNQ.js.map} +0 -0
  84. /package/dist/{chunk-CTJQTUQ3.js.map → chunk-VIJQ5C33.js.map} +0 -0
  85. /package/dist/{chunk-VBTPXEFH.js.map → chunk-XBR7D7X2.js.map} +0 -0
  86. /package/dist/{chunk-DXVMRZHH.js.map → chunk-YU3XLPLC.js.map} +0 -0
@@ -1,6 +1,6 @@
1
- import { d as AgentGUIQueuedPromptVM } from './agentGuiNodeTypes-B9Aq3UEU.js';
1
+ import { d as AgentGUIQueuedPromptVM } from './agentGuiNodeTypes-DNXndXhV.js';
2
2
  import '@tutti-os/agent-activity-core';
3
- import './types-Bxn8bLEp.js';
3
+ import './types-BxOwnK7K.js';
4
4
  import './workspaceAgentActivityListViewModel-DJvAqZso.js';
5
5
  import './agentConversationVM-DPAgUJlR.js';
6
6
  import '@tutti-os/workspace-user-project/contracts';
@@ -0,0 +1,12 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <g clip-path="url(#clip0_4006_12727)">
3
+ <path d="M11.211 0.548002C15.073 0.543295 17.9345 1.81179 19.9296 3.83278L20.0239 3.92959C23.0552 7.07998 23.023 10.8748 22.9943 11.9018C22.8951 15.489 21.1542 19.394 18.0294 21.4325C15.586 23.0268 12.2832 23.8613 9.04026 23.2149C5.73648 22.5563 2.62419 20.3848 0.625961 16.2234L3.20797 14.9835C4.83801 18.3782 7.22765 19.933 9.60024 20.4059C12.0336 20.891 14.5815 20.2622 16.4644 19.0336L16.4645 19.0335C18.641 17.6137 20.0521 14.6807 20.1311 11.8223V11.8219C20.1548 10.9733 20.1554 8.19731 17.96 5.91559C16.5591 4.45982 14.4443 3.40834 11.2145 3.41226C6.37955 3.4188 3.86602 6.76421 3.83019 9.29717L3.82979 9.35691C3.83105 10.3775 4.17276 11.3212 4.80308 11.8258C5.35665 12.269 6.54025 12.6884 9.00181 11.7756C9.74148 11.5012 10.4014 11.1957 11.0683 10.8751C11.7204 10.5617 12.4153 10.2154 13.1403 9.91163C14.6484 9.2797 16.3347 8.80763 18.7078 8.80454L18.7115 11.6688C16.7745 11.6713 15.463 12.0439 14.2473 12.5533C13.6103 12.8202 13.0118 13.1188 12.3092 13.4566C11.6213 13.7872 10.8653 14.1393 9.99793 14.4611H9.99777C7.01416 15.5675 4.64823 15.3711 3.01281 14.0617C1.45417 12.8137 0.967387 10.8679 0.965528 9.36047L0.965609 9.36039C0.960216 5.06707 4.93334 0.55642 11.2108 0.548002H11.211Z" fill="black"/>
4
+ <path d="M6.97341 14.9505V6.38824H9.83775V14.9505C9.83775 15.3767 9.92837 15.571 9.98458 15.6564C10.0386 15.7384 10.1373 15.8367 10.3693 15.9334C10.9249 16.1648 11.8087 16.2252 13.1098 16.2252V19.0894C11.9066 19.0894 10.4383 19.065 9.26781 18.5774C8.63685 18.3146 8.02895 17.8947 7.59224 17.2314C7.15772 16.5714 6.97341 15.793 6.97341 14.9505Z" fill="black"/>
5
+ <path d="M12.918 14.9505V6.38824H15.7824V14.9505C15.7824 15.3767 15.873 15.571 15.9292 15.6564C15.9832 15.7384 16.0819 15.8367 16.3139 15.9334C16.8695 16.1648 17.7533 16.2252 19.0544 16.2252V19.0894C17.8512 19.0894 16.3829 19.065 15.2124 18.5774C14.5815 18.3146 13.9736 17.8947 13.5369 17.2314C13.1023 16.5714 12.918 15.793 12.918 14.9505Z" fill="black"/>
6
+ </g>
7
+ <defs>
8
+ <clipPath id="clip0_4006_12727">
9
+ <rect width="24" height="24" fill="white"/>
10
+ </clipPath>
11
+ </defs>
12
+ </svg>
@@ -1,4 +1,4 @@
1
- type AgentHostAgentSessionProvider = "claude-code" | "codex" | "cursor" | "nexight" | "gemini" | "hermes" | "openclaw";
1
+ type AgentHostAgentSessionProvider = "claude-code" | "codex" | "tutti-agent" | "cursor" | "nexight" | "gemini" | "hermes" | "openclaw";
2
2
  type AgentHostAgentSessionPermissionModeSemantic = "ask-before-write" | "accept-edits" | "locked-down" | "auto" | "full-access" | "unconfigurable";
3
3
  type AgentHostAgentSessionReasoningEffort = "minimal" | "low" | "medium" | "high" | "xhigh" | string;
4
4
  type AgentHostAgentSessionSpeed = "standard" | "fast" | string;
@@ -128,7 +128,7 @@ interface AgentHostAgentSessionCommand {
128
128
  inputHint?: string;
129
129
  }
130
130
 
131
- declare const AGENT_PROVIDERS: readonly ["claude-code", "codex", "cursor", "nexight", "opencode", "gemini", "openclaw", "hermes"];
131
+ declare const AGENT_PROVIDERS: readonly ["claude-code", "codex", "cursor", "tutti-agent", "nexight", "opencode", "gemini", "openclaw", "hermes"];
132
132
  type AgentProvider = (typeof AGENT_PROVIDERS)[number];
133
133
 
134
134
  interface AgentGUINodeData {
@@ -147,7 +147,7 @@ interface AgentGUINodeData {
147
147
  composerOverridesByAgentTargetId?: Record<string, AgentHostAgentSessionComposerSettings | null> | null;
148
148
  composerOverridesByProvider?: Partial<Record<AgentGUIProvider, AgentHostAgentSessionComposerSettings | null>> | null;
149
149
  }
150
- type AgentGUIProvider = Extract<AgentProvider, "claude-code" | "codex" | "cursor" | "nexight" | "gemini" | "hermes" | "openclaw">;
150
+ type AgentGUIProvider = Extract<AgentProvider, "claude-code" | "codex" | "tutti-agent" | "cursor" | "nexight" | "gemini" | "hermes" | "openclaw">;
151
151
  interface AgentGUIProviderTargetRef {
152
152
  kind: string;
153
153
  provider: AgentGUIProvider;
@@ -1,7 +1,7 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { WorkbenchFrame, WorkbenchHostNodeBodyContext, WorkbenchHostLaunchRequest, WorkbenchHostDockEntry, WorkbenchContribution } from '@tutti-os/workbench-surface';
3
3
  import { AgentGuiWorkbenchProvider, AgentGuiWorkbenchState } from './types.js';
4
- import { f as AgentGUIProviderTarget, g as AgentGUIProviderTargetRef } from '../types-Bxn8bLEp.js';
4
+ import { f as AgentGUIProviderTarget, g as AgentGUIProviderTargetRef } from '../types-BxOwnK7K.js';
5
5
 
6
6
  declare const agentGuiWorkbenchDefaultNodeFrame: WorkbenchFrame;
7
7
  declare const agentGuiWorkbenchDefaultUsableWidthRatio = 0.8;
@@ -13,14 +13,14 @@ import {
13
13
  resolveAgentGuiUnifiedDockLaunchPayload,
14
14
  resolveAgentGuiWorkbenchContributionCopy,
15
15
  resolveAgentGuiWorkbenchDefaultLaunchFrame
16
- } from "../chunk-LQHYHF36.js";
17
- import "../chunk-DL6BMEHI.js";
18
- import "../chunk-P5C3ED3V.js";
19
- import "../chunk-2IMBPRKV.js";
20
- import "../chunk-CKCUEHBW.js";
21
- import "../chunk-LJE2W4EM.js";
22
- import "../chunk-UI3YDJTC.js";
23
- import "../chunk-R2NGSPQS.js";
16
+ } from "../chunk-UAXKJNM2.js";
17
+ import "../chunk-JWWHS34V.js";
18
+ import "../chunk-DP2X4J2D.js";
19
+ import "../chunk-NCAVJEHI.js";
20
+ import "../chunk-RNFP7CUO.js";
21
+ import "../chunk-DQTBWOIK.js";
22
+ import "../chunk-SKWDZTEV.js";
23
+ import "../chunk-OEJQJP65.js";
24
24
  export {
25
25
  AGENT_GUI_WORKBENCH_CONVERSATION_RAIL_TOGGLE_EVENT,
26
26
  AGENT_GUI_WORKBENCH_NEW_CONVERSATION_EVENT,
@@ -6,7 +6,7 @@ import { HTMLAttributes, ReactNode } from 'react';
6
6
  import { WorkbenchDisplayMode, WorkbenchHostNodeHeaderWindowActions } from '@tutti-os/workbench-surface';
7
7
  export { AgentGuiSessionTitleFormatOptions, AgentGuiWorkbenchSessionTitleResult, ResolveAgentGuiWorkbenchSessionTitleInput, formatAgentGuiConversationPlainTitle, formatAgentGuiSessionPlainTitle, resolveAgentGuiWorkbenchSessionTitle } from './sessionTitle.js';
8
8
  export { AgentGuiWorkbenchComposerOverrides, AgentGuiWorkbenchNodeState, AgentGuiWorkbenchPrefillPromptPayload, AgentGuiWorkbenchProvider, AgentGuiWorkbenchState, AgentGuiWorkbenchWorkspaceState, agentGuiWorkbenchOpenSessionActivationType, agentGuiWorkbenchPrefillPromptActivationType } from './types.js';
9
- import '../types-Bxn8bLEp.js';
9
+ import '../types-BxOwnK7K.js';
10
10
  import '@tutti-os/agent-activity-core';
11
11
  import '../uiSettings-BQS9r2eo.js';
12
12
 
@@ -8,7 +8,7 @@ import {
8
8
  createAgentGuiWorkbenchContribution,
9
9
  resolveAgentGuiUnifiedDockLaunchPayload,
10
10
  resolveAgentGuiWorkbenchContributionCopy
11
- } from "../chunk-LQHYHF36.js";
11
+ } from "../chunk-UAXKJNM2.js";
12
12
  import {
13
13
  agentGuiWorkbenchProviderFromInstanceId,
14
14
  areAgentGuiWorkbenchNodeStatesEqual,
@@ -18,7 +18,7 @@ import {
18
18
  normalizeAgentGuiWorkbenchNodeState,
19
19
  normalizeAgentGuiWorkbenchState,
20
20
  projectAgentGuiWorkbenchState
21
- } from "../chunk-DL6BMEHI.js";
21
+ } from "../chunk-JWWHS34V.js";
22
22
  import {
23
23
  agentGuiWorkbenchDockEntryId,
24
24
  agentGuiWorkbenchDockIdentityFromIdentifier,
@@ -31,11 +31,11 @@ import {
31
31
  createAgentGuiWorkbenchInstanceId,
32
32
  createAgentGuiWorkbenchLaunchDescriptor,
33
33
  createAgentGuiWorkbenchSessionLaunchRequest
34
- } from "../chunk-P5C3ED3V.js";
34
+ } from "../chunk-DP2X4J2D.js";
35
35
  import {
36
36
  agentGuiWorkbenchOpenSessionActivationType,
37
37
  agentGuiWorkbenchPrefillPromptActivationType
38
- } from "../chunk-2IMBPRKV.js";
38
+ } from "../chunk-NCAVJEHI.js";
39
39
  import {
40
40
  agentGuiWorkbenchComingSoonProviders,
41
41
  agentGuiWorkbenchDefaultDockProviders,
@@ -48,17 +48,17 @@ import {
48
48
  isAgentGuiWorkbenchProvider,
49
49
  normalizeAgentGuiWorkbenchProvider,
50
50
  resolveAgentGuiWorkbenchProviderLabel
51
- } from "../chunk-CKCUEHBW.js";
52
- import "../chunk-LJE2W4EM.js";
53
- import "../chunk-UI3YDJTC.js";
51
+ } from "../chunk-RNFP7CUO.js";
52
+ import "../chunk-DQTBWOIK.js";
53
+ import "../chunk-SKWDZTEV.js";
54
54
  import {
55
55
  formatAgentGuiConversationPlainTitle,
56
56
  formatAgentGuiSessionPlainTitle,
57
57
  resolveAgentGuiWorkbenchSessionTitle
58
- } from "../chunk-VBTPXEFH.js";
59
- import "../chunk-HNODQVG2.js";
60
- import "../chunk-R2NGSPQS.js";
61
- import "../chunk-KRJF7WLJ.js";
58
+ } from "../chunk-XBR7D7X2.js";
59
+ import "../chunk-ZABN3POD.js";
60
+ import "../chunk-OEJQJP65.js";
61
+ import "../chunk-MA254MXR.js";
62
62
  import "../chunk-GCBDIQDX.js";
63
63
  export {
64
64
  AGENT_GUI_WORKBENCH_CONVERSATION_RAIL_TOGGLE_EVENT,
@@ -1,6 +1,6 @@
1
1
  import { WorkbenchHostLaunchRequest } from '@tutti-os/workbench-surface';
2
2
  import { agentGuiWorkbenchOpenSessionActivationType, AgentGuiWorkbenchPrefillPromptPayload, agentGuiWorkbenchPrefillPromptActivationType, AgentGuiWorkbenchProvider } from './types.js';
3
- import '../types-Bxn8bLEp.js';
3
+ import '../types-BxOwnK7K.js';
4
4
 
5
5
  type AgentGuiWorkbenchLaunchRequestInput = Pick<WorkbenchHostLaunchRequest, "payload" | "typeId"> & {
6
6
  dockEntryId?: string | null;
@@ -12,11 +12,11 @@ import {
12
12
  createAgentGuiWorkbenchSessionLaunchRequest,
13
13
  resolveAgentGuiWorkbenchLaunchDockEntryId,
14
14
  shouldReuseAgentGuiWorkbenchDockEntryNode
15
- } from "../chunk-P5C3ED3V.js";
15
+ } from "../chunk-DP2X4J2D.js";
16
16
  import {
17
17
  agentGuiWorkbenchPrefillPromptActivationType
18
- } from "../chunk-2IMBPRKV.js";
19
- import "../chunk-CKCUEHBW.js";
18
+ } from "../chunk-NCAVJEHI.js";
19
+ import "../chunk-RNFP7CUO.js";
20
20
  export {
21
21
  agentGuiWorkbenchDockEntryId,
22
22
  agentGuiWorkbenchDockIdentityFromIdentifier,
@@ -1,10 +1,10 @@
1
1
  import { AgentGuiWorkbenchProvider } from './types.js';
2
- import '../types-Bxn8bLEp.js';
2
+ import '../types-BxOwnK7K.js';
3
3
 
4
- declare const agentGuiWorkbenchProviders: readonly ["claude-code", "codex", "cursor", "nexight", "hermes", "gemini", "openclaw"];
5
- declare const agentGuiWorkbenchDefaultDockProviders: readonly ["codex", "claude-code"];
4
+ declare const agentGuiWorkbenchProviders: readonly ["claude-code", "codex", "cursor", "tutti-agent", "hermes", "gemini", "openclaw"];
5
+ declare const agentGuiWorkbenchDefaultDockProviders: readonly ["codex", "claude-code", "tutti-agent"];
6
6
  declare const agentGuiWorkbenchDockSuppressedProviders: readonly ["hermes", "gemini"];
7
- declare const agentGuiWorkbenchComingSoonProviders: readonly ["nexight"];
7
+ declare const agentGuiWorkbenchComingSoonProviders: readonly [];
8
8
  declare const agentGuiWorkbenchProviderLabels: Record<AgentGuiWorkbenchProvider, string>;
9
9
  declare function resolveAgentGuiWorkbenchProviderLabel(provider: AgentGuiWorkbenchProvider): string;
10
10
  declare function isAgentGuiWorkbenchDefaultDockProvider(provider: AgentGuiWorkbenchProvider): boolean;
@@ -10,7 +10,7 @@ import {
10
10
  isAgentGuiWorkbenchProvider,
11
11
  normalizeAgentGuiWorkbenchProvider,
12
12
  resolveAgentGuiWorkbenchProviderLabel
13
- } from "../chunk-CKCUEHBW.js";
13
+ } from "../chunk-RNFP7CUO.js";
14
14
  export {
15
15
  agentGuiWorkbenchComingSoonProviders,
16
16
  agentGuiWorkbenchDefaultDockProviders,
@@ -1,7 +1,7 @@
1
1
  import { AgentActivitySnapshot } from '@tutti-os/agent-activity-core';
2
2
  import { U as UiLanguage } from '../uiSettings-BQS9r2eo.js';
3
3
  import { AgentGuiWorkbenchProvider } from './types.js';
4
- import '../types-Bxn8bLEp.js';
4
+ import '../types-BxOwnK7K.js';
5
5
 
6
6
  interface AgentGuiSessionTitleFormatOptions {
7
7
  fallbackAgentLabel?: string;
@@ -2,9 +2,9 @@ import {
2
2
  formatAgentGuiConversationPlainTitle,
3
3
  formatAgentGuiSessionPlainTitle,
4
4
  resolveAgentGuiWorkbenchSessionTitle
5
- } from "../chunk-VBTPXEFH.js";
6
- import "../chunk-HNODQVG2.js";
7
- import "../chunk-KRJF7WLJ.js";
5
+ } from "../chunk-XBR7D7X2.js";
6
+ import "../chunk-ZABN3POD.js";
7
+ import "../chunk-MA254MXR.js";
8
8
  import "../chunk-GCBDIQDX.js";
9
9
  export {
10
10
  formatAgentGuiConversationPlainTitle,
@@ -1,6 +1,6 @@
1
1
  import { WorkbenchHostExternalStateSource, WorkbenchHostExternalStateLookupInput } from '@tutti-os/workbench-surface';
2
2
  import { AgentGuiWorkbenchProvider, AgentGuiWorkbenchNodeState, AgentGuiWorkbenchState, AgentGuiWorkbenchWorkspaceState } from './types.js';
3
- import '../types-Bxn8bLEp.js';
3
+ import '../types-BxOwnK7K.js';
4
4
 
5
5
  type AgentGuiWorkbenchStateLookupRequest = Pick<WorkbenchHostExternalStateLookupInput, "instanceId" | "typeId"> & Partial<Pick<WorkbenchHostExternalStateLookupInput, "nodeId">>;
6
6
  declare function createDefaultAgentGuiWorkbenchNodeState(provider?: AgentGuiWorkbenchProvider): AgentGuiWorkbenchNodeState;
@@ -7,9 +7,9 @@ import {
7
7
  normalizeAgentGuiWorkbenchNodeState,
8
8
  normalizeAgentGuiWorkbenchState,
9
9
  projectAgentGuiWorkbenchState
10
- } from "../chunk-DL6BMEHI.js";
11
- import "../chunk-CKCUEHBW.js";
12
- import "../chunk-UI3YDJTC.js";
10
+ } from "../chunk-JWWHS34V.js";
11
+ import "../chunk-RNFP7CUO.js";
12
+ import "../chunk-SKWDZTEV.js";
13
13
  export {
14
14
  agentGuiWorkbenchProviderFromInstanceId,
15
15
  areAgentGuiWorkbenchNodeStatesEqual,
@@ -1,6 +1,6 @@
1
- import { g as AgentGUIProviderTargetRef } from '../types-Bxn8bLEp.js';
1
+ import { g as AgentGUIProviderTargetRef } from '../types-BxOwnK7K.js';
2
2
 
3
- type AgentGuiWorkbenchProvider = "claude-code" | "codex" | "cursor" | "nexight" | "gemini" | "hermes" | "openclaw";
3
+ type AgentGuiWorkbenchProvider = "claude-code" | "codex" | "tutti-agent" | "cursor" | "nexight" | "gemini" | "hermes" | "openclaw";
4
4
  declare const agentGuiWorkbenchOpenSessionActivationType = "agent-gui:open-session";
5
5
  declare const agentGuiWorkbenchPrefillPromptActivationType = "agent-gui:prefill-prompt";
6
6
  interface AgentGuiWorkbenchPrefillPromptPayload {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  agentGuiWorkbenchOpenSessionActivationType,
3
3
  agentGuiWorkbenchPrefillPromptActivationType
4
- } from "../chunk-2IMBPRKV.js";
4
+ } from "../chunk-NCAVJEHI.js";
5
5
  export {
6
6
  agentGuiWorkbenchOpenSessionActivationType,
7
7
  agentGuiWorkbenchPrefillPromptActivationType
@@ -4,14 +4,14 @@ import {
4
4
  resolveWorkspaceAgentActivityStatus,
5
5
  resolveWorkspaceAgentActivityTitle,
6
6
  reuseWorkspaceAgentActivityListViewModelIfUnchanged
7
- } from "./chunk-Z26P2QNT.js";
7
+ } from "./chunk-YYAP6IK7.js";
8
8
  import "./chunk-IBIMGLCD.js";
9
9
  import "./chunk-Y35GDLP2.js";
10
10
  import {
11
11
  workspaceAgentProviderLabel
12
- } from "./chunk-TYGL25EL.js";
13
- import "./chunk-6ULTMCKP.js";
14
- import "./chunk-KRJF7WLJ.js";
12
+ } from "./chunk-IL2ORY23.js";
13
+ import "./chunk-KS4ULVGM.js";
14
+ import "./chunk-MA254MXR.js";
15
15
  import "./chunk-GCBDIQDX.js";
16
16
  export {
17
17
  buildWorkspaceAgentActivityListViewModel,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tutti-os/agent-gui",
3
- "version": "0.0.66",
3
+ "version": "0.0.67",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -94,17 +94,17 @@
94
94
  },
95
95
  "dependencies": {
96
96
  "@monaco-editor/react": "^4.7.0",
97
- "@tutti-os/agent-activity-core": "0.0.66",
98
- "@tutti-os/ui-i18n-runtime": "0.0.66",
99
- "@tutti-os/ui-rich-text": "0.0.66",
100
- "@tutti-os/ui-react-hooks": "0.0.66",
101
- "@tutti-os/ui-system": "0.0.66",
102
- "@tutti-os/workbench-surface": "0.0.66",
103
- "@tutti-os/workspace-external-core": "0.0.66",
104
- "@tutti-os/workspace-file-manager": "0.0.66",
105
- "@tutti-os/workspace-file-reference": "0.0.66",
106
- "@tutti-os/workspace-issue-manager": "0.0.66",
107
- "@tutti-os/workspace-user-project": "0.0.66",
97
+ "@tutti-os/agent-activity-core": "0.0.67",
98
+ "@tutti-os/ui-i18n-runtime": "0.0.67",
99
+ "@tutti-os/ui-rich-text": "0.0.67",
100
+ "@tutti-os/ui-react-hooks": "0.0.67",
101
+ "@tutti-os/ui-system": "0.0.67",
102
+ "@tutti-os/workbench-surface": "0.0.67",
103
+ "@tutti-os/workspace-external-core": "0.0.67",
104
+ "@tutti-os/workspace-file-manager": "0.0.67",
105
+ "@tutti-os/workspace-file-reference": "0.0.67",
106
+ "@tutti-os/workspace-issue-manager": "0.0.67",
107
+ "@tutti-os/workspace-user-project": "0.0.67",
108
108
  "@tanstack/react-virtual": "^3.13.12",
109
109
  "@tiptap/core": "^3.11.1",
110
110
  "@tiptap/pm": "^3.23.6",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../workbench/types.ts"],"sourcesContent":["import type { AgentGUIProviderTargetRef } from \"../types\";\n\nexport type AgentGuiWorkbenchProvider =\n | \"claude-code\"\n | \"codex\"\n | \"cursor\"\n | \"nexight\"\n | \"gemini\"\n | \"hermes\"\n | \"openclaw\";\n\nexport const agentGuiWorkbenchOpenSessionActivationType =\n \"agent-gui:open-session\";\n\nexport const agentGuiWorkbenchPrefillPromptActivationType =\n \"agent-gui:prefill-prompt\";\n\nexport interface AgentGuiWorkbenchPrefillPromptPayload {\n agentTargetId?: string | null;\n autoSubmit?: boolean;\n draftPrompt: string;\n provider?: AgentGuiWorkbenchProvider;\n userProjectPath?: string | null;\n}\n\nexport interface AgentGuiWorkbenchComposerOverrides {\n model?: string | null;\n permissionModeId?: string | null;\n planMode?: boolean;\n reasoningEffort?: string | null;\n speed?: string | null;\n}\n\nexport type AgentGuiWorkbenchComposerOverridesByProvider = Partial<\n Record<AgentGuiWorkbenchProvider, AgentGuiWorkbenchComposerOverrides | null>\n>;\n\nexport type AgentGuiWorkbenchComposerOverridesByAgentTargetId = Record<\n string,\n AgentGuiWorkbenchComposerOverrides | null\n>;\n\nexport interface AgentGuiWorkbenchNodeState {\n agentTargetId?: string | null;\n composerOverrides?: AgentGuiWorkbenchComposerOverrides | null;\n composerOverridesByAgentTargetId?: AgentGuiWorkbenchComposerOverridesByAgentTargetId | null;\n composerOverridesByProvider?: AgentGuiWorkbenchComposerOverridesByProvider | null;\n conversationCount?: number | null;\n conversationRailCollapsed?: boolean | null;\n conversationRailWidthPx?: number | null;\n lastActiveAgentSessionId: string | null;\n /** @deprecated Conversation titles are derived from the active session id. */\n lastActiveConversationTitle?: string | null;\n provider: AgentGuiWorkbenchProvider;\n /** @deprecated Use agentTargetId for selection restore. */\n providerTargetId?: string | null;\n /** @deprecated Provider target refs are resolved from the current target list. */\n providerTargetRef?: AgentGUIProviderTargetRef | null;\n}\n\nexport interface AgentGuiWorkbenchState {\n agentTargetId?: string | null;\n conversationRailCollapsed?: boolean | null;\n conversationRailWidthPx?: number | null;\n lastActiveAgentSessionId: string | null;\n lastActiveConversationTitle?: string | null;\n}\n\nexport interface AgentGuiWorkbenchWorkspaceState {\n workspaceId: string;\n}\n"],"mappings":";AAWO,IAAM,6CACX;AAEK,IAAM,+CACX;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../workbench/providerCatalog.ts"],"sourcesContent":["import type { AgentGuiWorkbenchProvider } from \"./types.ts\";\n\nexport const agentGuiWorkbenchProviders = [\n \"claude-code\",\n \"codex\",\n \"cursor\",\n \"nexight\",\n \"hermes\",\n \"gemini\",\n \"openclaw\"\n] as const satisfies readonly AgentGuiWorkbenchProvider[];\n\nexport const agentGuiWorkbenchDefaultDockProviders = [\n \"codex\",\n \"claude-code\"\n] as const satisfies readonly AgentGuiWorkbenchProvider[];\n\nexport const agentGuiWorkbenchDockSuppressedProviders = [\n \"hermes\",\n \"gemini\"\n] as const satisfies readonly AgentGuiWorkbenchProvider[];\n\nexport const agentGuiWorkbenchComingSoonProviders = [\n \"nexight\"\n] as const satisfies readonly AgentGuiWorkbenchProvider[];\n\nconst defaultDockProviderSet = new Set<AgentGuiWorkbenchProvider>(\n agentGuiWorkbenchDefaultDockProviders\n);\nconst dockSuppressedProviderSet = new Set<AgentGuiWorkbenchProvider>(\n agentGuiWorkbenchDockSuppressedProviders\n);\nconst comingSoonProviderSet = new Set<AgentGuiWorkbenchProvider>(\n agentGuiWorkbenchComingSoonProviders\n);\n\n// i18n-check-ignore: provider brand names.\nexport const agentGuiWorkbenchProviderLabels: Record<\n AgentGuiWorkbenchProvider,\n string\n> = {\n \"claude-code\": \"Claude Code\",\n codex: \"Codex\",\n cursor: \"Cursor\",\n gemini: \"Gemini CLI\",\n hermes: \"Hermes Agent\",\n nexight: \"Nexight\",\n openclaw: \"OpenClaw\"\n};\n\nexport function resolveAgentGuiWorkbenchProviderLabel(\n provider: AgentGuiWorkbenchProvider\n): string {\n return agentGuiWorkbenchProviderLabels[provider];\n}\n\nexport function isAgentGuiWorkbenchDefaultDockProvider(\n provider: AgentGuiWorkbenchProvider\n): boolean {\n return defaultDockProviderSet.has(provider);\n}\n\nexport function isAgentGuiWorkbenchDockSuppressedProvider(\n provider: AgentGuiWorkbenchProvider\n): boolean {\n return dockSuppressedProviderSet.has(provider);\n}\n\nexport function isAgentGuiWorkbenchComingSoonProvider(\n provider: AgentGuiWorkbenchProvider\n): boolean {\n return comingSoonProviderSet.has(provider);\n}\n\nexport function isAgentGuiWorkbenchProvider(\n value: unknown\n): value is AgentGuiWorkbenchProvider {\n return (\n typeof value === \"string\" &&\n agentGuiWorkbenchProviders.includes(value as AgentGuiWorkbenchProvider)\n );\n}\n\nexport function normalizeAgentGuiWorkbenchProvider(\n value: unknown,\n fallbackProvider: AgentGuiWorkbenchProvider = \"codex\"\n): AgentGuiWorkbenchProvider {\n return isAgentGuiWorkbenchProvider(value) ? value : fallbackProvider;\n}\n"],"mappings":";AAEO,IAAM,6BAA6B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,wCAAwC;AAAA,EACnD;AAAA,EACA;AACF;AAEO,IAAM,2CAA2C;AAAA,EACtD;AAAA,EACA;AACF;AAEO,IAAM,uCAAuC;AAAA,EAClD;AACF;AAEA,IAAM,yBAAyB,IAAI;AAAA,EACjC;AACF;AACA,IAAM,4BAA4B,IAAI;AAAA,EACpC;AACF;AACA,IAAM,wBAAwB,IAAI;AAAA,EAChC;AACF;AAGO,IAAM,kCAGT;AAAA,EACF,eAAe;AAAA,EACf,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,UAAU;AACZ;AAEO,SAAS,sCACd,UACQ;AACR,SAAO,gCAAgC,QAAQ;AACjD;AAEO,SAAS,uCACd,UACS;AACT,SAAO,uBAAuB,IAAI,QAAQ;AAC5C;AAEO,SAAS,0CACd,UACS;AACT,SAAO,0BAA0B,IAAI,QAAQ;AAC/C;AAEO,SAAS,sCACd,UACS;AACT,SAAO,sBAAsB,IAAI,QAAQ;AAC3C;AAEO,SAAS,4BACd,OACoC;AACpC,SACE,OAAO,UAAU,YACjB,2BAA2B,SAAS,KAAkC;AAE1E;AAEO,SAAS,mCACd,OACA,mBAA8C,SACnB;AAC3B,SAAO,4BAA4B,KAAK,IAAI,QAAQ;AACtD;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../shared/utils/agentSessionMentionText.ts","../contexts/settings/domain/agentSettings.providerMeta.ts","../shared/agentConversationTitleProjection.ts"],"sourcesContent":["import type { UiLanguage } from \"../../contexts/settings/domain/agentSettings\";\nimport { normalizeAgentTitleText } from \"./agentTitleText.ts\";\nimport {\n isRichTextMentionHref,\n parseRichTextMentionHref\n} from \"@tutti-os/ui-rich-text/core\";\n\nconst MARKDOWN_LINK_PATTERN = /\\[((?:\\\\.|[^\\]\\\\])*)\\]\\(([^)\\s]+)\\)/g;\nconst MARKDOWN_LABEL_ESCAPE_PATTERN = /\\\\([\\\\[\\]()])/g;\nconst SESSION_MENTION_DISPLAY_PREFIX_BY_LANGUAGE: Record<UiLanguage, string> = {\n \"zh-CN\": \"@会话 · \",\n en: \"@session · \"\n};\nconst PLAIN_SESSION_AGENT_LABELS = [\n \"Claude Code\",\n \"Gemini CLI\",\n \"Hermes Agent\",\n \"OpenClaw\",\n \"Nexight\",\n \"Gemini\",\n \"Hermes\",\n \"Codex\"\n] as const;\n\nexport interface FormatAgentSessionMentionTextOptions {\n language?: UiLanguage;\n}\n\nexport function formatAgentSessionMentionText(\n value: string | null | undefined,\n options: FormatAgentSessionMentionTextOptions = {}\n): string {\n const trimmed = value?.trim() ?? \"\";\n if (!trimmed) {\n return \"\";\n }\n const sessionMentionDisplayPrefix = sessionMentionDisplayPrefixForLanguage(\n options.language\n );\n\n const withSessionMentionsNormalized = trimmed.replace(\n MARKDOWN_LINK_PATTERN,\n (fullMatch, rawLabel: string, href: string) => {\n const label = unescapeMarkdownLabel(rawLabel);\n const mention = parseRichTextMentionHref(href, label);\n if (!mention) {\n return isRichTextMentionHref(href) ? label : fullMatch;\n }\n const providerId = mention.providerId.trim().toLowerCase();\n const displayLabel = label || mention.label;\n if (providerId === \"agent-session\") {\n return formatSessionLabel(displayLabel, sessionMentionDisplayPrefix);\n }\n if (providerId === \"workspace-issue\") {\n return formatIssueLabel(displayLabel);\n }\n return displayLabel;\n }\n );\n const normalized = normalizeAgentTitleText(withSessionMentionsNormalized);\n if (isPlainSessionMentionText(normalized, sessionMentionDisplayPrefix)) {\n return formatSessionLabel(normalized, sessionMentionDisplayPrefix);\n }\n return normalized;\n}\n\nfunction isPlainSessionMentionText(\n value: string,\n sessionMentionDisplayPrefix: string\n): boolean {\n const trimmed = value.trim();\n if (\n !trimmed.startsWith(\"@\") ||\n trimmed.startsWith(sessionMentionDisplayPrefix)\n ) {\n return false;\n }\n\n return PLAIN_SESSION_AGENT_LABELS.some((agentLabel) => {\n const ampersandSeparator = ` & ${agentLabel}`;\n const ampersandIndex = trimmed.indexOf(ampersandSeparator);\n if (ampersandIndex > 1) {\n const trailing = trimmed.slice(\n ampersandIndex + ampersandSeparator.length\n );\n if (trailing === \"\" || trailing.startsWith(\" \")) {\n return true;\n }\n }\n\n const dottedSeparator = ` · ${agentLabel} · `;\n return trimmed.indexOf(dottedSeparator) > 1;\n });\n}\n\nfunction sessionMentionDisplayPrefixForLanguage(\n language: UiLanguage | undefined\n): string {\n return SESSION_MENTION_DISPLAY_PREFIX_BY_LANGUAGE[language ?? \"en\"];\n}\n\nfunction formatSessionLabel(\n label: string,\n sessionMentionDisplayPrefix: string\n): string {\n const normalizedLabel = label.trim().replace(/^@+/, \"\").trim();\n return normalizedLabel\n ? `${sessionMentionDisplayPrefix}${normalizedLabel}`\n : label.trim();\n}\n\nfunction formatIssueLabel(label: string): string {\n const normalizedLabel = label.trim().replace(/^@+/, \"\").trim();\n return normalizedLabel ? `@Task · ${normalizedLabel}` : label.trim();\n}\n\nfunction unescapeMarkdownLabel(label: string): string {\n return label.replace(MARKDOWN_LABEL_ESCAPE_PATTERN, \"$1\");\n}\n","import type { AgentProvider } from \"./agentSettings\";\n\nexport const AGENT_PROVIDER_LABEL: Record<AgentProvider, string> = {\n \"claude-code\": \"Claude Code\",\n codex: \"Codex\",\n cursor: \"Cursor\",\n nexight: \"Nexight\",\n opencode: \"OpenCode\",\n gemini: \"Gemini CLI\",\n openclaw: \"OpenClaw\",\n hermes: \"Hermes Agent\"\n};\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 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 gemini: {\n runtimeObservation: \"none\",\n experimental: false\n },\n openclaw: {\n runtimeObservation: \"jsonl\",\n experimental: false\n },\n hermes: {\n runtimeObservation: \"jsonl\",\n experimental: false\n }\n};\n","import { AGENT_PROVIDER_LABEL } from \"../contexts/settings/domain/agentSettings.providerMeta.ts\";\nimport type { UiLanguage } from \"../contexts/settings/domain/agentSettings.ts\";\nimport { translateInUiLanguage } from \"../i18n/runtime.ts\";\nimport type { AgentGUIProvider } from \"../types.ts\";\nimport type { WorkspaceAgentActivityTimelineItem } from \"./workspaceAgentActivityTypes.ts\";\nimport { formatAgentSessionMentionText } from \"./utils/agentSessionMentionText.ts\";\nimport { normalizeAgentTitleText } from \"./utils/agentTitleText.ts\";\n\nexport type AgentGUIResolvedProvider = AgentGUIProvider | \"unknown\";\nexport type AgentGUIConversationTitleFallback = \"generic-agent\" | null;\n\nexport interface AgentGUIConversationPlainTitleOptions {\n fallbackAgentLabel?: string;\n language?: UiLanguage;\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 switch (provider?.trim().toLowerCase() ?? \"\") {\n case \"claude-code\":\n case \"claude\":\n case \"claude code\":\n return \"claude-code\";\n case \"codex\":\n return \"codex\";\n case \"cursor\":\n case \"cursor-agent\":\n case \"cursor agent\":\n return \"cursor\";\n case \"nexight\":\n case \"tutti\":\n return \"nexight\";\n case \"gemini\":\n return \"gemini\";\n case \"hermes\":\n return \"hermes\";\n case \"openclaw\":\n return \"openclaw\";\n default:\n return \"unknown\";\n }\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 provider: AgentGUIResolvedProvider\n): {\n title: string;\n titleFallback: AgentGUIConversationTitleFallback;\n} {\n const normalizedTitle = stripAgentGUITitleTrailingPeriod(\n normalizeAgentTitleText(title)\n );\n if (normalizedTitle) {\n return {\n title: normalizedTitle,\n titleFallback: null\n };\n }\n if (provider === \"unknown\") {\n return {\n title: \"\",\n titleFallback: \"generic-agent\"\n };\n }\n return {\n title: AGENT_PROVIDER_LABEL[provider],\n titleFallback: null\n };\n}\n\nexport function resolveAgentGUIConversationDisplayTitle(\n input: {\n title: string;\n titleFallback?: AgentGUIConversationTitleFallback;\n },\n fallbackAgentLabel: string\n): string {\n if (input.title) {\n return stripAgentGUITitleTrailingPeriod(\n normalizeAgentTitleText(input.title)\n );\n }\n if (input.titleFallback === \"generic-agent\") {\n return stripAgentGUITitleTrailingPeriod(fallbackAgentLabel);\n }\n return \"\";\n}\n\nexport function formatAgentGUIConversationPlainTitle(\n input: {\n title: string;\n titleFallback?: AgentGUIConversationTitleFallback;\n },\n options: AgentGUIConversationPlainTitleOptions = {}\n): string {\n return formatAgentSessionMentionText(\n resolveAgentGUIConversationDisplayTitle(\n input,\n options.fallbackAgentLabel ?? \"Agent\"\n ),\n {\n language: options.language\n }\n );\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(\n normalizeAgentTitleText(input.title)\n );\n if (!title) {\n return null;\n }\n if (isAgentGUIUntitledTaskTitle(title)) {\n return null;\n }\n\n if (\n input.provider !== \"unknown\" &&\n title === AGENT_PROVIDER_LABEL[input.provider]\n ) {\n return null;\n }\n\n return title;\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 AGENT_PROVIDER_LABEL[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.workspaceAgentsUntitledTask\"\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"],"mappings":"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","names":[]}