@tutti-os/agent-gui 0.0.190 → 0.0.192

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 (91) hide show
  1. package/dist/AgentRichTextReadonly-HJQQ4KAL.js +19 -0
  2. package/dist/agent-conversation/index.d.ts +29 -15
  3. package/dist/agent-conversation/index.js +11 -11
  4. package/dist/agent-env/index.js +1 -1
  5. package/dist/agent-gui.d.ts +310 -11
  6. package/dist/agent-gui.js +23 -23
  7. package/dist/agent-message-center/index.d.ts +4 -7
  8. package/dist/agent-message-center/index.js +9 -9
  9. package/dist/{agentGuiNodeTypes-RL1iNmSe.d.ts → agentGuiNodeTypes-B23ubO8n.d.ts} +8 -3
  10. package/dist/agents.d.ts +2 -1
  11. package/dist/app/renderer/agentactivity.css +16 -0
  12. package/dist/{chunk-DCZTHKWI.js → chunk-4CHBM3G3.js} +9 -3
  13. package/dist/chunk-4CHBM3G3.js.map +1 -0
  14. package/dist/{chunk-4ZCSXKK5.js → chunk-5VECGOBU.js} +3 -3
  15. package/dist/{chunk-F2U7LSJN.js → chunk-AFUVWWQY.js} +2 -2
  16. package/dist/{chunk-MHOYBRCY.js → chunk-CBMWHQ7P.js} +1 -1
  17. package/dist/chunk-CBMWHQ7P.js.map +1 -0
  18. package/dist/{chunk-2TPRBVDM.js → chunk-CUIJXYHG.js} +3566 -786
  19. package/dist/chunk-CUIJXYHG.js.map +1 -0
  20. package/dist/{chunk-THBCAUBR.js → chunk-CXC3ROXQ.js} +2 -2
  21. package/dist/{chunk-THBCAUBR.js.map → chunk-CXC3ROXQ.js.map} +1 -1
  22. package/dist/{chunk-44IFVKLS.js → chunk-DKGFEIZ7.js} +2 -2
  23. package/dist/{chunk-HH5PLD7L.js → chunk-DNHDR2YC.js} +3 -3
  24. package/dist/{chunk-V3VPKWVK.js → chunk-FGD2K7AB.js} +3 -3
  25. package/dist/chunk-FGD2K7AB.js.map +1 -0
  26. package/dist/{chunk-CFWR4C36.js → chunk-G7DS23D4.js} +2 -2
  27. package/dist/{chunk-AHDJFZAC.js → chunk-I4ICM3U4.js} +175 -33
  28. package/dist/chunk-I4ICM3U4.js.map +1 -0
  29. package/dist/{chunk-ML53N3II.js → chunk-KDN6SLJM.js} +2 -2
  30. package/dist/{chunk-RSFK6YRS.js → chunk-L3YCXXMA.js} +9 -9
  31. package/dist/{chunk-RWUYIHO3.js → chunk-M6HTOCQK.js} +3 -3
  32. package/dist/{chunk-UCDLFE2I.js → chunk-MGSRWYRN.js} +2 -2
  33. package/dist/{chunk-EWS7OGQK.js → chunk-O433KXLK.js} +2 -2
  34. package/dist/chunk-O433KXLK.js.map +1 -0
  35. package/dist/{chunk-2CZIBPST.js → chunk-PFTST5V6.js} +4 -4
  36. package/dist/{chunk-6YRJ4OPB.js → chunk-S7OROGUS.js} +2 -2
  37. package/dist/{chunk-HOT2PJ6T.js → chunk-SQZIKBOM.js} +4 -7
  38. package/dist/{chunk-HOT2PJ6T.js.map → chunk-SQZIKBOM.js.map} +1 -1
  39. package/dist/{chunk-FJ4A3A6W.js → chunk-TYQTSC7Y.js} +5 -5
  40. package/dist/{chunk-HD2TXBXU.js → chunk-U6TH4RJJ.js} +228 -43
  41. package/dist/chunk-U6TH4RJJ.js.map +1 -0
  42. package/dist/{chunk-KE3UYJMW.js → chunk-Z5Y3RB2U.js} +2 -2
  43. package/dist/{chunk-QKCSWK7Y.js → chunk-ZE6VLLFC.js} +51 -4
  44. package/dist/chunk-ZE6VLLFC.js.map +1 -0
  45. package/dist/context-mention-palette/index.js +10 -10
  46. package/dist/context-mention-provider.d.ts +1 -0
  47. package/dist/conversation-rail-runtime.d.ts +4 -1
  48. package/dist/dock-icons.js +2 -2
  49. package/dist/i18n/index.d.ts +280 -154
  50. package/dist/i18n/index.js +2 -2
  51. package/dist/index.d.ts +1285 -835
  52. package/dist/index.js +23 -23
  53. package/dist/index.js.map +1 -1
  54. package/dist/mention-search.js +8 -8
  55. package/dist/planImplementationPresentation-BxVOLt6A.d.ts +24 -0
  56. package/dist/provider-identity.js +1 -1
  57. package/dist/{types-izfKbJ8v.d.ts → types-CWKbqBmi.d.ts} +4 -0
  58. package/dist/workbench/contribution.js +10 -10
  59. package/dist/workbench/index.js +10 -10
  60. package/dist/workbench/launch.d.ts +4 -0
  61. package/dist/workbench/launch.js +4 -4
  62. package/dist/workbench/providerCatalog.js +2 -2
  63. package/dist/workbench/sessionTitle.js +3 -3
  64. package/dist/workbench/state.js +3 -3
  65. package/dist/workbench/types.d.ts +3 -0
  66. package/dist/workbench/types.js +1 -1
  67. package/package.json +14 -14
  68. package/dist/AgentRichTextReadonly-UZQ5VSGO.js +0 -19
  69. package/dist/chunk-2TPRBVDM.js.map +0 -1
  70. package/dist/chunk-AHDJFZAC.js.map +0 -1
  71. package/dist/chunk-DCZTHKWI.js.map +0 -1
  72. package/dist/chunk-EWS7OGQK.js.map +0 -1
  73. package/dist/chunk-HD2TXBXU.js.map +0 -1
  74. package/dist/chunk-MHOYBRCY.js.map +0 -1
  75. package/dist/chunk-QKCSWK7Y.js.map +0 -1
  76. package/dist/chunk-V3VPKWVK.js.map +0 -1
  77. package/dist/{AgentRichTextReadonly-UZQ5VSGO.js.map → AgentRichTextReadonly-HJQQ4KAL.js.map} +0 -0
  78. package/dist/{chunk-4ZCSXKK5.js.map → chunk-5VECGOBU.js.map} +0 -0
  79. package/dist/{chunk-F2U7LSJN.js.map → chunk-AFUVWWQY.js.map} +0 -0
  80. package/dist/{chunk-44IFVKLS.js.map → chunk-DKGFEIZ7.js.map} +0 -0
  81. package/dist/{chunk-HH5PLD7L.js.map → chunk-DNHDR2YC.js.map} +0 -0
  82. package/dist/{chunk-CFWR4C36.js.map → chunk-G7DS23D4.js.map} +0 -0
  83. package/dist/{chunk-ML53N3II.js.map → chunk-KDN6SLJM.js.map} +0 -0
  84. package/dist/{chunk-RSFK6YRS.js.map → chunk-L3YCXXMA.js.map} +0 -0
  85. package/dist/{chunk-RWUYIHO3.js.map → chunk-M6HTOCQK.js.map} +0 -0
  86. package/dist/{chunk-UCDLFE2I.js.map → chunk-MGSRWYRN.js.map} +0 -0
  87. package/dist/{chunk-2CZIBPST.js.map → chunk-PFTST5V6.js.map} +0 -0
  88. package/dist/{chunk-6YRJ4OPB.js.map → chunk-S7OROGUS.js.map} +0 -0
  89. package/dist/{chunk-FJ4A3A6W.js.map → chunk-TYQTSC7Y.js.map} +0 -0
  90. package/dist/{chunk-KE3UYJMW.js.map → chunk-Z5Y3RB2U.js.map} +0 -0
  91. package/dist/{agentConversationVM-Bn5s1UMx.d.ts → workspaceLinkActions-BmVLZszV.d.ts} +72 -72
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ import react__default, { ReactNode, PropsWithChildren, JSX } from 'react';
3
3
  import * as _tutti_os_ui_i18n_runtime from '@tutti-os/ui-i18n-runtime';
4
4
  import { I18nRuntime } from '@tutti-os/ui-i18n-runtime';
5
5
  import * as _tutti_os_agent_activity_core from '@tutti-os/agent-activity-core';
6
- import { AgentActivityGoalControlInput, AgentActivityGoalControlResult, AgentActivityCreateSessionInput, AgentActivitySession, AgentActivityDeleteSessionInput, AgentActivityDeleteSessionResult, AgentActivitySendInput, AgentActivitySessionSettings, AgentActivityActivateSessionResult, AgentActivitySnapshot, AgentSessionEngine, AgentActivityMessageOrder, AgentActivityMessagePage, AgentActivitySendInputResult, AgentActivityRenameSessionInput, AgentActivitySetCollaborationAdoptionInput, AgentActivityCollaborationRun, AgentActivitySubmitInteractiveInput, AgentActivitySubmitInteractiveResult, AgentActivitySnapshotListener, AgentActivityMessageSemantics, AgentActivityGoalControlAction, AgentActivityTurn, AgentActivitySlashCommandPolicy, AgentActivityUsage, CanonicalAgentSession, AgentActivitySubmitSettingsPatch, AgentSessionEngineState } from '@tutti-os/agent-activity-core';
6
+ import { AgentActivityGoalControlInput, AgentActivityGoalControlResult, AgentActivityCreateSessionInput, AgentActivitySession, AgentActivityDeleteSessionInput, AgentActivityDeleteSessionResult, AgentActivitySendInput, AgentActivitySessionSettings, AgentActivityActivateSessionResult, AgentActivityUpdateTuttiModeActivationInput, AgentActivityUpdateTuttiModeActivationResult, AgentActivitySnapshot, AgentSessionEngine, AgentActivityMessageOrder, AgentActivityMessagePage, AgentActivitySendInputResult, AgentActivityRenameSessionInput, AgentActivitySetCollaborationAdoptionInput, AgentActivityCollaborationRun, AgentActivitySubmitInteractiveInput, AgentActivitySubmitInteractiveResult, AgentActivitySnapshotListener, AgentActivityMessageSemantics, AgentActivityGoalControlAction, AgentActivityTurn, AgentActivitySlashCommandPolicy, AgentActivityUsage, CanonicalAgentSession, AgentActivitySubmitSettingsPatch, AgentSessionEngineState } from '@tutti-os/agent-activity-core';
7
7
  export { AgentActivityAdapter, AgentActivityMessage, AgentActivityNeedsAttentionItem, AgentActivitySnapshot, selectNeedsAttentionCount, selectNeedsAttentionItems } from '@tutti-os/agent-activity-core';
8
8
  import { WorkspaceUserProjectService, WorkspaceUserProject } from '@tutti-os/workspace-user-project/contracts';
9
9
  import { WorkspaceFileReference, ReferenceLocateTarget, WorkspaceFileReferenceAdapter, ReferenceProvenanceCatalog } from '@tutti-os/workspace-file-reference/contracts';
@@ -397,6 +397,7 @@ interface AgentActivityRuntimeDiagnosticInput {
397
397
  }
398
398
  interface AgentActivityRuntimeActivateSessionInputBase {
399
399
  agentSessionId: string;
400
+ capabilityRefs?: AgentActivityCreateSessionInput["capabilityRefs"];
400
401
  cwd?: string;
401
402
  initialContent?: AgentActivitySendInput["content"];
402
403
  /** 仅展示用首轮文本(bundle 折叠成一个 chip);initialContent 仍带展开后的文件。 */
@@ -411,6 +412,7 @@ interface AgentActivityRuntimeActivateSessionInputBase {
411
412
  type AgentActivityRuntimeActivateSessionInput = (AgentActivityRuntimeActivateSessionInputBase & {
412
413
  agentTargetId: string;
413
414
  clientSubmitId: string;
415
+ initialTuttiModeActivation?: AgentActivityCreateSessionInput["initialTuttiModeActivation"];
414
416
  mode: "new";
415
417
  }) | (AgentActivityRuntimeActivateSessionInputBase & {
416
418
  agentTargetId?: string | null;
@@ -543,6 +545,7 @@ interface AgentActivityRuntime {
543
545
  getSession(workspaceId: string, agentSessionId: string): Promise<AgentActivitySession>;
544
546
  getComposerOptions(input: AgentActivityRuntimeGetComposerOptionsInput): Promise<unknown>;
545
547
  updateSessionSettings(input: AgentActivityRuntimeUpdateSessionSettingsInput): Promise<AgentActivityRuntimeUpdateSessionSettingsResult>;
548
+ updateTuttiModeActivation(input: AgentActivityUpdateTuttiModeActivationInput): Promise<AgentActivityUpdateTuttiModeActivationResult>;
546
549
  getSnapshot(workspaceId: string): AgentActivitySnapshot;
547
550
  getSessionEngine(workspaceId: string): AgentSessionEngine;
548
551
  getSessionSectionsQueryCache?(workspaceId: string): WorkspaceQueryCache<unknown>;
@@ -1028,304 +1031,6 @@ interface AgentSettings {
1028
1031
  hideWorktreeMismatchDropWarning: boolean;
1029
1032
  }
1030
1033
 
1031
- interface AgentGUINodeData {
1032
- provider: AgentGUIProvider;
1033
- agentTargetId?: string | null;
1034
- lastActiveAgentSessionId: string | null;
1035
- lastActiveAgentSessionIdByAgentTargetId?: Record<string, string> | null;
1036
- conversationCount?: number | null;
1037
- conversationRailWidthPx?: number | null;
1038
- conversationRailCollapsed?: boolean | null;
1039
- composerOverrides?: AgentHostAgentSessionComposerSettings | null;
1040
- composerOverridesByAgentTargetId?: Record<string, AgentHostAgentSessionComposerSettings | null> | null;
1041
- composerOverridesByProvider?: Partial<Record<AgentGUIProvider, AgentHostAgentSessionComposerSettings | null>> | null;
1042
- }
1043
- /**
1044
- * Open runtime metadata reported by an Agent Target.
1045
- *
1046
- * Built-in providers still use AgentProvider, while externally installed ACP
1047
- * extensions use namespaced values such as `acp:gemini`.
1048
- */
1049
- type AgentGUIProvider = string;
1050
- /**
1051
- * Stable identifiers for the starter entries shown below the empty new-session
1052
- * composer. Hosts can pass these values to `AgentGUI.disabled` to hide entries
1053
- * that should not be available in their integration.
1054
- */
1055
- type AgentGUIHomeSuggestionId = "meet-tutti" | "task-breakdown" | "quality-review" | "agent-interaction" | "import-session";
1056
- type AgentGUIAgentAvailabilityStatus = "ready" | "checking" | "coming_soon" | "not_installed" | "auth_required" | "unavailable";
1057
- type AgentGUIAgentAvailabilityAction = "install" | "login" | "refresh";
1058
- interface AgentGUIAgentAvailability {
1059
- status: AgentGUIAgentAvailabilityStatus;
1060
- reason?: string | null;
1061
- pendingAction?: AgentGUIAgentAvailabilityAction | null;
1062
- }
1063
- interface AgentGUIAgentOwner {
1064
- userId?: string | null;
1065
- name?: string | null;
1066
- avatarUrl?: string | null;
1067
- }
1068
- /** Host-authoritative ownership classification for Agent directory entries. */
1069
- type AgentGUIAgentOwnership = "self" | "shared";
1070
- interface AgentGUISharedAgentQuota {
1071
- unit: "runs" | "tokens";
1072
- remaining: number;
1073
- limit?: number;
1074
- resetAt?: string | null;
1075
- }
1076
- interface AgentGUISharedAgentConcurrency {
1077
- active: number;
1078
- limit: number;
1079
- }
1080
- interface AgentGUISharedAgentCostQuota {
1081
- currency: string;
1082
- remainingMicros: number;
1083
- limitMicros?: number;
1084
- }
1085
- interface AgentGUISharedAgentAllowedModel {
1086
- modelPlanId?: string | null;
1087
- model: string;
1088
- }
1089
- interface AgentGUISharedAgentPolicyPermissions {
1090
- consult: boolean;
1091
- review: boolean;
1092
- delegate: boolean;
1093
- upgrade: boolean;
1094
- }
1095
- /** Credential-free access snapshot supplied by the shared-Agent control plane. */
1096
- interface AgentGUISharedAgentAccess {
1097
- grantId: string;
1098
- ownerUserId: string;
1099
- ownerOnline: boolean;
1100
- auditRequired: boolean;
1101
- quota?: AgentGUISharedAgentQuota | null;
1102
- concurrency?: AgentGUISharedAgentConcurrency | null;
1103
- costQuota?: AgentGUISharedAgentCostQuota | null;
1104
- allowedModels?: readonly AgentGUISharedAgentAllowedModel[] | null;
1105
- policyPermissions?: AgentGUISharedAgentPolicyPermissions | null;
1106
- }
1107
- /**
1108
- * Host-projected entry from the workspace `/agents` directory.
1109
- *
1110
- * `agentTargetId` is the only UI and launch identity. `provider` remains
1111
- * execution metadata for provider-native composer/runtime policy and must not
1112
- * be used to group, deduplicate, name, or select entries.
1113
- */
1114
- interface AgentGUIAgent {
1115
- agentTargetId: string;
1116
- name: string;
1117
- iconUrl: string;
1118
- /** Single-color artwork rendered through the conversation rail CSS mask. */
1119
- maskIconUrl?: string | null;
1120
- heroImageUrl?: string | null;
1121
- description?: string | null;
1122
- /** Host-resolved display name of the device that owns this Agent target. */
1123
- ownerDeviceLabel?: string | null;
1124
- owner?: AgentGUIAgentOwner | null;
1125
- ownership?: AgentGUIAgentOwnership | null;
1126
- sharedAccess?: AgentGUISharedAgentAccess | null;
1127
- availability: AgentGUIAgentAvailability;
1128
- provider: AgentGUIProvider;
1129
- setupKind?: "target_runtime" | null;
1130
- }
1131
- type AgentGUIAgentDirectoryStatus = "idle" | "loading" | "ready" | "error";
1132
- interface AgentGUIAgentDirectorySnapshot {
1133
- agents: readonly AgentGUIAgent[];
1134
- capturedAtUnixMs: number | null;
1135
- error: string | null;
1136
- status: AgentGUIAgentDirectoryStatus;
1137
- }
1138
- interface AgentGUIAgentDirectoryPort {
1139
- getSnapshot(): AgentGUIAgentDirectorySnapshot;
1140
- subscribe(listener: () => void): () => void;
1141
- }
1142
- interface AgentGUIAllAgentsPresentation {
1143
- iconUrl?: string | null;
1144
- }
1145
- interface AgentGUIAgentTargetRef {
1146
- kind: string;
1147
- provider: AgentGUIProvider;
1148
- [key: string]: unknown;
1149
- }
1150
- interface AgentGUIAgentTargetBadge {
1151
- iconUrl: string;
1152
- label?: string;
1153
- }
1154
- interface AgentGUIAgentTarget {
1155
- targetId: string;
1156
- agentTargetId?: string | null;
1157
- provider: AgentGUIProvider;
1158
- ref: AgentGUIAgentTargetRef;
1159
- label: string;
1160
- description?: string;
1161
- iconUrl?: string | null;
1162
- maskIconUrl?: string | null;
1163
- heroImageUrl?: string | null;
1164
- badge?: AgentGUIAgentTargetBadge | null;
1165
- ownerLabel?: string;
1166
- ownerDeviceLabel?: string;
1167
- ownership?: AgentGUIAgentOwnership;
1168
- availability?: AgentGUIAgentAvailability;
1169
- disabled?: boolean;
1170
- unavailableReason?: string;
1171
- }
1172
- interface AgentGUIProviderRailAllPresentation {
1173
- iconUrl?: string | null;
1174
- }
1175
- /**
1176
- * How the provider rail composes the target list.
1177
- * - "catalog" (default): host-provided targets are augmented with the static
1178
- * local provider catalog, disabled placeholders (nexight/hermes/openclaw),
1179
- * and coming-soon markers. When no targets are provided, the full local
1180
- * catalog is shown.
1181
- * - "exact": the rail renders exactly the provided targets — no static catalog
1182
- * fallback, no disabled placeholders, no coming-soon injection. When the list
1183
- * is empty (and not loading) the host-provided empty renderer is shown. Use
1184
- * this when the list is fully orchestrated externally (e.g. shared agents,
1185
- * custom /agents).
1186
- */
1187
- type AgentGUIProviderRailMode = "catalog" | "exact";
1188
- type AgentGUIProviderReadinessGateStatus = "checking" | "coming_soon" | "not_installed" | "auth_required" | "unavailable";
1189
- type AgentGUIProviderReadinessGateAction = "install" | "login" | "refresh";
1190
- interface AgentGUIProviderReadinessGate {
1191
- status: AgentGUIProviderReadinessGateStatus;
1192
- pendingAction?: AgentGUIProviderReadinessGateAction | null;
1193
- onAction?: (provider: AgentGUIProvider, action: AgentGUIProviderReadinessGateAction) => void;
1194
- }
1195
- interface Size {
1196
- width: number;
1197
- height: number;
1198
- }
1199
- interface Point {
1200
- x: number;
1201
- y: number;
1202
- }
1203
- interface NodeFrame {
1204
- position: Point;
1205
- size: Size;
1206
- }
1207
-
1208
- type AgentGuiWorkbenchSessionAction = "rename" | "copy-markdown" | "copy-reference";
1209
- interface AgentGuiWorkbenchSessionActionRequest {
1210
- action: AgentGuiWorkbenchSessionAction;
1211
- agentSessionId: string | null;
1212
- sequence: number;
1213
- }
1214
-
1215
- type WorkspaceLinkActionSource = "agent-markdown" | "agent-file-change" | string;
1216
- interface OpenWorkspaceFileLinkAction {
1217
- type: "open-workspace-file";
1218
- mode?: "reveal" | "open-directory";
1219
- path: string;
1220
- directoryPath: string;
1221
- workspaceRoot: string;
1222
- source: WorkspaceLinkActionSource;
1223
- prefetchedDirectoryListing?: WorkspaceFileLinkDirectoryListing | null;
1224
- }
1225
- interface OpenLocalAssetPreviewLinkAction {
1226
- type: "open-local-asset-preview";
1227
- path: string;
1228
- name: string;
1229
- source: WorkspaceLinkActionSource;
1230
- }
1231
- interface WorkspaceFileLinkDirectoryEntry {
1232
- path: string;
1233
- name: string;
1234
- kind: "file" | "directory" | "unknown";
1235
- hasChildren: boolean | null;
1236
- sizeBytes: number | null;
1237
- mtimeMs: number | null;
1238
- }
1239
- interface WorkspaceFileLinkDirectoryListing {
1240
- workspaceId: string;
1241
- root: string;
1242
- directoryPath: string;
1243
- entries: WorkspaceFileLinkDirectoryEntry[];
1244
- }
1245
- interface OpenWorkspaceUrlLinkAction {
1246
- type: "open-url";
1247
- url: string;
1248
- source: WorkspaceLinkActionSource;
1249
- }
1250
- interface OpenAgentSessionLinkAction {
1251
- type: "open-agent-session";
1252
- workspaceId: string;
1253
- agentSessionId: string;
1254
- agentTargetId?: string | null;
1255
- source: WorkspaceLinkActionSource;
1256
- }
1257
- interface OpenWorkspaceIssueLinkAction {
1258
- type: "open-workspace-issue";
1259
- workspaceId: string;
1260
- issueId: string | null;
1261
- mode?: WorkspaceIssueMentionMode;
1262
- outputDir?: string | null;
1263
- runId?: string | null;
1264
- taskId?: string | null;
1265
- topicId?: string | null;
1266
- source: WorkspaceLinkActionSource;
1267
- }
1268
- interface OpenWorkspaceAppLinkAction {
1269
- type: "open-workspace-app";
1270
- workspaceId: string;
1271
- appId: string;
1272
- conversationId?: string | null;
1273
- messageId?: string | null;
1274
- summaryTaskId?: string | null;
1275
- source: WorkspaceLinkActionSource;
1276
- }
1277
- interface OpenCustomMentionLinkAction {
1278
- type: "open-custom-mention";
1279
- /** 注册表里的 kind(= mention:// providerId)。 */
1280
- kind: string;
1281
- href: string;
1282
- source: WorkspaceLinkActionSource;
1283
- }
1284
- type WorkspaceLinkAction = OpenWorkspaceFileLinkAction | OpenLocalAssetPreviewLinkAction | OpenWorkspaceUrlLinkAction | OpenAgentSessionLinkAction | OpenWorkspaceIssueLinkAction | OpenWorkspaceAppLinkAction | OpenCustomMentionLinkAction;
1285
-
1286
- interface AgentMessageMarkdownWorkspaceAppIcon {
1287
- appId: string;
1288
- iconUrl: string | null;
1289
- workspaceId?: string | null;
1290
- }
1291
-
1292
- interface AgentGUIAccountMenuState {
1293
- user: {
1294
- userId: string;
1295
- name?: string | null;
1296
- email?: string | null;
1297
- avatar?: string | null;
1298
- } | null;
1299
- membershipLabel: string;
1300
- creditsLabel: string | null;
1301
- loading: boolean;
1302
- error: string | null;
1303
- partialError?: boolean;
1304
- registrationCreditsToast?: {
1305
- id: string;
1306
- creditsLabel: string;
1307
- visible: boolean;
1308
- autoDismissMs?: number;
1309
- onDismiss(): void;
1310
- } | null;
1311
- links: {
1312
- planUrl: string;
1313
- usageUrl: string;
1314
- settingsUrl: string;
1315
- };
1316
- onOpenChange(open: boolean): void;
1317
- onLogin(): void;
1318
- onLogout?(): void;
1319
- onSettings?(): void;
1320
- onOpenExternal(url: string): void;
1321
- }
1322
-
1323
- type AgentSessionCommand = AgentHostAgentSessionCommand;
1324
- type AgentSessionComposerSettings = AgentHostAgentSessionComposerSettings;
1325
- type AgentSessionPermissionConfig = AgentHostAgentSessionPermissionConfig;
1326
- type AgentSessionReasoningEffort = AgentHostAgentSessionReasoningEffort;
1327
- type AgentSessionSpeed = AgentHostAgentSessionSpeed;
1328
-
1329
1034
  interface WorkspaceAgentActivityFileChange {
1330
1035
  path: string;
1331
1036
  change?: "added" | "modified" | "deleted" | "moved" | string;
@@ -1402,14 +1107,224 @@ interface WorkspaceAgentActivityCard {
1402
1107
  readTimeUnixMs?: number;
1403
1108
  }
1404
1109
 
1405
- interface WorkspaceAgentSessionDetailMessage {
1110
+ interface WorkspaceAgentSessionDetailMessage {
1111
+ id: string;
1112
+ body: string;
1113
+ status?: string | null;
1114
+ statusKind?: ToolCallStatusKind | null;
1115
+ turnId?: string;
1116
+ occurredAtUnixMs?: number | null;
1117
+ sourceTimelineItems?: WorkspaceAgentActivityTimelineItem[];
1118
+ visibleError?: {
1119
+ code: string | null;
1120
+ phase: string | null;
1121
+ provider: string | null;
1122
+ detail: string | null;
1123
+ retryable: boolean | null;
1124
+ } | null;
1125
+ systemNotice?: {
1126
+ noticeKind: string | null;
1127
+ severity: string | null;
1128
+ source?: string | null;
1129
+ command?: AgentActivityMessageSemantics["noticeCommand"] | null;
1130
+ commandStatus?: AgentActivityMessageSemantics["noticeCommandStatus"] | null;
1131
+ title: string | null;
1132
+ detail: string | null;
1133
+ retryable: boolean | null;
1134
+ } | null;
1135
+ }
1136
+ interface WorkspaceAgentSessionDetailThinking {
1137
+ id: string;
1138
+ body: string;
1139
+ statusKind?: ToolCallStatusKind | null;
1140
+ turnId?: string;
1141
+ occurredAtUnixMs?: number | null;
1142
+ sourceTimelineItems?: WorkspaceAgentActivityTimelineItem[];
1143
+ }
1144
+ interface WorkspaceAgentSessionDetailGoalControl {
1145
+ id: string;
1146
+ action: AgentActivityGoalControlAction;
1147
+ body: string;
1148
+ occurredAtUnixMs?: number | null;
1149
+ sourceTimelineItems?: WorkspaceAgentActivityTimelineItem[];
1150
+ }
1151
+ interface WorkspaceAgentSessionDetailToolCall {
1152
+ id: string;
1153
+ name: string;
1154
+ toolName: string | null;
1155
+ callType: string | null;
1156
+ status: string | null;
1157
+ statusKind: ToolCallStatusKind | null;
1158
+ summary: string;
1159
+ payload: Record<string, unknown> | null;
1160
+ turnId?: string;
1161
+ compactSummary?: string | null;
1162
+ occurredAtUnixMs?: number | null;
1163
+ sourceTimelineItems?: WorkspaceAgentActivityTimelineItem[];
1164
+ }
1165
+ type WorkspaceAgentSessionDetailToolGroupEntry = {
1166
+ kind: "thinking";
1167
+ thinking: WorkspaceAgentSessionDetailThinking;
1168
+ } | {
1169
+ kind: "tool-call";
1170
+ call: WorkspaceAgentSessionDetailToolCall;
1171
+ };
1172
+ type WorkspaceAgentSessionDetailAgentItem = {
1173
+ kind: "message";
1174
+ message: WorkspaceAgentSessionDetailMessage;
1175
+ } | {
1176
+ kind: "thinking";
1177
+ thinking: WorkspaceAgentSessionDetailThinking;
1178
+ } | {
1179
+ kind: "tool-calls";
1180
+ id: string;
1181
+ toolCalls: WorkspaceAgentSessionDetailToolCall[];
1182
+ toolCallCount: number;
1183
+ hasFailedToolCall: boolean;
1184
+ summary?: string | null;
1185
+ groupEntries?: WorkspaceAgentSessionDetailToolGroupEntry[];
1186
+ };
1187
+ interface WorkspaceAgentSessionDetailTurn {
1188
+ id: string;
1189
+ userMessage: WorkspaceAgentSessionDetailMessage | null;
1190
+ userMessages: WorkspaceAgentSessionDetailMessage[];
1191
+ agentMessages: WorkspaceAgentSessionDetailMessage[];
1192
+ toolCalls: WorkspaceAgentSessionDetailToolCall[];
1193
+ toolCallCount: number;
1194
+ hasFailedToolCall: boolean;
1195
+ rawAgentItems?: WorkspaceAgentSessionDetailAgentItem[];
1196
+ agentItems: WorkspaceAgentSessionDetailAgentItem[];
1197
+ }
1198
+ interface WorkspaceAgentSessionDetailViewModel {
1199
+ activity: WorkspaceAgentActivityCard;
1200
+ session: AgentActivitySession;
1201
+ cwd: string;
1202
+ workspaceRoot: string | null;
1203
+ goalControls?: WorkspaceAgentSessionDetailGoalControl[];
1204
+ turns: WorkspaceAgentSessionDetailTurn[];
1205
+ sessionTurns?: readonly AgentActivityTurn[];
1206
+ showProcessingIndicator?: boolean;
1207
+ }
1208
+
1209
+ type AgentApprovalPurpose = "edit-files";
1210
+
1211
+ interface AgentApprovalOptionVM {
1212
+ id: string;
1213
+ label: string;
1214
+ kind: string;
1215
+ description?: string;
1216
+ }
1217
+ interface AgentApprovalItemVM {
1218
+ kind: "approval";
1219
+ id: string;
1220
+ turnId: string;
1221
+ requestId: string;
1222
+ callId: string;
1223
+ approvalPurpose?: AgentApprovalPurpose;
1224
+ title: string;
1225
+ toolName: string | null;
1226
+ status: string | null;
1227
+ input: Record<string, unknown> | null;
1228
+ options: AgentApprovalOptionVM[];
1229
+ output?: Record<string, unknown> | null;
1230
+ occurredAtUnixMs: number | null;
1231
+ }
1232
+
1233
+ interface AgentAskUserQuestionOptionVM {
1234
+ label: string;
1235
+ description: string;
1236
+ }
1237
+ interface AgentAskUserQuestionVM {
1238
+ id: string;
1239
+ header: string;
1240
+ question: string;
1241
+ options: AgentAskUserQuestionOptionVM[];
1242
+ multiSelect: boolean;
1243
+ answer?: string | string[] | null;
1244
+ }
1245
+ interface AgentAskUserQuestionItemVM {
1246
+ kind: "ask-user";
1247
+ id: string;
1248
+ turnId: string;
1249
+ requestId: string;
1250
+ title: string;
1251
+ status: string | null;
1252
+ questions: AgentAskUserQuestionVM[];
1253
+ occurredAtUnixMs: number | null;
1254
+ }
1255
+
1256
+ interface AgentGeneratedImageRowVM {
1257
+ kind: "generated-image";
1258
+ id: string;
1259
+ turnId: string;
1260
+ sourceCallId: string;
1261
+ uri: string;
1262
+ mimeType: string | null;
1263
+ prompt: string | null;
1264
+ occurredAtUnixMs: number | null;
1265
+ }
1266
+
1267
+ interface AgentGoalControlRowVM {
1268
+ kind: "goal-control";
1269
+ id: string;
1270
+ turnId: null;
1271
+ action: AgentActivityGoalControlAction;
1272
+ body: string;
1273
+ occurredAtUnixMs: number | null;
1274
+ sourceTimelineItems?: WorkspaceAgentActivityTimelineItem[];
1275
+ }
1276
+
1277
+ type AgentTranscriptPresentationKind = "content" | "specific-progress" | "turn-boundary";
1278
+
1279
+ interface AgentCollaborationUsageVM {
1280
+ inputTokens: number;
1281
+ outputTokens: number;
1282
+ }
1283
+ /**
1284
+ * Typed projection of one durable "collaboration" timeline message (the
1285
+ * daemon projects each collaboration run into the source session transcript
1286
+ * with messageId `collab:<runId>`; status transitions update the same message
1287
+ * in place). Pure data — rendering and adoption actions live in
1288
+ * `AgentCollaborationRow`.
1289
+ */
1290
+ interface AgentCollaborationVM {
1291
+ kind: "collaboration";
1292
+ runId: string;
1293
+ /** Session identity of the source transcript row, for adoption commands. */
1294
+ workspaceId: string | null;
1295
+ agentSessionId: string | null;
1296
+ mode: "consult" | "fork" | "delegate" | "handoff" | (string & {});
1297
+ status: "running" | "completed" | "failed" | "canceled" | (string & {});
1298
+ triggerSource: "user" | "agent" | "policy" | (string & {});
1299
+ triggerReason: string | null;
1300
+ targetSessionId: string | null;
1301
+ targetAgentTargetId: string | null;
1302
+ modelPlanId: string | null;
1303
+ /** Optional display name when the daemon payload carries it. */
1304
+ modelPlanName: string | null;
1305
+ model: string | null;
1306
+ contextScope: string | null;
1307
+ resultText: string | null;
1308
+ failureReason: string | null;
1309
+ durationMs: number | null;
1310
+ usage: AgentCollaborationUsageVM | null;
1311
+ adoption: "pending" | "adopted" | "rejected" | "not_applicable" | (string & {});
1312
+ }
1313
+
1314
+ interface AgentMessageContentVM {
1315
+ kind: "message-content";
1406
1316
  id: string;
1317
+ turnId: string;
1407
1318
  body: string;
1408
- status?: string | null;
1319
+ presentationKind: AgentTranscriptPresentationKind;
1320
+ copyText?: string | null;
1409
1321
  statusKind?: ToolCallStatusKind | null;
1410
- turnId?: string;
1411
- occurredAtUnixMs?: number | null;
1412
- sourceTimelineItems?: WorkspaceAgentActivityTimelineItem[];
1322
+ contentKind?: "text" | "image-grid" | "plan" | "collaboration";
1323
+ isTurnFinalText?: true;
1324
+ /** Typed payload for `contentKind: "collaboration"` rows. */
1325
+ collaboration?: AgentCollaborationVM | null;
1326
+ images?: AgentMessageImageVM[];
1327
+ occurredAtUnixMs: number | null;
1413
1328
  visibleError?: {
1414
1329
  code: string | null;
1415
1330
  phase: string | null;
@@ -1427,437 +1342,549 @@ interface WorkspaceAgentSessionDetailMessage {
1427
1342
  detail: string | null;
1428
1343
  retryable: boolean | null;
1429
1344
  } | null;
1345
+ sourceTimelineItems?: WorkspaceAgentActivityTimelineItem[];
1430
1346
  }
1431
- interface WorkspaceAgentSessionDetailThinking {
1347
+ interface AgentMessageImageVM {
1348
+ id: string;
1349
+ workspaceId?: string | null;
1350
+ agentSessionId: string;
1351
+ attachmentId?: string | null;
1352
+ mimeType: string;
1353
+ name?: string | null;
1354
+ data?: string | null;
1355
+ url?: string | null;
1356
+ path?: string | null;
1357
+ }
1358
+ interface AgentThinkingContentVM {
1359
+ kind: "thinking-content";
1432
1360
  id: string;
1361
+ turnId: string;
1433
1362
  body: string;
1434
1363
  statusKind?: ToolCallStatusKind | null;
1435
- turnId?: string;
1436
- occurredAtUnixMs?: number | null;
1364
+ occurredAtUnixMs: number | null;
1437
1365
  sourceTimelineItems?: WorkspaceAgentActivityTimelineItem[];
1438
1366
  }
1439
- interface WorkspaceAgentSessionDetailGoalControl {
1367
+ interface AgentMessageRowVM {
1368
+ kind: "message";
1440
1369
  id: string;
1441
- action: AgentActivityGoalControlAction;
1442
- body: string;
1443
- occurredAtUnixMs?: number | null;
1444
- sourceTimelineItems?: WorkspaceAgentActivityTimelineItem[];
1370
+ turnId: string;
1371
+ speaker: "user" | "assistant";
1372
+ messages: AgentMessageContentVM[];
1373
+ thinking: AgentThinkingContentVM[];
1374
+ occurredAtUnixMs: number | null;
1445
1375
  }
1446
- interface WorkspaceAgentSessionDetailToolCall {
1376
+
1377
+ interface AgentProcessingRowVM {
1378
+ kind: "processing";
1379
+ id: string;
1380
+ turnId: string | null;
1381
+ label?: string | null;
1382
+ occurredAtUnixMs: number | null;
1383
+ }
1384
+
1385
+ type AgentPlanModeKind = "enter" | "exit";
1386
+ interface AgentPlanModeItemVM {
1387
+ itemKind: "plan-mode";
1388
+ id: string;
1389
+ turnId: string;
1390
+ requestId?: string;
1391
+ kind: AgentPlanModeKind;
1392
+ title: string;
1393
+ plan?: string | null;
1394
+ status: string | null;
1395
+ filePath?: string | null;
1396
+ options?: AgentApprovalOptionVM[];
1397
+ keepPlanningOptionId?: string;
1398
+ occurredAtUnixMs: number | null;
1399
+ }
1400
+
1401
+ type AgentTaskSubAgentStatus = "running" | "completed" | "failed" | "canceled";
1402
+ type AgentTaskSubAgentActivityKind = "message" | "reasoning" | "tool";
1403
+ interface AgentTaskSubAgentActivityVM {
1404
+ kind: AgentTaskSubAgentActivityKind;
1405
+ text: string;
1406
+ atUnixMs: number | null;
1407
+ }
1408
+ interface AgentTaskSubAgentVM {
1409
+ childSessionId: string;
1410
+ parentToolCallId: string;
1411
+ status: AgentTaskSubAgentStatus;
1412
+ name: string | null;
1413
+ task: string | null;
1414
+ laneIndex: number;
1415
+ laneCount: number;
1416
+ latestActivity: string | null;
1417
+ latestActivityKind: AgentTaskSubAgentActivityKind | null;
1418
+ activityLog: readonly AgentTaskSubAgentActivityVM[];
1419
+ activityOmittedCount: number;
1420
+ queued?: boolean;
1421
+ failureDetail: string | null;
1422
+ startedAtUnixMs: number | null;
1423
+ latestActivityAtUnixMs: number | null;
1424
+ terminalAtUnixMs: number | null;
1425
+ childSessions: readonly AgentTaskSubAgentVM[];
1426
+ }
1427
+ interface AgentTaskStepVM {
1428
+ id: string;
1429
+ turnId: string;
1430
+ name: string;
1431
+ toolName: string | null;
1432
+ status: string | null;
1433
+ summary: string;
1434
+ payload: Record<string, unknown> | null;
1435
+ tool: AgentToolCallVM | null;
1436
+ occurredAtUnixMs: number | null;
1437
+ }
1438
+ interface AgentTaskItemVM {
1439
+ kind: "task";
1440
+ id: string;
1441
+ turnId: string;
1442
+ title: string;
1443
+ status: string | null;
1444
+ prompt?: string | null;
1445
+ delegateSessionId?: string | null;
1446
+ steps: AgentTaskStepVM[];
1447
+ subAgents?: AgentTaskSubAgentVM[];
1448
+ result?: string | null;
1449
+ resultMarkdown?: string | null;
1450
+ durationMs?: number | null;
1451
+ occurredAtUnixMs: number | null;
1452
+ }
1453
+
1454
+ type AgentToolRendererKind = "default" | "approval" | "plan-enter" | "plan-exit" | "ask-user" | "task" | "read" | "write" | "edit" | "bash" | "search" | "web-search" | "web-fetch" | "image-generation" | "todo-write" | "tool-search" | "skill" | "mcp";
1455
+ interface AgentToolCallVM {
1456
+ kind: "tool-call";
1447
1457
  id: string;
1458
+ turnId: string;
1448
1459
  name: string;
1449
1460
  toolName: string | null;
1450
1461
  callType: string | null;
1451
1462
  status: string | null;
1452
1463
  statusKind: ToolCallStatusKind | null;
1453
1464
  summary: string;
1465
+ compactSummary: string | null;
1454
1466
  payload: Record<string, unknown> | null;
1455
- turnId?: string;
1456
- compactSummary?: string | null;
1457
- occurredAtUnixMs?: number | null;
1467
+ toolState: Record<string, unknown> | null;
1468
+ input: Record<string, unknown> | null;
1469
+ output: Record<string, unknown> | null;
1470
+ error: Record<string, unknown> | null;
1471
+ metadata: Record<string, unknown> | null;
1472
+ content: unknown[] | null;
1473
+ locations: unknown[] | null;
1474
+ rendererKind: AgentToolRendererKind;
1475
+ approval: AgentApprovalItemVM | null;
1476
+ planMode: AgentPlanModeItemVM | null;
1477
+ askUserQuestion: AgentAskUserQuestionItemVM | null;
1478
+ task: AgentTaskItemVM | null;
1479
+ occurredAtUnixMs: number | null;
1458
1480
  sourceTimelineItems?: WorkspaceAgentActivityTimelineItem[];
1459
1481
  }
1460
- type WorkspaceAgentSessionDetailToolGroupEntry = {
1482
+
1483
+ type AgentToolGroupEntryVM = {
1461
1484
  kind: "thinking";
1462
- thinking: WorkspaceAgentSessionDetailThinking;
1485
+ thinking: AgentThinkingContentVM;
1463
1486
  } | {
1464
1487
  kind: "tool-call";
1465
- call: WorkspaceAgentSessionDetailToolCall;
1466
- };
1467
- type WorkspaceAgentSessionDetailAgentItem = {
1468
- kind: "message";
1469
- message: WorkspaceAgentSessionDetailMessage;
1470
- } | {
1471
- kind: "thinking";
1472
- thinking: WorkspaceAgentSessionDetailThinking;
1473
- } | {
1474
- kind: "tool-calls";
1475
- id: string;
1476
- toolCalls: WorkspaceAgentSessionDetailToolCall[];
1477
- toolCallCount: number;
1478
- hasFailedToolCall: boolean;
1479
- summary?: string | null;
1480
- groupEntries?: WorkspaceAgentSessionDetailToolGroupEntry[];
1488
+ call: AgentToolCallVM;
1481
1489
  };
1482
- interface WorkspaceAgentSessionDetailTurn {
1483
- id: string;
1484
- userMessage: WorkspaceAgentSessionDetailMessage | null;
1485
- userMessages: WorkspaceAgentSessionDetailMessage[];
1486
- agentMessages: WorkspaceAgentSessionDetailMessage[];
1487
- toolCalls: WorkspaceAgentSessionDetailToolCall[];
1488
- toolCallCount: number;
1489
- hasFailedToolCall: boolean;
1490
- rawAgentItems?: WorkspaceAgentSessionDetailAgentItem[];
1491
- agentItems: WorkspaceAgentSessionDetailAgentItem[];
1492
- }
1493
- interface WorkspaceAgentSessionDetailViewModel {
1494
- activity: WorkspaceAgentActivityCard;
1495
- session: AgentActivitySession;
1496
- cwd: string;
1497
- workspaceRoot: string | null;
1498
- goalControls?: WorkspaceAgentSessionDetailGoalControl[];
1499
- turns: WorkspaceAgentSessionDetailTurn[];
1500
- sessionTurns?: readonly AgentActivityTurn[];
1501
- showProcessingIndicator?: boolean;
1502
- }
1503
-
1504
- type AgentApprovalPurpose = "edit-files";
1505
-
1506
- interface AgentApprovalOptionVM {
1507
- id: string;
1508
- label: string;
1509
- kind: string;
1510
- description?: string;
1511
- }
1512
- interface AgentApprovalItemVM {
1513
- kind: "approval";
1490
+ interface AgentToolGroupRowVM {
1491
+ kind: "tool-group";
1514
1492
  id: string;
1493
+ expansionKey?: string;
1515
1494
  turnId: string;
1516
- requestId: string;
1517
- callId: string;
1518
- approvalPurpose?: AgentApprovalPurpose;
1519
- title: string;
1520
- toolName: string | null;
1521
- status: string | null;
1522
- input: Record<string, unknown> | null;
1523
- options: AgentApprovalOptionVM[];
1524
- output?: Record<string, unknown> | null;
1495
+ grouped: boolean;
1496
+ calls: AgentToolCallVM[];
1497
+ summary?: string | null;
1498
+ entries: AgentToolGroupEntryVM[];
1525
1499
  occurredAtUnixMs: number | null;
1526
1500
  }
1527
1501
 
1528
- interface AgentAskUserQuestionOptionVM {
1502
+ interface AgentTurnSummaryFileVM {
1529
1503
  label: string;
1530
- description: string;
1504
+ path: string;
1505
+ fileName: string;
1506
+ directory: string | null;
1507
+ changeType: "modified" | "created" | "deleted";
1508
+ toolName: string | null;
1509
+ messageId: string;
1510
+ unifiedDiff?: string | null;
1511
+ oldString?: string | null;
1512
+ newString?: string | null;
1513
+ content?: string | null;
1514
+ occurredAtUnixMs: number | null;
1531
1515
  }
1532
- interface AgentAskUserQuestionVM {
1533
- id: string;
1534
- header: string;
1535
- question: string;
1536
- options: AgentAskUserQuestionOptionVM[];
1537
- multiSelect: boolean;
1538
- answer?: string | string[] | null;
1516
+ interface AgentTurnSummaryPatchChangeVM {
1517
+ path: string;
1518
+ changeType: "modified" | "created" | "deleted";
1519
+ unifiedDiff?: string | null;
1520
+ oldString?: string | null;
1521
+ newString?: string | null;
1522
+ content?: string | null;
1539
1523
  }
1540
- interface AgentAskUserQuestionItemVM {
1541
- kind: "ask-user";
1524
+ interface AgentTurnSummaryPatchBatchVM {
1525
+ cwd: string | null;
1526
+ toolCallId: string;
1527
+ changes: AgentTurnSummaryPatchChangeVM[];
1528
+ }
1529
+ interface AgentTurnSummaryRowVM {
1530
+ kind: "turn-summary";
1542
1531
  id: string;
1543
1532
  turnId: string;
1533
+ files: AgentTurnSummaryFileVM[];
1534
+ patchBatches?: AgentTurnSummaryPatchBatchVM[];
1535
+ fileCount: number;
1536
+ modifiedCount: number;
1537
+ createdCount: number;
1538
+ occurredAtUnixMs: number | null;
1539
+ }
1540
+
1541
+ type AgentTranscriptRowVM = AgentGeneratedImageRowVM | AgentGoalControlRowVM | AgentMessageRowVM | AgentToolGroupRowVM | AgentTurnSummaryRowVM | AgentProcessingRowVM;
1542
+
1543
+ type AgentConversationPromptVM = AgentApprovalItemVM | {
1544
+ kind: "ask-user";
1544
1545
  requestId: string;
1545
1546
  title: string;
1546
- status: string | null;
1547
1547
  questions: AgentAskUserQuestionVM[];
1548
- occurredAtUnixMs: number | null;
1548
+ } | {
1549
+ kind: "exit-plan";
1550
+ requestId: string;
1551
+ title: string;
1552
+ options: AgentApprovalOptionVM[];
1553
+ keepPlanningOptionId?: string;
1554
+ } | {
1555
+ kind: "plan-implementation";
1556
+ requestId: string;
1557
+ title: string;
1558
+ };
1559
+ interface AgentConversationVM {
1560
+ activity: WorkspaceAgentActivityCard;
1561
+ workspaceRoot: string | null;
1562
+ sourceDetail: WorkspaceAgentSessionDetailViewModel;
1563
+ rows: AgentTranscriptRowVM[];
1549
1564
  }
1550
1565
 
1551
- interface AgentGeneratedImageRowVM {
1552
- kind: "generated-image";
1553
- id: string;
1554
- turnId: string;
1555
- sourceCallId: string;
1556
- uri: string;
1557
- mimeType: string | null;
1558
- prompt: string | null;
1559
- occurredAtUnixMs: number | null;
1566
+ declare const PLAN_IMPLEMENTATION_ACTION_IMPLEMENT = "implement";
1567
+ declare const PLAN_IMPLEMENTATION_ACTION_FEEDBACK = "feedback";
1568
+ declare const PLAN_IMPLEMENTATION_ACTION_SKIP = "skip";
1569
+ interface PlanIssueExecutionProfile {
1570
+ reasoningIntensity: number;
1571
+ orchestrationIntensity: number;
1560
1572
  }
1561
-
1562
- interface AgentGoalControlRowVM {
1563
- kind: "goal-control";
1564
- id: string;
1565
- turnId: null;
1566
- action: AgentActivityGoalControlAction;
1567
- body: string;
1568
- occurredAtUnixMs: number | null;
1569
- sourceTimelineItems?: WorkspaceAgentActivityTimelineItem[];
1573
+ interface PlanIssueBudget {
1574
+ mode: "auto" | "fixed";
1575
+ tokenLimit: number;
1576
+ quotaWaterlinePercent: number;
1577
+ }
1578
+ /**
1579
+ * Remembered planning defaults chosen before a Plan turn is submitted. The
1580
+ * generated plan can still provide explicit values; otherwise these values
1581
+ * seed the mandatory Issue-decomposition review.
1582
+ */
1583
+ interface PlanIssueBudgetPreset {
1584
+ executionProfile: PlanIssueExecutionProfile;
1585
+ budget: PlanIssueBudget;
1570
1586
  }
1571
1587
 
1572
- type AgentTranscriptPresentationKind = "content" | "specific-progress" | "turn-boundary";
1573
-
1574
- interface AgentCollaborationUsageVM {
1575
- inputTokens: number;
1576
- outputTokens: number;
1588
+ interface AgentGUINodeData {
1589
+ provider: AgentGUIProvider;
1590
+ agentTargetId?: string | null;
1591
+ lastActiveAgentSessionId: string | null;
1592
+ lastActiveAgentSessionIdByAgentTargetId?: Record<string, string> | null;
1593
+ conversationCount?: number | null;
1594
+ conversationRailWidthPx?: number | null;
1595
+ conversationRailCollapsed?: boolean | null;
1596
+ composerOverrides?: AgentHostAgentSessionComposerSettings | null;
1597
+ composerOverridesByAgentTargetId?: Record<string, AgentHostAgentSessionComposerSettings | null> | null;
1598
+ composerOverridesByProvider?: Partial<Record<AgentGUIProvider, AgentHostAgentSessionComposerSettings | null>> | null;
1599
+ /** Remembered defaults for provider Plan decomposition review. */
1600
+ planIssueBudgetPreset?: PlanIssueBudgetPreset | null;
1577
1601
  }
1578
1602
  /**
1579
- * Typed projection of one durable "collaboration" timeline message (the
1580
- * daemon projects each collaboration run into the source session transcript
1581
- * with messageId `collab:<runId>`; status transitions update the same message
1582
- * in place). Pure data rendering and adoption actions live in
1583
- * `AgentCollaborationRow`.
1603
+ * Open runtime metadata reported by an Agent Target.
1604
+ *
1605
+ * Built-in providers still use AgentProvider, while externally installed ACP
1606
+ * extensions use namespaced values such as `acp:gemini`.
1584
1607
  */
1585
- interface AgentCollaborationVM {
1586
- kind: "collaboration";
1587
- runId: string;
1588
- /** Session identity of the source transcript row, for adoption commands. */
1589
- workspaceId: string | null;
1590
- agentSessionId: string | null;
1591
- mode: "consult" | "fork" | "delegate" | "handoff" | (string & {});
1592
- status: "running" | "completed" | "failed" | "canceled" | (string & {});
1593
- triggerSource: "user" | "agent" | "policy" | (string & {});
1594
- triggerReason: string | null;
1595
- targetSessionId: string | null;
1596
- targetAgentTargetId: string | null;
1597
- modelPlanId: string | null;
1598
- /** Optional display name when the daemon payload carries it. */
1599
- modelPlanName: string | null;
1600
- model: string | null;
1601
- contextScope: string | null;
1602
- resultText: string | null;
1603
- failureReason: string | null;
1604
- durationMs: number | null;
1605
- usage: AgentCollaborationUsageVM | null;
1606
- adoption: "pending" | "adopted" | "rejected" | "not_applicable" | (string & {});
1608
+ type AgentGUIProvider = string;
1609
+ /**
1610
+ * Stable identifiers for the starter entries shown below the empty new-session
1611
+ * composer. Hosts can pass these values to `AgentGUI.disabled` to hide entries
1612
+ * that should not be available in their integration.
1613
+ */
1614
+ type AgentGUIHomeSuggestionId = "meet-tutti" | "task-breakdown" | "quality-review" | "agent-interaction" | "import-session";
1615
+ type AgentGUIAgentAvailabilityStatus = "ready" | "checking" | "coming_soon" | "not_installed" | "auth_required" | "unavailable";
1616
+ type AgentGUIAgentAvailabilityAction = "install" | "login" | "refresh";
1617
+ interface AgentGUIAgentAvailability {
1618
+ status: AgentGUIAgentAvailabilityStatus;
1619
+ reason?: string | null;
1620
+ pendingAction?: AgentGUIAgentAvailabilityAction | null;
1607
1621
  }
1608
-
1609
- interface AgentMessageContentVM {
1610
- kind: "message-content";
1611
- id: string;
1612
- turnId: string;
1613
- body: string;
1614
- presentationKind: AgentTranscriptPresentationKind;
1615
- copyText?: string | null;
1616
- statusKind?: ToolCallStatusKind | null;
1617
- contentKind?: "text" | "image-grid" | "plan" | "collaboration";
1618
- isTurnFinalText?: true;
1619
- /** Typed payload for `contentKind: "collaboration"` rows. */
1620
- collaboration?: AgentCollaborationVM | null;
1621
- images?: AgentMessageImageVM[];
1622
- occurredAtUnixMs: number | null;
1623
- visibleError?: {
1624
- code: string | null;
1625
- phase: string | null;
1626
- provider: string | null;
1627
- detail: string | null;
1628
- retryable: boolean | null;
1629
- } | null;
1630
- systemNotice?: {
1631
- noticeKind: string | null;
1632
- severity: string | null;
1633
- source?: string | null;
1634
- command?: AgentActivityMessageSemantics["noticeCommand"] | null;
1635
- commandStatus?: AgentActivityMessageSemantics["noticeCommandStatus"] | null;
1636
- title: string | null;
1637
- detail: string | null;
1638
- retryable: boolean | null;
1639
- } | null;
1640
- sourceTimelineItems?: WorkspaceAgentActivityTimelineItem[];
1622
+ interface AgentGUIAgentOwner {
1623
+ userId?: string | null;
1624
+ name?: string | null;
1625
+ avatarUrl?: string | null;
1626
+ }
1627
+ /** Host-authoritative ownership classification for Agent directory entries. */
1628
+ type AgentGUIAgentOwnership = "self" | "shared";
1629
+ interface AgentGUISharedAgentQuota {
1630
+ unit: "runs" | "tokens";
1631
+ remaining: number;
1632
+ limit?: number;
1633
+ resetAt?: string | null;
1634
+ }
1635
+ interface AgentGUISharedAgentConcurrency {
1636
+ active: number;
1637
+ limit: number;
1638
+ }
1639
+ interface AgentGUISharedAgentCostQuota {
1640
+ currency: string;
1641
+ remainingMicros: number;
1642
+ limitMicros?: number;
1643
+ }
1644
+ interface AgentGUISharedAgentAllowedModel {
1645
+ modelPlanId?: string | null;
1646
+ model: string;
1647
+ }
1648
+ interface AgentGUISharedAgentPolicyPermissions {
1649
+ consult: boolean;
1650
+ review: boolean;
1651
+ delegate: boolean;
1652
+ upgrade: boolean;
1653
+ }
1654
+ /** Credential-free access snapshot supplied by the shared-Agent control plane. */
1655
+ interface AgentGUISharedAgentAccess {
1656
+ grantId: string;
1657
+ ownerUserId: string;
1658
+ ownerOnline: boolean;
1659
+ auditRequired: boolean;
1660
+ quota?: AgentGUISharedAgentQuota | null;
1661
+ concurrency?: AgentGUISharedAgentConcurrency | null;
1662
+ costQuota?: AgentGUISharedAgentCostQuota | null;
1663
+ allowedModels?: readonly AgentGUISharedAgentAllowedModel[] | null;
1664
+ policyPermissions?: AgentGUISharedAgentPolicyPermissions | null;
1665
+ }
1666
+ /**
1667
+ * Host-projected entry from the workspace `/agents` directory.
1668
+ *
1669
+ * `agentTargetId` is the only UI and launch identity. `provider` remains
1670
+ * execution metadata for provider-native composer/runtime policy and must not
1671
+ * be used to group, deduplicate, name, or select entries.
1672
+ */
1673
+ interface AgentGUIAgent {
1674
+ agentTargetId: string;
1675
+ name: string;
1676
+ iconUrl: string;
1677
+ /** Single-color artwork rendered through the conversation rail CSS mask. */
1678
+ maskIconUrl?: string | null;
1679
+ heroImageUrl?: string | null;
1680
+ description?: string | null;
1681
+ /** Host-resolved display name of the device that owns this Agent target. */
1682
+ ownerDeviceLabel?: string | null;
1683
+ owner?: AgentGUIAgentOwner | null;
1684
+ ownership?: AgentGUIAgentOwnership | null;
1685
+ sharedAccess?: AgentGUISharedAgentAccess | null;
1686
+ availability: AgentGUIAgentAvailability;
1687
+ provider: AgentGUIProvider;
1688
+ setupKind?: "target_runtime" | null;
1689
+ }
1690
+ type AgentGUIAgentDirectoryStatus = "idle" | "loading" | "ready" | "error";
1691
+ interface AgentGUIAgentDirectorySnapshot {
1692
+ agents: readonly AgentGUIAgent[];
1693
+ capturedAtUnixMs: number | null;
1694
+ error: string | null;
1695
+ status: AgentGUIAgentDirectoryStatus;
1641
1696
  }
1642
- interface AgentMessageImageVM {
1643
- id: string;
1644
- workspaceId?: string | null;
1645
- agentSessionId: string;
1646
- attachmentId?: string | null;
1647
- mimeType: string;
1648
- name?: string | null;
1649
- data?: string | null;
1650
- url?: string | null;
1651
- path?: string | null;
1697
+ interface AgentGUIAgentDirectoryPort {
1698
+ getSnapshot(): AgentGUIAgentDirectorySnapshot;
1699
+ subscribe(listener: () => void): () => void;
1652
1700
  }
1653
- interface AgentThinkingContentVM {
1654
- kind: "thinking-content";
1655
- id: string;
1656
- turnId: string;
1657
- body: string;
1658
- statusKind?: ToolCallStatusKind | null;
1659
- occurredAtUnixMs: number | null;
1660
- sourceTimelineItems?: WorkspaceAgentActivityTimelineItem[];
1701
+ interface AgentGUIAllAgentsPresentation {
1702
+ iconUrl?: string | null;
1661
1703
  }
1662
- interface AgentMessageRowVM {
1663
- kind: "message";
1664
- id: string;
1665
- turnId: string;
1666
- speaker: "user" | "assistant";
1667
- messages: AgentMessageContentVM[];
1668
- thinking: AgentThinkingContentVM[];
1669
- occurredAtUnixMs: number | null;
1704
+ interface AgentGUIAgentTargetRef {
1705
+ kind: string;
1706
+ provider: AgentGUIProvider;
1707
+ [key: string]: unknown;
1670
1708
  }
1671
-
1672
- interface AgentProcessingRowVM {
1673
- kind: "processing";
1674
- id: string;
1675
- turnId: string | null;
1676
- label?: string | null;
1677
- occurredAtUnixMs: number | null;
1709
+ interface AgentGUIAgentTargetBadge {
1710
+ iconUrl: string;
1711
+ label?: string;
1678
1712
  }
1679
-
1680
- type AgentPlanModeKind = "enter" | "exit";
1681
- interface AgentPlanModeItemVM {
1682
- itemKind: "plan-mode";
1683
- id: string;
1684
- turnId: string;
1685
- requestId?: string;
1686
- kind: AgentPlanModeKind;
1687
- title: string;
1688
- plan?: string | null;
1689
- status: string | null;
1690
- filePath?: string | null;
1691
- options?: AgentApprovalOptionVM[];
1692
- keepPlanningOptionId?: string;
1693
- occurredAtUnixMs: number | null;
1713
+ interface AgentGUIAgentTarget {
1714
+ targetId: string;
1715
+ agentTargetId?: string | null;
1716
+ provider: AgentGUIProvider;
1717
+ ref: AgentGUIAgentTargetRef;
1718
+ label: string;
1719
+ description?: string;
1720
+ iconUrl?: string | null;
1721
+ maskIconUrl?: string | null;
1722
+ heroImageUrl?: string | null;
1723
+ badge?: AgentGUIAgentTargetBadge | null;
1724
+ ownerLabel?: string;
1725
+ ownerDeviceLabel?: string;
1726
+ ownership?: AgentGUIAgentOwnership;
1727
+ availability?: AgentGUIAgentAvailability;
1728
+ disabled?: boolean;
1729
+ unavailableReason?: string;
1694
1730
  }
1695
-
1696
- type AgentTaskSubAgentStatus = "running" | "completed" | "failed" | "canceled";
1697
- type AgentTaskSubAgentActivityKind = "message" | "reasoning" | "tool";
1698
- interface AgentTaskSubAgentActivityVM {
1699
- kind: AgentTaskSubAgentActivityKind;
1700
- text: string;
1701
- atUnixMs: number | null;
1731
+ interface AgentGUIProviderRailAllPresentation {
1732
+ iconUrl?: string | null;
1702
1733
  }
1703
- interface AgentTaskSubAgentVM {
1704
- childSessionId: string;
1705
- parentToolCallId: string;
1706
- status: AgentTaskSubAgentStatus;
1707
- name: string | null;
1708
- task: string | null;
1709
- laneIndex: number;
1710
- laneCount: number;
1711
- latestActivity: string | null;
1712
- latestActivityKind: AgentTaskSubAgentActivityKind | null;
1713
- activityLog: readonly AgentTaskSubAgentActivityVM[];
1714
- activityOmittedCount: number;
1715
- queued?: boolean;
1716
- failureDetail: string | null;
1717
- startedAtUnixMs: number | null;
1718
- latestActivityAtUnixMs: number | null;
1719
- terminalAtUnixMs: number | null;
1720
- childSessions: readonly AgentTaskSubAgentVM[];
1734
+ /**
1735
+ * How the provider rail composes the target list.
1736
+ * - "catalog" (default): host-provided targets are augmented with the static
1737
+ * local provider catalog, disabled placeholders (nexight/hermes/openclaw),
1738
+ * and coming-soon markers. When no targets are provided, the full local
1739
+ * catalog is shown.
1740
+ * - "exact": the rail renders exactly the provided targets — no static catalog
1741
+ * fallback, no disabled placeholders, no coming-soon injection. When the list
1742
+ * is empty (and not loading) the host-provided empty renderer is shown. Use
1743
+ * this when the list is fully orchestrated externally (e.g. shared agents,
1744
+ * custom /agents).
1745
+ */
1746
+ type AgentGUIProviderRailMode = "catalog" | "exact";
1747
+ type AgentGUIProviderReadinessGateStatus = "checking" | "coming_soon" | "not_installed" | "auth_required" | "unavailable";
1748
+ type AgentGUIProviderReadinessGateAction = "install" | "login" | "refresh";
1749
+ interface AgentGUIProviderReadinessGate {
1750
+ status: AgentGUIProviderReadinessGateStatus;
1751
+ pendingAction?: AgentGUIProviderReadinessGateAction | null;
1752
+ onAction?: (provider: AgentGUIProvider, action: AgentGUIProviderReadinessGateAction) => void;
1721
1753
  }
1722
- interface AgentTaskStepVM {
1723
- id: string;
1724
- turnId: string;
1725
- name: string;
1726
- toolName: string | null;
1727
- status: string | null;
1728
- summary: string;
1729
- payload: Record<string, unknown> | null;
1730
- tool: AgentToolCallVM | null;
1731
- occurredAtUnixMs: number | null;
1754
+ interface Size {
1755
+ width: number;
1756
+ height: number;
1732
1757
  }
1733
- interface AgentTaskItemVM {
1734
- kind: "task";
1735
- id: string;
1736
- turnId: string;
1737
- title: string;
1738
- status: string | null;
1739
- prompt?: string | null;
1740
- delegateSessionId?: string | null;
1741
- steps: AgentTaskStepVM[];
1742
- subAgents?: AgentTaskSubAgentVM[];
1743
- result?: string | null;
1744
- resultMarkdown?: string | null;
1745
- durationMs?: number | null;
1746
- occurredAtUnixMs: number | null;
1758
+ interface Point {
1759
+ x: number;
1760
+ y: number;
1747
1761
  }
1748
-
1749
- type AgentToolRendererKind = "default" | "approval" | "plan-enter" | "plan-exit" | "ask-user" | "task" | "read" | "write" | "edit" | "bash" | "search" | "web-search" | "web-fetch" | "image-generation" | "todo-write" | "tool-search" | "skill" | "mcp";
1750
- interface AgentToolCallVM {
1751
- kind: "tool-call";
1752
- id: string;
1753
- turnId: string;
1754
- name: string;
1755
- toolName: string | null;
1756
- callType: string | null;
1757
- status: string | null;
1758
- statusKind: ToolCallStatusKind | null;
1759
- summary: string;
1760
- compactSummary: string | null;
1761
- payload: Record<string, unknown> | null;
1762
- toolState: Record<string, unknown> | null;
1763
- input: Record<string, unknown> | null;
1764
- output: Record<string, unknown> | null;
1765
- error: Record<string, unknown> | null;
1766
- metadata: Record<string, unknown> | null;
1767
- content: unknown[] | null;
1768
- locations: unknown[] | null;
1769
- rendererKind: AgentToolRendererKind;
1770
- approval: AgentApprovalItemVM | null;
1771
- planMode: AgentPlanModeItemVM | null;
1772
- askUserQuestion: AgentAskUserQuestionItemVM | null;
1773
- task: AgentTaskItemVM | null;
1774
- occurredAtUnixMs: number | null;
1775
- sourceTimelineItems?: WorkspaceAgentActivityTimelineItem[];
1762
+ interface NodeFrame {
1763
+ position: Point;
1764
+ size: Size;
1776
1765
  }
1777
1766
 
1778
- type AgentToolGroupEntryVM = {
1779
- kind: "thinking";
1780
- thinking: AgentThinkingContentVM;
1781
- } | {
1782
- kind: "tool-call";
1783
- call: AgentToolCallVM;
1784
- };
1785
- interface AgentToolGroupRowVM {
1786
- kind: "tool-group";
1787
- id: string;
1788
- expansionKey?: string;
1789
- turnId: string;
1790
- grouped: boolean;
1791
- calls: AgentToolCallVM[];
1792
- summary?: string | null;
1793
- entries: AgentToolGroupEntryVM[];
1794
- occurredAtUnixMs: number | null;
1767
+ type AgentGuiWorkbenchSessionAction = "rename" | "copy-markdown" | "copy-reference";
1768
+ interface AgentGuiWorkbenchSessionActionRequest {
1769
+ action: AgentGuiWorkbenchSessionAction;
1770
+ agentSessionId: string | null;
1771
+ sequence: number;
1795
1772
  }
1796
1773
 
1797
- interface AgentTurnSummaryFileVM {
1798
- label: string;
1774
+ type WorkspaceLinkActionSource = "agent-markdown" | "agent-file-change" | string;
1775
+ interface OpenWorkspaceFileLinkAction {
1776
+ type: "open-workspace-file";
1777
+ mode?: "reveal" | "open-directory";
1799
1778
  path: string;
1800
- fileName: string;
1801
- directory: string | null;
1802
- changeType: "modified" | "created" | "deleted";
1803
- toolName: string | null;
1804
- messageId: string;
1805
- unifiedDiff?: string | null;
1806
- oldString?: string | null;
1807
- newString?: string | null;
1808
- content?: string | null;
1809
- occurredAtUnixMs: number | null;
1779
+ directoryPath: string;
1780
+ workspaceRoot: string;
1781
+ source: WorkspaceLinkActionSource;
1782
+ prefetchedDirectoryListing?: WorkspaceFileLinkDirectoryListing | null;
1783
+ }
1784
+ interface OpenLocalAssetPreviewLinkAction {
1785
+ type: "open-local-asset-preview";
1786
+ path: string;
1787
+ name: string;
1788
+ source: WorkspaceLinkActionSource;
1789
+ }
1790
+ interface WorkspaceFileLinkDirectoryEntry {
1791
+ path: string;
1792
+ name: string;
1793
+ kind: "file" | "directory" | "unknown";
1794
+ hasChildren: boolean | null;
1795
+ sizeBytes: number | null;
1796
+ mtimeMs: number | null;
1797
+ }
1798
+ interface WorkspaceFileLinkDirectoryListing {
1799
+ workspaceId: string;
1800
+ root: string;
1801
+ directoryPath: string;
1802
+ entries: WorkspaceFileLinkDirectoryEntry[];
1803
+ }
1804
+ interface OpenWorkspaceUrlLinkAction {
1805
+ type: "open-url";
1806
+ url: string;
1807
+ source: WorkspaceLinkActionSource;
1810
1808
  }
1811
- interface AgentTurnSummaryPatchChangeVM {
1812
- path: string;
1813
- changeType: "modified" | "created" | "deleted";
1814
- unifiedDiff?: string | null;
1815
- oldString?: string | null;
1816
- newString?: string | null;
1817
- content?: string | null;
1809
+ interface OpenAgentSessionLinkAction {
1810
+ type: "open-agent-session";
1811
+ workspaceId: string;
1812
+ agentSessionId: string;
1813
+ agentTargetId?: string | null;
1814
+ source: WorkspaceLinkActionSource;
1818
1815
  }
1819
- interface AgentTurnSummaryPatchBatchVM {
1820
- cwd: string | null;
1821
- toolCallId: string;
1822
- changes: AgentTurnSummaryPatchChangeVM[];
1816
+ interface OpenWorkspaceIssueLinkAction {
1817
+ type: "open-workspace-issue";
1818
+ workspaceId: string;
1819
+ issueId: string | null;
1820
+ mode?: WorkspaceIssueMentionMode;
1821
+ outputDir?: string | null;
1822
+ runId?: string | null;
1823
+ taskId?: string | null;
1824
+ topicId?: string | null;
1825
+ source: WorkspaceLinkActionSource;
1823
1826
  }
1824
- interface AgentTurnSummaryRowVM {
1825
- kind: "turn-summary";
1826
- id: string;
1827
- turnId: string;
1828
- files: AgentTurnSummaryFileVM[];
1829
- patchBatches?: AgentTurnSummaryPatchBatchVM[];
1830
- fileCount: number;
1831
- modifiedCount: number;
1832
- createdCount: number;
1833
- occurredAtUnixMs: number | null;
1827
+ interface OpenWorkspaceAppLinkAction {
1828
+ type: "open-workspace-app";
1829
+ workspaceId: string;
1830
+ appId: string;
1831
+ conversationId?: string | null;
1832
+ messageId?: string | null;
1833
+ summaryTaskId?: string | null;
1834
+ source: WorkspaceLinkActionSource;
1835
+ }
1836
+ interface OpenCustomMentionLinkAction {
1837
+ type: "open-custom-mention";
1838
+ /** 注册表里的 kind(= mention:// providerId)。 */
1839
+ kind: string;
1840
+ href: string;
1841
+ source: WorkspaceLinkActionSource;
1834
1842
  }
1843
+ type WorkspaceLinkAction = OpenWorkspaceFileLinkAction | OpenLocalAssetPreviewLinkAction | OpenWorkspaceUrlLinkAction | OpenAgentSessionLinkAction | OpenWorkspaceIssueLinkAction | OpenWorkspaceAppLinkAction | OpenCustomMentionLinkAction;
1835
1844
 
1836
- type AgentTranscriptRowVM = AgentGeneratedImageRowVM | AgentGoalControlRowVM | AgentMessageRowVM | AgentToolGroupRowVM | AgentTurnSummaryRowVM | AgentProcessingRowVM;
1845
+ interface AgentMessageMarkdownWorkspaceAppIcon {
1846
+ appId: string;
1847
+ iconUrl: string | null;
1848
+ workspaceId?: string | null;
1849
+ }
1837
1850
 
1838
- type AgentConversationPromptVM = AgentApprovalItemVM | {
1839
- kind: "ask-user";
1840
- requestId: string;
1841
- title: string;
1842
- questions: AgentAskUserQuestionVM[];
1843
- } | {
1844
- kind: "exit-plan";
1845
- requestId: string;
1846
- title: string;
1847
- options: AgentApprovalOptionVM[];
1848
- keepPlanningOptionId?: string;
1849
- } | {
1850
- kind: "plan-implementation";
1851
- requestId: string;
1852
- title: string;
1853
- };
1854
- interface AgentConversationVM {
1855
- activity: WorkspaceAgentActivityCard;
1856
- workspaceRoot: string | null;
1857
- sourceDetail: WorkspaceAgentSessionDetailViewModel;
1858
- rows: AgentTranscriptRowVM[];
1851
+ interface AgentGUIAccountMenuState {
1852
+ user: {
1853
+ userId: string;
1854
+ name?: string | null;
1855
+ email?: string | null;
1856
+ avatar?: string | null;
1857
+ } | null;
1858
+ membershipLabel: string;
1859
+ creditsLabel: string | null;
1860
+ loading: boolean;
1861
+ error: string | null;
1862
+ partialError?: boolean;
1863
+ registrationCreditsToast?: {
1864
+ id: string;
1865
+ creditsLabel: string;
1866
+ visible: boolean;
1867
+ autoDismissMs?: number;
1868
+ onDismiss(): void;
1869
+ } | null;
1870
+ links: {
1871
+ planUrl: string;
1872
+ usageUrl: string;
1873
+ settingsUrl: string;
1874
+ };
1875
+ onOpenChange(open: boolean): void;
1876
+ onLogin(): void;
1877
+ onLogout?(): void;
1878
+ onSettings?(): void;
1879
+ onOpenExternal(url: string): void;
1859
1880
  }
1860
1881
 
1882
+ type AgentSessionCommand = AgentHostAgentSessionCommand;
1883
+ type AgentSessionComposerSettings = AgentHostAgentSessionComposerSettings;
1884
+ type AgentSessionPermissionConfig = AgentHostAgentSessionPermissionConfig;
1885
+ type AgentSessionReasoningEffort = AgentHostAgentSessionReasoningEffort;
1886
+ type AgentSessionSpeed = AgentHostAgentSessionSpeed;
1887
+
1861
1888
  type AgentFileMentionKind = "file" | "directory" | "unknown";
1862
1889
  type AgentMentionFileNavigationAction = "agent-generated-folder" | "agent-generated-folder-back" | "workspace-folder" | "workspace-folder-back";
1863
1890
  type AgentMentionScope = "my_sessions" | "collab_sessions";
@@ -2078,7 +2105,7 @@ type AgentCapabilityUse = "browserUse" | "computerUse";
2078
2105
 
2079
2106
  interface AgentSlashCommandCapability {
2080
2107
  aliases?: readonly string[];
2081
- capability: AgentCapabilityUse;
2108
+ capability: AgentCapabilityUse | "tutti";
2082
2109
  kind: "capability";
2083
2110
  name: string;
2084
2111
  }
@@ -2301,6 +2328,11 @@ interface AgentGUIComposerViewModel {
2301
2328
  /** Provider goal exposes a real paused state and pause/resume controls. */
2302
2329
  goalPauseSupported: boolean;
2303
2330
  canSubmit: boolean;
2331
+ isTuttiModeActive: boolean;
2332
+ isTuttiModeUpdating: boolean;
2333
+ /** Effective Tutti orchestration intensity (0-100) for the budget popup. */
2334
+ tuttiModeOrchestrationIntensity: number;
2335
+ tuttiModeUpdateStatus: "idle" | "pending_create" | "updating" | "failed" | "uncertain";
2304
2336
  composerSettings: AgentGUIComposerSettingsVM;
2305
2337
  queuedPrompts: AgentGUIQueuedPromptVM[];
2306
2338
  queueStatus: AgentGUIQueueStatus;
@@ -3259,6 +3291,223 @@ declare const agentGuiI18nResources: {
3259
3291
  readonly removeAgentFromSidebar: "Remove {{agent}} from sidebar";
3260
3292
  readonly addAgentToSidebar: "Add {{agent}} to sidebar";
3261
3293
  readonly dragAgentToReorder: "Drag {{agent}} to reorder";
3294
+ readonly planCardTitle: "Plan";
3295
+ readonly planCardCopy: "Copy plan";
3296
+ readonly copyCode: "Copy code";
3297
+ readonly planCardExpand: "Expand plan";
3298
+ readonly planCardCollapse: "Collapse plan";
3299
+ readonly planImplementationLead: "Implement this plan?";
3300
+ readonly planImplementationConfirm: "Yes, implement this plan";
3301
+ readonly planImplementationFeedbackPlaceholder: "No — tell the agent how to adjust the approach";
3302
+ readonly planImplementationSend: "Send";
3303
+ readonly planImplementationSkip: "Stay in Plan Mode";
3304
+ readonly noRunningResponse: "No running response to stop.";
3305
+ readonly composerTextMenu: "Composer text actions";
3306
+ readonly pastedTextFilesHeader: "Referenced pasted text files:";
3307
+ readonly pastedTextFileLine: "- pasted text file \"{{preview}}\": {{path}}. Read this file before continuing.";
3308
+ readonly pastedTextAttachmentTitle: "Pasted text";
3309
+ readonly pastedTextAttachmentFailed: "Pasted text couldn't be saved";
3310
+ readonly pastedTextRestoreToComposer: "Show in text field";
3311
+ readonly copyMessage: "Copy message";
3312
+ readonly copyImage: "Copy image";
3313
+ readonly messageCopied: "Copied";
3314
+ readonly promptTipsPrefix: "Tips: ";
3315
+ readonly reviewPicker: {
3316
+ readonly title: "Code review";
3317
+ readonly targetLabel: "What to review";
3318
+ readonly searchPlaceholder: "Search";
3319
+ readonly noResults: "No matches";
3320
+ readonly uncommitted: "Uncommitted changes";
3321
+ readonly baseBranch: "Compare against a branch";
3322
+ readonly commit: "A specific commit";
3323
+ readonly custom: "Custom instructions";
3324
+ readonly branchLabel: "Base branch";
3325
+ readonly branchPlaceholder: "Select a branch";
3326
+ readonly branchLoading: "Loading branches…";
3327
+ readonly branchEmpty: "No branches found";
3328
+ readonly commitPlaceholder: "Commit SHA";
3329
+ readonly customPlaceholder: "Describe what to review";
3330
+ readonly submit: "Start review";
3331
+ readonly cancel: "Cancel";
3332
+ };
3333
+ readonly promptTips: {
3334
+ readonly setWorkspace: {
3335
+ readonly label: "Set the workspace";
3336
+ readonly prompt: "Let the Agent know where to read files, run commands, and understand code.";
3337
+ };
3338
+ readonly useIssue: {
3339
+ readonly label: "Use Tasks well";
3340
+ readonly prompt: "Put requirements, constraints, and acceptance criteria in a Task so the Agent can work toward a clear target.";
3341
+ };
3342
+ readonly mapCurrentState: {
3343
+ readonly label: "Map the current state";
3344
+ readonly prompt: "When the next step is unclear, ask the Agent to summarize status, risks, and what to do next.";
3345
+ };
3346
+ readonly continueRecentSession: {
3347
+ readonly label: "Continue recent work";
3348
+ readonly prompt: "When resuming, have the Agent recap recent progress, unfinished work, and blockers first.";
3349
+ };
3350
+ readonly referenceOtherAgents: {
3351
+ readonly label: "Reference other Agent conversations";
3352
+ readonly prompt: "Make context handoffs more complete and reduce lost details.";
3353
+ };
3354
+ readonly controlPermissions: {
3355
+ readonly label: "Control permissions";
3356
+ readonly prompt: "Use Ask for approval when you want caution, then switch to higher access once file changes are expected.";
3357
+ };
3358
+ };
3359
+ readonly empty: "What can {{provider}} help you with?";
3360
+ readonly homeSuggestionsClose: "Close suggestions";
3361
+ readonly homeSuggestions: {
3362
+ readonly about: {
3363
+ readonly title: "Meet Tutti";
3364
+ readonly prompt: "Tell me what Tutti can help me do";
3365
+ };
3366
+ readonly breakdown: {
3367
+ readonly title: "Task breakdown";
3368
+ readonly taskCenterLabel: "Task management";
3369
+ readonly prompt: "Use {{taskCenterMention}} to help me break down the task, topic { enter here }";
3370
+ };
3371
+ readonly review: {
3372
+ readonly title: "Quality review";
3373
+ readonly prompt: "Have { @agent } review the output quality of { @agent session }";
3374
+ };
3375
+ readonly interaction: {
3376
+ readonly title: "Agent interaction";
3377
+ readonly prompt: "Have { @agent } and { @agent } work together to { do something }, topic { enter here }";
3378
+ };
3379
+ readonly import: {
3380
+ readonly title: "Import session";
3381
+ };
3382
+ };
3383
+ readonly conversations: "Sessions";
3384
+ readonly newConversation: "New session";
3385
+ readonly accountMenuTitle: "Tutti Agent";
3386
+ readonly accountMenuMember: "Membership";
3387
+ readonly accountMenuUpgrade: "Upgrade";
3388
+ readonly accountMenuCreditsBalance: "Credits";
3389
+ readonly accountMenuAccountCenter: "Account center";
3390
+ readonly accountMenuSettings: "Settings";
3391
+ readonly accountMenuFree: "Free";
3392
+ readonly accountMenuSignIn: "Sign in";
3393
+ readonly accountMenuSignOut: "Sign out";
3394
+ readonly accountMenuLoading: "Loading";
3395
+ readonly accountMenuUnavailable: "--";
3396
+ readonly accountMenuDataUnavailable: "Some account data is unavailable";
3397
+ readonly accountRewardToastTitle: "New user credits";
3398
+ readonly accountRewardToastCreditsUnit: "credits";
3399
+ readonly accountRewardToastDescription: "Added to account balance";
3400
+ readonly accountRewardToastClose: "Close credits reward notification";
3401
+ readonly agentConfig: "Check & Settings";
3402
+ readonly agentSettingsMenu: "Settings";
3403
+ readonly agentEnvSetup: "Environment Check";
3404
+ readonly noConversations: "No sessions yet";
3405
+ readonly emptyProjectConversations: "No chats yet";
3406
+ readonly agentsEmpty: "No agents are available";
3407
+ readonly conversationFilterAll: "All";
3408
+ readonly slashStatusTitle: "Status";
3409
+ readonly slashStatusSession: "Session";
3410
+ readonly slashStatusBaseUrl: "Base URL";
3411
+ readonly slashStatusContext: "Context";
3412
+ readonly slashStatusLimits: "Usage Limits";
3413
+ readonly slashStatusAccount: "Account";
3414
+ readonly slashStatusClose: "Close";
3415
+ readonly slashStatusFiveHourLimit: "5h limit";
3416
+ readonly slashStatusWeeklyLimit: "7d limit";
3417
+ readonly slashStatusLimitPercentLeft: "{{percent}}% left";
3418
+ readonly slashStatusLimitReset: "resets {{reset}}";
3419
+ readonly slashStatusContextValue: "{{percentLeft}}% left ({{usedTokens}} used / {{totalTokens}})";
3420
+ readonly slashStatusContextUnavailable: "Context usage unavailable";
3421
+ readonly slashStatusLimitsUnavailable: "Rate limits unavailable from this agent";
3422
+ readonly slashStatusEmptyValue: "—";
3423
+ readonly slashStatusUsageJustUpdated: "Updated just now";
3424
+ readonly slashStatusUsageMinutesAgo: "Updated {{count}}m ago";
3425
+ readonly slashStatusUsageHoursAgo: "Updated {{count}}h ago";
3426
+ readonly slashStatusUsageUpdating: "Updating…";
3427
+ readonly slashStatusUsageRefreshFailed: "Refresh failed";
3428
+ readonly slashStatusUsageRefreshAria: "Refresh usage";
3429
+ readonly usageChipLabel: "Context {{percent}}%";
3430
+ readonly usageTooltipLabel: "Context usage";
3431
+ readonly usagePopoverTitle: "Context Usage";
3432
+ readonly usageContextWindowLabel: "Context window";
3433
+ readonly usageTokensLabel: "Tokens";
3434
+ readonly usageLimitsLabel: "Limits";
3435
+ readonly usageCompactAction: "Compact";
3436
+ readonly queuedLabel: "Queued";
3437
+ readonly queuePausedByUserLabel: "The queue is paused because you interrupted the current response.";
3438
+ readonly sendQueuedPromptNext: "Send next";
3439
+ readonly editQueuedPrompt: "Edit";
3440
+ readonly deleteQueuedPrompt: "Delete";
3441
+ readonly queuedPromptMoreActions: "More queued prompt actions";
3442
+ readonly stop: "Stop";
3443
+ readonly stopping: "Stopping...";
3444
+ readonly planModeLabel: "Plan Mode";
3445
+ readonly normalModeLabel: "Normal";
3446
+ readonly normalModeDescription: "Execute the request directly";
3447
+ readonly tuttiModeLabel: "Tutti";
3448
+ readonly tuttiModeDescription: "Ask the agent to prefer Tutti's native workflow capabilities";
3449
+ readonly tuttiModeRemove: "Turn off Tutti mode";
3450
+ readonly tuttiBudgetTitle: "Tutti intensity";
3451
+ readonly tuttiBudgetIntensityLabel: "Intensity";
3452
+ readonly tuttiBudgetIntensityMin: "Minimal";
3453
+ readonly tuttiBudgetIntensityMax: "Maximal";
3454
+ readonly tuttiBudgetConfirm: "Confirm";
3455
+ readonly tuttiBudgetCancel: "Cancel";
3456
+ readonly tuttiModeUpdateFailed: "Tutti mode couldn't be updated. Try again.";
3457
+ readonly tuttiModeUpdateUncertain: "Tutti mode is still being reconciled. Try again after it finishes.";
3458
+ readonly tuttiModePlan: {
3459
+ readonly mode: "Tutti mode plan";
3460
+ readonly taskReview: "Plan review";
3461
+ readonly pending: "Needs review";
3462
+ readonly cancel: "Cancel plan";
3463
+ readonly reviewHint: "Send to accept · type feedback to request changes";
3464
+ readonly reviewHintReplan: "Intensity changed · send to re-plan at the new intensity";
3465
+ readonly sendAccept: "Accept plan";
3466
+ readonly sendRequestChanges: "Request changes";
3467
+ readonly replanFeedback: "Intensity was adjusted from {{from}} to {{to}}. Re-plan at the new intensity: rescale the task decomposition granularity and each task's model/reasoning tier.";
3468
+ readonly replanFeedbackSuffix: " (Intensity was adjusted to {{to}}; re-plan accordingly.)";
3469
+ readonly tasks: "Tasks";
3470
+ readonly priority: "Priority";
3471
+ readonly priorityHigh: "High";
3472
+ readonly priorityMedium: "Medium";
3473
+ readonly priorityLow: "Low";
3474
+ readonly agentTarget: "Agent";
3475
+ readonly model: "Model";
3476
+ readonly permissionMode: "Permission mode";
3477
+ readonly reasoningEffort: "Reasoning effort";
3478
+ readonly parallelizable: "Parallel";
3479
+ readonly autoAccept: "Auto-accept";
3480
+ readonly assignmentOptionsLoading: "Loading options...";
3481
+ readonly notSpecified: "Not specified";
3482
+ readonly loadFailed: "Tutti mode plans could not be loaded";
3483
+ readonly retry: "Try again";
3484
+ readonly issueOpen: "Open Issue";
3485
+ readonly issueStopExecution: "Stop";
3486
+ readonly issueListView: "List";
3487
+ readonly issueBoardView: "Board";
3488
+ readonly issueSummary: "{{done}}/{{total}} done · {{running}} running";
3489
+ readonly issueDependencies: "Depends";
3490
+ readonly issueAccept: "Accept";
3491
+ readonly issueRework: "Rework";
3492
+ readonly issueStageParallel: "Stage {{index}} · parallel ×{{count}}";
3493
+ readonly issueStageSequential: "Stage {{index}} · sequential";
3494
+ readonly issueStatusNotStarted: "Todo";
3495
+ readonly issueStatusRunning: "Running";
3496
+ readonly issueStatusPendingAcceptance: "In review";
3497
+ readonly issueStatusCompleted: "Done";
3498
+ readonly issueStatusFailed: "Failed";
3499
+ readonly issueStatusCanceled: "Canceled";
3500
+ readonly issueStripRunning: "{{count}} subtasks running";
3501
+ readonly issueStripPending: "{{count}} awaiting acceptance";
3502
+ readonly issueStripFailed: "{{count}} failed";
3503
+ readonly issueStripDone: "{{done}}/{{total}} done";
3504
+ readonly issueStripJump: "View the subtask board";
3505
+ readonly issueCreateFailed: "The approved plan could not create its Issue: {{message}}. Ask the Agent to revise the plan.";
3506
+ };
3507
+ readonly planModeDescription: "Plan first, then implement or break down into an Issue";
3508
+ readonly planModeOnLabel: "On";
3509
+ readonly planModeOffLabel: "Off";
3510
+ readonly planUnavailable: "Plan unavailable";
3262
3511
  readonly initialPlaceholder: "Type @ to reference sessions, files, tasks, and apps";
3263
3512
  readonly followupPlaceholder: "Request follow-up changes from {{provider}}";
3264
3513
  readonly installRequiredPlaceholder: "Connect {{provider}} to send messages";
@@ -3481,160 +3730,6 @@ declare const agentGuiI18nResources: {
3481
3730
  readonly professionalLongRunning: "Optimized for professional work and long-running agents";
3482
3731
  };
3483
3732
  readonly permissionLabel: "Run permissions";
3484
- readonly planModeLabel: "Plan Mode";
3485
- readonly planModeOnLabel: "On";
3486
- readonly planModeOffLabel: "Off";
3487
- readonly planUnavailable: "Plan unavailable";
3488
- readonly queuedLabel: "Queued";
3489
- readonly queuePausedByUserLabel: "The queue is paused because you interrupted the current response.";
3490
- readonly sendQueuedPromptNext: "Send next";
3491
- readonly editQueuedPrompt: "Edit";
3492
- readonly deleteQueuedPrompt: "Delete";
3493
- readonly queuedPromptMoreActions: "More queued prompt actions";
3494
- readonly stop: "Stop";
3495
- readonly stopping: "Stopping...";
3496
- readonly slashStatusTitle: "Status";
3497
- readonly slashStatusSession: "Session";
3498
- readonly slashStatusBaseUrl: "Base URL";
3499
- readonly slashStatusContext: "Context";
3500
- readonly slashStatusLimits: "Usage Limits";
3501
- readonly slashStatusAccount: "Account";
3502
- readonly slashStatusClose: "Close";
3503
- readonly slashStatusFiveHourLimit: "5h limit";
3504
- readonly slashStatusWeeklyLimit: "7d limit";
3505
- readonly slashStatusLimitPercentLeft: "{{percent}}% left";
3506
- readonly slashStatusLimitReset: "resets {{reset}}";
3507
- readonly slashStatusContextValue: "{{percentLeft}}% left ({{usedTokens}} used / {{totalTokens}})";
3508
- readonly slashStatusContextUnavailable: "—";
3509
- readonly slashStatusLimitsUnavailable: "Rate limits unavailable from this agent";
3510
- readonly slashStatusEmptyValue: "—";
3511
- readonly slashStatusUsageJustUpdated: "Updated just now";
3512
- readonly slashStatusUsageMinutesAgo: "Updated {{count}}m ago";
3513
- readonly slashStatusUsageHoursAgo: "Updated {{count}}h ago";
3514
- readonly slashStatusUsageUpdating: "Updating…";
3515
- readonly slashStatusUsageRefreshFailed: "Refresh failed";
3516
- readonly slashStatusUsageRefreshAria: "Refresh usage";
3517
- readonly usageChipLabel: "Context {{percent}}%";
3518
- readonly usageTooltipLabel: "Context usage";
3519
- readonly usagePopoverTitle: "Context Usage";
3520
- readonly usageContextWindowLabel: "Context window";
3521
- readonly usageTokensLabel: "Tokens";
3522
- readonly usageLimitsLabel: "Limits";
3523
- readonly usageCompactAction: "Compact";
3524
- readonly planCardTitle: "Plan";
3525
- readonly planCardCopy: "Copy plan";
3526
- readonly copyCode: "Copy code";
3527
- readonly planCardExpand: "Expand plan";
3528
- readonly planCardCollapse: "Collapse plan";
3529
- readonly planImplementationLead: "Implement this plan?";
3530
- readonly planImplementationConfirm: "Yes, implement this plan";
3531
- readonly planImplementationFeedbackPlaceholder: "No — tell the agent how to adjust the approach";
3532
- readonly planImplementationSend: "Send";
3533
- readonly planImplementationSkip: "Stay in Plan Mode";
3534
- readonly noRunningResponse: "No running response to stop.";
3535
- readonly composerTextMenu: "Composer text actions";
3536
- readonly pastedTextFilesHeader: "Referenced pasted text files:";
3537
- readonly pastedTextFileLine: "- pasted text file \"{{preview}}\": {{path}}. Read this file before continuing.";
3538
- readonly pastedTextAttachmentTitle: "Pasted text";
3539
- readonly pastedTextAttachmentFailed: "Pasted text couldn't be saved";
3540
- readonly pastedTextRestoreToComposer: "Show in text field";
3541
- readonly copyMessage: "Copy message";
3542
- readonly copyImage: "Copy image";
3543
- readonly messageCopied: "Copied";
3544
- readonly promptTipsPrefix: "Tips: ";
3545
- readonly reviewPicker: {
3546
- readonly title: "Code review";
3547
- readonly targetLabel: "What to review";
3548
- readonly searchPlaceholder: "Search";
3549
- readonly noResults: "No matches";
3550
- readonly uncommitted: "Uncommitted changes";
3551
- readonly baseBranch: "Compare against a branch";
3552
- readonly commit: "A specific commit";
3553
- readonly custom: "Custom instructions";
3554
- readonly branchLabel: "Base branch";
3555
- readonly branchPlaceholder: "Select a branch";
3556
- readonly branchLoading: "Loading branches…";
3557
- readonly branchEmpty: "No branches found";
3558
- readonly commitPlaceholder: "Commit SHA";
3559
- readonly customPlaceholder: "Describe what to review";
3560
- readonly submit: "Start review";
3561
- readonly cancel: "Cancel";
3562
- };
3563
- readonly promptTips: {
3564
- readonly setWorkspace: {
3565
- readonly label: "Set the workspace";
3566
- readonly prompt: "Let the Agent know where to read files, run commands, and understand code.";
3567
- };
3568
- readonly useIssue: {
3569
- readonly label: "Use Tasks well";
3570
- readonly prompt: "Put requirements, constraints, and acceptance criteria in a Task so the Agent can work toward a clear target.";
3571
- };
3572
- readonly mapCurrentState: {
3573
- readonly label: "Map the current state";
3574
- readonly prompt: "When the next step is unclear, ask the Agent to summarize status, risks, and what to do next.";
3575
- };
3576
- readonly continueRecentSession: {
3577
- readonly label: "Continue recent work";
3578
- readonly prompt: "When resuming, have the Agent recap recent progress, unfinished work, and blockers first.";
3579
- };
3580
- readonly referenceOtherAgents: {
3581
- readonly label: "Reference other Agent conversations";
3582
- readonly prompt: "Make context handoffs more complete and reduce lost details.";
3583
- };
3584
- readonly controlPermissions: {
3585
- readonly label: "Control permissions";
3586
- readonly prompt: "Use Ask for approval when you want caution, then switch to higher access once file changes are expected.";
3587
- };
3588
- };
3589
- readonly empty: "What can {{provider}} help you with?";
3590
- readonly homeSuggestionsClose: "Close suggestions";
3591
- readonly homeSuggestions: {
3592
- readonly about: {
3593
- readonly title: "Meet Tutti";
3594
- readonly prompt: "Tell me what Tutti can help me do";
3595
- };
3596
- readonly breakdown: {
3597
- readonly title: "Task breakdown";
3598
- readonly taskCenterLabel: "Task management";
3599
- readonly prompt: "Use {{taskCenterMention}} to help me break down the task, topic { enter here }";
3600
- };
3601
- readonly review: {
3602
- readonly title: "Quality review";
3603
- readonly prompt: "Have { @agent } review the output quality of { @agent session }";
3604
- };
3605
- readonly interaction: {
3606
- readonly title: "Agent interaction";
3607
- readonly prompt: "Have { @agent } and { @agent } work together to { do something }, topic { enter here }";
3608
- };
3609
- readonly import: {
3610
- readonly title: "Import session";
3611
- };
3612
- };
3613
- readonly conversations: "Sessions";
3614
- readonly newConversation: "New session";
3615
- readonly accountMenuTitle: "Tutti Agent";
3616
- readonly accountMenuMember: "Membership";
3617
- readonly accountMenuUpgrade: "Upgrade";
3618
- readonly accountMenuCreditsBalance: "Credits";
3619
- readonly accountMenuAccountCenter: "Account center";
3620
- readonly accountMenuSettings: "Settings";
3621
- readonly accountMenuFree: "Free";
3622
- readonly accountMenuSignIn: "Sign in";
3623
- readonly accountMenuSignOut: "Sign out";
3624
- readonly accountMenuLoading: "Loading";
3625
- readonly accountMenuUnavailable: "--";
3626
- readonly accountMenuDataUnavailable: "Some account data is unavailable";
3627
- readonly accountRewardToastTitle: "New user credits";
3628
- readonly accountRewardToastCreditsUnit: "credits";
3629
- readonly accountRewardToastDescription: "Added to account balance";
3630
- readonly accountRewardToastClose: "Close credits reward notification";
3631
- readonly agentConfig: "Check & Settings";
3632
- readonly agentSettingsMenu: "Settings";
3633
- readonly agentEnvSetup: "Environment Check";
3634
- readonly noConversations: "No sessions yet";
3635
- readonly emptyProjectConversations: "No chats yet";
3636
- readonly agentsEmpty: "No agents are available";
3637
- readonly conversationFilterAll: "All";
3638
3733
  };
3639
3734
  readonly workspaceInsights: {
3640
3735
  readonly runtimeTitle: "Runtime";
@@ -6206,6 +6301,69 @@ declare const agentGuiI18nResources: {
6206
6301
  };
6207
6302
  readonly permissionLabel: "运行权限";
6208
6303
  readonly planModeLabel: "计划模式";
6304
+ readonly normalModeLabel: "普通";
6305
+ readonly normalModeDescription: "直接执行请求";
6306
+ readonly tuttiModeLabel: "Tutti";
6307
+ readonly tuttiModeDescription: "提示 Agent 优先使用 Tutti 原生工作流能力";
6308
+ readonly tuttiModeRemove: "关闭 Tutti mode";
6309
+ readonly tuttiBudgetTitle: "Tutti 强度";
6310
+ readonly tuttiBudgetIntensityLabel: "强度";
6311
+ readonly tuttiBudgetIntensityMin: "最低";
6312
+ readonly tuttiBudgetIntensityMax: "最高";
6313
+ readonly tuttiBudgetConfirm: "确认";
6314
+ readonly tuttiBudgetCancel: "取消";
6315
+ readonly tuttiModeUpdateFailed: "Tutti 模式更新失败,请重试";
6316
+ readonly tuttiModeUpdateUncertain: "Tutti 模式状态仍在确认中,请稍后重试";
6317
+ readonly tuttiModePlan: {
6318
+ readonly mode: "Tutti mode plan";
6319
+ readonly taskReview: "计划确认";
6320
+ readonly pending: "待确认";
6321
+ readonly cancel: "取消计划";
6322
+ readonly reviewHint: "直接发送即接受 · 输入反馈后发送即请求修改";
6323
+ readonly reviewHintReplan: "强度已调整 · 发送即按新强度重新规划";
6324
+ readonly sendAccept: "接受计划";
6325
+ readonly sendRequestChanges: "请求修改";
6326
+ readonly replanFeedback: "强度已从 {{from}} 调整为 {{to}}。请按新强度重新规划:调整任务拆解粒度与各任务的模型/推理档位。";
6327
+ readonly replanFeedbackSuffix: "(强度已调整为 {{to}},请一并按新强度重新规划。)";
6328
+ readonly tasks: "任务";
6329
+ readonly priority: "优先级";
6330
+ readonly priorityHigh: "高";
6331
+ readonly priorityMedium: "中";
6332
+ readonly priorityLow: "低";
6333
+ readonly agentTarget: "Agent";
6334
+ readonly model: "模型";
6335
+ readonly permissionMode: "权限模式";
6336
+ readonly reasoningEffort: "推理强度";
6337
+ readonly parallelizable: "可并行";
6338
+ readonly autoAccept: "自动验收";
6339
+ readonly assignmentOptionsLoading: "选项加载中...";
6340
+ readonly notSpecified: "未指定";
6341
+ readonly loadFailed: "无法加载 Tutti mode plan";
6342
+ readonly retry: "重试";
6343
+ readonly issueOpen: "打开 Issue";
6344
+ readonly issueStopExecution: "停止";
6345
+ readonly issueListView: "列表";
6346
+ readonly issueBoardView: "看板";
6347
+ readonly issueSummary: "{{done}}/{{total}} 已完成 · {{running}} 运行中";
6348
+ readonly issueDependencies: "依赖";
6349
+ readonly issueAccept: "验收";
6350
+ readonly issueRework: "重做";
6351
+ readonly issueStageParallel: "阶段 {{index}} · 并行 ×{{count}}";
6352
+ readonly issueStageSequential: "阶段 {{index}} · 串行";
6353
+ readonly issueStatusNotStarted: "待开始";
6354
+ readonly issueStatusRunning: "运行中";
6355
+ readonly issueStatusPendingAcceptance: "待验收";
6356
+ readonly issueStatusCompleted: "已完成";
6357
+ readonly issueStatusFailed: "失败";
6358
+ readonly issueStatusCanceled: "已取消";
6359
+ readonly issueStripRunning: "{{count}} 个子任务进行中";
6360
+ readonly issueStripPending: "{{count}} 待验收";
6361
+ readonly issueStripFailed: "{{count}} 失败";
6362
+ readonly issueStripDone: "{{done}}/{{total}} 已完成";
6363
+ readonly issueStripJump: "查看子任务面板";
6364
+ readonly issueCreateFailed: "已核准的计划未能创建 Issue:{{message}}。请让 Agent 修订计划。";
6365
+ };
6366
+ readonly planModeDescription: "先生成计划,再实施或拆解为 Issue";
6209
6367
  readonly planModeOnLabel: "开启";
6210
6368
  readonly planModeOffLabel: "关闭";
6211
6369
  readonly planUnavailable: "规划模式不可用";
@@ -7930,6 +8088,11 @@ interface AgentComposerReferenceProvenanceFilter {
7930
8088
  }
7931
8089
  interface AgentComposerSubmitOptions {
7932
8090
  requiredSettingsPatch?: AgentActivitySubmitSettingsPatch;
8091
+ capabilityRefs?: readonly AgentComposerCapabilityReference[];
8092
+ }
8093
+ interface AgentComposerCapabilityReference {
8094
+ capability: "tutti";
8095
+ source: "slash_command";
7933
8096
  }
7934
8097
  interface AgentComposerProps {
7935
8098
  workspaceId: string;
@@ -7949,6 +8112,10 @@ interface AgentComposerProps {
7949
8112
  disabled: boolean;
7950
8113
  disabledReason?: string | null;
7951
8114
  submitDisabled: boolean;
8115
+ /** Canonical engine projection of the independent TuttiModeActivation. */
8116
+ tuttiModeActive?: boolean;
8117
+ /** Blocks submission/removal while activation CAS or creation is unresolved. */
8118
+ tuttiModeUpdating?: boolean;
7952
8119
  placeholder: string;
7953
8120
  composerSettings: AgentGUIComposerSettingsVM;
7954
8121
  queueStatus?: AgentGUIQueueStatus;
@@ -7988,6 +8155,13 @@ interface AgentComposerProps {
7988
8155
  handoffMenuLabel?: string;
7989
8156
  labels: {
7990
8157
  send: string;
8158
+ /**
8159
+ * Plan-review send copy: with an empty-send override active the send
8160
+ * button reads sendAccept on an empty draft and sendRequestChanges once
8161
+ * feedback is typed, so the composer decision semantics stay legible.
8162
+ */
8163
+ sendAccept?: string;
8164
+ sendRequestChanges?: string;
7991
8165
  modelLabel: string;
7992
8166
  modelSelectionLabel: string;
7993
8167
  modelContextWindowSuffix: string;
@@ -8026,6 +8200,15 @@ interface AgentComposerProps {
8026
8200
  professionalLongRunning: string;
8027
8201
  };
8028
8202
  planModeLabel: string;
8203
+ tuttiModeLabel: string;
8204
+ tuttiModeDescription: string;
8205
+ tuttiBudgetTitle: string;
8206
+ tuttiBudgetIntensityLabel: string;
8207
+ tuttiBudgetIntensityMin: string;
8208
+ tuttiBudgetIntensityMax: string;
8209
+ tuttiBudgetConfirm: string;
8210
+ tuttiBudgetCancel: string;
8211
+ planModeDescription?: string;
8029
8212
  planModeOnLabel: string;
8030
8213
  planModeOffLabel: string;
8031
8214
  planUnavailable: string;
@@ -8182,6 +8365,7 @@ interface AgentComposerProps {
8182
8365
  computerUse?: boolean;
8183
8366
  permissionModeId?: string | null;
8184
8367
  }) => void;
8368
+ onTuttiModeChange?: (active: boolean) => void;
8185
8369
  capabilityMenuState?: AgentComposerCapabilityMenuState;
8186
8370
  capabilityControlsReadOnly?: boolean;
8187
8371
  onCapabilitySettingsRequest?: (capability: AgentComposerCapabilitySettingsTarget) => void;
@@ -8189,7 +8373,19 @@ interface AgentComposerProps {
8189
8373
  onSlashStatusClose?: () => void;
8190
8374
  onSlashStatusRefresh?: () => void;
8191
8375
  onSubmit: (content: AgentPromptContentBlock[], displayPrompt?: string, options?: AgentComposerSubmitOptions) => void;
8192
- onSubmitGuidance?: (content: AgentPromptContentBlock[], displayPrompt?: string) => void;
8376
+ /**
8377
+ * When set, an empty-draft send is enabled and routed here instead of being
8378
+ * blocked (e.g. Tutti plan review: empty send = accept). Typed sends keep
8379
+ * flowing through onSubmit.
8380
+ */
8381
+ onSubmitEmpty?: () => void;
8382
+ /**
8383
+ * Overrides the empty-draft send button copy while the empty-send override
8384
+ * is active (e.g. plan review with a diverged intensity reads "Request
8385
+ * changes" instead of "Accept plan"). Falls back to labels.sendAccept.
8386
+ */
8387
+ emptySubmitLabel?: string;
8388
+ onSubmitGuidance?: (content: AgentPromptContentBlock[], displayPrompt?: string, options?: AgentComposerSubmitOptions) => void;
8193
8389
  onSendQueuedPromptNext: (queuedPromptId: string) => void;
8194
8390
  onRemoveQueuedPrompt: (queuedPromptId: string) => void;
8195
8391
  onEditQueuedPrompt: (queuedPromptId: string) => void;
@@ -8212,7 +8408,7 @@ interface AgentComposerProps {
8212
8408
  onRequestGitBranches?: AgentComposerGitBranchLoader | null;
8213
8409
  referenceProvenanceFilter?: AgentComposerReferenceProvenanceFilter | null;
8214
8410
  }
8215
- type AgentComposerCapabilitySettingsTarget = AgentSlashCommandCapability["capability"];
8411
+ type AgentComposerCapabilitySettingsTarget = Exclude<AgentSlashCommandCapability["capability"], "tutti">;
8216
8412
  interface AgentComposerCapabilityMenuState {
8217
8413
  browserUse?: {
8218
8414
  connectionMode?: "autoConnect" | "isolated" | null;
@@ -8221,6 +8417,9 @@ interface AgentComposerCapabilityMenuState {
8221
8417
  authorization?: AgentComposerComputerUseAuthorizationState | null;
8222
8418
  installed?: boolean | null;
8223
8419
  };
8420
+ tuttiMode?: {
8421
+ enabled?: boolean | null;
8422
+ };
8224
8423
  }
8225
8424
  type AgentComposerComputerUseAuthorizationState = "authorized" | "needs-authorization" | "unknown";
8226
8425
  interface AgentComposerGitBranches {
@@ -8271,6 +8470,256 @@ interface OpenAgentEnvPanelInput {
8271
8470
  focus?: AgentEnvPanelFocus | null;
8272
8471
  }
8273
8472
 
8473
+ type TuttiModePlanWorkflowStatus = "pending_review" | "in_progress" | "accepted" | "rejected" | "completed" | "failed" | "canceled";
8474
+ type TuttiModePlanCheckpointKind = "configuration_review" | "task_review";
8475
+ type TuttiModePlanCheckpointStatus = "pending" | "accepted" | "rejected" | "superseded" | "canceled";
8476
+ interface TuttiModePlanReviewSnapshot {
8477
+ workflow: TuttiModePlanWorkflow;
8478
+ revisions: TuttiModePlanRevision[];
8479
+ checkpoints: TuttiModePlanCheckpoint[];
8480
+ }
8481
+ interface TuttiModePlanWorkflow {
8482
+ id: string;
8483
+ workspaceId: string;
8484
+ type: string;
8485
+ owner: string;
8486
+ triggerKind: string;
8487
+ sourceSessionId: string;
8488
+ sourceTurnId?: string | null;
8489
+ sourceToolCallId?: string | null;
8490
+ status: TuttiModePlanWorkflowStatus;
8491
+ currentRevisionId: string;
8492
+ }
8493
+ interface TuttiModePlanRevision {
8494
+ id: string;
8495
+ workflowId: string;
8496
+ sequence: number;
8497
+ schemaVersion: string;
8498
+ documentPath: string;
8499
+ sha256: string;
8500
+ producedByTurnId?: string | null;
8501
+ createdAtUnixMs: number;
8502
+ document: TuttiModePlanDocument;
8503
+ }
8504
+ interface TuttiModePlanDocument {
8505
+ schema: string;
8506
+ phase: "configuration" | "task_graph";
8507
+ title: string;
8508
+ topicId: string;
8509
+ markdownBody: string;
8510
+ execution: TuttiModePlanExecution;
8511
+ budget: TuttiModePlanBudget;
8512
+ tasks: TuttiModePlanTask[];
8513
+ }
8514
+ interface TuttiModePlanExecution {
8515
+ mode: "sequential" | "parallel";
8516
+ reasoningIntensity: number;
8517
+ orchestrationIntensity: number;
8518
+ }
8519
+ interface TuttiModePlanBudget {
8520
+ mode: "auto" | "fixed";
8521
+ tokenLimit: number;
8522
+ quotaWaterlinePercent: number;
8523
+ }
8524
+ interface TuttiModePlanTask {
8525
+ id: string;
8526
+ title: string;
8527
+ content: string;
8528
+ priority: "high" | "medium" | "low";
8529
+ agentTargetId?: string | null;
8530
+ modelPlanId?: string | null;
8531
+ model?: string | null;
8532
+ permissionModeId?: string | null;
8533
+ reasoningEffort?: string | null;
8534
+ executionDirectory?: string | null;
8535
+ dependsOn: string[];
8536
+ parallelizable?: boolean;
8537
+ autoAccept?: boolean;
8538
+ }
8539
+ interface TuttiModePlanCheckpoint {
8540
+ id: string;
8541
+ workflowId: string;
8542
+ kind: TuttiModePlanCheckpointKind;
8543
+ revisionId: string;
8544
+ status: TuttiModePlanCheckpointStatus;
8545
+ decidedBy?: string | null;
8546
+ decisionReason?: string | null;
8547
+ createdAtUnixMs: number;
8548
+ updatedAtUnixMs: number;
8549
+ decidedAtUnixMs?: number | null;
8550
+ }
8551
+
8552
+ interface TuttiModePlanReviewUpdate {
8553
+ kind: "workflow_updated";
8554
+ workspaceId: string;
8555
+ workflowId: string;
8556
+ sourceSessionId: string;
8557
+ checkpointId: string;
8558
+ changeKind: "proposal_created" | "revision_created" | "checkpoint_decided" | "operation_updated";
8559
+ }
8560
+ interface TuttiModePlanReviewConnectionRestored {
8561
+ kind: "connection_restored";
8562
+ workspaceId: string;
8563
+ }
8564
+ /**
8565
+ * A root turn of the source session settled. The host derives this from the
8566
+ * daemon's canonical turn fan-out and relays it as a read-repair trigger: a
8567
+ * plan proposed mid-turn announces itself through one workflow event, and if
8568
+ * that single event is lost no later workflow signal re-reads review state.
8569
+ */
8570
+ interface TuttiModePlanReviewSessionSettled {
8571
+ kind: "session_settled";
8572
+ workspaceId: string;
8573
+ sourceSessionId: string;
8574
+ }
8575
+ type TuttiModePlanReviewInvalidation = TuttiModePlanReviewUpdate | TuttiModePlanReviewConnectionRestored | TuttiModePlanReviewSessionSettled;
8576
+ interface TuttiModePlanTaskAssignmentInput {
8577
+ taskId: string;
8578
+ agentTargetId?: string | null;
8579
+ modelPlanId?: string | null;
8580
+ model?: string | null;
8581
+ permissionModeId?: string | null;
8582
+ reasoningEffort?: string | null;
8583
+ parallelizable?: boolean | null;
8584
+ autoAccept?: boolean | null;
8585
+ }
8586
+ interface TuttiModePlanReviewDecisionInput {
8587
+ workspaceId: string;
8588
+ workflowId: string;
8589
+ checkpointId: string;
8590
+ decision: "accepted" | "rejected" | "canceled";
8591
+ decidedBy: string;
8592
+ reason?: string | null;
8593
+ /** Per-task overrides; only meaningful with an accepted task review. */
8594
+ taskAssignments?: readonly TuttiModePlanTaskAssignmentInput[];
8595
+ }
8596
+ interface TuttiModePlanAssignmentAgentOption {
8597
+ agentTargetId: string;
8598
+ label: string;
8599
+ }
8600
+ interface TuttiModePlanAssignmentAgentDetail {
8601
+ /** Provider-native models usable without a model plan. */
8602
+ models: readonly string[];
8603
+ modelPlans: readonly {
8604
+ modelPlanId: string;
8605
+ label: string;
8606
+ models: readonly string[];
8607
+ }[];
8608
+ permissionModes: readonly {
8609
+ id: string;
8610
+ label: string;
8611
+ }[];
8612
+ reasoningEfforts: readonly string[];
8613
+ }
8614
+ interface TuttiPlanIssueTaskSnapshot {
8615
+ taskId: string;
8616
+ title: string;
8617
+ content: string;
8618
+ status: string;
8619
+ sortIndex: number;
8620
+ parallelizable: boolean;
8621
+ autoAccept: boolean;
8622
+ dependencyTaskIds: string[];
8623
+ }
8624
+ /** Read-only snapshot of the Issue a session's accepted plan materialized. */
8625
+ interface TuttiPlanIssueSnapshot {
8626
+ workflowId: string;
8627
+ sourceTurnId: string | null;
8628
+ issueId: string;
8629
+ topicId: string;
8630
+ title: string;
8631
+ tasks: TuttiPlanIssueTaskSnapshot[];
8632
+ }
8633
+ /**
8634
+ * An accepted plan whose create_issue operation durably failed. The
8635
+ * conversation must surface this instead of rendering nothing: there is no
8636
+ * pending checkpoint (the review panel is gone) and no Issue (the issue panel
8637
+ * never appears), so silence would hide the failure entirely.
8638
+ */
8639
+ interface TuttiPlanIssueMaterializationFailure {
8640
+ workflowId: string;
8641
+ sourceTurnId: string | null;
8642
+ errorMessage: string | null;
8643
+ }
8644
+ type TuttiPlanIssueQueryResult = {
8645
+ kind: "issue";
8646
+ issue: TuttiPlanIssueSnapshot;
8647
+ } | ({
8648
+ kind: "materialization_failed";
8649
+ } & TuttiPlanIssueMaterializationFailure) | null;
8650
+ /**
8651
+ * Read-only source for the embedded plan-issue panel in the conversation.
8652
+ * The host resolves "the Issue this session's accepted plan created" and
8653
+ * relays live issue updates; all mutations stay in the Issue Manager.
8654
+ */
8655
+ interface TuttiPlanIssueSource {
8656
+ getSessionPlanIssue(input: {
8657
+ workspaceId: string;
8658
+ sourceSessionId: string;
8659
+ }): Promise<TuttiPlanIssueQueryResult>;
8660
+ subscribeIssueUpdates(workspaceId: string, listener: (update: {
8661
+ issueId: string;
8662
+ }) => void): () => void;
8663
+ /** Accepts a pending-acceptance task (the human gate) from the embed. */
8664
+ acceptTask(input: {
8665
+ workspaceId: string;
8666
+ issueId: string;
8667
+ taskId: string;
8668
+ }): Promise<void>;
8669
+ /** Sends a pending-acceptance task back to rework (re-dispatch). */
8670
+ rejectTask(input: {
8671
+ workspaceId: string;
8672
+ issueId: string;
8673
+ taskId: string;
8674
+ }): Promise<void>;
8675
+ /**
8676
+ * Stops the Issue's execution: pauses future dispatch and cancels every
8677
+ * running task run. Idempotent; the daemon owns the cascade.
8678
+ */
8679
+ cancelExecution(input: {
8680
+ workspaceId: string;
8681
+ issueId: string;
8682
+ }): Promise<void>;
8683
+ /**
8684
+ * Resolves the delegate agent session that ran (or is running) a task's
8685
+ * latest run, so a task card can jump straight into that conversation.
8686
+ * Null when the task has not launched yet.
8687
+ */
8688
+ resolveTaskSession(input: {
8689
+ workspaceId: string;
8690
+ issueId: string;
8691
+ taskId: string;
8692
+ }): Promise<{
8693
+ agentSessionId: string;
8694
+ } | null>;
8695
+ }
8696
+ /**
8697
+ * Option catalogs for per-task assignment editing. The desktop host reuses
8698
+ * its agent directory and composer capability catalogs; the panel never
8699
+ * hardcodes providers or modes.
8700
+ */
8701
+ interface TuttiModePlanAssignmentOptionsSource {
8702
+ listAgents(input: {
8703
+ workspaceId: string;
8704
+ }): Promise<readonly TuttiModePlanAssignmentAgentOption[]>;
8705
+ loadAgentOptions(input: {
8706
+ workspaceId: string;
8707
+ agentTargetId: string;
8708
+ }): Promise<TuttiModePlanAssignmentAgentDetail>;
8709
+ }
8710
+ interface TuttiModePlanReviewRuntime {
8711
+ listPending(input: {
8712
+ workspaceId: string;
8713
+ sourceSessionId: string;
8714
+ }): Promise<readonly TuttiModePlanReviewSnapshot[]>;
8715
+ decide(input: TuttiModePlanReviewDecisionInput): Promise<void>;
8716
+ subscribe(workspaceId: string, listener: (update: TuttiModePlanReviewInvalidation) => void): () => void;
8717
+ /** Optional; the panel degrades to read-only assignment display without it. */
8718
+ assignmentOptions?: TuttiModePlanAssignmentOptionsSource;
8719
+ /** Optional; without it the embedded plan-issue panel never renders. */
8720
+ planIssues?: TuttiPlanIssueSource;
8721
+ }
8722
+
8274
8723
  type AgentMentionReferenceTargetResolver = (item: AgentContextMentionItem) => ReferenceLocateTarget | null;
8275
8724
  interface AgentWorkspaceReferenceInitialTargetInput {
8276
8725
  activeConversation: AgentGUINodeViewModel["rail"]["activeConversation"];
@@ -8334,11 +8783,6 @@ interface AgentGUIRememberComposerDefaultsResult {
8334
8783
  supersededFields: AgentGUIComposerDefaultsField[];
8335
8784
  }
8336
8785
 
8337
- interface AgentGUIOpenSessionRequest {
8338
- agentSessionId: string;
8339
- sequence: number;
8340
- }
8341
-
8342
8786
  type AgentGUIComposerAppendRequest = {
8343
8787
  files: readonly AgentComposerDraftFile[];
8344
8788
  prompt?: string;
@@ -8353,11 +8797,18 @@ interface AgentGUIPrefillPromptRequest {
8353
8797
  agentTargetId?: string | null;
8354
8798
  autoSubmit?: boolean;
8355
8799
  draftPrompt: string;
8800
+ model?: string | null;
8801
+ modelPlanId?: string | null;
8356
8802
  provider?: AgentGUIProvider;
8357
8803
  sequence: number;
8358
8804
  userProjectPath?: string | null;
8359
8805
  }
8360
8806
 
8807
+ interface AgentGUIOpenSessionRequest {
8808
+ agentSessionId: string;
8809
+ sequence: number;
8810
+ }
8811
+
8361
8812
  declare const AGENT_CONVERSATION_BATCH_DELETION_RUNTIME_METHODS: readonly ["deleteSessionsBatch", "listSessionSectionDeletionCandidates"];
8362
8813
  declare const AGENT_CONVERSATION_RAIL_SOURCE_METHODS: readonly ["deleteSessionsBatch", "listPinnedSessionsPage", "listSessionSectionDeletionCandidates", "listSessionSectionPage", "listSessionSections", "listSessionsPage"];
8363
8814
  declare const AGENT_CONVERSATION_RAIL_RUNTIME_METHODS: readonly ["getSessionSectionsQueryCache", "deleteSessionsBatch", "listPinnedSessionsPage", "listSessionSectionDeletionCandidates", "listSessionSectionPage", "listSessionSections", "listSessionsPage"];
@@ -8541,6 +8992,7 @@ interface AgentGUINodeHostActions {
8541
8992
  agentTargetId?: string | null;
8542
8993
  draftPrompt: string;
8543
8994
  provider: AgentGUIProvider;
8995
+ sourceAgentSessionId: string;
8544
8996
  userProjectPath?: string | null;
8545
8997
  }) => void | Promise<void>;
8546
8998
  onCapabilitySettingsRequest?: (capability: AgentComposerCapabilitySettingsTarget) => void;
@@ -8592,6 +9044,7 @@ interface AgentGUIProps extends Omit<AgentGUINodeProps, "hostCapabilities" | "re
8592
9044
  renderAgentsEmpty?: AgentGUIAgentsEmptyRenderer;
8593
9045
  agentActivityRuntime: AgentActivityRuntime;
8594
9046
  agentHostApi?: AgentHostInputApi | null;
9047
+ tuttiModePlanReviewRuntime?: TuttiModePlanReviewRuntime | null;
8595
9048
  /** Starter entries to hide below the empty new-session composer. */
8596
9049
  disabled?: readonly AgentGUIHomeSuggestionId[];
8597
9050
  i18n?: I18nRuntime<string> | null;
@@ -8707,6 +9160,7 @@ declare const AGENT_CONTEXT_MENTION_PROVIDER_IDS: {
8707
9160
  readonly file: "file";
8708
9161
  readonly workspaceApp: "workspace-app";
8709
9162
  readonly workspaceIssue: "workspace-issue";
9163
+ readonly workspaceModel: "workspace-model";
8710
9164
  };
8711
9165
  type AgentContextMentionProviderId = TuttiExternalAtProviderId;
8712
9166
  type AgentContextMentionQueryInput = RichTextTriggerQueryInput & {
@@ -8762,10 +9216,6 @@ interface EngineStateStore<TState> {
8762
9216
  }
8763
9217
  declare function useEngineSelector<TState, TSelected>(engine: EngineStateStore<TState>, selector: (state: TState) => TSelected, isEqual?: (a: TSelected, b: TSelected) => boolean): TSelected;
8764
9218
 
8765
- declare const PLAN_IMPLEMENTATION_ACTION_IMPLEMENT = "implement";
8766
- declare const PLAN_IMPLEMENTATION_ACTION_FEEDBACK = "feedback";
8767
- declare const PLAN_IMPLEMENTATION_ACTION_SKIP = "skip";
8768
-
8769
9219
  type AgentPlanPromptAction = typeof PLAN_IMPLEMENTATION_ACTION_IMPLEMENT | typeof PLAN_IMPLEMENTATION_ACTION_FEEDBACK | typeof PLAN_IMPLEMENTATION_ACTION_SKIP;
8770
9220
  declare function selectAgentPlanPromptTurn(state: AgentSessionEngineState, agentSessionId: string, requestId: string): _tutti_os_agent_activity_core.AgentActivityTurn | null;
8771
9221
  declare function dispatchAgentPlanPromptAction(input: {
@@ -8778,4 +9228,4 @@ declare function dispatchAgentPlanPromptAction(input: {
8778
9228
  workspaceId: string;
8779
9229
  }): boolean;
8780
9230
 
8781
- export { AGENT_CONTEXT_MENTION_PROVIDER_IDS, AGENT_CONVERSATION_RAIL_RUNTIME_METHODS, AGENT_GUI_DETAIL_MIN_WIDTH_PX, AGENT_GUI_EXPANDED_TARGET_WIDTH_PX, AGENT_GUI_STANDALONE_AUTO_COLLAPSE_WIDTH_PX, AGENT_PASTED_TEXT_BLOCK_KIND, AGENT_PASTED_TEXT_MENTION_KIND, AgentActivityHostProvider, type AgentActivityHostProviderProps, type AgentActivityRuntime, type AgentActivityRuntimeDeleteSessionsBatchInput, type AgentActivityRuntimeDeleteSessionsBatchResult, type AgentActivityRuntimeListSessionMessagesInput, type AgentActivityRuntimePromptContentBlock, AgentActivityRuntimeProvider, type AgentActivityRuntimeProviderProps, type AgentActivityRuntimeSessionSectionDeletionCandidates, type AgentActivityRuntimeSessionSectionScopeInput, type AgentActivityRuntimeSetSessionPinnedInput, type AgentActivityRuntimeUpdateSessionSettingsInput, type AgentActivityRuntimeUpdateSessionSettingsResult, type AgentActivityRuntimeUploadPromptContentInput, type AgentActivityRuntimeUploadPromptContentResult, type AgentComposerDraftFile, type AgentContextMentionProvider, type AgentContextMentionProviderId, type AgentConversationBatchDeletionCapability, type AgentConversationRailRuntime, type AgentConversationRailRuntimeSource, type AgentCustomMentionChipContext, type AgentCustomMentionIdentity, type AgentCustomMentionKindDefinition, type AgentCustomMentionPresentation, type AgentExternalPromptEntryResolution, type AgentExternalPromptEntryResolver, type AgentExternalPromptFilePreparationErrorCode, type AgentExternalPromptFilePreparationResult, type AgentExternalPromptFilePreparer, AgentGUI, type AgentGUIAccountMenuState, type AgentGUIAgent, type AgentGUIAgentAvailability, type AgentGUIAgentAvailabilityAction, type AgentGUIAgentAvailabilityStatus, type AgentGUIAgentDirectoryPort, type AgentGUIAgentDirectorySnapshot, type AgentGUIAgentDirectoryStatus, type AgentGUIAgentOwner, type AgentGUIAgentOwnership, type AgentGUIAgentTarget, type AgentGUIAgentTargetBadge, type AgentGUIAgentTargetRef, type AgentGUIAgentsEmptyRenderer, type AgentGUIAllAgentsPresentation, type AgentGUIComposerAppendRequest, type AgentGUIComposerContentType, type AgentGUIComposerFocusMethod, type AgentGUIConversationRailLayout, type AgentGUIEngagementContext, type AgentGUIEngagementEvent, type AgentGUIEngagementEventSink, type AgentGUIHomeSuggestionId, type AgentGUIProps, type AgentGUIProvider, type AgentGUIProviderRailAllPresentation, type AgentGUIProviderRailMode, type AgentGUIProviderReadinessGate, type AgentGUIProviderReadinessGateAction, type AgentGUIProviderReadinessGateStatus, type AgentGUIProviderUnavailableStateContext, type AgentGUIProviderUnavailableStateRenderer, type AgentGUISidebarFooterContext, type AgentGUISidebarFooterRenderer, type AgentGuiI18nLocale, AgentGuiI18nProvider, AgentHandoffMenu, type AgentHandoffMenuLabels, type AgentHandoffMenuProps, type AgentHostAgentTargetAuthenticatedAccount, type AgentHostAgentTargetSetupSnapshot, type AgentHostAgentTargetSetupState, type AgentHostAgentTargetSetupWatch, type AgentHostApi, type AgentHostApplyWorkspaceGitPatchInput, type AgentHostInputApi, type AgentHostQuickPrompt, type AgentHostQuickPromptSnapshot, type AgentHostQuickPromptsApi, type AgentHostRuntimeApi, type AgentHostSelectFilesInput, type AgentHostUserProject, type AgentPlanPromptAction, type AgentPreparedExternalPromptFile, type AgentProbeProvider, type AgentProbeSnapshot, type AgentProviderProbeListInput, type AgentProviderProbeListResult, type AgentStatusController, type AgentStatusControllerOptions, type AgentStatusControllerSnapshot, type AgentStatusFrame, type AgentStatusQuery, type AgentStatusRequestPhase, type AgentStatusRequestReason, type AgentStatusSectionState, type AgentStatusSelectionKey, type AgentStatusSource, type AgentStatusSourceError, type AgentStatusStreamObserver, type AgentStatusValue, type AgentUsageQuota, type AgentUsageSnapshot, type CreateAgentSessionHandoffPromptInput, type CreateAgentSessionMarkdownLinkInput, type EngineStateStore, type PersistWriteResult, type ReadWorkspaceAgentReadStateInput, type WorkspaceAgentReadStateSnapshot, type WriteWorkspaceAgentReadStateInput, agentGUIAgentIsReady, agentGUIDefaultTargetProviders, agentGuiDockIconUrl, agentGuiDockIconUrls, agentGuiI18nModule, agentGuiI18nResources, createAgentConversationRailRuntime, createAgentSessionHandoffPrompt, createAgentSessionMarkdownLink, createAgentStatusController, createLocalAgentGUIAgentTarget, createLocalAgentGUIAgentTargets, createSharedAgentGUIAgentTarget, dispatchAgentPlanPromptAction, getAgentCustomMentionKind, inspectAgentConversationBatchDeletionCapability, localAgentGUIAgentTargetId, normalizeAgentGUIAgentTargets, normalizeAgentGUIAgents, preloadAgentMentionBrowse, projectAgentGUIAgentsToTargets, registerAgentCustomMentionKind, resetAgentActivityRuntimeForTests, resetAgentCustomMentionKindsForTests, resolveAgentGUIAgentTarget, resolveAgentGUIExpandedWindowFrame, resolveAgentGUISelectedDirectoryAgent, selectAgentPlanPromptTurn, selectAgentStatusControllerSnapshot, setAgentActivityRuntimeForTests, shouldAutoCollapseAgentGUIConversationRail, useAgentActivityRuntime, useAgentActivitySnapshot, useEngineSelector, useOptionalAgentActivityRuntime };
9231
+ export { AGENT_CONTEXT_MENTION_PROVIDER_IDS, AGENT_CONVERSATION_RAIL_RUNTIME_METHODS, AGENT_GUI_DETAIL_MIN_WIDTH_PX, AGENT_GUI_EXPANDED_TARGET_WIDTH_PX, AGENT_GUI_STANDALONE_AUTO_COLLAPSE_WIDTH_PX, AGENT_PASTED_TEXT_BLOCK_KIND, AGENT_PASTED_TEXT_MENTION_KIND, AgentActivityHostProvider, type AgentActivityHostProviderProps, type AgentActivityRuntime, type AgentActivityRuntimeDeleteSessionsBatchInput, type AgentActivityRuntimeDeleteSessionsBatchResult, type AgentActivityRuntimeListSessionMessagesInput, type AgentActivityRuntimePromptContentBlock, AgentActivityRuntimeProvider, type AgentActivityRuntimeProviderProps, type AgentActivityRuntimeSessionSectionDeletionCandidates, type AgentActivityRuntimeSessionSectionScopeInput, type AgentActivityRuntimeSetSessionPinnedInput, type AgentActivityRuntimeUpdateSessionSettingsInput, type AgentActivityRuntimeUpdateSessionSettingsResult, type AgentActivityRuntimeUploadPromptContentInput, type AgentActivityRuntimeUploadPromptContentResult, type AgentComposerDraftFile, type AgentContextMentionProvider, type AgentContextMentionProviderId, type AgentConversationBatchDeletionCapability, type AgentConversationRailRuntime, type AgentConversationRailRuntimeSource, type AgentCustomMentionChipContext, type AgentCustomMentionIdentity, type AgentCustomMentionKindDefinition, type AgentCustomMentionPresentation, type AgentExternalPromptEntryResolution, type AgentExternalPromptEntryResolver, type AgentExternalPromptFilePreparationErrorCode, type AgentExternalPromptFilePreparationResult, type AgentExternalPromptFilePreparer, AgentGUI, type AgentGUIAccountMenuState, type AgentGUIAgent, type AgentGUIAgentAvailability, type AgentGUIAgentAvailabilityAction, type AgentGUIAgentAvailabilityStatus, type AgentGUIAgentDirectoryPort, type AgentGUIAgentDirectorySnapshot, type AgentGUIAgentDirectoryStatus, type AgentGUIAgentOwner, type AgentGUIAgentOwnership, type AgentGUIAgentTarget, type AgentGUIAgentTargetBadge, type AgentGUIAgentTargetRef, type AgentGUIAgentsEmptyRenderer, type AgentGUIAllAgentsPresentation, type AgentGUIComposerAppendRequest, type AgentGUIComposerContentType, type AgentGUIComposerFocusMethod, type AgentGUIConversationRailLayout, type AgentGUIEngagementContext, type AgentGUIEngagementEvent, type AgentGUIEngagementEventSink, type AgentGUIHomeSuggestionId, type AgentGUIProps, type AgentGUIProvider, type AgentGUIProviderRailAllPresentation, type AgentGUIProviderRailMode, type AgentGUIProviderReadinessGate, type AgentGUIProviderReadinessGateAction, type AgentGUIProviderReadinessGateStatus, type AgentGUIProviderUnavailableStateContext, type AgentGUIProviderUnavailableStateRenderer, type AgentGUISidebarFooterContext, type AgentGUISidebarFooterRenderer, type AgentGuiI18nLocale, AgentGuiI18nProvider, AgentHandoffMenu, type AgentHandoffMenuLabels, type AgentHandoffMenuProps, type AgentHostAgentTargetAuthenticatedAccount, type AgentHostAgentTargetSetupSnapshot, type AgentHostAgentTargetSetupState, type AgentHostAgentTargetSetupWatch, type AgentHostApi, type AgentHostApplyWorkspaceGitPatchInput, type AgentHostInputApi, type AgentHostQuickPrompt, type AgentHostQuickPromptSnapshot, type AgentHostQuickPromptsApi, type AgentHostRuntimeApi, type AgentHostSelectFilesInput, type AgentHostUserProject, type AgentPlanPromptAction, type AgentPreparedExternalPromptFile, type AgentProbeProvider, type AgentProbeSnapshot, type AgentProviderProbeListInput, type AgentProviderProbeListResult, type AgentStatusController, type AgentStatusControllerOptions, type AgentStatusControllerSnapshot, type AgentStatusFrame, type AgentStatusQuery, type AgentStatusRequestPhase, type AgentStatusRequestReason, type AgentStatusSectionState, type AgentStatusSelectionKey, type AgentStatusSource, type AgentStatusSourceError, type AgentStatusStreamObserver, type AgentStatusValue, type AgentUsageQuota, type AgentUsageSnapshot, type CreateAgentSessionHandoffPromptInput, type CreateAgentSessionMarkdownLinkInput, type EngineStateStore, type PersistWriteResult, type ReadWorkspaceAgentReadStateInput, type TuttiModePlanAssignmentAgentDetail, type TuttiModePlanAssignmentAgentOption, type TuttiModePlanAssignmentOptionsSource, type TuttiModePlanReviewRuntime, type TuttiModePlanReviewSnapshot, type TuttiModePlanTaskAssignmentInput, type TuttiPlanIssueMaterializationFailure, type TuttiPlanIssueQueryResult, type TuttiPlanIssueSnapshot, type TuttiPlanIssueSource, type TuttiPlanIssueTaskSnapshot, type WorkspaceAgentReadStateSnapshot, type WriteWorkspaceAgentReadStateInput, agentGUIAgentIsReady, agentGUIDefaultTargetProviders, agentGuiDockIconUrl, agentGuiDockIconUrls, agentGuiI18nModule, agentGuiI18nResources, createAgentConversationRailRuntime, createAgentSessionHandoffPrompt, createAgentSessionMarkdownLink, createAgentStatusController, createLocalAgentGUIAgentTarget, createLocalAgentGUIAgentTargets, createSharedAgentGUIAgentTarget, dispatchAgentPlanPromptAction, getAgentCustomMentionKind, inspectAgentConversationBatchDeletionCapability, localAgentGUIAgentTargetId, normalizeAgentGUIAgentTargets, normalizeAgentGUIAgents, preloadAgentMentionBrowse, projectAgentGUIAgentsToTargets, registerAgentCustomMentionKind, resetAgentActivityRuntimeForTests, resetAgentCustomMentionKindsForTests, resolveAgentGUIAgentTarget, resolveAgentGUIExpandedWindowFrame, resolveAgentGUISelectedDirectoryAgent, selectAgentPlanPromptTurn, selectAgentStatusControllerSnapshot, setAgentActivityRuntimeForTests, shouldAutoCollapseAgentGUIConversationRail, useAgentActivityRuntime, useAgentActivitySnapshot, useEngineSelector, useOptionalAgentActivityRuntime };