@tutti-os/agent-gui 0.0.73 → 0.0.75
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.
- package/README.md +23 -2
- package/dist/agent-conversation/index.d.ts +5 -5
- package/dist/agent-conversation/index.js +8 -8
- package/dist/agent-message-center/index.d.ts +2 -2
- package/dist/agent-message-center/index.js +170 -12
- package/dist/agent-message-center/index.js.map +1 -1
- package/dist/{agentConversationVM-DPAgUJlR.d.ts → agentConversationVM-BgoqFyE9.d.ts} +1 -1
- package/dist/{agentGuiNodeTypes-aJ3AX7u2.d.ts → agentGuiNodeTypes-CmuJ7VDZ.d.ts} +17 -6
- package/dist/app/renderer/agentactivity.css +58 -33
- package/dist/app/renderer/assets/icons/agents/cursor-colorful.png +0 -0
- package/dist/app/renderer/assets/icons/agents/opencode-rounded.png +0 -0
- package/dist/app/renderer/assets/icons/agents/provider-rail-opencode-colorful.png +0 -0
- package/dist/{chunk-IVIXKAEH.js → chunk-3FYA2K4P.js} +76 -7
- package/dist/chunk-3FYA2K4P.js.map +1 -0
- package/dist/{chunk-4US2YHBY.js → chunk-4HP6V2YA.js} +16 -4
- package/dist/chunk-4HP6V2YA.js.map +1 -0
- package/dist/{chunk-G6BVEY7I.js → chunk-4TNM6ZEC.js} +3 -114
- package/dist/chunk-4TNM6ZEC.js.map +1 -0
- package/dist/{chunk-3PKRGSMH.js → chunk-52GTPN7X.js} +4 -23
- package/dist/chunk-52GTPN7X.js.map +1 -0
- package/dist/{chunk-OBJRIQPX.js → chunk-7GSBP5CN.js} +68 -34
- package/dist/chunk-7GSBP5CN.js.map +1 -0
- package/dist/{chunk-2I2WRI4F.js → chunk-BEM3KDOJ.js} +3 -4
- package/dist/chunk-BEM3KDOJ.js.map +1 -0
- package/dist/{chunk-ATEZXUHK.js → chunk-BT2DT2P7.js} +1 -1
- package/dist/chunk-BT2DT2P7.js.map +1 -0
- package/dist/{chunk-SVGIWXNK.js → chunk-GZX2SGAG.js} +2 -2
- package/dist/{chunk-KWQ4N4IZ.js → chunk-KELYWKTC.js} +28 -6
- package/dist/chunk-KELYWKTC.js.map +1 -0
- package/dist/{chunk-UAAXRSW2.js → chunk-L2ZMLLYL.js} +14 -7
- package/dist/chunk-L2ZMLLYL.js.map +1 -0
- package/dist/{chunk-5H6NINJY.js → chunk-M6FZ2YIR.js} +3 -8
- package/dist/chunk-M6FZ2YIR.js.map +1 -0
- package/dist/{chunk-XZF4QNT4.js → chunk-MNESUMOS.js} +2 -2
- package/dist/{chunk-466AWJTS.js → chunk-QDKD6RNC.js} +15 -6
- package/dist/{chunk-466AWJTS.js.map → chunk-QDKD6RNC.js.map} +1 -1
- package/dist/{chunk-GDFQXJMG.js → chunk-RIRFNGPB.js} +7 -7
- package/dist/chunk-RIRFNGPB.js.map +1 -0
- package/dist/{chunk-4I2VCAMW.js → chunk-SYWMKIRW.js} +4 -11
- package/dist/chunk-SYWMKIRW.js.map +1 -0
- package/dist/{chunk-SZF52NMJ.js → chunk-U6AZ3XQS.js} +38 -13
- package/dist/chunk-U6AZ3XQS.js.map +1 -0
- package/dist/{chunk-Q6AWM3RH.js → chunk-U6EDUTUO.js} +4 -4
- package/dist/{chunk-MYD37I32.js → chunk-VAKFNNKT.js} +1 -15
- package/dist/chunk-VAKFNNKT.js.map +1 -0
- package/dist/{chunk-BHNJN2TR.js → chunk-XW4CVBUH.js} +2 -5
- package/dist/chunk-XW4CVBUH.js.map +1 -0
- package/dist/{chunk-C7K3EFGI.js → chunk-YWQHNFYA.js} +2 -2
- package/dist/context-mention-palette/index.js +9 -9
- package/dist/i18n/index.d.ts +2 -110
- package/dist/i18n/index.js +2 -2
- package/dist/index.d.ts +86 -10
- package/dist/index.js +1284 -667
- package/dist/index.js.map +1 -1
- package/dist/plan-decision-ops.d.ts +2 -2
- package/dist/queued-prompt-runtime.d.ts +4 -6
- package/dist/queued-prompt-runtime.js +1 -1
- package/dist/{types-CrwMqBm1.d.ts → types-DUHHejs2.d.ts} +3 -3
- package/dist/workbench/contribution.d.ts +1 -1
- package/dist/workbench/contribution.js +6 -6
- package/dist/workbench/index.d.ts +1 -1
- package/dist/workbench/index.js +9 -9
- package/dist/workbench/launch.d.ts +2 -2
- package/dist/workbench/launch.js +3 -3
- package/dist/workbench/providerCatalog.d.ts +3 -3
- package/dist/workbench/providerCatalog.js +1 -1
- package/dist/workbench/sessionTitle.d.ts +1 -1
- package/dist/workbench/sessionTitle.js +3 -3
- package/dist/workbench/state.d.ts +1 -1
- package/dist/workbench/state.js +2 -2
- package/dist/workbench/types.d.ts +2 -2
- package/dist/workbench/types.js +1 -1
- package/dist/workspace-agent-generated-files.d.ts +1 -1
- package/dist/workspace-agent-generated-files.js +4 -4
- package/dist/{workspaceAgentActivityListViewModel-DJvAqZso.d.ts → workspaceAgentActivityListViewModel-TXH1VXrk.d.ts} +0 -10
- package/package.json +12 -12
- package/dist/chunk-2I2WRI4F.js.map +0 -1
- package/dist/chunk-3PKRGSMH.js.map +0 -1
- package/dist/chunk-4I2VCAMW.js.map +0 -1
- package/dist/chunk-4US2YHBY.js.map +0 -1
- package/dist/chunk-5H6NINJY.js.map +0 -1
- package/dist/chunk-ATEZXUHK.js.map +0 -1
- package/dist/chunk-BHNJN2TR.js.map +0 -1
- package/dist/chunk-G6BVEY7I.js.map +0 -1
- package/dist/chunk-GDFQXJMG.js.map +0 -1
- package/dist/chunk-IVIXKAEH.js.map +0 -1
- package/dist/chunk-KWQ4N4IZ.js.map +0 -1
- package/dist/chunk-MYD37I32.js.map +0 -1
- package/dist/chunk-OBJRIQPX.js.map +0 -1
- package/dist/chunk-SZF52NMJ.js.map +0 -1
- package/dist/chunk-UAAXRSW2.js.map +0 -1
- /package/dist/{chunk-SVGIWXNK.js.map → chunk-GZX2SGAG.js.map} +0 -0
- /package/dist/{chunk-XZF4QNT4.js.map → chunk-MNESUMOS.js.map} +0 -0
- /package/dist/{chunk-Q6AWM3RH.js.map → chunk-U6EDUTUO.js.map} +0 -0
- /package/dist/{chunk-C7K3EFGI.js.map → chunk-YWQHNFYA.js.map} +0 -0
package/README.md
CHANGED
|
@@ -25,6 +25,23 @@ Runtime-owned data includes:
|
|
|
25
25
|
- provider/session preparation hooks that directly gate activity flow, such as
|
|
26
26
|
OpenClaw gateway warmup
|
|
27
27
|
|
|
28
|
+
Runtime-owned capability declarations are optional and default to enabled:
|
|
29
|
+
|
|
30
|
+
- `canCancel`: shows and enables Stop/cancel controls.
|
|
31
|
+
- `canSubmitInteractive`: shows approval, ask-user, and plan-decision
|
|
32
|
+
interaction entries.
|
|
33
|
+
- `canGoalControl`: shows goal banner controls, `/goal`, and the goal badge.
|
|
34
|
+
- `canUploadAttachment`: enables prompt attachment upload paths such as pasted
|
|
35
|
+
images, pasted large text, and dropped or host-local files. Ordinary `@`
|
|
36
|
+
references and workspace-reference mentions remain available.
|
|
37
|
+
|
|
38
|
+
If `reportDiagnostic` is omitted, non-production development builds emit AgentGUI
|
|
39
|
+
diagnostics to `console` by default for message page requests/resolutions,
|
|
40
|
+
render-state changes, and caught errors. Set
|
|
41
|
+
`devDiagnosticConsoleSink: false` on the runtime to disable that development
|
|
42
|
+
fallback. Production builds stay silent unless the host provides
|
|
43
|
+
`reportDiagnostic`.
|
|
44
|
+
|
|
28
45
|
`AgentHostApi` is still accepted for host capabilities that are not agent
|
|
29
46
|
activity data:
|
|
30
47
|
|
|
@@ -105,5 +122,9 @@ single agent or target icons continue to come from `providerTargets[].iconUrl`.
|
|
|
105
122
|
|
|
106
123
|
Hosts that need custom main-pane presentation for a disabled selected target may
|
|
107
124
|
pass `renderProviderUnavailableState`. AgentGUI calls this renderer only when
|
|
108
|
-
the selected `providerTargets[]` entry has `disabled: true
|
|
109
|
-
|
|
125
|
+
the selected `providerTargets[]` entry has `disabled: true`.
|
|
126
|
+
|
|
127
|
+
Hosts that need custom main-pane presentation for provider readiness gates may
|
|
128
|
+
pass `renderProviderReadinessGateState`. AgentGUI calls this renderer for
|
|
129
|
+
host-projected gates such as checking, install, login, coming-soon, and
|
|
130
|
+
unavailable; when it is omitted, AgentGUI uses the built-in readiness pane.
|
|
@@ -2,13 +2,13 @@ import * as react from 'react';
|
|
|
2
2
|
import { ReactNode, JSX } from 'react';
|
|
3
3
|
import { W as WorkspaceLinkAction } from '../workspaceLinkActions-DS9LWqzI.js';
|
|
4
4
|
import { A as AgentMessageMarkdownWorkspaceAppIcon } from '../AgentMessageMarkdown-DeYPURtF.js';
|
|
5
|
-
import { c as AgentConversationVM, W as WorkspaceAgentSessionDetailViewModel } from '../agentConversationVM-
|
|
6
|
-
export { B as BuildWorkspaceAgentSessionDetailInput, d as buildWorkspaceAgentSessionDetailViewModel } from '../agentConversationVM-
|
|
7
|
-
import { e as AgentGUIProviderSkillOption } from '../agentGuiNodeTypes-
|
|
8
|
-
export { W as WorkspaceAgentActivityCard, n as WorkspaceAgentActivitySession, q as WorkspaceAgentActivityTimelineItem } from '../workspaceAgentActivityListViewModel-
|
|
5
|
+
import { c as AgentConversationVM, W as WorkspaceAgentSessionDetailViewModel } from '../agentConversationVM-BgoqFyE9.js';
|
|
6
|
+
export { B as BuildWorkspaceAgentSessionDetailInput, d as buildWorkspaceAgentSessionDetailViewModel } from '../agentConversationVM-BgoqFyE9.js';
|
|
7
|
+
import { e as AgentGUIProviderSkillOption } from '../agentGuiNodeTypes-CmuJ7VDZ.js';
|
|
8
|
+
export { W as WorkspaceAgentActivityCard, n as WorkspaceAgentActivitySession, q as WorkspaceAgentActivityTimelineItem } from '../workspaceAgentActivityListViewModel-TXH1VXrk.js';
|
|
9
9
|
import '@tutti-os/workspace-issue-manager/core';
|
|
10
10
|
import '@tutti-os/agent-activity-core';
|
|
11
|
-
import '../types-
|
|
11
|
+
import '../types-DUHHejs2.js';
|
|
12
12
|
import '@tutti-os/workspace-user-project/contracts';
|
|
13
13
|
|
|
14
14
|
interface AgentConversationFlowProps {
|
|
@@ -6,20 +6,20 @@ import {
|
|
|
6
6
|
projectAgentConversationVM,
|
|
7
7
|
reconcileProjectedAgentConversationVM,
|
|
8
8
|
useProjectedAgentConversation
|
|
9
|
-
} from "../chunk-
|
|
10
|
-
import "../chunk-
|
|
9
|
+
} from "../chunk-7GSBP5CN.js";
|
|
10
|
+
import "../chunk-3FYA2K4P.js";
|
|
11
11
|
import "../chunk-PSLAWU25.js";
|
|
12
|
-
import "../chunk-
|
|
12
|
+
import "../chunk-KELYWKTC.js";
|
|
13
13
|
import "../chunk-Y35GDLP2.js";
|
|
14
14
|
import "../chunk-LUGELG5V.js";
|
|
15
|
-
import "../chunk-
|
|
16
|
-
import "../chunk-
|
|
15
|
+
import "../chunk-RIRFNGPB.js";
|
|
16
|
+
import "../chunk-4HP6V2YA.js";
|
|
17
17
|
import {
|
|
18
18
|
translate
|
|
19
|
-
} from "../chunk-
|
|
19
|
+
} from "../chunk-YWQHNFYA.js";
|
|
20
20
|
import "../chunk-PJP5BUU6.js";
|
|
21
|
-
import "../chunk-
|
|
22
|
-
import "../chunk-
|
|
21
|
+
import "../chunk-SYWMKIRW.js";
|
|
22
|
+
import "../chunk-4TNM6ZEC.js";
|
|
23
23
|
|
|
24
24
|
// shared/WorkspaceAgentSessionDetail.tsx
|
|
25
25
|
import { useMemo } from "react";
|
|
@@ -4,8 +4,8 @@ import { I18nRuntime } from '@tutti-os/ui-i18n-runtime';
|
|
|
4
4
|
import { TranslateFn, useTranslation, AgentGuiI18nLocale } from '../i18n/index.js';
|
|
5
5
|
import { W as WorkspaceLinkAction } from '../workspaceLinkActions-DS9LWqzI.js';
|
|
6
6
|
import { AgentActivityNeedsAttentionItem, AgentActivitySnapshot } from '@tutti-os/agent-activity-core';
|
|
7
|
-
import { b as AgentConversationPromptVM } from '../agentConversationVM-
|
|
8
|
-
import { o as WorkspaceAgentActivityStatus } from '../workspaceAgentActivityListViewModel-
|
|
7
|
+
import { b as AgentConversationPromptVM } from '../agentConversationVM-BgoqFyE9.js';
|
|
8
|
+
import { o as WorkspaceAgentActivityStatus } from '../workspaceAgentActivityListViewModel-TXH1VXrk.js';
|
|
9
9
|
export { PLAN_IMPLEMENTATION_ACTION_IMPLEMENT, PLAN_IMPLEMENTATION_PROMPT } from '../plan-decision-ops.js';
|
|
10
10
|
import '@tutti-os/workspace-issue-manager/core';
|
|
11
11
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
formatAgentGuiConversationPlainTitle
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-MNESUMOS.js";
|
|
4
4
|
import {
|
|
5
5
|
AgentInteractivePromptSurface,
|
|
6
6
|
approvalOptionDisplayLabel,
|
|
7
7
|
getPromptToolDetails,
|
|
8
8
|
isPromptRequestIdTitle
|
|
9
|
-
} from "../chunk-
|
|
9
|
+
} from "../chunk-U6EDUTUO.js";
|
|
10
10
|
import {
|
|
11
11
|
PLAN_IMPLEMENTATION_ACTION_IMPLEMENT,
|
|
12
12
|
PLAN_IMPLEMENTATION_PROMPT,
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
} from "../chunk-MKHDRIGN.js";
|
|
16
16
|
import {
|
|
17
17
|
formatAgentSessionMentionText
|
|
18
|
-
} from "../chunk-
|
|
18
|
+
} from "../chunk-M6FZ2YIR.js";
|
|
19
19
|
import {
|
|
20
20
|
AgentMessageMarkdown,
|
|
21
21
|
CustomScrollArea,
|
|
@@ -25,28 +25,28 @@ import {
|
|
|
25
25
|
extractExitPlanModeOptions,
|
|
26
26
|
isExitPlanSwitchModeInput,
|
|
27
27
|
normalizeAskUserQuestions
|
|
28
|
-
} from "../chunk-
|
|
28
|
+
} from "../chunk-3FYA2K4P.js";
|
|
29
29
|
import {
|
|
30
30
|
userAvatarPlaceholderUrl,
|
|
31
31
|
workspaceAgentActivityStatusLabel
|
|
32
|
-
} from "../chunk-
|
|
32
|
+
} from "../chunk-GZX2SGAG.js";
|
|
33
33
|
import {
|
|
34
34
|
resolveWorkspaceAgentSessionSortTimeUnixMs
|
|
35
35
|
} from "../chunk-IBIMGLCD.js";
|
|
36
36
|
import {
|
|
37
37
|
managedAgentRoundedIconUrl
|
|
38
|
-
} from "../chunk-
|
|
38
|
+
} from "../chunk-RIRFNGPB.js";
|
|
39
39
|
import {
|
|
40
40
|
workspaceAgentProviderLabel
|
|
41
|
-
} from "../chunk-
|
|
41
|
+
} from "../chunk-4HP6V2YA.js";
|
|
42
42
|
import {
|
|
43
43
|
AgentGuiI18nProvider,
|
|
44
44
|
getActiveUiLanguage,
|
|
45
45
|
useTranslation
|
|
46
|
-
} from "../chunk-
|
|
46
|
+
} from "../chunk-YWQHNFYA.js";
|
|
47
47
|
import "../chunk-PJP5BUU6.js";
|
|
48
|
-
import "../chunk-
|
|
49
|
-
import "../chunk-
|
|
48
|
+
import "../chunk-SYWMKIRW.js";
|
|
49
|
+
import "../chunk-4TNM6ZEC.js";
|
|
50
50
|
import "../chunk-GCBDIQDX.js";
|
|
51
51
|
|
|
52
52
|
// agent-message-center/WorkspaceAgentMessageCenterPanel.tsx
|
|
@@ -116,6 +116,7 @@ import {
|
|
|
116
116
|
} from "@tutti-os/agent-activity-core";
|
|
117
117
|
|
|
118
118
|
// agent-message-center/workspaceAgentMessageCenterDigest.ts
|
|
119
|
+
var digestAgentMessageSummaryByMessage = /* @__PURE__ */ new WeakMap();
|
|
119
120
|
function buildWorkspaceAgentMessageCenterDigest(input) {
|
|
120
121
|
const {
|
|
121
122
|
fallbackTitle,
|
|
@@ -179,10 +180,31 @@ function buildWorkspaceAgentMessageCenterDigest(input) {
|
|
|
179
180
|
};
|
|
180
181
|
}
|
|
181
182
|
function resolveWorkspaceAgentMessageCenterDigestAgentMessageSummary(message) {
|
|
183
|
+
const cached = digestAgentMessageSummaryByMessage.get(message);
|
|
184
|
+
if (cached && cached.role === message.role && cached.kind === message.kind && cached.status === message.status && cached.payload === message.payload && cached.version === message.version) {
|
|
185
|
+
return cached.summary;
|
|
186
|
+
}
|
|
182
187
|
if (!isAgentMessageRole(message.role) || isReasoningMessageKind(message.kind)) {
|
|
188
|
+
digestAgentMessageSummaryByMessage.set(message, {
|
|
189
|
+
kind: message.kind,
|
|
190
|
+
payload: message.payload,
|
|
191
|
+
role: message.role,
|
|
192
|
+
status: message.status,
|
|
193
|
+
summary: "",
|
|
194
|
+
version: message.version
|
|
195
|
+
});
|
|
183
196
|
return "";
|
|
184
197
|
}
|
|
185
|
-
|
|
198
|
+
const summary = meaningfulMessageSummary(message);
|
|
199
|
+
digestAgentMessageSummaryByMessage.set(message, {
|
|
200
|
+
kind: message.kind,
|
|
201
|
+
payload: message.payload,
|
|
202
|
+
role: message.role,
|
|
203
|
+
status: message.status,
|
|
204
|
+
summary,
|
|
205
|
+
version: message.version
|
|
206
|
+
});
|
|
207
|
+
return summary;
|
|
186
208
|
}
|
|
187
209
|
function pendingPromptSummary(prompt) {
|
|
188
210
|
if (!prompt) {
|
|
@@ -607,7 +629,29 @@ function resolveSessionTitle(session, latestUserMessageSummary, firstUserMessage
|
|
|
607
629
|
function resolveDigestFallbackTitle(session) {
|
|
608
630
|
return session.title.trim() || session.provider || session.agentSessionId;
|
|
609
631
|
}
|
|
632
|
+
var messageAnalysisByMessages = /* @__PURE__ */ new WeakMap();
|
|
633
|
+
var codexPlanImplementationPromptByMessages = /* @__PURE__ */ new WeakMap();
|
|
610
634
|
function analyzeMessageCenterSessionMessages(agentSessionId, messages) {
|
|
635
|
+
let bySessionId = messageAnalysisByMessages.get(messages);
|
|
636
|
+
if (!bySessionId) {
|
|
637
|
+
bySessionId = /* @__PURE__ */ new Map();
|
|
638
|
+
messageAnalysisByMessages.set(messages, bySessionId);
|
|
639
|
+
}
|
|
640
|
+
const cached = bySessionId.get(agentSessionId);
|
|
641
|
+
if (cached && isMessageArrayCacheEntryCurrent(cached, messages)) {
|
|
642
|
+
return cached.result;
|
|
643
|
+
}
|
|
644
|
+
const result = analyzeMessageCenterSessionMessagesUncached(
|
|
645
|
+
agentSessionId,
|
|
646
|
+
messages
|
|
647
|
+
);
|
|
648
|
+
bySessionId.set(agentSessionId, {
|
|
649
|
+
messages: messageCenterMessageCacheKeys(messages),
|
|
650
|
+
result
|
|
651
|
+
});
|
|
652
|
+
return result;
|
|
653
|
+
}
|
|
654
|
+
function analyzeMessageCenterSessionMessagesUncached(agentSessionId, messages) {
|
|
611
655
|
let firstUserMessageSummary = "";
|
|
612
656
|
let latestUserMessageSummary = "";
|
|
613
657
|
let latestUserMessageAtUnixMs = Number.NEGATIVE_INFINITY;
|
|
@@ -767,6 +811,24 @@ function isExitPlanMessage(message, input = recordValue2(
|
|
|
767
811
|
return includesAny2(normalizedMetadataValues(message), ["exitplanmode"]) || isExitPlanSwitchModeInput(input);
|
|
768
812
|
}
|
|
769
813
|
function codexPlanImplementationPrompt(session, status, messages) {
|
|
814
|
+
const cached = codexPlanImplementationPromptByMessages.get(messages);
|
|
815
|
+
if (cached && cached.provider === session.provider && cached.status === status && isMessageArrayCacheEntryCurrent(cached, messages)) {
|
|
816
|
+
return cached.result;
|
|
817
|
+
}
|
|
818
|
+
const result = codexPlanImplementationPromptUncached(
|
|
819
|
+
session,
|
|
820
|
+
status,
|
|
821
|
+
messages
|
|
822
|
+
);
|
|
823
|
+
codexPlanImplementationPromptByMessages.set(messages, {
|
|
824
|
+
messages: messageCenterMessageCacheKeys(messages),
|
|
825
|
+
provider: session.provider,
|
|
826
|
+
result,
|
|
827
|
+
status
|
|
828
|
+
});
|
|
829
|
+
return result;
|
|
830
|
+
}
|
|
831
|
+
function codexPlanImplementationPromptUncached(session, status, messages) {
|
|
770
832
|
if (session.provider.trim().toLowerCase() !== "codex") {
|
|
771
833
|
return null;
|
|
772
834
|
}
|
|
@@ -783,6 +845,32 @@ function codexPlanImplementationPrompt(session, status, messages) {
|
|
|
783
845
|
const title = planMessage ? messageSummary(planMessage) : "";
|
|
784
846
|
return planImplementationPromptFromPlanTurn(planTurnId, title);
|
|
785
847
|
}
|
|
848
|
+
function isMessageArrayCacheEntryCurrent(entry, messages) {
|
|
849
|
+
if (entry.messages.length !== messages.length) {
|
|
850
|
+
return false;
|
|
851
|
+
}
|
|
852
|
+
return entry.messages.every(
|
|
853
|
+
(key, index) => messageCenterMessageCacheKeyMatches(key, messages[index])
|
|
854
|
+
);
|
|
855
|
+
}
|
|
856
|
+
function messageCenterMessageCacheKeys(messages) {
|
|
857
|
+
return messages.map((message) => ({
|
|
858
|
+
completedAtUnixMs: message.completedAtUnixMs,
|
|
859
|
+
kind: message.kind,
|
|
860
|
+
message,
|
|
861
|
+
messageId: message.messageId,
|
|
862
|
+
occurredAtUnixMs: message.occurredAtUnixMs,
|
|
863
|
+
payload: message.payload,
|
|
864
|
+
role: message.role,
|
|
865
|
+
startedAtUnixMs: message.startedAtUnixMs,
|
|
866
|
+
status: message.status,
|
|
867
|
+
turnId: message.turnId,
|
|
868
|
+
version: message.version
|
|
869
|
+
}));
|
|
870
|
+
}
|
|
871
|
+
function messageCenterMessageCacheKeyMatches(key, message) {
|
|
872
|
+
return message !== void 0 && key.message === message && key.messageId === message.messageId && key.version === message.version && key.turnId === message.turnId && key.role === message.role && key.kind === message.kind && key.status === message.status && key.payload === message.payload && key.occurredAtUnixMs === message.occurredAtUnixMs && key.startedAtUnixMs === message.startedAtUnixMs && key.completedAtUnixMs === message.completedAtUnixMs;
|
|
873
|
+
}
|
|
786
874
|
function turnOutcomeFromMessage(agentSessionId, message) {
|
|
787
875
|
const status = outcomeStatusFromMessage(message);
|
|
788
876
|
if (!status) {
|
|
@@ -3451,7 +3539,77 @@ function messageCenterPromptEqual(left, right) {
|
|
|
3451
3539
|
if (!left || !right || left.kind !== right.kind) {
|
|
3452
3540
|
return false;
|
|
3453
3541
|
}
|
|
3454
|
-
|
|
3542
|
+
switch (left.kind) {
|
|
3543
|
+
case "approval":
|
|
3544
|
+
return right.kind === "approval" && left.id === right.id && left.turnId === right.turnId && left.requestId === right.requestId && left.callId === right.callId && left.title === right.title && left.toolName === right.toolName && left.status === right.status && left.occurredAtUnixMs === right.occurredAtUnixMs && messageCenterJsonValueEqual(left.input, right.input) && messageCenterJsonValueEqual(
|
|
3545
|
+
left.output ?? null,
|
|
3546
|
+
right.output ?? null
|
|
3547
|
+
) && messageCenterApprovalOptionsEqual(left.options, right.options);
|
|
3548
|
+
case "ask-user":
|
|
3549
|
+
return right.kind === "ask-user" && left.requestId === right.requestId && left.title === right.title && messageCenterAskUserQuestionsEqual(left.questions, right.questions);
|
|
3550
|
+
case "exit-plan":
|
|
3551
|
+
return right.kind === "exit-plan" && left.requestId === right.requestId && left.title === right.title && left.keepPlanningOptionId === right.keepPlanningOptionId && messageCenterApprovalOptionsEqual(left.options, right.options);
|
|
3552
|
+
case "plan-implementation":
|
|
3553
|
+
return right.kind === "plan-implementation" && left.requestId === right.requestId && left.title === right.title;
|
|
3554
|
+
}
|
|
3555
|
+
}
|
|
3556
|
+
function messageCenterApprovalOptionsEqual(left, right) {
|
|
3557
|
+
if (left.length !== right.length) {
|
|
3558
|
+
return false;
|
|
3559
|
+
}
|
|
3560
|
+
return left.every((option, index) => {
|
|
3561
|
+
const rightOption = right[index];
|
|
3562
|
+
return rightOption && option.id === rightOption.id && option.label === rightOption.label && option.kind === rightOption.kind && option.description === rightOption.description;
|
|
3563
|
+
});
|
|
3564
|
+
}
|
|
3565
|
+
function messageCenterAskUserQuestionsEqual(left, right) {
|
|
3566
|
+
if (left.length !== right.length) {
|
|
3567
|
+
return false;
|
|
3568
|
+
}
|
|
3569
|
+
return left.every((question, index) => {
|
|
3570
|
+
const rightQuestion = right[index];
|
|
3571
|
+
return rightQuestion && question.id === rightQuestion.id && question.header === rightQuestion.header && question.question === rightQuestion.question && question.multiSelect === rightQuestion.multiSelect && messageCenterAnswerEqual(
|
|
3572
|
+
question.answer ?? null,
|
|
3573
|
+
rightQuestion.answer ?? null
|
|
3574
|
+
) && question.options.length === rightQuestion.options.length && question.options.every((option, optionIndex) => {
|
|
3575
|
+
const rightOption = rightQuestion.options[optionIndex];
|
|
3576
|
+
return rightOption && option.label === rightOption.label && option.description === rightOption.description;
|
|
3577
|
+
});
|
|
3578
|
+
});
|
|
3579
|
+
}
|
|
3580
|
+
function messageCenterAnswerEqual(left, right) {
|
|
3581
|
+
if (left === right) {
|
|
3582
|
+
return true;
|
|
3583
|
+
}
|
|
3584
|
+
if (!Array.isArray(left) || !Array.isArray(right)) {
|
|
3585
|
+
return false;
|
|
3586
|
+
}
|
|
3587
|
+
return left.length === right.length && left.every((value, index) => value === right[index]);
|
|
3588
|
+
}
|
|
3589
|
+
function messageCenterJsonValueEqual(left, right) {
|
|
3590
|
+
if (left === right) {
|
|
3591
|
+
return true;
|
|
3592
|
+
}
|
|
3593
|
+
if (!left || !right || typeof left !== "object" || typeof right !== "object") {
|
|
3594
|
+
return false;
|
|
3595
|
+
}
|
|
3596
|
+
if (Array.isArray(left) || Array.isArray(right)) {
|
|
3597
|
+
if (!Array.isArray(left) || !Array.isArray(right)) {
|
|
3598
|
+
return false;
|
|
3599
|
+
}
|
|
3600
|
+
return left.length === right.length && left.every(
|
|
3601
|
+
(value, index) => messageCenterJsonValueEqual(value, right[index])
|
|
3602
|
+
);
|
|
3603
|
+
}
|
|
3604
|
+
const leftRecord = left;
|
|
3605
|
+
const rightRecord = right;
|
|
3606
|
+
const leftKeys = Object.keys(leftRecord);
|
|
3607
|
+
if (leftKeys.length !== Object.keys(rightRecord).length) {
|
|
3608
|
+
return false;
|
|
3609
|
+
}
|
|
3610
|
+
return leftKeys.every(
|
|
3611
|
+
(key) => messageCenterJsonValueEqual(leftRecord[key], rightRecord[key])
|
|
3612
|
+
);
|
|
3455
3613
|
}
|
|
3456
3614
|
export {
|
|
3457
3615
|
AgentInteractivePromptSurface,
|