@tutti-os/agent-gui 0.0.107 → 0.0.109

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 (126) hide show
  1. package/dist/{AgentGUI-Do6py-T_.d.ts → AgentGUI-BSr3cWcJ.d.ts} +6 -3
  2. package/dist/AgentRichTextReadonly-42TUVYX5.js +18 -0
  3. package/dist/agent-conversation/index.d.ts +4 -4
  4. package/dist/agent-conversation/index.js +13 -12
  5. package/dist/agent-conversation/index.js.map +1 -1
  6. package/dist/agent-env/index.js +1 -1
  7. package/dist/agent-gui.d.ts +5 -4
  8. package/dist/agent-gui.js +27 -25
  9. package/dist/agent-message-center/index.d.ts +12 -3
  10. package/dist/agent-message-center/index.js +75 -31
  11. package/dist/agent-message-center/index.js.map +1 -1
  12. package/dist/{agentConversationVM-Bf3Zv3iI.d.ts → agentConversationVM-D3Dn2LqN.d.ts} +18 -2
  13. package/dist/{agentGuiNodeTypes-DbgQBiYz.d.ts → agentGuiNodeTypes-CR_l4HhU.d.ts} +6 -3
  14. package/dist/agents.d.ts +1 -1
  15. package/dist/agents.js +1 -1
  16. package/dist/app/renderer/agentactivity.css +65 -3
  17. package/dist/app/renderer/assets/icons/agent-vinyl-beta-tag.svg +5 -0
  18. package/dist/{chunk-OWW7CU4U.js → chunk-25BPR75P.js} +2 -2
  19. package/dist/{chunk-N4WVVCNI.js → chunk-2QHKXI5N.js} +2 -2
  20. package/dist/{chunk-ZWY32ZKZ.js → chunk-34JD75OB.js} +1296 -737
  21. package/dist/chunk-34JD75OB.js.map +1 -0
  22. package/dist/{chunk-KJQERFKX.js → chunk-6CUELYIF.js} +3 -3
  23. package/dist/chunk-6CUELYIF.js.map +1 -0
  24. package/dist/{chunk-TKBEVCHG.js → chunk-7BN2WQ2M.js} +32 -2
  25. package/dist/chunk-7BN2WQ2M.js.map +1 -0
  26. package/dist/chunk-7KVZPJ3O.js +25 -0
  27. package/dist/chunk-7KVZPJ3O.js.map +1 -0
  28. package/dist/{chunk-C35SNDVZ.js → chunk-7OYHDOGG.js} +2 -1
  29. package/dist/chunk-7OYHDOGG.js.map +1 -0
  30. package/dist/{chunk-P3CVAWGJ.js → chunk-A5UXTAYJ.js} +5 -5
  31. package/dist/{chunk-4ZWV57MF.js → chunk-AIZJHA4Q.js} +14 -9
  32. package/dist/chunk-AIZJHA4Q.js.map +1 -0
  33. package/dist/{chunk-QY22OBJS.js → chunk-AY5AFMT2.js} +8 -84
  34. package/dist/chunk-AY5AFMT2.js.map +1 -0
  35. package/dist/{chunk-V5ROOS2O.js → chunk-BM3CSFWU.js} +22 -6
  36. package/dist/chunk-BM3CSFWU.js.map +1 -0
  37. package/dist/{chunk-F7Q7QK42.js → chunk-BRLKORQI.js} +1432 -1902
  38. package/dist/chunk-BRLKORQI.js.map +1 -0
  39. package/dist/{chunk-LDZ6C3YV.js → chunk-E74BMFHI.js} +3 -3
  40. package/dist/chunk-E74BMFHI.js.map +1 -0
  41. package/dist/{chunk-ZSJBCZUH.js → chunk-EBXOSQ5G.js} +102 -73
  42. package/dist/chunk-EBXOSQ5G.js.map +1 -0
  43. package/dist/chunk-J4K7KIFZ.js +75 -0
  44. package/dist/chunk-J4K7KIFZ.js.map +1 -0
  45. package/dist/{chunk-UFIEUC3Y.js → chunk-JBX3JPTC.js} +9 -8
  46. package/dist/chunk-JBX3JPTC.js.map +1 -0
  47. package/dist/{chunk-4YVKAPKW.js → chunk-JLRPIEIE.js} +2 -17
  48. package/dist/chunk-JLRPIEIE.js.map +1 -0
  49. package/dist/{chunk-BXOKBZH4.js → chunk-K7WFXVSD.js} +81 -45
  50. package/dist/chunk-K7WFXVSD.js.map +1 -0
  51. package/dist/{chunk-4YG7YK7S.js → chunk-L2GENUG3.js} +3 -3
  52. package/dist/{chunk-J2HG7UCP.js → chunk-OEYXSD3O.js} +3 -3
  53. package/dist/{chunk-L3GMMGRS.js → chunk-R2ZADXRB.js} +2 -2
  54. package/dist/chunk-R7AXDQCA.js +146 -0
  55. package/dist/chunk-R7AXDQCA.js.map +1 -0
  56. package/dist/{chunk-7MPN2JGL.js → chunk-U4CVBCHD.js} +37 -119
  57. package/dist/chunk-U4CVBCHD.js.map +1 -0
  58. package/dist/{chunk-4YCCATI4.js → chunk-USIFGHT3.js} +17 -4
  59. package/dist/chunk-USIFGHT3.js.map +1 -0
  60. package/dist/{chunk-7BXWPI4F.js → chunk-VMQNG2KI.js} +13 -1
  61. package/dist/{chunk-7BXWPI4F.js.map → chunk-VMQNG2KI.js.map} +1 -1
  62. package/dist/{chunk-SN6UYX54.js → chunk-W6TO6K2X.js} +4 -4
  63. package/dist/{chunk-UGVI47X6.js → chunk-YNSXUEIR.js} +6 -6
  64. package/dist/context-mention-palette/index.js +13 -12
  65. package/dist/{contribution-C6K5YfJ7.d.ts → contribution-C2LDwLA7.d.ts} +3 -2
  66. package/dist/dock-icons.js +3 -3
  67. package/dist/i18n/index.d.ts +31 -1
  68. package/dist/i18n/index.js +2 -2
  69. package/dist/index.d.ts +8 -7
  70. package/dist/index.js +27 -25
  71. package/dist/index.js.map +1 -1
  72. package/dist/mention-search.js +11 -10
  73. package/dist/provider-icons.js +1 -1
  74. package/dist/provider-identity.js +1 -1
  75. package/dist/{types-CnT8rNUI.d.ts → types-yF_0mrNS.d.ts} +1 -0
  76. package/dist/workbench/contribution.d.ts +2 -2
  77. package/dist/workbench/contribution.js +11 -11
  78. package/dist/workbench/index.d.ts +4 -4
  79. package/dist/workbench/index.js +22 -28
  80. package/dist/workbench/launch.d.ts +11 -14
  81. package/dist/workbench/launch.js +5 -11
  82. package/dist/workbench/providerCatalog.js +2 -2
  83. package/dist/workbench/sessionTitle.js +3 -3
  84. package/dist/workbench/state.d.ts +2 -12
  85. package/dist/workbench/state.js +3 -9
  86. package/dist/workspace-agent-generated-files.js +2 -1
  87. package/dist/workspace-query-cache.d.ts +19 -0
  88. package/dist/workspace-query-cache.js +7 -0
  89. package/dist/workspace-query-cache.js.map +1 -0
  90. package/package.json +21 -14
  91. package/dist/@-bold-lined-BLLFKBFI.svg +0 -10
  92. package/dist/AgentRichTextReadonly-F6PHC5SX.js +0 -18
  93. package/dist/add-lined-bold-5QPUDZCU.svg +0 -3
  94. package/dist/chunk-4YCCATI4.js.map +0 -1
  95. package/dist/chunk-4YVKAPKW.js.map +0 -1
  96. package/dist/chunk-4ZWV57MF.js.map +0 -1
  97. package/dist/chunk-7MPN2JGL.js.map +0 -1
  98. package/dist/chunk-BXOKBZH4.js.map +0 -1
  99. package/dist/chunk-C35SNDVZ.js.map +0 -1
  100. package/dist/chunk-F7Q7QK42.js.map +0 -1
  101. package/dist/chunk-H6IQ63DQ.js +0 -14
  102. package/dist/chunk-H6IQ63DQ.js.map +0 -1
  103. package/dist/chunk-KJQERFKX.js.map +0 -1
  104. package/dist/chunk-LDZ6C3YV.js.map +0 -1
  105. package/dist/chunk-QY22OBJS.js.map +0 -1
  106. package/dist/chunk-TKBEVCHG.js.map +0 -1
  107. package/dist/chunk-UFIEUC3Y.js.map +0 -1
  108. package/dist/chunk-V5ROOS2O.js.map +0 -1
  109. package/dist/chunk-ZSJBCZUH.js.map +0 -1
  110. package/dist/chunk-ZWY32ZKZ.js.map +0 -1
  111. package/dist/claudecode-flat-filled-NHO4JCVK.svg +0 -10
  112. package/dist/codex-flat-filled-WYHCF5VR.svg +0 -10
  113. package/dist/cursor-flat-filled-CL7N3BTZ.svg +0 -3
  114. package/dist/handoff-lined-4WQUBVG3.svg +0 -11
  115. package/dist/open-link-lined-JWEKUKME.svg +0 -4
  116. package/dist/opencode-flat-filled-CYAJPX45.svg +0 -4
  117. package/dist/tutti-flat-filled-K32QBTZE.svg +0 -12
  118. /package/dist/{AgentRichTextReadonly-F6PHC5SX.js.map → AgentRichTextReadonly-42TUVYX5.js.map} +0 -0
  119. /package/dist/{chunk-OWW7CU4U.js.map → chunk-25BPR75P.js.map} +0 -0
  120. /package/dist/{chunk-N4WVVCNI.js.map → chunk-2QHKXI5N.js.map} +0 -0
  121. /package/dist/{chunk-P3CVAWGJ.js.map → chunk-A5UXTAYJ.js.map} +0 -0
  122. /package/dist/{chunk-4YG7YK7S.js.map → chunk-L2GENUG3.js.map} +0 -0
  123. /package/dist/{chunk-J2HG7UCP.js.map → chunk-OEYXSD3O.js.map} +0 -0
  124. /package/dist/{chunk-L3GMMGRS.js.map → chunk-R2ZADXRB.js.map} +0 -0
  125. /package/dist/{chunk-SN6UYX54.js.map → chunk-W6TO6K2X.js.map} +0 -0
  126. /package/dist/{chunk-UGVI47X6.js.map → chunk-YNSXUEIR.js.map} +0 -0
@@ -2,13 +2,14 @@ import * as react from 'react';
2
2
  import { PropsWithChildren, JSX, HTMLAttributes, ReactNode } from 'react';
3
3
  import { I18nRuntime } from '@tutti-os/ui-i18n-runtime';
4
4
  import { AgentActivityGoalControlInput, AgentActivityGoalControlResult, AgentActivityCreateSessionInput, AgentActivitySession, AgentActivityDeleteSessionInput, AgentActivityDeleteSessionResult, AgentActivitySendInput, AgentActivitySessionSettings, AgentActivityActivateSessionResult, AgentActivitySnapshot, AgentSessionEngine, AgentActivityMessageOrder, AgentActivityMessagePage, AgentActivitySendInputResult, AgentActivityRenameSessionInput, AgentActivitySubmitInteractiveInput, AgentActivitySubmitInteractiveResult, AgentActivitySnapshotListener, AgentActivitySubmitSettingsPatch } from '@tutti-os/agent-activity-core';
5
- import { u as AgentHostAgentSessionComposerSettings, y as AgentHostUnactivateAgentSessionResult, h as AgentGUIAgentTarget, n as AgentGUIProvider, z as AgentPromptContentBlock, m as AgentGUINodeData, P as Point, o as AgentGUIProviderRailAllPresentation, p as AgentGUIProviderRailMode, q as AgentGUIProviderReadinessGate, l as AgentGUIHomeSuggestionId, N as NodeFrame, e as AgentGUIAgentDirectorySnapshot, k as AgentGUIAllAgentsPresentation } from './types-CnT8rNUI.js';
6
- import { A as AgentComposerDraft, q as AgentSessionCommand, d as AgentGUIProviderSkillOption, b as AgentGUIComposerSettingsVM, e as AgentGUIQueueStatus, f as AgentGUIQueuedPromptVM, l as AgentMessageMarkdownWorkspaceAppIcon, r as AgentSlashCommandCapability, c as AgentGUINodeViewModel, n as AgentProbeSnapshot, a as AgentComposerDraftFile, i as AgentHostInputApi } from './agentGuiNodeTypes-DbgQBiYz.js';
5
+ import { u as AgentHostAgentSessionComposerSettings, y as AgentHostUnactivateAgentSessionResult, h as AgentGUIAgentTarget, n as AgentGUIProvider, z as AgentPromptContentBlock, m as AgentGUINodeData, P as Point, o as AgentGUIProviderRailAllPresentation, p as AgentGUIProviderRailMode, q as AgentGUIProviderReadinessGate, l as AgentGUIHomeSuggestionId, N as NodeFrame, e as AgentGUIAgentDirectorySnapshot, k as AgentGUIAllAgentsPresentation } from './types-yF_0mrNS.js';
6
+ import { WorkspaceQueryCache } from './workspace-query-cache.js';
7
+ import { A as AgentComposerDraft, q as AgentSessionCommand, d as AgentGUIProviderSkillOption, b as AgentGUIComposerSettingsVM, e as AgentGUIQueueStatus, f as AgentGUIQueuedPromptVM, l as AgentMessageMarkdownWorkspaceAppIcon, r as AgentSlashCommandCapability, c as AgentGUINodeViewModel, n as AgentProbeSnapshot, a as AgentComposerDraftFile, i as AgentHostInputApi } from './agentGuiNodeTypes-CR_l4HhU.js';
7
8
  import { WorkspaceFileReference, ReferenceLocateTarget, WorkspaceFileReferenceAdapter, ReferenceProvenanceCatalog } from '@tutti-os/workspace-file-reference/contracts';
8
9
  import { A as AgentContextMentionItem } from './agentFileMentionContracts-B70VnPWO.js';
9
10
  import { WorkspaceFileEntry } from '@tutti-os/workspace-file-manager/services';
10
11
  import { ReferenceSourceAggregator } from '@tutti-os/workspace-file-reference/core';
11
- import { b as AgentConversationPromptVM, e as WorkspaceLinkAction } from './agentConversationVM-Bf3Zv3iI.js';
12
+ import { b as AgentConversationPromptVM, e as WorkspaceLinkAction } from './agentConversationVM-D3Dn2LqN.js';
12
13
  import { AgentContextMentionProvider } from './context-mention-provider.js';
13
14
  import { WorkspaceUserProjectI18nRuntime } from '@tutti-os/workspace-user-project/i18n';
14
15
  import { WorkspaceUserProjectSelectChangeAction } from '@tutti-os/workspace-user-project/ui';
@@ -306,6 +307,7 @@ interface AgentActivityRuntime {
306
307
  updateSessionSettings(input: AgentActivityRuntimeUpdateSessionSettingsInput): Promise<AgentActivityRuntimeUpdateSessionSettingsResult>;
307
308
  getSnapshot(workspaceId: string): AgentActivitySnapshot;
308
309
  getSessionEngine(workspaceId: string): AgentSessionEngine;
310
+ getSessionSectionsQueryCache?(workspaceId: string): WorkspaceQueryCache<unknown>;
309
311
  listSessionMessages(input: AgentActivityRuntimeListSessionMessagesInput): Promise<AgentActivityMessagePage>;
310
312
  listAgentGeneratedFiles?(input: AgentActivityRuntimeListGeneratedFilesInput): Promise<AgentActivityRuntimeGeneratedFileList>;
311
313
  listSessionsPage?(input: AgentActivityRuntimeListSessionsPageInput): Promise<AgentActivityRuntimeSessionPageResult>;
@@ -692,6 +694,7 @@ interface AgentComposerProps {
692
694
  usageLimitsLabel: string;
693
695
  usageCompactAction: string;
694
696
  approvalLead: string;
697
+ fileChangeApprovalLead: string;
695
698
  planLead: string;
696
699
  planModes: Array<{
697
700
  id: string;
@@ -0,0 +1,18 @@
1
+ import {
2
+ AgentRichTextReadonly
3
+ } from "./chunk-JBX3JPTC.js";
4
+ import "./chunk-OEYXSD3O.js";
5
+ import "./chunk-LUGELG5V.js";
6
+ import "./chunk-KPMQGPYU.js";
7
+ import "./chunk-W6TO6K2X.js";
8
+ import "./chunk-PJP5BUU6.js";
9
+ import "./chunk-7KVZPJ3O.js";
10
+ import "./chunk-25BPR75P.js";
11
+ import "./chunk-7BN2WQ2M.js";
12
+ import "./chunk-D2JUDUYY.js";
13
+ import "./chunk-6CUELYIF.js";
14
+ import "./chunk-YNSXUEIR.js";
15
+ export {
16
+ AgentRichTextReadonly
17
+ };
18
+ //# sourceMappingURL=AgentRichTextReadonly-42TUVYX5.js.map
@@ -1,12 +1,12 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode, JSX } from 'react';
3
- import { c as AgentConversationVM, e as WorkspaceLinkAction, d as WorkspaceAgentSessionDetailViewModel } from '../agentConversationVM-Bf3Zv3iI.js';
4
- export { B as BuildWorkspaceAgentSessionDetailInput, W as WorkspaceAgentActivityTimelineItem, f as buildWorkspaceAgentSessionDetailViewModel } from '../agentConversationVM-Bf3Zv3iI.js';
5
- import { d as AgentGUIProviderSkillOption, l as AgentMessageMarkdownWorkspaceAppIcon } from '../agentGuiNodeTypes-DbgQBiYz.js';
3
+ import { c as AgentConversationVM, e as WorkspaceLinkAction, d as WorkspaceAgentSessionDetailViewModel } from '../agentConversationVM-D3Dn2LqN.js';
4
+ export { B as BuildWorkspaceAgentSessionDetailInput, W as WorkspaceAgentActivityTimelineItem, f as buildWorkspaceAgentSessionDetailViewModel } from '../agentConversationVM-D3Dn2LqN.js';
5
+ import { d as AgentGUIProviderSkillOption, l as AgentMessageMarkdownWorkspaceAppIcon } from '../agentGuiNodeTypes-CR_l4HhU.js';
6
6
  export { W as WorkspaceAgentActivityCard } from '../workspaceAgentActivityListTypes-DZfS_HgG.js';
7
7
  import '@tutti-os/workspace-issue-manager/core';
8
8
  import '@tutti-os/agent-activity-core';
9
- import '../types-CnT8rNUI.js';
9
+ import '../types-yF_0mrNS.js';
10
10
  import '@tutti-os/workspace-user-project/contracts';
11
11
  import '../pastedTextKinds-D-XuInaS.js';
12
12
 
@@ -6,28 +6,29 @@ import {
6
6
  projectAgentConversationVM,
7
7
  reconcileProjectedAgentConversationVM,
8
8
  useProjectedAgentConversation
9
- } from "../chunk-F7Q7QK42.js";
10
- import "../chunk-UFIEUC3Y.js";
11
- import "../chunk-7BXWPI4F.js";
9
+ } from "../chunk-BRLKORQI.js";
10
+ import "../chunk-JBX3JPTC.js";
11
+ import "../chunk-VMQNG2KI.js";
12
12
  import "../chunk-FGLQZ6I4.js";
13
13
  import "../chunk-XJ34OIEQ.js";
14
- import "../chunk-J2HG7UCP.js";
14
+ import "../chunk-R7AXDQCA.js";
15
+ import "../chunk-OEYXSD3O.js";
15
16
  import "../chunk-LUGELG5V.js";
16
- import "../chunk-7MPN2JGL.js";
17
+ import "../chunk-U4CVBCHD.js";
17
18
  import "../chunk-KPMQGPYU.js";
18
- import "../chunk-LDZ6C3YV.js";
19
+ import "../chunk-E74BMFHI.js";
19
20
  import "../chunk-F5UR6EJG.js";
20
- import "../chunk-SN6UYX54.js";
21
+ import "../chunk-W6TO6K2X.js";
21
22
  import "../chunk-PJP5BUU6.js";
22
- import "../chunk-H6IQ63DQ.js";
23
+ import "../chunk-7KVZPJ3O.js";
23
24
  import "../chunk-MIJXEELH.js";
24
25
  import {
25
26
  translate
26
- } from "../chunk-OWW7CU4U.js";
27
- import "../chunk-TKBEVCHG.js";
27
+ } from "../chunk-25BPR75P.js";
28
+ import "../chunk-7BN2WQ2M.js";
28
29
  import "../chunk-D2JUDUYY.js";
29
- import "../chunk-KJQERFKX.js";
30
- import "../chunk-UGVI47X6.js";
30
+ import "../chunk-6CUELYIF.js";
31
+ import "../chunk-YNSXUEIR.js";
31
32
 
32
33
  // shared/WorkspaceAgentSessionDetail.tsx
33
34
  import { useMemo } from "react";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../shared/WorkspaceAgentSessionDetail.tsx"],"sourcesContent":["import { useMemo, type JSX } from \"react\";\nimport type { WorkspaceLinkAction } from \"../contexts/workspace/presentation/renderer/actions/workspaceLinkActions\";\nimport { translate } from \"../i18n/index\";\nimport { AgentConversationFlow } from \"./agentConversation/components/AgentConversationFlow\";\nimport { useProjectedAgentConversation } from \"./agentConversation/projection/useProjectedAgentConversation\";\nimport type { WorkspaceAgentSessionDetailViewModel } from \"./workspaceAgentSessionDetailViewModel\";\n\ninterface WorkspaceAgentSessionDetailProps {\n detail: WorkspaceAgentSessionDetailViewModel;\n avoidGroupingEdits?: boolean;\n isLoading: boolean;\n timelineItemCount: number;\n onLinkAction?: (action: WorkspaceLinkAction) => void;\n toolCallsLabel: (count: number) => string;\n thinkingLabel?: string;\n loadingLabel?: string;\n rawTimelineJsonLabel?: string;\n showRawTimelineJson?: boolean;\n}\n\nexport function WorkspaceAgentSessionDetail({\n detail,\n avoidGroupingEdits = false,\n isLoading,\n timelineItemCount,\n onLinkAction,\n toolCallsLabel,\n thinkingLabel = translate(\"agentHost.workspaceAgentSessionDetailThinking\"),\n loadingLabel = translate(\"common.loading\"),\n rawTimelineJsonLabel,\n showRawTimelineJson = false\n}: WorkspaceAgentSessionDetailProps): JSX.Element {\n const conversation = useProjectedAgentConversation({\n detail,\n avoidGroupingEdits\n });\n const showLoadingSkeleton =\n detail.turns.length === 0 &&\n (isLoading ||\n detail.activity.status === \"waiting\" ||\n detail.activity.status === \"working\");\n const emptySummary =\n detail.activity.latestActivitySummary ||\n (timelineItemCount > 0\n ? translate(\"agentHost.workspaceAgentSessionDetailEmptyWithTimeline\")\n : translate(\"agentHost.workspaceAgentSessionDetailEmptyNoTimeline\"));\n const flowLabels = useMemo(\n () => ({\n thinkingLabel,\n toolCallsLabel,\n processing: translate(\"agentHost.agentGui.processing\"),\n turnSummary: translate(\"agentHost.agentGui.turnSummary\"),\n rawTimelineJson: rawTimelineJsonLabel\n }),\n [rawTimelineJsonLabel, thinkingLabel, toolCallsLabel]\n );\n const emptyState = useMemo(\n () => (\n <div className=\"workspace-agents-status-panel__detail-empty\">\n {emptySummary}\n </div>\n ),\n [emptySummary]\n );\n\n return (\n <div className=\"workspace-agents-status-panel__detail\">\n <AgentConversationFlow\n conversation={detail.turns.length > 0 ? conversation : null}\n isLoading={showLoadingSkeleton}\n loadingLabel={loadingLabel}\n empty={emptyState}\n onLinkAction={onLinkAction}\n showRawTimelineJson={showRawTimelineJson}\n labels={flowLabels}\n />\n </div>\n );\n}\n\nexport function WorkspaceAgentSessionDetailSkeleton({\n loading = true,\n loadingLabel = translate(\"common.loading\")\n}: {\n loading?: boolean;\n loadingLabel?: string;\n}): JSX.Element {\n const flowLabels = useMemo(\n () => ({\n thinkingLabel: translate(\"agentHost.workspaceAgentSessionDetailThinking\"),\n toolCallsLabel: (count: number) =>\n translate(\"agentHost.workspaceAgentSessionDetailToolCalls\", { count }),\n processing: translate(\"agentHost.agentGui.processing\"),\n turnSummary: translate(\"agentHost.agentGui.turnSummary\")\n }),\n []\n );\n\n if (!loading) {\n return <></>;\n }\n\n return (\n <div\n className=\"workspace-agents-status-panel__detail-skeleton\"\n data-testid=\"workspace-agents-status-panel-detail-skeleton\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label={loadingLabel}\n >\n <AgentConversationFlow\n conversation={null}\n isLoading\n loadingLabel={loadingLabel}\n loadingTestId=\"workspace-agents-status-panel-detail-skeleton\"\n empty={null}\n labels={flowLabels}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,eAAyB;AA0D5B,SAyCK,UAzCL;AAtCC,SAAS,4BAA4B;AAAA,EAC1C;AAAA,EACA,qBAAqB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB,UAAU,+CAA+C;AAAA,EACzE,eAAe,UAAU,gBAAgB;AAAA,EACzC;AAAA,EACA,sBAAsB;AACxB,GAAkD;AAChD,QAAM,eAAe,8BAA8B;AAAA,IACjD;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,sBACJ,OAAO,MAAM,WAAW,MACvB,aACC,OAAO,SAAS,WAAW,aAC3B,OAAO,SAAS,WAAW;AAC/B,QAAM,eACJ,OAAO,SAAS,0BACf,oBAAoB,IACjB,UAAU,wDAAwD,IAClE,UAAU,sDAAsD;AACtE,QAAM,aAAa;AAAA,IACjB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,YAAY,UAAU,+BAA+B;AAAA,MACrD,aAAa,UAAU,gCAAgC;AAAA,MACvD,iBAAiB;AAAA,IACnB;AAAA,IACA,CAAC,sBAAsB,eAAe,cAAc;AAAA,EACtD;AACA,QAAM,aAAa;AAAA,IACjB,MACE,oBAAC,SAAI,WAAU,+CACZ,wBACH;AAAA,IAEF,CAAC,YAAY;AAAA,EACf;AAEA,SACE,oBAAC,SAAI,WAAU,yCACb;AAAA,IAAC;AAAA;AAAA,MACC,cAAc,OAAO,MAAM,SAAS,IAAI,eAAe;AAAA,MACvD,WAAW;AAAA,MACX;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA,QAAQ;AAAA;AAAA,EACV,GACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../shared/WorkspaceAgentSessionDetail.tsx"],"sourcesContent":["import { useMemo, type JSX } from \"react\";\nimport type { WorkspaceLinkAction } from \"../contexts/workspace/presentation/renderer/actions/workspaceLinkActions\";\nimport { translate } from \"../i18n/index\";\nimport { AgentConversationFlow } from \"./agentConversation/components/AgentConversationFlow\";\nimport { useProjectedAgentConversation } from \"./agentConversation/projection/useProjectedAgentConversation\";\nimport type { WorkspaceAgentSessionDetailViewModel } from \"./workspaceAgentSessionDetailViewModel\";\n\ninterface WorkspaceAgentSessionDetailProps {\n detail: WorkspaceAgentSessionDetailViewModel;\n avoidGroupingEdits?: boolean;\n isLoading: boolean;\n timelineItemCount: number;\n onLinkAction?: (action: WorkspaceLinkAction) => void;\n toolCallsLabel: (count: number) => string;\n thinkingLabel?: string;\n loadingLabel?: string;\n rawTimelineJsonLabel?: string;\n showRawTimelineJson?: boolean;\n}\n\nexport function WorkspaceAgentSessionDetail({\n detail,\n avoidGroupingEdits = false,\n isLoading,\n timelineItemCount,\n onLinkAction,\n toolCallsLabel,\n thinkingLabel = translate(\"agentHost.workspaceAgentSessionDetailThinking\"),\n loadingLabel = translate(\"common.loading\"),\n rawTimelineJsonLabel,\n showRawTimelineJson = false\n}: WorkspaceAgentSessionDetailProps): JSX.Element {\n const conversation = useProjectedAgentConversation({\n detail,\n avoidGroupingEdits\n });\n const showLoadingSkeleton =\n detail.turns.length === 0 &&\n (isLoading ||\n detail.activity.status === \"waiting\" ||\n detail.activity.status === \"working\");\n const emptySummary =\n detail.activity.latestActivitySummary ||\n (timelineItemCount > 0\n ? translate(\"agentHost.workspaceAgentSessionDetailEmptyWithTimeline\")\n : translate(\"agentHost.workspaceAgentSessionDetailEmptyNoTimeline\"));\n const flowLabels = useMemo(\n () => ({\n thinkingLabel,\n toolCallsLabel,\n processing: translate(\"agentHost.agentGui.processing\"),\n turnSummary: translate(\"agentHost.agentGui.turnSummary\"),\n rawTimelineJson: rawTimelineJsonLabel\n }),\n [rawTimelineJsonLabel, thinkingLabel, toolCallsLabel]\n );\n const emptyState = useMemo(\n () => (\n <div className=\"workspace-agents-status-panel__detail-empty\">\n {emptySummary}\n </div>\n ),\n [emptySummary]\n );\n\n return (\n <div className=\"workspace-agents-status-panel__detail\">\n <AgentConversationFlow\n conversation={detail.turns.length > 0 ? conversation : null}\n isLoading={showLoadingSkeleton}\n loadingLabel={loadingLabel}\n empty={emptyState}\n onLinkAction={onLinkAction}\n showRawTimelineJson={showRawTimelineJson}\n labels={flowLabels}\n />\n </div>\n );\n}\n\nexport function WorkspaceAgentSessionDetailSkeleton({\n loading = true,\n loadingLabel = translate(\"common.loading\")\n}: {\n loading?: boolean;\n loadingLabel?: string;\n}): JSX.Element {\n const flowLabels = useMemo(\n () => ({\n thinkingLabel: translate(\"agentHost.workspaceAgentSessionDetailThinking\"),\n toolCallsLabel: (count: number) =>\n translate(\"agentHost.workspaceAgentSessionDetailToolCalls\", { count }),\n processing: translate(\"agentHost.agentGui.processing\"),\n turnSummary: translate(\"agentHost.agentGui.turnSummary\")\n }),\n []\n );\n\n if (!loading) {\n return <></>;\n }\n\n return (\n <div\n className=\"workspace-agents-status-panel__detail-skeleton\"\n data-testid=\"workspace-agents-status-panel-detail-skeleton\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label={loadingLabel}\n >\n <AgentConversationFlow\n conversation={null}\n isLoading\n loadingLabel={loadingLabel}\n loadingTestId=\"workspace-agents-status-panel-detail-skeleton\"\n empty={null}\n labels={flowLabels}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,eAAyB;AA0D5B,SAyCK,UAzCL;AAtCC,SAAS,4BAA4B;AAAA,EAC1C;AAAA,EACA,qBAAqB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB,UAAU,+CAA+C;AAAA,EACzE,eAAe,UAAU,gBAAgB;AAAA,EACzC;AAAA,EACA,sBAAsB;AACxB,GAAkD;AAChD,QAAM,eAAe,8BAA8B;AAAA,IACjD;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,sBACJ,OAAO,MAAM,WAAW,MACvB,aACC,OAAO,SAAS,WAAW,aAC3B,OAAO,SAAS,WAAW;AAC/B,QAAM,eACJ,OAAO,SAAS,0BACf,oBAAoB,IACjB,UAAU,wDAAwD,IAClE,UAAU,sDAAsD;AACtE,QAAM,aAAa;AAAA,IACjB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,YAAY,UAAU,+BAA+B;AAAA,MACrD,aAAa,UAAU,gCAAgC;AAAA,MACvD,iBAAiB;AAAA,IACnB;AAAA,IACA,CAAC,sBAAsB,eAAe,cAAc;AAAA,EACtD;AACA,QAAM,aAAa;AAAA,IACjB,MACE,oBAAC,SAAI,WAAU,+CACZ,wBACH;AAAA,IAEF,CAAC,YAAY;AAAA,EACf;AAEA,SACE,oBAAC,SAAI,WAAU,yCACb;AAAA,IAAC;AAAA;AAAA,MACC,cAAc,OAAO,MAAM,SAAS,IAAI,eAAe;AAAA,MACvD,WAAW;AAAA,MACX;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA,QAAQ;AAAA;AAAA,EACV,GACF;AAEJ;","names":[]}
@@ -5,7 +5,7 @@ import {
5
5
  openAgentEnvPanel,
6
6
  resolveAgentErrorPresentation,
7
7
  useAgentEnvPanelRequest
8
- } from "../chunk-7BXWPI4F.js";
8
+ } from "../chunk-VMQNG2KI.js";
9
9
 
10
10
  // shared/agentEnv/codexSetupContract.ts
11
11
  function readCodexSetupActiveAction(status) {
@@ -1,15 +1,16 @@
1
1
  import 'react';
2
2
  import '@tutti-os/ui-i18n-runtime';
3
- export { n as AgentGUI, w as AgentGUIProps } from './AgentGUI-Do6py-T_.js';
4
- import './agentGuiNodeTypes-DbgQBiYz.js';
5
- export { l as AgentGUIHomeSuggestionId } from './types-CnT8rNUI.js';
3
+ export { n as AgentGUI, w as AgentGUIProps } from './AgentGUI-BSr3cWcJ.js';
4
+ import './agentGuiNodeTypes-CR_l4HhU.js';
5
+ export { l as AgentGUIHomeSuggestionId } from './types-yF_0mrNS.js';
6
6
  import './runtime-BBNdWgDU.js';
7
7
  export { ReferenceProvenanceCatalog as AgentGUIReferenceProvenanceFilterCatalog } from '@tutti-os/workspace-file-reference/contracts';
8
8
  import '@tutti-os/agent-activity-core';
9
+ import './workspace-query-cache.js';
9
10
  import './agentFileMentionContracts-B70VnPWO.js';
10
11
  import '@tutti-os/workspace-file-manager/services';
11
12
  import '@tutti-os/workspace-file-reference/core';
12
- import './agentConversationVM-Bf3Zv3iI.js';
13
+ import './agentConversationVM-D3Dn2LqN.js';
13
14
  import '@tutti-os/workspace-issue-manager/core';
14
15
  import './workspaceAgentActivityListTypes-DZfS_HgG.js';
15
16
  import './context-mention-provider.js';
package/dist/agent-gui.js CHANGED
@@ -1,42 +1,44 @@
1
1
  import {
2
2
  AgentGUI
3
- } from "./chunk-ZWY32ZKZ.js";
4
- import "./chunk-ZSJBCZUH.js";
5
- import "./chunk-V5ROOS2O.js";
6
- import "./chunk-4YVKAPKW.js";
7
- import "./chunk-QY22OBJS.js";
8
- import "./chunk-L3GMMGRS.js";
3
+ } from "./chunk-34JD75OB.js";
4
+ import "./chunk-J4K7KIFZ.js";
5
+ import "./chunk-EBXOSQ5G.js";
6
+ import "./chunk-AY5AFMT2.js";
7
+ import "./chunk-BM3CSFWU.js";
8
+ import "./chunk-JLRPIEIE.js";
9
+ import "./chunk-R2ZADXRB.js";
9
10
  import "./chunk-UHBCM6RO.js";
10
- import "./chunk-F7Q7QK42.js";
11
- import "./chunk-UFIEUC3Y.js";
12
- import "./chunk-7BXWPI4F.js";
13
- import "./chunk-P3CVAWGJ.js";
14
- import "./chunk-C35SNDVZ.js";
11
+ import "./chunk-BRLKORQI.js";
12
+ import "./chunk-JBX3JPTC.js";
13
+ import "./chunk-VMQNG2KI.js";
14
+ import "./chunk-A5UXTAYJ.js";
15
+ import "./chunk-7OYHDOGG.js";
15
16
  import "./chunk-FGLQZ6I4.js";
16
- import "./chunk-4YG7YK7S.js";
17
- import "./chunk-BXOKBZH4.js";
18
- import "./chunk-4YCCATI4.js";
17
+ import "./chunk-L2GENUG3.js";
18
+ import "./chunk-K7WFXVSD.js";
19
+ import "./chunk-USIFGHT3.js";
19
20
  import "./chunk-XJ34OIEQ.js";
20
- import "./chunk-J2HG7UCP.js";
21
+ import "./chunk-R7AXDQCA.js";
22
+ import "./chunk-OEYXSD3O.js";
21
23
  import "./chunk-LUGELG5V.js";
22
24
  import "./chunk-JM24HADP.js";
23
- import "./chunk-4ZWV57MF.js";
25
+ import "./chunk-AIZJHA4Q.js";
24
26
  import "./chunk-2RQM7PJN.js";
25
- import "./chunk-7MPN2JGL.js";
27
+ import "./chunk-U4CVBCHD.js";
26
28
  import "./chunk-KPMQGPYU.js";
27
- import "./chunk-N4WVVCNI.js";
29
+ import "./chunk-2QHKXI5N.js";
28
30
  import "./chunk-YMXYBG7U.js";
29
- import "./chunk-LDZ6C3YV.js";
31
+ import "./chunk-E74BMFHI.js";
30
32
  import "./chunk-F5UR6EJG.js";
31
- import "./chunk-SN6UYX54.js";
33
+ import "./chunk-W6TO6K2X.js";
32
34
  import "./chunk-PJP5BUU6.js";
33
- import "./chunk-H6IQ63DQ.js";
35
+ import "./chunk-7KVZPJ3O.js";
34
36
  import "./chunk-MIJXEELH.js";
35
- import "./chunk-OWW7CU4U.js";
36
- import "./chunk-TKBEVCHG.js";
37
+ import "./chunk-25BPR75P.js";
38
+ import "./chunk-7BN2WQ2M.js";
37
39
  import "./chunk-D2JUDUYY.js";
38
- import "./chunk-KJQERFKX.js";
39
- import "./chunk-UGVI47X6.js";
40
+ import "./chunk-6CUELYIF.js";
41
+ import "./chunk-YNSXUEIR.js";
40
42
  export {
41
43
  AgentGUI
42
44
  };
@@ -2,7 +2,7 @@ import * as react from 'react';
2
2
  import { JSX, ReactNode, HTMLAttributes } from 'react';
3
3
  import { I18nRuntime } from '@tutti-os/ui-i18n-runtime';
4
4
  import { A as AgentGuiI18nLocale, T as TranslateFn } from '../runtime-BBNdWgDU.js';
5
- import { b as AgentConversationPromptVM, e as WorkspaceLinkAction } from '../agentConversationVM-Bf3Zv3iI.js';
5
+ import { b as AgentConversationPromptVM, e as WorkspaceLinkAction } from '../agentConversationVM-D3Dn2LqN.js';
6
6
  import { AgentActivityNeedsAttentionItem, WorkspaceAgentConsumerSession, AgentActivitySnapshot, AgentSessionEngineState } from '@tutti-os/agent-activity-core';
7
7
  export { WorkspaceAgentConsumerCounts, WorkspaceAgentConsumerSession, selectWorkspaceAgentConsumerCounts, selectWorkspaceAgentConsumerSession, selectWorkspaceAgentConsumerSessions } from '@tutti-os/agent-activity-core';
8
8
  import { a as WorkspaceAgentActivityStatus } from '../workspaceAgentActivityListTypes-DZfS_HgG.js';
@@ -52,12 +52,18 @@ interface WorkspaceAgentMessageCenterItem {
52
52
  digest: WorkspaceAgentMessageCenterDigest;
53
53
  lastAgentMessageSummary: string;
54
54
  lastAgentMessageAtUnixMs: number | null;
55
+ pendingInteractionTarget: WorkspaceAgentMessageCenterInteractionTarget | null;
55
56
  pendingPrompt: AgentConversationPromptVM | null;
56
57
  needsAttentionKind: AgentActivityNeedsAttentionItem["kind"] | null;
57
58
  needsAttentionSummary: string | null;
58
59
  latestTurnOutcome?: WorkspaceAgentMessageCenterTurnOutcome | null;
59
60
  sortTimeUnixMs: number;
60
61
  }
62
+ interface WorkspaceAgentMessageCenterInteractionTarget {
63
+ agentSessionId: string;
64
+ requestId: string;
65
+ turnId: string;
66
+ }
61
67
  interface WorkspaceAgentMessageCenterTurnOutcome {
62
68
  notificationKey: string;
63
69
  status: "completed" | "failed";
@@ -135,6 +141,7 @@ declare function resolveMessageCenterNotificationAction(item: WorkspaceAgentMess
135
141
  }): string | null;
136
142
  declare function buildWorkspaceAgentInteractivePromptLabels(t: ReturnType<typeof useTranslation>["t"], provider?: string): {
137
143
  approvalLead: string;
144
+ fileChangeApprovalLead: string;
138
145
  planLead: string;
139
146
  planModes: {
140
147
  id: string;
@@ -229,6 +236,7 @@ interface WorkspaceAgentMessageCenterPanelProps {
229
236
  payload?: Record<string, unknown>;
230
237
  promptKind?: string;
231
238
  requestId: string;
239
+ turnId?: string;
232
240
  }) => Promise<void> | void;
233
241
  }
234
242
  declare const WorkspaceAgentMessageCenterPanel: react.NamedExoticComponent<WorkspaceAgentMessageCenterPanelProps>;
@@ -365,6 +373,7 @@ interface AgentInteractivePromptSurfaceProps {
365
373
  }) => void;
366
374
  labels: {
367
375
  approvalLead: string;
376
+ fileChangeApprovalLead: string;
368
377
  planLead: string;
369
378
  planModes: Array<{
370
379
  id: string;
@@ -432,7 +441,7 @@ interface WorkspaceAgentMessageCenterPresentation {
432
441
  declare function selectWorkspaceAgentMessageCenterPresentation(state: AgentSessionEngineState): WorkspaceAgentMessageCenterPresentation;
433
442
  declare function workspaceAgentMessageCenterPresentationEqual(left: WorkspaceAgentMessageCenterPresentation, right: WorkspaceAgentMessageCenterPresentation): boolean;
434
443
  type WorkspaceAgentMessageCenterPromptStatus = "idle" | "responding" | "unknown" | "failed";
435
- declare function workspaceAgentMessageCenterPromptStatus(presentation: WorkspaceAgentMessageCenterPresentation, item: Pick<WorkspaceAgentMessageCenterItem, "agentSessionId" | "pendingPrompt">): WorkspaceAgentMessageCenterPromptStatus;
444
+ declare function workspaceAgentMessageCenterPromptStatus(presentation: WorkspaceAgentMessageCenterPresentation, item: Pick<WorkspaceAgentMessageCenterItem, "agentSessionId" | "pendingInteractionTarget" | "pendingPrompt">): WorkspaceAgentMessageCenterPromptStatus;
436
445
 
437
446
  declare function stabilizeWorkspaceAgentMessageCenterModel(previous: WorkspaceAgentMessageCenterModel | null, next: WorkspaceAgentMessageCenterModel): WorkspaceAgentMessageCenterModel;
438
447
 
@@ -445,4 +454,4 @@ interface MessageCenterFilterPreferences {
445
454
  declare function readMessageCenterFilterPreferences(): MessageCenterFilterPreferences;
446
455
  declare function writeMessageCenterFilterPreferences(preferences: MessageCenterFilterPreferences): void;
447
456
 
448
- export { AgentInteractivePromptSurface, AgentVerticalScrollArea, type BuildWorkspaceAgentMessageCenterOptions, type MessageCenterAgentUserStack, type MessageCenterFilterPreferences, type MessageCenterGroup, type MessageCenterGroupBy, MessageCenterGroupHeading, MessageCenterIdentityAvatarMark, MessageCenterIdentityAvatarStack, MessageCenterIdentityLabel, MessageCenterOpenChatButton, type MessageCenterProviderOption, type MessageCenterStatusFilter, type MessageCenterStatusOption, type MessageCenterStatusTone, MessageCenterSummary, type MessageCenterTranslate, type PromptToolDetail, type WorkspaceAgentMessageCenterAgentPresentation, WorkspaceAgentMessageCenterAttentionDeck, type WorkspaceAgentMessageCenterAttentionDeckProps, type WorkspaceAgentMessageCenterAttentionDeckRenderCardInput, WorkspaceAgentMessageCenterCard, type WorkspaceAgentMessageCenterCardProps, type WorkspaceAgentMessageCenterCounts, type WorkspaceAgentMessageCenterDigest, type WorkspaceAgentMessageCenterDigestPrimary, type WorkspaceAgentMessageCenterDigestPrimaryKind, type WorkspaceAgentMessageCenterIdentity, type WorkspaceAgentMessageCenterItem, type WorkspaceAgentMessageCenterModel, WorkspaceAgentMessageCenterPanel, type WorkspaceAgentMessageCenterPanelPresentation, type WorkspaceAgentMessageCenterPanelProps, type WorkspaceAgentMessageCenterPresentation, type WorkspaceAgentMessageCenterPromptStatus, WorkspaceAgentMessageCenterStack, MessageCenterViewMenu as WorkspaceAgentMessageCenterViewMenu, approvalOptionDisplayLabel, buildMessageCenterProviderOptions, buildMessageCenterStatusOptions, buildWorkspaceAgentInteractivePromptLabels, buildWorkspaceAgentMessageCenterModelFromEngine, getPromptToolDetails, groupMessageCenterItems, isInteractiveMessageCenterItem, isPromptRequestIdTitle, isRecentlyCompletedMessageCenterItem, isWaitingMessageCenterItem, itemMatchesViewFilters, managedAgentRoundedIconUrl, messageCenterAgentUserStackId, messageCenterFiltersStorageKey, messageCenterGroupLabel, messageCenterStackPreviewNodes, messageCenterStackPreviewText, messageCenterStackRenderId, messageCenterStackScrollSyncSegment, messageCenterStatusFilterValue, messageCenterStatusTone, messageCenterStatusToneClass, partitionMessageCenterItemsByAgentUser, readMessageCenterFilterPreferences, resolveMessageCenterNotificationAction, selectMessageCenterAttentionDeckItems, selectWorkspaceAgentMessageCenterPresentation, stabilizeWorkspaceAgentMessageCenterModel, statusFilterSummary, userAvatarPlaceholderUrl, workspaceAgentActivityStatusLabel, workspaceAgentMessageCenterPresentationEqual, workspaceAgentMessageCenterPromptStatus, writeMessageCenterFilterPreferences };
457
+ export { AgentInteractivePromptSurface, AgentVerticalScrollArea, type BuildWorkspaceAgentMessageCenterOptions, type MessageCenterAgentUserStack, type MessageCenterFilterPreferences, type MessageCenterGroup, type MessageCenterGroupBy, MessageCenterGroupHeading, MessageCenterIdentityAvatarMark, MessageCenterIdentityAvatarStack, MessageCenterIdentityLabel, MessageCenterOpenChatButton, type MessageCenterProviderOption, type MessageCenterStatusFilter, type MessageCenterStatusOption, type MessageCenterStatusTone, MessageCenterSummary, type MessageCenterTranslate, type PromptToolDetail, type WorkspaceAgentMessageCenterAgentPresentation, WorkspaceAgentMessageCenterAttentionDeck, type WorkspaceAgentMessageCenterAttentionDeckProps, type WorkspaceAgentMessageCenterAttentionDeckRenderCardInput, WorkspaceAgentMessageCenterCard, type WorkspaceAgentMessageCenterCardProps, type WorkspaceAgentMessageCenterCounts, type WorkspaceAgentMessageCenterDigest, type WorkspaceAgentMessageCenterDigestPrimary, type WorkspaceAgentMessageCenterDigestPrimaryKind, type WorkspaceAgentMessageCenterIdentity, type WorkspaceAgentMessageCenterInteractionTarget, type WorkspaceAgentMessageCenterItem, type WorkspaceAgentMessageCenterModel, WorkspaceAgentMessageCenterPanel, type WorkspaceAgentMessageCenterPanelPresentation, type WorkspaceAgentMessageCenterPanelProps, type WorkspaceAgentMessageCenterPresentation, type WorkspaceAgentMessageCenterPromptStatus, WorkspaceAgentMessageCenterStack, MessageCenterViewMenu as WorkspaceAgentMessageCenterViewMenu, approvalOptionDisplayLabel, buildMessageCenterProviderOptions, buildMessageCenterStatusOptions, buildWorkspaceAgentInteractivePromptLabels, buildWorkspaceAgentMessageCenterModelFromEngine, getPromptToolDetails, groupMessageCenterItems, isInteractiveMessageCenterItem, isPromptRequestIdTitle, isRecentlyCompletedMessageCenterItem, isWaitingMessageCenterItem, itemMatchesViewFilters, managedAgentRoundedIconUrl, messageCenterAgentUserStackId, messageCenterFiltersStorageKey, messageCenterGroupLabel, messageCenterStackPreviewNodes, messageCenterStackPreviewText, messageCenterStackRenderId, messageCenterStackScrollSyncSegment, messageCenterStatusFilterValue, messageCenterStatusTone, messageCenterStatusToneClass, partitionMessageCenterItemsByAgentUser, readMessageCenterFilterPreferences, resolveMessageCenterNotificationAction, selectMessageCenterAttentionDeckItems, selectWorkspaceAgentMessageCenterPresentation, stabilizeWorkspaceAgentMessageCenterModel, statusFilterSummary, userAvatarPlaceholderUrl, workspaceAgentActivityStatusLabel, workspaceAgentMessageCenterPresentationEqual, workspaceAgentMessageCenterPromptStatus, writeMessageCenterFilterPreferences };
@@ -6,7 +6,7 @@ import {
6
6
  dispatchAgentPlanPromptAction,
7
7
  getPromptToolDetails,
8
8
  isPromptRequestIdTitle
9
- } from "../chunk-4ZWV57MF.js";
9
+ } from "../chunk-AIZJHA4Q.js";
10
10
  import {
11
11
  useEngineSelector
12
12
  } from "../chunk-2RQM7PJN.js";
@@ -17,27 +17,28 @@ import {
17
17
  extractExitPlanKeepPlanningOptionId,
18
18
  extractExitPlanModeOptions,
19
19
  isExitPlanSwitchModeInput,
20
+ normalizeAgentApprovalPurpose,
20
21
  normalizeAskUserQuestions
21
- } from "../chunk-7MPN2JGL.js";
22
+ } from "../chunk-U4CVBCHD.js";
22
23
  import {
23
24
  cn
24
25
  } from "../chunk-KPMQGPYU.js";
25
26
  import {
26
27
  userAvatarPlaceholderUrl,
27
28
  workspaceAgentActivityStatusLabel
28
- } from "../chunk-N4WVVCNI.js";
29
+ } from "../chunk-2QHKXI5N.js";
29
30
  import {
30
31
  resolveWorkspaceAgentSessionSortTimeUnixMs
31
32
  } from "../chunk-YMXYBG7U.js";
32
33
  import {
33
34
  workspaceAgentProviderLabel
34
- } from "../chunk-LDZ6C3YV.js";
35
+ } from "../chunk-E74BMFHI.js";
35
36
  import "../chunk-F5UR6EJG.js";
36
37
  import {
37
38
  managedAgentRoundedIconUrl
38
- } from "../chunk-SN6UYX54.js";
39
+ } from "../chunk-W6TO6K2X.js";
39
40
  import "../chunk-PJP5BUU6.js";
40
- import "../chunk-H6IQ63DQ.js";
41
+ import "../chunk-7KVZPJ3O.js";
41
42
  import {
42
43
  normalizeAgentTitleText
43
44
  } from "../chunk-MIJXEELH.js";
@@ -45,11 +46,11 @@ import {
45
46
  AgentGuiI18nProvider,
46
47
  getActiveUiLanguage,
47
48
  useTranslation
48
- } from "../chunk-OWW7CU4U.js";
49
- import "../chunk-TKBEVCHG.js";
49
+ } from "../chunk-25BPR75P.js";
50
+ import "../chunk-7BN2WQ2M.js";
50
51
  import "../chunk-D2JUDUYY.js";
51
- import "../chunk-KJQERFKX.js";
52
- import "../chunk-UGVI47X6.js";
52
+ import "../chunk-6CUELYIF.js";
53
+ import "../chunk-YNSXUEIR.js";
53
54
 
54
55
  // agent-message-center/WorkspaceAgentMessageCenterPanel.tsx
55
56
  import {
@@ -537,6 +538,7 @@ function buildWorkspaceAgentMessageCenterItem({
537
538
  messages,
538
539
  status,
539
540
  needsAttention,
541
+ pendingInteractionTarget,
540
542
  pendingPrompt,
541
543
  latestTurnOutcome,
542
544
  options = {}
@@ -577,6 +579,7 @@ function buildWorkspaceAgentMessageCenterItem({
577
579
  digest,
578
580
  lastAgentMessageSummary: lastAgentMessage?.summary ?? needsAttention?.summary ?? title,
579
581
  lastAgentMessageAtUnixMs: lastAgentMessage?.occurredAtUnixMs ?? null,
582
+ pendingInteractionTarget,
580
583
  pendingPrompt,
581
584
  needsAttentionKind: needsAttention?.kind ?? null,
582
585
  needsAttentionSummary: needsAttention?.summary ?? null,
@@ -704,12 +707,16 @@ function approvalPromptFromMessage(message) {
704
707
  return null;
705
708
  }
706
709
  const mcpTarget = extractAgentMcpToolTarget({ payload });
710
+ const approvalPurpose = normalizeAgentApprovalPurpose(
711
+ payload.approvalPurpose
712
+ );
707
713
  return {
708
714
  kind: "approval",
709
715
  id: `approval:${requestId}`,
710
716
  turnId: message.turnId ?? "turn:unknown",
711
717
  requestId,
712
718
  callId: stringValue2(payload.callId) ?? message.messageId,
719
+ ...approvalPurpose ? { approvalPurpose } : {},
713
720
  title: firstNonEmptyString2(
714
721
  mcpTarget?.displayName ?? null,
715
722
  stringValue2(payload.summary),
@@ -1438,6 +1445,9 @@ function buildWorkspaceAgentInteractivePromptLabels(t, provider) {
1438
1445
  approvalLead: t("agentHost.agentGui.approvalRequired", {
1439
1446
  provider: provider ? workspaceAgentProviderLabel(provider) : t("agentHost.workspaceAgentsGenericAgentName")
1440
1447
  }),
1448
+ fileChangeApprovalLead: t("agentHost.agentGui.fileChangeApprovalRequired", {
1449
+ provider: provider ? workspaceAgentProviderLabel(provider) : t("agentHost.workspaceAgentsGenericAgentName")
1450
+ }),
1441
1451
  planLead: t("agentHost.agentGui.planLead"),
1442
1452
  planModes: [
1443
1453
  {
@@ -3069,7 +3079,8 @@ function WorkspaceAgentMessageCenterPanelContent({
3069
3079
  }
3070
3080
  await onSubmitPrompt({
3071
3081
  ...input,
3072
- agentSessionId: item.agentSessionId,
3082
+ agentSessionId: item.pendingInteractionTarget?.agentSessionId ?? item.agentSessionId,
3083
+ ...item.pendingInteractionTarget ? { turnId: item.pendingInteractionTarget.turnId } : {},
3073
3084
  promptKind: item.pendingPrompt?.kind
3074
3085
  });
3075
3086
  },
@@ -3438,17 +3449,9 @@ var MessageCenterRenderedCard = memo2(function MessageCenterRenderedCard2({
3438
3449
  import {
3439
3450
  selectEngineInteractionResponse,
3440
3451
  selectPendingSubmitsForSession,
3441
- selectPlanDecisionForTurn
3442
- } from "@tutti-os/agent-activity-core";
3443
-
3444
- // agent-message-center/workspaceAgentConsumerSelectors.ts
3445
- import {
3446
- selectWorkspaceAgentConsumerCounts,
3447
- selectWorkspaceAgentConsumerSession,
3448
- selectWorkspaceAgentConsumerSessions
3452
+ selectPlanDecisionForTurn,
3453
+ selectWorkspaceAgentRootConversationSessions
3449
3454
  } from "@tutti-os/agent-activity-core";
3450
-
3451
- // agent-message-center/workspaceAgentMessageCenterEngineModel.ts
3452
3455
  function buildWorkspaceAgentMessageCenterModelFromEngine(presentation, snapshot, options = {}) {
3453
3456
  const items = presentation.consumers.filter((consumer) => consumer.session.visible !== false).map((consumer) => {
3454
3457
  const interaction = latestPendingInteraction(consumer);
@@ -3459,6 +3462,7 @@ function buildWorkspaceAgentMessageCenterModelFromEngine(presentation, snapshot,
3459
3462
  messages: sessionMessages(snapshot.sessionMessagesById, consumer),
3460
3463
  status: consumer.displayStatus,
3461
3464
  needsAttention,
3465
+ pendingInteractionTarget: interaction ? interactionTarget(interaction) : null,
3462
3466
  pendingPrompt: interaction ? promptFromInteraction(interaction) : null,
3463
3467
  latestTurnOutcome: turnOutcome(consumer),
3464
3468
  options
@@ -3470,26 +3474,30 @@ function buildWorkspaceAgentMessageCenterModelFromEngine(presentation, snapshot,
3470
3474
  );
3471
3475
  }
3472
3476
  function selectWorkspaceAgentMessageCenterPresentation(state) {
3473
- const consumers = selectWorkspaceAgentConsumerSessions(state);
3477
+ const consumers = selectWorkspaceAgentRootConversationSessions(state);
3474
3478
  const promptStatusByKey = {};
3475
3479
  for (const consumer of consumers) {
3476
3480
  const sessionId = consumer.session.agentSessionId;
3477
3481
  for (const interaction of consumer.pendingInteractions) {
3478
3482
  const response = selectEngineInteractionResponse(
3479
3483
  state,
3480
- sessionId,
3484
+ interaction.agentSessionId,
3481
3485
  interaction.turnId,
3482
3486
  interaction.requestId
3483
3487
  );
3484
3488
  if (response) {
3485
- promptStatusByKey[promptStatusKey(sessionId, interaction.requestId)] = response.status;
3489
+ promptStatusByKey[promptStatusKey(
3490
+ interaction.agentSessionId,
3491
+ interaction.turnId,
3492
+ interaction.requestId
3493
+ )] = response.status;
3486
3494
  }
3487
3495
  }
3488
3496
  const turnId = consumer.latestTurn?.turnId ?? "";
3489
3497
  if (!turnId) continue;
3490
3498
  const decision = selectPlanDecisionForTurn(state, sessionId, turnId);
3491
3499
  if (decision) {
3492
- promptStatusByKey[promptStatusKey(sessionId, turnId)] = decision.status === "requested" ? "responding" : decision.status;
3500
+ promptStatusByKey[promptStatusKey(sessionId, turnId, turnId)] = decision.status === "requested" ? "responding" : decision.status;
3493
3501
  continue;
3494
3502
  }
3495
3503
  const feedbackPrefix = [
@@ -3503,7 +3511,7 @@ function selectWorkspaceAgentMessageCenterPresentation(state) {
3503
3511
  (record) => record.clientSubmitId.startsWith(feedbackPrefix)
3504
3512
  );
3505
3513
  if (submit) {
3506
- promptStatusByKey[promptStatusKey(sessionId, turnId)] = submit.status === "failed" ? "failed" : submit.status === "uncertain" ? "unknown" : "responding";
3514
+ promptStatusByKey[promptStatusKey(sessionId, turnId, turnId)] = submit.status === "failed" ? "failed" : submit.status === "uncertain" ? "unknown" : "responding";
3507
3515
  }
3508
3516
  }
3509
3517
  return {
@@ -3522,10 +3530,19 @@ function workspaceAgentMessageCenterPresentationEqual(left, right) {
3522
3530
  function workspaceAgentMessageCenterPromptStatus(presentation, item) {
3523
3531
  const prompt = item.pendingPrompt;
3524
3532
  if (!prompt) return "idle";
3525
- return presentation.promptStatusByKey[promptStatusKey(item.agentSessionId, prompt.requestId)] ?? "idle";
3526
- }
3527
- function promptStatusKey(agentSessionId, requestId) {
3528
- return `${agentSessionId}\0${requestId}`;
3533
+ const target = item.pendingInteractionTarget;
3534
+ return presentation.promptStatusByKey[target ? promptStatusKey(
3535
+ target.agentSessionId,
3536
+ target.turnId,
3537
+ target.requestId
3538
+ ) : promptStatusKey(
3539
+ item.agentSessionId,
3540
+ prompt.requestId,
3541
+ prompt.requestId
3542
+ )] ?? "idle";
3543
+ }
3544
+ function promptStatusKey(agentSessionId, turnId, requestId) {
3545
+ return `${agentSessionId}\0${turnId}\0${requestId}`;
3529
3546
  }
3530
3547
  function promptStatusMapsEqual(left, right) {
3531
3548
  const keys = Object.keys(left);
@@ -3546,6 +3563,13 @@ function sessionMessages(sessionMessagesById, consumer) {
3546
3563
  function latestPendingInteraction(consumer) {
3547
3564
  return consumer.pendingInteractions.at(-1) ?? null;
3548
3565
  }
3566
+ function interactionTarget(interaction) {
3567
+ return {
3568
+ agentSessionId: interaction.agentSessionId,
3569
+ requestId: interaction.requestId,
3570
+ turnId: interaction.turnId
3571
+ };
3572
+ }
3549
3573
  function needsAttentionFromInteraction(consumer, interaction) {
3550
3574
  const summary = interactionSummary(interaction);
3551
3575
  return {
@@ -3594,12 +3618,16 @@ function promptFromInteraction(interaction) {
3594
3618
  }
3595
3619
  ] : [];
3596
3620
  });
3621
+ const approvalPurpose = normalizeAgentApprovalPurpose(
3622
+ interaction.metadata?.approvalPurpose
3623
+ );
3597
3624
  return {
3598
3625
  kind: "approval",
3599
3626
  id: `approval:${interaction.requestId}`,
3600
3627
  turnId: interaction.turnId,
3601
3628
  requestId: interaction.requestId,
3602
3629
  callId: textValue(input.callId) ?? interaction.requestId,
3630
+ ...approvalPurpose ? { approvalPurpose } : {},
3603
3631
  title: interactionSummary(interaction),
3604
3632
  toolName: interaction.toolName ?? null,
3605
3633
  status: interaction.status,
@@ -3610,6 +3638,9 @@ function promptFromInteraction(interaction) {
3610
3638
  };
3611
3639
  }
3612
3640
  function turnOutcome(consumer) {
3641
+ if (consumer.displayStatus !== "completed" && consumer.displayStatus !== "failed") {
3642
+ return null;
3643
+ }
3613
3644
  const turn = consumer.latestTurn;
3614
3645
  if (!turn || turn.phase !== "settled") return null;
3615
3646
  const status = turn.outcome === "completed" ? "completed" : turn.outcome === "failed" ? "failed" : null;
@@ -3662,11 +3693,17 @@ function stabilizeWorkspaceAgentMessageCenterModel(previous, next) {
3662
3693
  };
3663
3694
  }
3664
3695
  function messageCenterItemsEqual(left, right) {
3665
- return left.id === right.id && left.agentSessionId === right.agentSessionId && left.agentTargetId === right.agentTargetId && left.agentName === right.agentName && left.agentAvatarUrl === right.agentAvatarUrl && left.provider === right.provider && left.userId === right.userId && left.title === right.title && left.imported === right.imported && left.cwd === right.cwd && left.status === right.status && left.lastAgentMessageSummary === right.lastAgentMessageSummary && left.lastAgentMessageAtUnixMs === right.lastAgentMessageAtUnixMs && left.needsAttentionKind === right.needsAttentionKind && left.needsAttentionSummary === right.needsAttentionSummary && left.sortTimeUnixMs === right.sortTimeUnixMs && messageCenterIdentityEqual(left.identity, right.identity) && messageCenterDigestEqual(left.digest, right.digest) && messageCenterPromptEqual(left.pendingPrompt, right.pendingPrompt) && messageCenterTurnOutcomeEqual(
3696
+ return left.id === right.id && left.agentSessionId === right.agentSessionId && left.agentTargetId === right.agentTargetId && left.agentName === right.agentName && left.agentAvatarUrl === right.agentAvatarUrl && left.provider === right.provider && left.userId === right.userId && left.title === right.title && left.imported === right.imported && left.cwd === right.cwd && left.status === right.status && left.lastAgentMessageSummary === right.lastAgentMessageSummary && left.lastAgentMessageAtUnixMs === right.lastAgentMessageAtUnixMs && messageCenterInteractionTargetEqual(
3697
+ left.pendingInteractionTarget,
3698
+ right.pendingInteractionTarget
3699
+ ) && left.needsAttentionKind === right.needsAttentionKind && left.needsAttentionSummary === right.needsAttentionSummary && left.sortTimeUnixMs === right.sortTimeUnixMs && messageCenterIdentityEqual(left.identity, right.identity) && messageCenterDigestEqual(left.digest, right.digest) && messageCenterPromptEqual(left.pendingPrompt, right.pendingPrompt) && messageCenterTurnOutcomeEqual(
3666
3700
  left.latestTurnOutcome ?? null,
3667
3701
  right.latestTurnOutcome ?? null
3668
3702
  );
3669
3703
  }
3704
+ function messageCenterInteractionTargetEqual(left, right) {
3705
+ return left === right || left !== null && right !== null && left.agentSessionId === right.agentSessionId && left.turnId === right.turnId && left.requestId === right.requestId;
3706
+ }
3670
3707
  function messageCenterCountsEqual(left, right) {
3671
3708
  return left.all === right.all && left.working === right.working && left.waiting === right.waiting && left.completed === right.completed && left.failed === right.failed;
3672
3709
  }
@@ -3770,6 +3807,13 @@ function messageCenterJsonValueEqual(left, right) {
3770
3807
  (key) => messageCenterJsonValueEqual(leftRecord[key], rightRecord[key])
3771
3808
  );
3772
3809
  }
3810
+
3811
+ // agent-message-center/workspaceAgentConsumerSelectors.ts
3812
+ import {
3813
+ selectWorkspaceAgentConsumerCounts,
3814
+ selectWorkspaceAgentConsumerSession,
3815
+ selectWorkspaceAgentConsumerSessions
3816
+ } from "@tutti-os/agent-activity-core";
3773
3817
  export {
3774
3818
  AgentInteractivePromptSurface,
3775
3819
  AgentVerticalScrollArea,