@tutti-os/agent-gui 0.0.28 → 0.0.30

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 (47) hide show
  1. package/dist/{AgentMentionSearchController-2Vjvmzh3.d.ts → AgentMentionSearchController-D5ks45fN.d.ts} +1 -0
  2. package/dist/{AgentMessageMarkdown-CZaG-QW3.d.ts → AgentMessageMarkdown-Cp70W-Z2.d.ts} +20 -2
  3. package/dist/agent-conversation/index.d.ts +4 -4
  4. package/dist/agent-conversation/index.js +6 -6
  5. package/dist/agent-message-center/index.d.ts +2 -2
  6. package/dist/agent-message-center/index.js +5 -5
  7. package/dist/{agentConversationVM-BvlmCNOm.d.ts → agentConversationVM-BElW2LNR.d.ts} +1 -1
  8. package/dist/app/renderer/agentactivity.css +40 -9
  9. package/dist/{chunk-IBQO76IY.js → chunk-AFTAFV2C.js} +3 -3
  10. package/dist/{chunk-XAQQN6MP.js → chunk-FG66NW5M.js} +2 -2
  11. package/dist/{chunk-LKT3EFGR.js → chunk-J2DMJREM.js} +127 -46
  12. package/dist/chunk-J2DMJREM.js.map +1 -0
  13. package/dist/{chunk-ILBFIZCI.js → chunk-MFWZKYZ4.js} +31 -40
  14. package/dist/chunk-MFWZKYZ4.js.map +1 -0
  15. package/dist/{chunk-B7DTDZVT.js → chunk-OOQIJXCA.js} +114 -12
  16. package/dist/chunk-OOQIJXCA.js.map +1 -0
  17. package/dist/{chunk-LHN26OIP.js → chunk-RDCBACWR.js} +5 -5
  18. package/dist/{chunk-GLDKFIWM.js → chunk-RQ3HEF42.js} +7 -7
  19. package/dist/chunk-RQ3HEF42.js.map +1 -0
  20. package/dist/{chunk-EWWAG26H.js → chunk-SGQ4C7JE.js} +1 -1
  21. package/dist/chunk-SGQ4C7JE.js.map +1 -0
  22. package/dist/{chunk-F7XLV7M3.js → chunk-WPWZKKKV.js} +2 -2
  23. package/dist/chunk-Y35GDLP2.js +88 -0
  24. package/dist/chunk-Y35GDLP2.js.map +1 -0
  25. package/dist/context-mention-palette/index.d.ts +4 -3
  26. package/dist/context-mention-palette/index.js +7 -7
  27. package/dist/i18n/index.d.ts +6 -6
  28. package/dist/i18n/index.js +1 -1
  29. package/dist/index.d.ts +9 -8
  30. package/dist/index.js +557 -79
  31. package/dist/index.js.map +1 -1
  32. package/dist/plan-decision-ops.d.ts +2 -2
  33. package/dist/workspace-agent-generated-files.d.ts +1 -1
  34. package/dist/workspace-agent-generated-files.js +3 -3
  35. package/dist/{workspaceAgentActivityListViewModel-jRF8cP37.d.ts → workspaceAgentActivityListViewModel-DwpbJGDx.d.ts} +4 -1
  36. package/package.json +12 -12
  37. package/dist/chunk-B7DTDZVT.js.map +0 -1
  38. package/dist/chunk-EWWAG26H.js.map +0 -1
  39. package/dist/chunk-GLDKFIWM.js.map +0 -1
  40. package/dist/chunk-ILBFIZCI.js.map +0 -1
  41. package/dist/chunk-LKT3EFGR.js.map +0 -1
  42. package/dist/chunk-XJ34OIEQ.js +0 -18
  43. package/dist/chunk-XJ34OIEQ.js.map +0 -1
  44. /package/dist/{chunk-IBQO76IY.js.map → chunk-AFTAFV2C.js.map} +0 -0
  45. /package/dist/{chunk-XAQQN6MP.js.map → chunk-FG66NW5M.js.map} +0 -0
  46. /package/dist/{chunk-LHN26OIP.js.map → chunk-RDCBACWR.js.map} +0 -0
  47. /package/dist/{chunk-F7XLV7M3.js.map → chunk-WPWZKKKV.js.map} +0 -0
@@ -176,6 +176,7 @@ declare class AgentMentionSearchController {
176
176
  private cancelPendingPreload;
177
177
  enterCategory(category: AgentMentionFilterId): void;
178
178
  selectAgentGeneratedMentionItem(item: AgentContextMentionItem): boolean;
179
+ exitAgentGeneratedBrowse(): boolean;
179
180
  expandGroup(groupId: AgentMentionGroupId): void;
180
181
  close(): void;
181
182
  dispose(): void;
@@ -1,6 +1,6 @@
1
1
  import { AgentActivityUsage } from '@tutti-os/agent-activity-core';
2
- import { A as AgentHostBatchUserInfoInput, a as AgentHostBatchUserInfoResult, b as AgentHostDeleteWorkspaceAgentSessionInput, k as AgentHostWorkspaceAgentSessionSummaryInput, j as AgentHostWorkspaceAgentSessionSummary, e as AgentHostWorkspaceAgentListInput, l as AgentHostWorkspaceAgentSnapshot, i as AgentHostWorkspaceAgentSessionMessagesInput, h as AgentHostWorkspaceAgentSessionMessages, p as WorkspaceAgentActivitySyncState } from './workspaceAgentActivityListViewModel-jRF8cP37.js';
3
- import { A as AgentApprovalItemVM, a as AgentAskUserQuestionVM, b as AgentConversationPromptVM, c as AgentConversationVM, W as WorkspaceAgentSessionDetailViewModel } from './agentConversationVM-BvlmCNOm.js';
2
+ import { A as AgentHostBatchUserInfoInput, a as AgentHostBatchUserInfoResult, b as AgentHostDeleteWorkspaceAgentSessionInput, k as AgentHostWorkspaceAgentSessionSummaryInput, j as AgentHostWorkspaceAgentSessionSummary, e as AgentHostWorkspaceAgentListInput, l as AgentHostWorkspaceAgentSnapshot, i as AgentHostWorkspaceAgentSessionMessagesInput, h as AgentHostWorkspaceAgentSessionMessages, p as WorkspaceAgentActivitySyncState } from './workspaceAgentActivityListViewModel-DwpbJGDx.js';
3
+ import { A as AgentApprovalItemVM, a as AgentAskUserQuestionVM, b as AgentConversationPromptVM, c as AgentConversationVM, W as WorkspaceAgentSessionDetailViewModel } from './agentConversationVM-BElW2LNR.js';
4
4
  import { WorkspaceUserProjectService } from '@tutti-os/workspace-user-project/contracts';
5
5
 
6
6
  type AgentHostAgentSessionProvider = "claude-code" | "codex" | "nexight" | "gemini" | "hermes" | "openclaw";
@@ -61,6 +61,8 @@ interface AgentHostAgentSessionState {
61
61
  providerSessionId?: string;
62
62
  resumable?: boolean;
63
63
  status: AgentHostAgentSession["status"];
64
+ turnLifecycle?: AgentHostAgentActivityTurnLifecycle | null;
65
+ submitAvailability?: AgentHostAgentActivitySubmitAvailability | null;
64
66
  permissionModeId?: string;
65
67
  permissionConfig?: AgentHostAgentSessionPermissionConfig;
66
68
  settings?: AgentHostAgentSessionComposerSettings;
@@ -70,6 +72,21 @@ interface AgentHostAgentSessionState {
70
72
  pendingInteractive?: AgentHostAgentSessionInteractivePrompt | null;
71
73
  updatedAtUnixMs: number;
72
74
  }
75
+ interface AgentHostAgentActivityCompletedCommand {
76
+ kind: string;
77
+ status: string;
78
+ }
79
+ interface AgentHostAgentActivityTurnLifecycle {
80
+ activeTurnId: string | null;
81
+ phase: string;
82
+ settling?: boolean;
83
+ outcome?: string | null;
84
+ completedCommand?: AgentHostAgentActivityCompletedCommand | null;
85
+ }
86
+ interface AgentHostAgentActivitySubmitAvailability {
87
+ state: string;
88
+ reason?: string;
89
+ }
73
90
  type AgentHostAgentSessionActivationMode = "new" | "existing";
74
91
  type AgentHostAgentSessionActivationStatus = "attached" | "already_attached" | "failed";
75
92
  interface AgentHostActivateAgentSessionResult {
@@ -582,6 +599,7 @@ interface AgentGUIComposerSettingsVM {
582
599
  supportsBrowser?: boolean;
583
600
  supportsComputerUse?: boolean;
584
601
  isSettingsLoading: boolean;
602
+ isModelOptionsLoading?: boolean;
585
603
  modelUnavailable: boolean;
586
604
  reasoningUnavailable: boolean;
587
605
  speedUnavailable: boolean;
@@ -1,10 +1,10 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode, JSX } from 'react';
3
3
  import { W as WorkspaceLinkAction } from '../workspaceLinkActions-CqWZaCY4.js';
4
- import { b as AgentGUIProviderSkillOption, l as AgentMessageMarkdownWorkspaceAppIcon } from '../AgentMessageMarkdown-CZaG-QW3.js';
5
- import { c as AgentConversationVM, W as WorkspaceAgentSessionDetailViewModel } from '../agentConversationVM-BvlmCNOm.js';
6
- export { B as BuildWorkspaceAgentSessionDetailInput, d as buildWorkspaceAgentSessionDetailViewModel } from '../agentConversationVM-BvlmCNOm.js';
7
- export { W as WorkspaceAgentActivityCard, n as WorkspaceAgentActivitySession, q as WorkspaceAgentActivityTimelineItem } from '../workspaceAgentActivityListViewModel-jRF8cP37.js';
4
+ import { b as AgentGUIProviderSkillOption, l as AgentMessageMarkdownWorkspaceAppIcon } from '../AgentMessageMarkdown-Cp70W-Z2.js';
5
+ import { c as AgentConversationVM, W as WorkspaceAgentSessionDetailViewModel } from '../agentConversationVM-BElW2LNR.js';
6
+ export { B as BuildWorkspaceAgentSessionDetailInput, d as buildWorkspaceAgentSessionDetailViewModel } from '../agentConversationVM-BElW2LNR.js';
7
+ export { W as WorkspaceAgentActivityCard, n as WorkspaceAgentActivitySession, q as WorkspaceAgentActivityTimelineItem } from '../workspaceAgentActivityListViewModel-DwpbJGDx.js';
8
8
  import '@tutti-os/workspace-issue-manager/core';
9
9
  import '@tutti-os/agent-activity-core';
10
10
  import '@tutti-os/workspace-user-project/contracts';
@@ -6,15 +6,15 @@ import {
6
6
  projectAgentConversationVM,
7
7
  reconcileProjectedAgentConversationVM,
8
8
  useProjectedAgentConversation
9
- } from "../chunk-LKT3EFGR.js";
10
- import "../chunk-IBQO76IY.js";
11
- import "../chunk-XAQQN6MP.js";
12
- import "../chunk-XJ34OIEQ.js";
13
- import "../chunk-EWWAG26H.js";
9
+ } from "../chunk-J2DMJREM.js";
10
+ import "../chunk-AFTAFV2C.js";
11
+ import "../chunk-FG66NW5M.js";
12
+ import "../chunk-Y35GDLP2.js";
13
+ import "../chunk-SGQ4C7JE.js";
14
14
  import "../chunk-TYGL25EL.js";
15
15
  import {
16
16
  translate
17
- } from "../chunk-GLDKFIWM.js";
17
+ } from "../chunk-RQ3HEF42.js";
18
18
  import "../chunk-LUGELG5V.js";
19
19
  import "../chunk-PJP5BUU6.js";
20
20
 
@@ -4,8 +4,8 @@ import { I18nRuntime } from '@tutti-os/ui-i18n-runtime';
4
4
  import { useTranslation, AgentGuiI18nLocale, TranslateFn } from '../i18n/index.js';
5
5
  import { W as WorkspaceLinkAction } from '../workspaceLinkActions-CqWZaCY4.js';
6
6
  import { AgentActivityNeedsAttentionItem, AgentActivitySnapshot } from '@tutti-os/agent-activity-core';
7
- import { b as AgentConversationPromptVM } from '../agentConversationVM-BvlmCNOm.js';
8
- import { o as WorkspaceAgentActivityStatus } from '../workspaceAgentActivityListViewModel-jRF8cP37.js';
7
+ import { b as AgentConversationPromptVM } from '../agentConversationVM-BElW2LNR.js';
8
+ import { o as WorkspaceAgentActivityStatus } from '../workspaceAgentActivityListViewModel-DwpbJGDx.js';
9
9
  export { PLAN_IMPLEMENTATION_ACTION_IMPLEMENT, PLAN_IMPLEMENTATION_PROMPT } from '../plan-decision-ops.js';
10
10
  import '@tutti-os/workspace-issue-manager/core';
11
11
 
@@ -3,7 +3,7 @@ import {
3
3
  approvalOptionDisplayLabel,
4
4
  getPromptToolDetails,
5
5
  isPromptRequestIdTitle
6
- } from "../chunk-LHN26OIP.js";
6
+ } from "../chunk-RDCBACWR.js";
7
7
  import {
8
8
  PLAN_IMPLEMENTATION_ACTION_IMPLEMENT,
9
9
  PLAN_IMPLEMENTATION_PROMPT,
@@ -16,17 +16,17 @@ import {
16
16
  cn,
17
17
  extractAgentMcpToolTarget,
18
18
  normalizeAskUserQuestions
19
- } from "../chunk-IBQO76IY.js";
19
+ } from "../chunk-AFTAFV2C.js";
20
20
  import {
21
21
  managedAgentRoundedIconUrl,
22
22
  userAvatarPlaceholderUrl,
23
23
  workspaceAgentActivityStatusLabel
24
- } from "../chunk-F7XLV7M3.js";
24
+ } from "../chunk-WPWZKKKV.js";
25
25
  import "../chunk-MTFSQWZ6.js";
26
26
  import {
27
27
  resolveWorkspaceAgentSessionSortTimeUnixMs
28
28
  } from "../chunk-IBIMGLCD.js";
29
- import "../chunk-EWWAG26H.js";
29
+ import "../chunk-SGQ4C7JE.js";
30
30
  import {
31
31
  workspaceAgentProviderLabel
32
32
  } from "../chunk-TYGL25EL.js";
@@ -36,7 +36,7 @@ import {
36
36
  import {
37
37
  AgentGuiI18nProvider,
38
38
  useTranslation
39
- } from "../chunk-GLDKFIWM.js";
39
+ } from "../chunk-RQ3HEF42.js";
40
40
  import "../chunk-PJP5BUU6.js";
41
41
 
42
42
  // agent-message-center/WorkspaceAgentMessageCenterPanel.tsx
@@ -1,4 +1,4 @@
1
- import { W as WorkspaceAgentActivityCard, n as WorkspaceAgentActivitySession, T as ToolCallStatusKind, q as WorkspaceAgentActivityTimelineItem } from './workspaceAgentActivityListViewModel-jRF8cP37.js';
1
+ import { W as WorkspaceAgentActivityCard, n as WorkspaceAgentActivitySession, T as ToolCallStatusKind, q as WorkspaceAgentActivityTimelineItem } from './workspaceAgentActivityListViewModel-DwpbJGDx.js';
2
2
 
3
3
  interface WorkspaceAgentSessionDetailMessage {
4
4
  id: string;
@@ -2281,10 +2281,14 @@ aside.workspace-agents-status-panel
2281
2281
  }
2282
2282
 
2283
2283
  [data-agent-file-mention="true"][data-agent-mention-kind="file"][data-agent-file-visual-kind="back"]
2284
- .agent-gui-node__mention-file-icon {
2285
- background-color: var(--text-secondary);
2286
- mask-image: url("./assets/icons/arrow-left-filled.svg");
2287
- -webkit-mask-image: url("./assets/icons/arrow-left-filled.svg");
2284
+ .agent-gui-node__mention-file-icon.rich-text-at-mention-file-icon--glyph {
2285
+ display: inline-flex;
2286
+ align-items: center;
2287
+ justify-content: center;
2288
+ background-color: transparent;
2289
+ mask-image: none;
2290
+ -webkit-mask-image: none;
2291
+ color: currentColor;
2288
2292
  }
2289
2293
 
2290
2294
  .agent-gui-chrome__session-chrome {
@@ -2331,14 +2335,25 @@ aside.workspace-agents-status-panel
2331
2335
  margin-left: 24px;
2332
2336
  }
2333
2337
 
2338
+ .agent-gui-node__bottom-dock > .agent-gui-chrome__session-chrome {
2339
+ margin-right: 24px;
2340
+ margin-left: 24px;
2341
+ }
2342
+
2343
+ .agent-gui-node__bottom-dock
2344
+ > .agent-gui-chrome__session-chrome:has(+ .agent-gui-chrome__session-chrome) {
2345
+ margin-right: 36px;
2346
+ margin-left: 36px;
2347
+ }
2348
+
2334
2349
  .agent-gui-node__bottom-dock
2335
2350
  > .agent-gui-chrome__session-chrome:has(
2336
2351
  + .agent-gui-node__composer
2337
2352
  .agent-gui-node__composer-input-group
2338
2353
  > .agent-gui-chrome__session-chrome
2339
2354
  ) {
2340
- margin-right: 16px;
2341
- margin-left: 16px;
2355
+ margin-right: 36px;
2356
+ margin-left: 36px;
2342
2357
  }
2343
2358
 
2344
2359
  .agent-gui-node__bottom-dock
@@ -2350,8 +2365,8 @@ aside.workspace-agents-status-panel
2350
2365
  + .agent-gui-node__composer
2351
2366
  .agent-gui-node__composer-input-group
2352
2367
  > .agent-gui-chrome__session-chrome {
2353
- margin-right: 8px;
2354
- margin-left: 8px;
2368
+ margin-right: 24px;
2369
+ margin-left: 24px;
2355
2370
  }
2356
2371
 
2357
2372
  .agent-gui-chrome__card {
@@ -5477,11 +5492,16 @@ button.agent-gui-node__conversation-section-toggle:hover
5477
5492
  }
5478
5493
 
5479
5494
  .agent-gui-node__provider-setup-notice {
5495
+ position: absolute;
5496
+ top: 16px;
5497
+ right: var(--agent-gui-detail-padding-x);
5498
+ left: var(--agent-gui-detail-padding-x);
5499
+ z-index: 2;
5480
5500
  display: flex;
5481
5501
  align-items: center;
5482
5502
  gap: 8px;
5483
5503
  box-sizing: border-box;
5484
- margin: 16px var(--agent-gui-detail-padding-x) 8px;
5504
+ margin: 0;
5485
5505
  border: 1px solid
5486
5506
  color-mix(
5487
5507
  in srgb,
@@ -5498,6 +5518,11 @@ button.agent-gui-node__conversation-section-toggle:hover
5498
5518
  );
5499
5519
  font-size: 13px;
5500
5520
  line-height: 18px;
5521
+ pointer-events: auto;
5522
+ }
5523
+
5524
+ .agent-gui-node__detail-header + .agent-gui-node__provider-setup-notice {
5525
+ top: calc(64px + 8px);
5501
5526
  }
5502
5527
 
5503
5528
  .agent-gui-node__provider-setup-notice-icon {
@@ -6824,6 +6849,12 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
6824
6849
  overscroll-behavior: contain;
6825
6850
  }
6826
6851
 
6852
+ .agent-gui-node__composer-menu-content
6853
+ [data-workspace-user-project-action-separator="true"] {
6854
+ margin-inline: 12px;
6855
+ background: var(--agent-gui-border-subtle, var(--line-2));
6856
+ }
6857
+
6827
6858
  .agent-gui-node__composer-menu-label {
6828
6859
  padding: 4px 10px 2px;
6829
6860
  color: var(--agent-gui-text-secondary);
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  getOptionalAgentHostApi,
3
3
  useOptionalAgentHostApi
4
- } from "./chunk-EWWAG26H.js";
4
+ } from "./chunk-SGQ4C7JE.js";
5
5
  import {
6
6
  useTranslation
7
- } from "./chunk-GLDKFIWM.js";
7
+ } from "./chunk-RQ3HEF42.js";
8
8
  import {
9
9
  resolveAgentWorkspaceFileVisualKind
10
10
  } from "./chunk-PJP5BUU6.js";
@@ -2668,4 +2668,4 @@ export {
2668
2668
  CustomScrollArea,
2669
2669
  MessageSquareMoreIcon
2670
2670
  };
2671
- //# sourceMappingURL=chunk-IBQO76IY.js.map
2671
+ //# sourceMappingURL=chunk-AFTAFV2C.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  translate,
3
3
  useTranslation
4
- } from "./chunk-GLDKFIWM.js";
4
+ } from "./chunk-RQ3HEF42.js";
5
5
  import {
6
6
  resolveAgentMentionFileThumbnailUrl,
7
7
  resolveAgentMentionFileVisualKind
@@ -1192,4 +1192,4 @@ export {
1192
1192
  mentionItemToAttrs,
1193
1193
  attrsToMentionItem
1194
1194
  };
1195
- //# sourceMappingURL=chunk-XAQQN6MP.js.map
1195
+ //# sourceMappingURL=chunk-FG66NW5M.js.map
@@ -10,27 +10,30 @@ import {
10
10
  resolveWorkspaceFileLinkAction,
11
11
  resolveWorkspaceFilePathCandidate,
12
12
  resolveWorkspaceLinkAction
13
- } from "./chunk-IBQO76IY.js";
13
+ } from "./chunk-AFTAFV2C.js";
14
14
  import {
15
15
  attrsToMentionItem,
16
16
  createAgentFileMentionExtension,
17
17
  formatAgentMentionMarkdown,
18
18
  mentionItemToAttrs,
19
19
  parseAgentMentionMarkdown
20
- } from "./chunk-XAQQN6MP.js";
20
+ } from "./chunk-FG66NW5M.js";
21
21
  import {
22
+ fileChangeCountFromChanges,
23
+ fileChangeEntriesFromChanges,
24
+ fileChangeTypeValue,
22
25
  isWorkspaceAgentSyntheticControlMessage
23
- } from "./chunk-XJ34OIEQ.js";
26
+ } from "./chunk-Y35GDLP2.js";
24
27
  import {
25
28
  getOptionalAgentActivityRuntime,
26
29
  useOptionalAgentHostApi
27
- } from "./chunk-EWWAG26H.js";
30
+ } from "./chunk-SGQ4C7JE.js";
28
31
  import {
29
32
  workspaceAgentProviderLabel
30
33
  } from "./chunk-TYGL25EL.js";
31
34
  import {
32
35
  translate
33
- } from "./chunk-GLDKFIWM.js";
36
+ } from "./chunk-RQ3HEF42.js";
34
37
 
35
38
  // shared/imageGenerationTool.ts
36
39
  var KNOWN_IMAGE_GENERATION_TOOL_NAMES = /* @__PURE__ */ new Set([
@@ -895,7 +898,12 @@ function toolCallDetail(item, toolName) {
895
898
  summarizeToolInput(payloadInput)
896
899
  );
897
900
  const normalizedToolName = normalizeToolNameToken3(toolName);
898
- const multiFileSummary = summarizeFileChangeCount(payloadOutput);
901
+ const multiFileSummary = summarizeFileChangeCount(
902
+ payloadOutput,
903
+ payloadInput,
904
+ item.payload,
905
+ metadataInput
906
+ );
899
907
  const todoSummary = summarizeTodoProgress(payloadInput);
900
908
  const webDomainSummary = summarizeWebDomain(webTarget);
901
909
  const imageGeneration = extractImageGenerationPreview({
@@ -1155,17 +1163,23 @@ function summarizeToolInput(value) {
1155
1163
  }
1156
1164
  return "";
1157
1165
  }
1158
- function summarizeFileChangeCount(value) {
1159
- const structuredPatch = arrayRecordValue(value, "structuredPatch");
1160
- if (structuredPatch.length > 1) {
1161
- return `${structuredPatch.length} files`;
1162
- }
1163
- const fileChanges = arrayRecordValue(
1164
- recordValue3(value, "fileChanges"),
1165
- "files"
1166
- );
1167
- if (fileChanges.length > 1) {
1168
- return `${fileChanges.length} files`;
1166
+ function summarizeFileChangeCount(...values) {
1167
+ for (const value of values) {
1168
+ const structuredPatch = arrayRecordValue(value, "structuredPatch");
1169
+ if (structuredPatch.length > 1) {
1170
+ return `${structuredPatch.length} files`;
1171
+ }
1172
+ const fileChanges = arrayRecordValue(
1173
+ recordValue3(value, "fileChanges"),
1174
+ "files"
1175
+ );
1176
+ if (fileChanges.length > 1) {
1177
+ return `${fileChanges.length} files`;
1178
+ }
1179
+ const changesCount = fileChangeCountFromChanges(value?.changes);
1180
+ if (changesCount > 1) {
1181
+ return `${changesCount} files`;
1182
+ }
1169
1183
  }
1170
1184
  return null;
1171
1185
  }
@@ -3378,7 +3392,7 @@ function projectAgentTurnSummaryRows(detail) {
3378
3392
  }
3379
3393
  function normalizedActivityFilePath(value, options) {
3380
3394
  const path = value?.trim() ?? "";
3381
- return path && !isStructuredPayloadPath(path) && resolveWorkspaceFilePathCandidate({
3395
+ return path && !isStructuredPayloadPath(path) && !isIgnoredFilePath(path) && resolveWorkspaceFilePathCandidate({
3382
3396
  path,
3383
3397
  workspaceRoot: options.workspaceRoot
3384
3398
  }) ? path : null;
@@ -3497,7 +3511,12 @@ function extractFileChanges(input) {
3497
3511
  if (isFailedToolStatus(input.statusKind)) {
3498
3512
  return [];
3499
3513
  }
3500
- const changes = objectValue5(input.output?.changes) ?? objectValue5(payload?.changes) ?? objectValue5(input.input?.changes) ?? objectValue5(rawInput?.changes);
3514
+ const changes = firstFileChangeValue(
3515
+ input.output?.changes,
3516
+ payload?.changes,
3517
+ input.input?.changes,
3518
+ rawInput?.changes
3519
+ );
3501
3520
  const filesFromMetadata = collectMetadataFiles(
3502
3521
  input.id,
3503
3522
  input.toolName ?? null,
@@ -3686,16 +3705,13 @@ function collectMetadataFiles(messageId, toolName, occurredAtUnixMs, files, patc
3686
3705
  });
3687
3706
  }
3688
3707
  function collectChangeMapFiles(messageId, toolName, occurredAtUnixMs, changes, options) {
3689
- if (!changes) {
3690
- return [];
3691
- }
3692
- return Object.entries(changes).flatMap(([path, rawChange], index) => {
3693
- const change = objectValue5(rawChange);
3694
- const normalizedPath = normalizedFilePath(path, options);
3695
- if (!change || !normalizedPath) {
3708
+ return fileChangeEntriesFromChanges(changes).flatMap((entry) => {
3709
+ const change = entry.change;
3710
+ const normalizedPath = normalizedFilePath(entry.path, options);
3711
+ if (!normalizedPath) {
3696
3712
  return [];
3697
3713
  }
3698
- const normalizedType = normalizeChangeType(stringValue6(change.type));
3714
+ const normalizedType = normalizeChangeType(fileChangeTypeValue(change));
3699
3715
  const unifiedDiff = firstNonEmptyString(
3700
3716
  stringValue6(change.unified_diff),
3701
3717
  stringValue6(change.unifiedDiff),
@@ -3731,7 +3747,7 @@ function collectChangeMapFiles(messageId, toolName, occurredAtUnixMs, changes, o
3731
3747
  }
3732
3748
  return [
3733
3749
  buildFileChange({
3734
- id: `${messageId}:change:${index + 1}`,
3750
+ id: `${messageId}:change:${entry.index + 1}`,
3735
3751
  toolName,
3736
3752
  path: normalizedPath,
3737
3753
  changeType: normalizedType ?? inferAgentPatchChangeType(unifiedDiff),
@@ -3748,6 +3764,12 @@ function collectContentDiffFiles(messageId, toolName, occurredAtUnixMs, contentI
3748
3764
  if (!contentItems) {
3749
3765
  return [];
3750
3766
  }
3767
+ const changesByPath = new Map(
3768
+ fileChangeEntriesFromChanges(changes).map((entry) => [
3769
+ entry.path,
3770
+ entry.change
3771
+ ])
3772
+ );
3751
3773
  return contentItems.flatMap((value, index) => {
3752
3774
  const item = objectValue5(value);
3753
3775
  if (!item) {
@@ -3761,9 +3783,9 @@ function collectContentDiffFiles(messageId, toolName, occurredAtUnixMs, contentI
3761
3783
  if (!path) {
3762
3784
  return [];
3763
3785
  }
3764
- const relatedChange = objectValue5(changes?.[path]);
3786
+ const relatedChange = changesByPath.get(path) ?? null;
3765
3787
  const normalizedType = normalizeChangeType(
3766
- stringValue6(relatedChange?.type)
3788
+ relatedChange ? fileChangeTypeValue(relatedChange) : null
3767
3789
  );
3768
3790
  const unifiedDiff = firstNonEmptyString(
3769
3791
  stringValue6(item.diff),
@@ -3855,7 +3877,8 @@ function normalizedFilePath(value, options = {}) {
3855
3877
  }) ? path : null;
3856
3878
  }
3857
3879
  function isIgnoredFilePath(path) {
3858
- return path === "/dev/null" || path === "NUL";
3880
+ const normalizedPath = path.replace(/\\/g, "/").replace(/\/+$/, "");
3881
+ return normalizedPath === "/dev/null" || normalizedPath === "NUL" || normalizedPath === "/private/tmp" || normalizedPath.startsWith("/private/tmp/");
3859
3882
  }
3860
3883
  function isStructuredPayloadPath(path) {
3861
3884
  if (/[\r\n]/.test(path)) {
@@ -4019,6 +4042,14 @@ function isFailedToolStatus(value) {
4019
4042
  function objectValue5(value) {
4020
4043
  return value && typeof value === "object" && !Array.isArray(value) ? value : null;
4021
4044
  }
4045
+ function firstFileChangeValue(...values) {
4046
+ for (const value of values) {
4047
+ if (fileChangeEntriesFromChanges(value).length > 0) {
4048
+ return value;
4049
+ }
4050
+ }
4051
+ return null;
4052
+ }
4022
4053
  function arrayValue5(value) {
4023
4054
  return Array.isArray(value) ? value : null;
4024
4055
  }
@@ -4094,8 +4125,10 @@ function projectAgentConversationVM(detail, options = {}) {
4094
4125
  rows.push(processing);
4095
4126
  }
4096
4127
  const normalizedRows = projectMessageCopyText(
4097
- mergeAdjacentAssistantMessageRows(
4098
- mergeAdjacentTransportRetryNoticeRows(rows)
4128
+ dropRedundantErrorWarningNotices(
4129
+ mergeAdjacentAssistantMessageRows(
4130
+ mergeAdjacentTransportRetryNoticeRows(rows)
4131
+ )
4099
4132
  ),
4100
4133
  {
4101
4134
  assistantCopyEligibleTurnIds: buildAssistantCopyEligibleTurnIds(detail)
@@ -4222,6 +4255,53 @@ function mergeAdjacentAssistantMessageRows(rows) {
4222
4255
  }
4223
4256
  return merged;
4224
4257
  }
4258
+ function dropRedundantErrorWarningNotices(rows) {
4259
+ const turnsWithVisibleError = /* @__PURE__ */ new Set();
4260
+ for (const row of rows) {
4261
+ if (row.kind !== "message" || row.speaker !== "assistant") {
4262
+ continue;
4263
+ }
4264
+ for (const message of row.messages) {
4265
+ if (message.visibleError) {
4266
+ turnsWithVisibleError.add(row.turnId);
4267
+ }
4268
+ }
4269
+ }
4270
+ if (turnsWithVisibleError.size === 0) {
4271
+ return [...rows];
4272
+ }
4273
+ const filteredRows = [];
4274
+ for (const row of rows) {
4275
+ if (row.kind !== "message" || row.speaker !== "assistant") {
4276
+ filteredRows.push(row);
4277
+ continue;
4278
+ }
4279
+ if (!turnsWithVisibleError.has(row.turnId)) {
4280
+ filteredRows.push(row);
4281
+ continue;
4282
+ }
4283
+ const messages = row.messages.filter(
4284
+ (message) => !isRedundantErrorWarningNotice(message)
4285
+ );
4286
+ if (messages.length === 0) {
4287
+ continue;
4288
+ }
4289
+ if (messages.length === row.messages.length) {
4290
+ filteredRows.push(row);
4291
+ continue;
4292
+ }
4293
+ filteredRows.push({ ...row, messages });
4294
+ }
4295
+ return filteredRows;
4296
+ }
4297
+ function isRedundantErrorWarningNotice(message) {
4298
+ const notice = message.systemNotice;
4299
+ if (!notice || notice.noticeKind !== "warning") {
4300
+ return false;
4301
+ }
4302
+ const title = notice.title?.trim() ?? "";
4303
+ return title === "Codex reported an error.";
4304
+ }
4225
4305
  function mergeAdjacentTransportRetryNoticeRows(rows) {
4226
4306
  const merged = [];
4227
4307
  for (const row of rows) {
@@ -7726,14 +7806,10 @@ function fileChangesFiles(value) {
7726
7806
  });
7727
7807
  }
7728
7808
  function changeMapFiles(value) {
7729
- const record = recordValue4(value);
7730
- if (!record) {
7731
- return [];
7732
- }
7733
- return Object.entries(record).flatMap(([path, rawChange]) => {
7734
- const change = recordValue4(rawChange);
7735
- const normalizedPath = path.trim();
7736
- if (!normalizedPath || !change) {
7809
+ return fileChangeEntriesFromChanges(value).flatMap((entry) => {
7810
+ const change = entry.change;
7811
+ const normalizedPath = entry.path.trim();
7812
+ if (!normalizedPath) {
7737
7813
  return [];
7738
7814
  }
7739
7815
  const unifiedDiff = firstString3(
@@ -7743,7 +7819,7 @@ function changeMapFiles(value) {
7743
7819
  stringValue7(change.patch)
7744
7820
  );
7745
7821
  const explicitContent = stringValue7(change.content);
7746
- const normalizedType = normalizeChangeType2(stringValue7(change.type));
7822
+ const normalizedType = normalizeChangeType2(fileChangeTypeValue(change));
7747
7823
  let oldString = firstString3(
7748
7824
  stringValue7(change.old_string),
7749
7825
  stringValue7(change.oldString)
@@ -7802,7 +7878,12 @@ function contentDiffFiles(value, changesValue, toolName) {
7802
7878
  if (!items) {
7803
7879
  return [];
7804
7880
  }
7805
- const changes = recordValue4(changesValue);
7881
+ const changesByPath = new Map(
7882
+ fileChangeEntriesFromChanges(changesValue).map((entry) => [
7883
+ entry.path,
7884
+ entry.change
7885
+ ])
7886
+ );
7806
7887
  return items.flatMap((item) => {
7807
7888
  const record = recordValue4(item);
7808
7889
  if (!record) {
@@ -7816,7 +7897,7 @@ function contentDiffFiles(value, changesValue, toolName) {
7816
7897
  if (!path) {
7817
7898
  return [];
7818
7899
  }
7819
- const relatedChange = recordValue4(changes?.[path]);
7900
+ const relatedChange = changesByPath.get(path) ?? null;
7820
7901
  const unifiedDiff = firstString3(
7821
7902
  stringValue7(record.diff),
7822
7903
  stringValue7(record.patch),
@@ -7824,7 +7905,7 @@ function contentDiffFiles(value, changesValue, toolName) {
7824
7905
  stringValue7(relatedChange?.unifiedDiff)
7825
7906
  );
7826
7907
  const normalizedType = normalizeChangeType2(
7827
- stringValue7(relatedChange?.type)
7908
+ relatedChange ? fileChangeTypeValue(relatedChange) : null
7828
7909
  );
7829
7910
  let oldString = firstString3(
7830
7911
  stringValue7(record.oldText),
@@ -12386,4 +12467,4 @@ export {
12386
12467
  AgentConversationFlow,
12387
12468
  useProjectedAgentConversation
12388
12469
  };
12389
- //# sourceMappingURL=chunk-LKT3EFGR.js.map
12470
+ //# sourceMappingURL=chunk-J2DMJREM.js.map