@kingsoftcloud/ksadk-web 0.2.15 → 0.2.17
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/CHANGELOG.md +28 -0
- package/dist-ksadk/assets/{ArtifactsPanel-BQycE-WQ.js → ArtifactsPanel-xCGwbyKe.js} +1 -1
- package/dist-ksadk/assets/{CodeBlock-BBNgCUzs.js → CodeBlock-_d8IhXK6.js} +1 -1
- package/dist-ksadk/assets/{MathMessageMarkdown-BX8whIUg.js → MathMessageMarkdown-Dq5U0t0L.js} +1 -1
- package/dist-ksadk/assets/{MermaidBlock-D68B7zAv.js → MermaidBlock-BGEGRy9j.js} +6 -6
- package/dist-ksadk/assets/{NativeTerminalPanel-CyV-mhO3.js → NativeTerminalPanel-D9YIBBoT.js} +1 -1
- package/dist-ksadk/assets/{arc-wHztMxfp.js → arc-C-aJXEEz.js} +1 -1
- package/dist-ksadk/assets/architecture-7EHR7CIX-ElkGISgr.js +1 -0
- package/dist-ksadk/assets/{architectureDiagram-3BPJPVTR-HU4hsN_Y.js → architectureDiagram-3BPJPVTR-BS__hbBP.js} +1 -1
- package/dist-ksadk/assets/{blockDiagram-GPEHLZMM-DV_1dQBG.js → blockDiagram-GPEHLZMM-BL-uLGOT.js} +1 -1
- package/dist-ksadk/assets/{c4Diagram-AAUBKEIU-C5jN6E0t.js → c4Diagram-AAUBKEIU-BY64KkO8.js} +1 -1
- package/dist-ksadk/assets/channel-95jCPDn-.js +1 -0
- package/dist-ksadk/assets/{chunk-2J33WTMH-jhWShx0U.js → chunk-2J33WTMH-DFgsEcc7.js} +1 -1
- package/dist-ksadk/assets/{chunk-4BX2VUAB-BkmP_YIR.js → chunk-4BX2VUAB-Dk1XGsDg.js} +1 -1
- package/dist-ksadk/assets/{chunk-55IACEB6-B8cdnfio.js → chunk-55IACEB6-CyYG08Ez.js} +1 -1
- package/dist-ksadk/assets/{chunk-727SXJPM-I_wsgg4B.js → chunk-727SXJPM-Dj-o0foT.js} +1 -1
- package/dist-ksadk/assets/{chunk-AQP2D5EJ-CrKE0CjY.js → chunk-AQP2D5EJ-M8cDZrZQ.js} +1 -1
- package/dist-ksadk/assets/{chunk-FMBD7UC4-CnBM9mx-.js → chunk-FMBD7UC4-Mceczy0j.js} +1 -1
- package/dist-ksadk/assets/{chunk-ND2GUHAM-CAGmrkrk.js → chunk-ND2GUHAM-dwTxQ3uL.js} +1 -1
- package/dist-ksadk/assets/chunk-QZHKN3VN-DJz-BVY8.js +1 -0
- package/dist-ksadk/assets/classDiagram-4FO5ZUOK-DQhxN0zQ.js +1 -0
- package/dist-ksadk/assets/classDiagram-v2-Q7XG4LA2-DQhxN0zQ.js +1 -0
- package/dist-ksadk/assets/{cose-bilkent-S5V4N54A-DQutYsST.js → cose-bilkent-S5V4N54A-Ch6hia5Y.js} +1 -1
- package/dist-ksadk/assets/{dagre-BM42HDAG-BbfWozVQ.js → dagre-BM42HDAG-nrh587vF.js} +1 -1
- package/dist-ksadk/assets/{diagram-2AECGRRQ-DTYDG1S6.js → diagram-2AECGRRQ-DgNb_Tw5.js} +1 -1
- package/dist-ksadk/assets/{diagram-5GNKFQAL-CKo851uX.js → diagram-5GNKFQAL-ND5Lir8O.js} +1 -1
- package/dist-ksadk/assets/{diagram-KO2AKTUF-BFGsk7gQ.js → diagram-KO2AKTUF-CLrPFWcy.js} +1 -1
- package/dist-ksadk/assets/{diagram-LMA3HP47-Cp5eKc5-.js → diagram-LMA3HP47-D_Sgy27v.js} +1 -1
- package/dist-ksadk/assets/{diagram-OG6HWLK6-BCAPtWc_.js → diagram-OG6HWLK6-QbrzvyWM.js} +1 -1
- package/dist-ksadk/assets/{dist-PKzzxEoN.js → dist-B7Z2ybmq.js} +1 -1
- package/dist-ksadk/assets/{dist-DsEBYSvP.js → dist-B98JDMe6.js} +1 -1
- package/dist-ksadk/assets/{dist-5kdQ7HkY.js → dist-BbS7HTJp.js} +1 -1
- package/dist-ksadk/assets/{dist-BXfxON4M.js → dist-CKb66fZP.js} +1 -1
- package/dist-ksadk/assets/{dist-Drg2mY7X.js → dist-CMLwqcZ6.js} +1 -1
- package/dist-ksadk/assets/{dist-CRqn22al.js → dist-CPRGtEH9.js} +1 -1
- package/dist-ksadk/assets/{dist-BzRHvUmK.js → dist-CVN4jSSW.js} +1 -1
- package/dist-ksadk/assets/{dist-Dtq8mlk_.js → dist-ClZgJL0A.js} +1 -1
- package/dist-ksadk/assets/{dist-ygPYPIzK.js → dist-DEJYL3UK.js} +1 -1
- package/dist-ksadk/assets/{dist-Bs8kNZ5F.js → dist-DRSyDPdG.js} +1 -1
- package/dist-ksadk/assets/{dist-COCV2kJ4.js → dist-DRYY8roY.js} +1 -1
- package/dist-ksadk/assets/{dist-Wc8ZbAXr.js → dist-D_ZZ4fV3.js} +1 -1
- package/dist-ksadk/assets/{dist-BUqHxLuB.js → dist-DbpuiQKj.js} +1 -1
- package/dist-ksadk/assets/{dist-CF83ONlc.js → dist-DsvaqR-b.js} +1 -1
- package/dist-ksadk/assets/{dist-CA6GPOEx.js → dist-Dy6ODCG9.js} +1 -1
- package/dist-ksadk/assets/{dist-CcGyKrol.js → dist-DzZB5tor.js} +1 -1
- package/dist-ksadk/assets/{dist-ZTH3VhoY.js → dist-EhrdTAKL.js} +1 -1
- package/dist-ksadk/assets/{dist-bSp7j4JA.js → dist-JBDG5w09.js} +1 -1
- package/dist-ksadk/assets/{dist-CD2EXfJM.js → dist-Ldf-oz8Y.js} +1 -1
- package/dist-ksadk/assets/{dist-BA3Q9tGs.js → dist-Q9_gg2Vb.js} +1 -1
- package/dist-ksadk/assets/{dist-C0aKpK3w.js → dist-TIHF8jeZ.js} +1 -1
- package/dist-ksadk/assets/{dist-XvtBlTf3.js → dist-haZBFH4L.js} +1 -1
- package/dist-ksadk/assets/{erDiagram-TEJ5UH35-B4Ez_K8Y.js → erDiagram-TEJ5UH35-DWsi2HhW.js} +1 -1
- package/dist-ksadk/assets/eventmodeling-FCH6USID-R5MOzX8B.js +1 -0
- package/dist-ksadk/assets/{flowDiagram-I6XJVG4X-Cugogq8u.js → flowDiagram-I6XJVG4X-BAtVSiaU.js} +1 -1
- package/dist-ksadk/assets/{ganttDiagram-6RSMTGT7-BdL2Ptyi.js → ganttDiagram-6RSMTGT7-jI1A45Ie.js} +1 -1
- package/dist-ksadk/assets/gitGraph-WXDBUCRP-ycpCtFsu.js +1 -0
- package/dist-ksadk/assets/{gitGraphDiagram-PVQCEYII-LTIaD1oy.js → gitGraphDiagram-PVQCEYII-C3fW-u3c.js} +1 -1
- package/dist-ksadk/assets/index-Bbbbu0em.js +165 -0
- package/dist-ksadk/assets/info-J43DQDTF-BG5UaFoK.js +1 -0
- package/dist-ksadk/assets/{infoDiagram-5YYISTIA-Irvk5ODn.js → infoDiagram-5YYISTIA-7Fgxfiew.js} +1 -1
- package/dist-ksadk/assets/{ishikawaDiagram-YF4QCWOH-DvhCdgB4.js → ishikawaDiagram-YF4QCWOH-dXkKN_2f.js} +1 -1
- package/dist-ksadk/assets/{journeyDiagram-JHISSGLW-o1H3k05h.js → journeyDiagram-JHISSGLW-Noo-i6Co.js} +1 -1
- package/dist-ksadk/assets/{kanban-definition-UN3LZRKU-DwLQeiLo.js → kanban-definition-UN3LZRKU-C-qkrNz8.js} +1 -1
- package/dist-ksadk/assets/{katex-rVASVN_G.js → katex-B907dXuX.js} +1 -1
- package/dist-ksadk/assets/{linear-6iVzNmCz.js → linear-CiSItak9.js} +1 -1
- package/dist-ksadk/assets/{mermaid-parser.core-XdJNoTgS.js → mermaid-parser.core-g7ZK2XzV.js} +2 -2
- package/dist-ksadk/assets/{mindmap-definition-RKZ34NQL-CytBxVen.js → mindmap-definition-RKZ34NQL-KEpzYVDW.js} +1 -1
- package/dist-ksadk/assets/packet-YPE3B663-B4R_RXtl.js +1 -0
- package/dist-ksadk/assets/pie-LRSECV5Y-ZvqONtr7.js +1 -0
- package/dist-ksadk/assets/{pieDiagram-4H26LBE5-CaevpDml.js → pieDiagram-4H26LBE5-BetRBqce.js} +1 -1
- package/dist-ksadk/assets/{quadrantDiagram-W4KKPZXB-DN8OUKGZ.js → quadrantDiagram-W4KKPZXB-NTMW-2JW.js} +1 -1
- package/dist-ksadk/assets/radar-GUYGQ44K-MPUTAFuT.js +1 -0
- package/dist-ksadk/assets/{requirementDiagram-4Y6WPE33-BCAqWjys.js → requirementDiagram-4Y6WPE33-DGz7kAYq.js} +1 -1
- package/dist-ksadk/assets/{sankeyDiagram-5OEKKPKP-2dMQM1qM.js → sankeyDiagram-5OEKKPKP-B1npa6g0.js} +1 -1
- package/dist-ksadk/assets/{sequenceDiagram-3UESZ5HK-C-bWXa4S.js → sequenceDiagram-3UESZ5HK-CiiQg1kp.js} +1 -1
- package/dist-ksadk/assets/{stateDiagram-AJRCARHV-D0W5apow.js → stateDiagram-AJRCARHV-DeEoMo9D.js} +1 -1
- package/dist-ksadk/assets/stateDiagram-v2-BHNVJYJU-DdnBxj5o.js +1 -0
- package/dist-ksadk/assets/{timeline-definition-PNZ67QCA-BW_33mxy.js → timeline-definition-PNZ67QCA-C4KoD7P2.js} +1 -1
- package/dist-ksadk/assets/treeView-BLDUP644-BVT3-ekB.js +1 -0
- package/dist-ksadk/assets/treemap-LRROVOQU-DwsRqHk_.js +1 -0
- package/dist-ksadk/assets/{vennDiagram-CIIHVFJN-CNmwt6el.js → vennDiagram-CIIHVFJN-DuDr8-7R.js} +1 -1
- package/dist-ksadk/assets/wardley-L42UT6IY-Btn2OWZX.js +1 -0
- package/dist-ksadk/assets/{wardleyDiagram-YWT4CUSO-CzuRPILG.js → wardleyDiagram-YWT4CUSO-C6phy1Vu.js} +1 -1
- package/dist-ksadk/assets/{xychartDiagram-2RQKCTM6-CuwrcJ7v.js → xychartDiagram-2RQKCTM6-Cx6jCs70.js} +1 -1
- package/dist-ksadk/index.html +1 -1
- package/dist-lib/{ArtifactsPanel-BCjpJZ9m.js → ArtifactsPanel-D3AiN69_.js} +1 -1
- package/dist-lib/{CodeBlock-CnIj5U9o.js → CodeBlock-CWHejqEk.js} +1 -1
- package/dist-lib/{MathMessageMarkdown-DdjmAxKr.js → MathMessageMarkdown-BlZXusY6.js} +2 -2
- package/dist-lib/{NativeTerminalPanel-C1LtiwB7.js → NativeTerminalPanel-mQwtEFvo.js} +1 -1
- package/dist-lib/{WorkspacePanelContainer-DyFPcWsD.js → WorkspacePanelContainer-D5WLGlO_.js} +5 -5
- package/dist-lib/components/chat/ConnectedMessageList.d.ts.map +1 -1
- package/dist-lib/components.js +2 -2
- package/dist-lib/core/run/dispatcher.d.ts.map +1 -1
- package/dist-lib/core/run/engine.d.ts.map +1 -1
- package/dist-lib/hooks/useSessionLifecycle.d.ts.map +1 -1
- package/dist-lib/runtime.js +719 -651
- package/dist-lib/types/session-events.d.ts +1 -0
- package/dist-lib/types/session-events.d.ts.map +1 -1
- package/dist-lib/utils/message-virtualization.d.ts +20 -13
- package/dist-lib/utils/message-virtualization.d.ts.map +1 -1
- package/dist-lib/utils/run-state.d.ts.map +1 -1
- package/dist-lib/utils/session-event-history.d.ts +7 -0
- package/dist-lib/utils/session-event-history.d.ts.map +1 -1
- package/dist-lib/utils/session-events.d.ts.map +1 -1
- package/dist-lib/utils/session-helpers.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist-ksadk/assets/architecture-7EHR7CIX-CH1wnW5S.js +0 -1
- package/dist-ksadk/assets/channel-D20CB9hV.js +0 -1
- package/dist-ksadk/assets/chunk-QZHKN3VN-BsgRgQ_j.js +0 -1
- package/dist-ksadk/assets/classDiagram-4FO5ZUOK-DjrplkNv.js +0 -1
- package/dist-ksadk/assets/classDiagram-v2-Q7XG4LA2-DjrplkNv.js +0 -1
- package/dist-ksadk/assets/eventmodeling-FCH6USID-B6kJGZGf.js +0 -1
- package/dist-ksadk/assets/gitGraph-WXDBUCRP-B16H8iV0.js +0 -1
- package/dist-ksadk/assets/index-CyqLY8HK.js +0 -165
- package/dist-ksadk/assets/info-J43DQDTF-CuylbYl8.js +0 -1
- package/dist-ksadk/assets/packet-YPE3B663-CkTX9qzg.js +0 -1
- package/dist-ksadk/assets/pie-LRSECV5Y-D-9Kb8fQ.js +0 -1
- package/dist-ksadk/assets/radar-GUYGQ44K-9yNm6uCf.js +0 -1
- package/dist-ksadk/assets/stateDiagram-v2-BHNVJYJU-4EIKDL6E.js +0 -1
- package/dist-ksadk/assets/treeView-BLDUP644-Bxe9I30V.js +0 -1
- package/dist-ksadk/assets/treemap-LRROVOQU-IPLUPBu2.js +0 -1
- package/dist-ksadk/assets/wardley-L42UT6IY-mW088A4m.js +0 -1
package/dist-lib/runtime.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { i as e, t } from "./capabilities-CiyyeRQ9.js";
|
|
2
|
-
import { C as n, D as r, E as i, O as a, T as o, _ as s, b as c, c as l, f as u, g as d, h as f, k as p, l as m, m as h, n as g, o as _, p as v, r as y, s as b, t as ee, u as te, v as x, w as S, y as C } from "./WorkspacePanelContainer-
|
|
3
|
-
import { t as
|
|
4
|
-
import { X as
|
|
5
|
-
import { Fragment as
|
|
6
|
-
import * as
|
|
7
|
-
import
|
|
8
|
-
import * as
|
|
9
|
-
import { create as
|
|
2
|
+
import { C as n, D as r, E as i, O as a, T as o, _ as s, b as c, c as l, f as u, g as d, h as f, k as p, l as m, m as h, n as g, o as _, p as v, r as y, s as b, t as ee, u as te, v as x, w as S, y as C } from "./WorkspacePanelContainer-D5WLGlO_.js";
|
|
3
|
+
import { t as w } from "./artifact-BfFsPe5A.js";
|
|
4
|
+
import { X as T } from "lucide-react";
|
|
5
|
+
import { Fragment as ne, jsx as E, jsxs as D } from "react/jsx-runtime";
|
|
6
|
+
import * as O from "react";
|
|
7
|
+
import k, { Suspense as re, useCallback as A, useEffect as j, useMemo as ie, useRef as M, useState as ae } from "react";
|
|
8
|
+
import * as N from "@radix-ui/react-dialog";
|
|
9
|
+
import { create as P } from "zustand";
|
|
10
10
|
//#region src/stores/bootstrap.ts
|
|
11
|
-
var
|
|
11
|
+
var F = P()((t) => ({
|
|
12
12
|
agentId: "default-agent",
|
|
13
13
|
agentName: "Agent",
|
|
14
14
|
agentFramework: "",
|
|
@@ -26,7 +26,7 @@ var P = N()((t) => ({
|
|
|
26
26
|
}));
|
|
27
27
|
//#endregion
|
|
28
28
|
//#region src/stores/model.ts
|
|
29
|
-
function
|
|
29
|
+
function oe(e, t) {
|
|
30
30
|
let n = /* @__PURE__ */ new Map();
|
|
31
31
|
for (let t of e) t?.id && n.set(t.id, t);
|
|
32
32
|
for (let e of t) e?.id && n.set(e.id, {
|
|
@@ -35,18 +35,18 @@ function se(e, t) {
|
|
|
35
35
|
});
|
|
36
36
|
return Array.from(n.values()).sort((e, t) => e.id.localeCompare(t.id));
|
|
37
37
|
}
|
|
38
|
-
var
|
|
38
|
+
var I = P()((e) => ({
|
|
39
39
|
availableModels: [],
|
|
40
40
|
selectedModel: "",
|
|
41
41
|
modelSource: "",
|
|
42
42
|
modelCatalogLoaded: !1,
|
|
43
43
|
thinkingMode: "auto",
|
|
44
|
-
upsertModels: (t) => e((e) => ({ availableModels:
|
|
44
|
+
upsertModels: (t) => e((e) => ({ availableModels: oe(e.availableModels, t) })),
|
|
45
45
|
setSelectedModel: (t) => e({ selectedModel: t }),
|
|
46
46
|
setModelSource: (t) => e({ modelSource: t }),
|
|
47
47
|
setModelCatalogLoaded: (t) => e({ modelCatalogLoaded: t }),
|
|
48
48
|
setThinkingMode: (t) => e({ thinkingMode: t })
|
|
49
|
-
})),
|
|
49
|
+
})), se = (e) => !!(e && e.status !== "completed" && e.status !== "failed" && e.status !== "stopped"), L = P()((e, t) => ({
|
|
50
50
|
isStreaming: !1,
|
|
51
51
|
currentRunId: "",
|
|
52
52
|
stopRequested: !1,
|
|
@@ -55,9 +55,9 @@ var F = N()((e) => ({
|
|
|
55
55
|
setStreaming: (t) => e({ isStreaming: t }),
|
|
56
56
|
setSessionStreaming: (t, n) => e((e) => {
|
|
57
57
|
let r = String(t || "");
|
|
58
|
-
return r ? n ? { isStreaming: !0 } : e.sessionActivities[r] ? { isStreaming: Object.entries(e.sessionActivities).some(([e, t]) => e !== r &&
|
|
58
|
+
return r ? n ? { isStreaming: !0 } : e.sessionActivities[r] ? { isStreaming: Object.entries(e.sessionActivities).some(([e, t]) => e !== r && se(t)) } : { isStreaming: Object.values(e.sessionActivities).some(se) } : { isStreaming: n };
|
|
59
59
|
}),
|
|
60
|
-
isSessionStreaming: (e) =>
|
|
60
|
+
isSessionStreaming: (e) => se(t().getSessionActivity(e)),
|
|
61
61
|
getSessionActivity: (e) => {
|
|
62
62
|
let n = String(e || "");
|
|
63
63
|
return n && t().sessionActivities[n] || null;
|
|
@@ -157,7 +157,7 @@ var F = N()((e) => ({
|
|
|
157
157
|
}));
|
|
158
158
|
//#endregion
|
|
159
159
|
//#region src/utils/session-pagination.js
|
|
160
|
-
function
|
|
160
|
+
function R(e = /* @__PURE__ */ new Set(), t = []) {
|
|
161
161
|
let n = new Set(e);
|
|
162
162
|
for (let e of t) {
|
|
163
163
|
let t = Number(e);
|
|
@@ -165,17 +165,17 @@ function L(e = /* @__PURE__ */ new Set(), t = []) {
|
|
|
165
165
|
}
|
|
166
166
|
return new Set(Array.from(n).sort((e, t) => e - t));
|
|
167
167
|
}
|
|
168
|
-
function
|
|
168
|
+
function ce({ sessionsLength: e = 0, total: t = 0, page: n = 0, pageSize: r = 30, loadedPages: i = /* @__PURE__ */ new Set() } = {}) {
|
|
169
169
|
let a = Math.max(0, Number(t) || 0), o = Math.max(0, Number(e) || 0);
|
|
170
170
|
return {
|
|
171
171
|
total: a,
|
|
172
172
|
page: Math.max(0, Number(n) || 0),
|
|
173
173
|
pageSize: Math.max(1, Number(r) || 30),
|
|
174
|
-
loadedPages:
|
|
174
|
+
loadedPages: R(i),
|
|
175
175
|
hasMore: o < a
|
|
176
176
|
};
|
|
177
177
|
}
|
|
178
|
-
function
|
|
178
|
+
function le({ total: e = 0, pageSize: t = 30, loadedPages: n = /* @__PURE__ */ new Set() } = {}) {
|
|
179
179
|
let r = Math.max(0, Number(e) || 0), i = Math.max(1, Number(t) || 30);
|
|
180
180
|
if (r <= 0) return null;
|
|
181
181
|
let a = Math.ceil(r / i);
|
|
@@ -184,45 +184,45 @@ function ue({ total: e = 0, pageSize: t = 30, loadedPages: n = /* @__PURE__ */ n
|
|
|
184
184
|
}
|
|
185
185
|
//#endregion
|
|
186
186
|
//#region src/stores/session.ts
|
|
187
|
-
function
|
|
187
|
+
function ue(e) {
|
|
188
188
|
let t = e.UpdatedAt;
|
|
189
189
|
if (typeof t == "string") {
|
|
190
190
|
let e = Date.parse(t);
|
|
191
191
|
return Number.isNaN(e) ? 0 : e;
|
|
192
192
|
}
|
|
193
|
-
return typeof t == "number" ? t : 0;
|
|
193
|
+
return typeof t == "number" && Number.isFinite(t) ? t > 1e11 ? t : t * 1e3 : 0;
|
|
194
194
|
}
|
|
195
|
-
var
|
|
196
|
-
function
|
|
195
|
+
var de = "ksadk.pinnedSessionIds";
|
|
196
|
+
function fe() {
|
|
197
197
|
try {
|
|
198
|
-
let e = globalThis.localStorage?.getItem(
|
|
198
|
+
let e = globalThis.localStorage?.getItem(de), t = e ? JSON.parse(e) : [];
|
|
199
199
|
return Array.isArray(t) ? t.filter((e) => typeof e == "string") : [];
|
|
200
200
|
} catch {
|
|
201
201
|
return [];
|
|
202
202
|
}
|
|
203
203
|
}
|
|
204
|
-
function
|
|
204
|
+
function pe(e) {
|
|
205
205
|
try {
|
|
206
|
-
globalThis.localStorage?.setItem(
|
|
206
|
+
globalThis.localStorage?.setItem(de, JSON.stringify(e));
|
|
207
207
|
} catch {}
|
|
208
208
|
}
|
|
209
|
-
function
|
|
209
|
+
function me(e, t) {
|
|
210
210
|
let n = new Set(t);
|
|
211
211
|
return e.slice().sort((e, t) => {
|
|
212
212
|
let r = +!!n.has(e.SessionId), i = +!!n.has(t.SessionId);
|
|
213
|
-
return r === i ?
|
|
213
|
+
return r === i ? ue(t) - ue(e) : i - r;
|
|
214
214
|
});
|
|
215
215
|
}
|
|
216
|
-
function
|
|
216
|
+
function he(e, t, n) {
|
|
217
217
|
let r = /* @__PURE__ */ new Map();
|
|
218
218
|
for (let t of e) t?.SessionId && r.set(t.SessionId, t);
|
|
219
219
|
for (let e of t) e?.SessionId && r.set(e.SessionId, {
|
|
220
220
|
...r.get(e.SessionId) || {},
|
|
221
221
|
...e
|
|
222
222
|
});
|
|
223
|
-
return
|
|
223
|
+
return me(Array.from(r.values()), n);
|
|
224
224
|
}
|
|
225
|
-
var
|
|
225
|
+
var z = P()((e) => ({
|
|
226
226
|
sessions: [],
|
|
227
227
|
currentSessionId: null,
|
|
228
228
|
sessionsAgentId: "",
|
|
@@ -232,12 +232,12 @@ var R = N()((e) => ({
|
|
|
232
232
|
loadedPages: /* @__PURE__ */ new Set(),
|
|
233
233
|
hasMoreSessions: !1,
|
|
234
234
|
isLoadingSessions: !1,
|
|
235
|
-
pinnedSessionIds:
|
|
235
|
+
pinnedSessionIds: fe(),
|
|
236
236
|
eventCache: {},
|
|
237
|
-
setSessions: (t) => e((e) => ({ sessions:
|
|
237
|
+
setSessions: (t) => e((e) => ({ sessions: me(t, e.pinnedSessionIds) })),
|
|
238
238
|
setCurrentSessionId: (t) => e({ currentSessionId: t }),
|
|
239
239
|
upsertSessions: (t, n) => e((e) => {
|
|
240
|
-
let r =
|
|
240
|
+
let r = he(n?.replace ? [] : e.sessions, t, e.pinnedSessionIds), i = n?.page ?? e.sessionsPage, a = n?.pageSize ?? e.sessionsPageSize, o = n?.total ?? Math.max(e.sessionsTotal, r.length), s = n?.replace ? R(/* @__PURE__ */ new Set(), [i]) : R(e.loadedPages, [i]), c = ce({
|
|
241
241
|
sessionsLength: r.length,
|
|
242
242
|
total: o,
|
|
243
243
|
page: i,
|
|
@@ -259,7 +259,7 @@ var R = N()((e) => ({
|
|
|
259
259
|
return {
|
|
260
260
|
sessions: n,
|
|
261
261
|
sessionsTotal: r,
|
|
262
|
-
hasMoreSessions:
|
|
262
|
+
hasMoreSessions: ce({
|
|
263
263
|
sessionsLength: n.length,
|
|
264
264
|
total: r,
|
|
265
265
|
page: e.sessionsPage,
|
|
@@ -283,9 +283,9 @@ var R = N()((e) => ({
|
|
|
283
283
|
let n = new Set(e.pinnedSessionIds);
|
|
284
284
|
n.has(t) ? n.delete(t) : n.add(t);
|
|
285
285
|
let r = Array.from(n);
|
|
286
|
-
return
|
|
286
|
+
return pe(r), {
|
|
287
287
|
pinnedSessionIds: r,
|
|
288
|
-
sessions:
|
|
288
|
+
sessions: me(e.sessions, r)
|
|
289
289
|
};
|
|
290
290
|
}),
|
|
291
291
|
setSessionEventCache: (t, n) => e((e) => ({ eventCache: {
|
|
@@ -313,52 +313,52 @@ var R = N()((e) => ({
|
|
|
313
313
|
let n = { ...e.eventCache };
|
|
314
314
|
return delete n[t], { eventCache: n };
|
|
315
315
|
})
|
|
316
|
-
})),
|
|
317
|
-
function
|
|
316
|
+
})), B = .28;
|
|
317
|
+
function V(e, t = 768) {
|
|
318
318
|
return Number(e) <= t;
|
|
319
319
|
}
|
|
320
|
-
function
|
|
320
|
+
function ge({ isMobile: e, desktopSidebarOpen: t, mobileSidebarOpen: n }) {
|
|
321
321
|
return {
|
|
322
322
|
desktopSidebarVisible: !e && !!t,
|
|
323
323
|
mobileDrawerVisible: !!(e && n)
|
|
324
324
|
};
|
|
325
325
|
}
|
|
326
|
-
function
|
|
326
|
+
function _e({ isMobile: e, viewportHeight: t, desktopMaxHeight: n = 160 }) {
|
|
327
327
|
if (!e) return n;
|
|
328
328
|
let r = Number(t);
|
|
329
329
|
if (!Number.isFinite(r) || r <= 0) return n;
|
|
330
|
-
let i = Math.floor(r *
|
|
330
|
+
let i = Math.floor(r * B);
|
|
331
331
|
return Math.max(120, Math.min(n, i));
|
|
332
332
|
}
|
|
333
333
|
//#endregion
|
|
334
334
|
//#region src/utils/session.js
|
|
335
|
-
var
|
|
336
|
-
function
|
|
335
|
+
var ve = "ksadk:webui:selected-session:";
|
|
336
|
+
function ye(e) {
|
|
337
337
|
return String(e || "").trim() || "default-agent";
|
|
338
338
|
}
|
|
339
|
-
function
|
|
339
|
+
function be(e) {
|
|
340
340
|
if (e && typeof e.getItem == "function") return e;
|
|
341
341
|
try {
|
|
342
342
|
if (typeof window < "u" && window.localStorage) return window.localStorage;
|
|
343
343
|
} catch {}
|
|
344
344
|
return null;
|
|
345
345
|
}
|
|
346
|
-
function
|
|
347
|
-
return `${
|
|
346
|
+
function xe(e) {
|
|
347
|
+
return `${ve}${ye(e)}`;
|
|
348
348
|
}
|
|
349
|
-
function
|
|
350
|
-
let n =
|
|
349
|
+
function Se(e, t) {
|
|
350
|
+
let n = be(t);
|
|
351
351
|
if (!n) return null;
|
|
352
352
|
try {
|
|
353
|
-
return String(n.getItem(
|
|
353
|
+
return String(n.getItem(xe(e)) || "").trim() || null;
|
|
354
354
|
} catch {
|
|
355
355
|
return null;
|
|
356
356
|
}
|
|
357
357
|
}
|
|
358
|
-
function
|
|
359
|
-
let r =
|
|
358
|
+
function Ce(e, t, n) {
|
|
359
|
+
let r = be(n);
|
|
360
360
|
if (!r) return;
|
|
361
|
-
let i =
|
|
361
|
+
let i = xe(e), a = String(t || "").trim();
|
|
362
362
|
try {
|
|
363
363
|
if (a) {
|
|
364
364
|
r.setItem(i, a);
|
|
@@ -367,7 +367,7 @@ function we(e, t, n) {
|
|
|
367
367
|
r.removeItem(i);
|
|
368
368
|
} catch {}
|
|
369
369
|
}
|
|
370
|
-
function
|
|
370
|
+
function we(e, t) {
|
|
371
371
|
if (!Array.isArray(e) || e.length === 0) return null;
|
|
372
372
|
let n = String(t || "").trim();
|
|
373
373
|
if (n && e.some((e) => String(e?.SessionId || "").trim() === n)) return n;
|
|
@@ -379,66 +379,66 @@ function Te(e, t) {
|
|
|
379
379
|
}
|
|
380
380
|
//#endregion
|
|
381
381
|
//#region src/utils/native-platform.js
|
|
382
|
-
var
|
|
383
|
-
function
|
|
382
|
+
var Te = new Map([["openclaw", "OpenClaw"], ["hermes", "Hermes"]]);
|
|
383
|
+
function Ee(e) {
|
|
384
384
|
return String(e || "").trim().toLowerCase();
|
|
385
385
|
}
|
|
386
|
-
function
|
|
386
|
+
function De(e) {
|
|
387
387
|
return String(e || "").trim().toLowerCase();
|
|
388
388
|
}
|
|
389
|
-
function
|
|
389
|
+
function Oe(e) {
|
|
390
390
|
try {
|
|
391
391
|
return new URL("/", e).toString();
|
|
392
392
|
} catch {
|
|
393
393
|
return "/";
|
|
394
394
|
}
|
|
395
395
|
}
|
|
396
|
-
function
|
|
397
|
-
let i =
|
|
396
|
+
function ke({ capability: e, agentFramework: t, accessMode: n, origin: r }) {
|
|
397
|
+
let i = Ee(n);
|
|
398
398
|
if (i !== "owner" && i !== "private" || !e?.Enabled) return null;
|
|
399
|
-
let a =
|
|
399
|
+
let a = Te.get(De(t)) || "运行时";
|
|
400
400
|
return {
|
|
401
|
-
href: typeof e.Href == "string" && e.Href ? new URL(e.Href,
|
|
401
|
+
href: typeof e.Href == "string" && e.Href ? new URL(e.Href, Oe(r)).toString() : Oe(r),
|
|
402
402
|
label: typeof e.Label == "string" && e.Label ? e.Label : "管理平台",
|
|
403
403
|
title: `打开 ${a} 原生管理平台`
|
|
404
404
|
};
|
|
405
405
|
}
|
|
406
406
|
//#endregion
|
|
407
407
|
//#region src/utils/model-options.js
|
|
408
|
-
var
|
|
408
|
+
var Ae = new Set([
|
|
409
409
|
"auto",
|
|
410
410
|
"enabled",
|
|
411
411
|
"disabled"
|
|
412
412
|
]);
|
|
413
|
-
function
|
|
413
|
+
function je(e) {
|
|
414
414
|
let t = String(e || "").trim().toLowerCase();
|
|
415
|
-
return
|
|
415
|
+
return Ae.has(t) ? t : "auto";
|
|
416
416
|
}
|
|
417
|
-
function
|
|
418
|
-
let t =
|
|
417
|
+
function Me(e) {
|
|
418
|
+
let t = je(e);
|
|
419
419
|
if (t === "disabled") return { thinking: { type: "disabled" } };
|
|
420
420
|
if (t === "enabled") return { thinking: { type: "enabled" } };
|
|
421
421
|
}
|
|
422
422
|
//#endregion
|
|
423
423
|
//#region src/hooks/useResponsiveViewport.ts
|
|
424
|
-
function
|
|
424
|
+
function Ne() {
|
|
425
425
|
return typeof window > "u" ? 900 : Math.round(window.visualViewport?.height || window.innerHeight || 900);
|
|
426
426
|
}
|
|
427
|
-
function
|
|
427
|
+
function H() {
|
|
428
428
|
return typeof window > "u" ? {
|
|
429
429
|
isMobile: !1,
|
|
430
430
|
viewportHeight: 900
|
|
431
431
|
} : {
|
|
432
|
-
isMobile:
|
|
433
|
-
viewportHeight:
|
|
432
|
+
isMobile: V(window.innerWidth, 768),
|
|
433
|
+
viewportHeight: Ne()
|
|
434
434
|
};
|
|
435
435
|
}
|
|
436
|
-
function
|
|
437
|
-
let [e, t] =
|
|
438
|
-
return
|
|
436
|
+
function Pe() {
|
|
437
|
+
let [e, t] = ae(() => H());
|
|
438
|
+
return j(() => {
|
|
439
439
|
if (typeof window > "u") return;
|
|
440
440
|
let e = window.matchMedia("(max-width: 768px)"), n = () => {
|
|
441
|
-
t(
|
|
441
|
+
t(H());
|
|
442
442
|
};
|
|
443
443
|
n();
|
|
444
444
|
let r = typeof e.addEventListener == "function" ? (e.addEventListener("change", n), () => e.removeEventListener("change", n)) : (e.addListener(n), () => e.removeListener(n));
|
|
@@ -449,76 +449,76 @@ function Fe() {
|
|
|
449
449
|
}
|
|
450
450
|
//#endregion
|
|
451
451
|
//#region src/api/client.ts
|
|
452
|
-
var
|
|
452
|
+
var U = class extends Error {
|
|
453
453
|
code;
|
|
454
454
|
detail;
|
|
455
455
|
constructor(e, t, n) {
|
|
456
456
|
super(t), this.name = "ApiError", this.code = e, this.detail = n;
|
|
457
457
|
}
|
|
458
|
-
},
|
|
458
|
+
}, W = class extends Error {
|
|
459
459
|
constructor(e = "请求已取消") {
|
|
460
460
|
super(e), this.name = "CancelledError";
|
|
461
461
|
}
|
|
462
|
-
},
|
|
463
|
-
async function
|
|
462
|
+
}, G = "/agentengine/api/v1";
|
|
463
|
+
async function Fe(e) {
|
|
464
464
|
let t;
|
|
465
465
|
try {
|
|
466
466
|
t = await e.json();
|
|
467
467
|
} catch {
|
|
468
|
-
throw new
|
|
468
|
+
throw new U(-2, "响应格式异常");
|
|
469
469
|
}
|
|
470
|
-
if (!e.ok) throw new
|
|
471
|
-
if (t?.Code !== void 0 && t.Code !== 0) throw new
|
|
470
|
+
if (!e.ok) throw new U(e.status, t?.Message || `HTTP ${e.status}`, t);
|
|
471
|
+
if (t?.Code !== void 0 && t.Code !== 0) throw new U(t.Code, t.Message || "请求失败", t);
|
|
472
472
|
return t.Data;
|
|
473
473
|
}
|
|
474
|
-
function
|
|
475
|
-
throw e instanceof DOMException && e.name === "AbortError" ? new
|
|
474
|
+
function K(e) {
|
|
475
|
+
throw e instanceof DOMException && e.name === "AbortError" ? new W() : e;
|
|
476
476
|
}
|
|
477
|
-
async function
|
|
477
|
+
async function q(e, t, n) {
|
|
478
478
|
let r;
|
|
479
479
|
try {
|
|
480
|
-
r = await fetch(`${
|
|
480
|
+
r = await fetch(`${G}/${e}`, {
|
|
481
481
|
method: "POST",
|
|
482
482
|
headers: { "Content-Type": "application/json" },
|
|
483
483
|
body: JSON.stringify(t),
|
|
484
484
|
signal: n?.signal
|
|
485
485
|
});
|
|
486
486
|
} catch (e) {
|
|
487
|
-
throw
|
|
487
|
+
throw K(e);
|
|
488
488
|
}
|
|
489
|
-
return
|
|
489
|
+
return Fe(r);
|
|
490
490
|
}
|
|
491
|
-
async function
|
|
491
|
+
async function Ie(e, t, n) {
|
|
492
492
|
let r;
|
|
493
493
|
try {
|
|
494
|
-
r = await fetch(`${
|
|
494
|
+
r = await fetch(`${G}/${e}`, {
|
|
495
495
|
method: "POST",
|
|
496
496
|
body: t,
|
|
497
497
|
signal: n?.signal
|
|
498
498
|
});
|
|
499
499
|
} catch (e) {
|
|
500
|
-
throw
|
|
500
|
+
throw K(e);
|
|
501
501
|
}
|
|
502
|
-
return
|
|
502
|
+
return Fe(r);
|
|
503
503
|
}
|
|
504
|
-
async function
|
|
505
|
-
let r = new URLSearchParams(t).toString(), i = r ? `${
|
|
504
|
+
async function Le(e, t, n) {
|
|
505
|
+
let r = new URLSearchParams(t).toString(), i = r ? `${G}/${e}?${r}` : `${G}/${e}`, a;
|
|
506
506
|
try {
|
|
507
507
|
a = await fetch(i, { signal: n?.signal });
|
|
508
508
|
} catch (e) {
|
|
509
|
-
throw
|
|
509
|
+
throw K(e);
|
|
510
510
|
}
|
|
511
|
-
if (!a.ok) throw new
|
|
511
|
+
if (!a.ok) throw new U(a.status, `资源获取失败: ${a.statusText}`);
|
|
512
512
|
try {
|
|
513
513
|
return n?.asText ? await a.text() : await a.blob();
|
|
514
514
|
} catch {
|
|
515
|
-
throw new
|
|
515
|
+
throw new U(-3, "文件读取失败");
|
|
516
516
|
}
|
|
517
517
|
}
|
|
518
|
-
async function
|
|
518
|
+
async function Re(e, t, n) {
|
|
519
519
|
let r;
|
|
520
520
|
try {
|
|
521
|
-
r = await fetch(`${
|
|
521
|
+
r = await fetch(`${G}/${e}`, {
|
|
522
522
|
method: "POST",
|
|
523
523
|
headers: {
|
|
524
524
|
"Content-Type": "application/json",
|
|
@@ -528,92 +528,92 @@ async function ze(e, t, n) {
|
|
|
528
528
|
signal: n?.signal
|
|
529
529
|
});
|
|
530
530
|
} catch (e) {
|
|
531
|
-
throw
|
|
531
|
+
throw K(e);
|
|
532
532
|
}
|
|
533
|
-
if (!r.ok) throw new
|
|
534
|
-
if (!r.body) throw new
|
|
533
|
+
if (!r.ok) throw new U(r.status, `流式请求失败: ${r.statusText}`);
|
|
534
|
+
if (!r.body) throw new U(-1, "无法获取响应流");
|
|
535
535
|
return r.body;
|
|
536
536
|
}
|
|
537
|
-
async function
|
|
538
|
-
let r = new URLSearchParams(t).toString(), i = r ? `${
|
|
537
|
+
async function ze(e, t, n) {
|
|
538
|
+
let r = new URLSearchParams(t).toString(), i = r ? `${G}/${e}?${r}` : `${G}/${e}`, a;
|
|
539
539
|
try {
|
|
540
540
|
a = await fetch(i, {
|
|
541
541
|
headers: { Accept: "text/event-stream" },
|
|
542
542
|
signal: n?.signal
|
|
543
543
|
});
|
|
544
544
|
} catch (e) {
|
|
545
|
-
throw
|
|
545
|
+
throw K(e);
|
|
546
546
|
}
|
|
547
|
-
if (!a.ok) throw new
|
|
548
|
-
if (!a.body) throw new
|
|
547
|
+
if (!a.ok) throw new U(a.status, `流式订阅失败: ${a.statusText}`);
|
|
548
|
+
if (!a.body) throw new U(-1, "无法获取响应流");
|
|
549
549
|
return a.body;
|
|
550
550
|
}
|
|
551
551
|
//#endregion
|
|
552
552
|
//#region src/api/bootstrap.ts
|
|
553
|
-
async function
|
|
554
|
-
return
|
|
553
|
+
async function Be() {
|
|
554
|
+
return q("GetAgentUiBootstrap", {});
|
|
555
555
|
}
|
|
556
556
|
//#endregion
|
|
557
557
|
//#region src/api/model.ts
|
|
558
|
-
async function
|
|
559
|
-
return
|
|
558
|
+
async function Ve(e) {
|
|
559
|
+
return q("ListAgentModels", { AgentId: e });
|
|
560
560
|
}
|
|
561
561
|
//#endregion
|
|
562
562
|
//#region src/hooks/useBootstrap.ts
|
|
563
|
-
function
|
|
563
|
+
function He(e) {
|
|
564
564
|
if (!Array.isArray(e)) return ["responses", "chat_completions"];
|
|
565
565
|
let t = e.filter((e) => e === "responses" || e === "chat_completions");
|
|
566
566
|
return t.length > 0 ? t : ["responses", "chat_completions"];
|
|
567
567
|
}
|
|
568
|
-
async function
|
|
568
|
+
async function Ue(e) {
|
|
569
569
|
try {
|
|
570
|
-
let t = await
|
|
571
|
-
Array.isArray(n) &&
|
|
570
|
+
let t = await Ve(e), n = t?.Models;
|
|
571
|
+
Array.isArray(n) && I.getState().upsertModels(n);
|
|
572
572
|
let r = t;
|
|
573
|
-
r?.Current && !
|
|
573
|
+
r?.Current && !I.getState().selectedModel && I.getState().setSelectedModel(String(r.Current)), r?.Source && I.getState().setModelSource(String(r.Source));
|
|
574
574
|
} catch (e) {
|
|
575
575
|
console.error("Failed to fetch models:", e);
|
|
576
576
|
} finally {
|
|
577
|
-
|
|
577
|
+
I.getState().setModelCatalogLoaded(!0);
|
|
578
578
|
}
|
|
579
579
|
}
|
|
580
|
-
function
|
|
581
|
-
|
|
580
|
+
function We(n) {
|
|
581
|
+
j(() => {
|
|
582
582
|
(async () => {
|
|
583
583
|
try {
|
|
584
|
-
let r = await
|
|
585
|
-
if (
|
|
584
|
+
let r = await Be(), i = r, a = i?.Agent, o = String(a?.AgentId || "default-agent");
|
|
585
|
+
if (F.getState().setAgentId(o), a?.Name) {
|
|
586
586
|
let e = String(a.Name);
|
|
587
|
-
|
|
587
|
+
F.getState().setAgentName(e), document.title = e;
|
|
588
588
|
}
|
|
589
589
|
let s = String(a?.Framework || "").trim().toLowerCase();
|
|
590
|
-
|
|
590
|
+
F.getState().setAgentFramework(s);
|
|
591
591
|
let c = e(r);
|
|
592
|
-
|
|
592
|
+
F.getState().setCapabilities(c), F.getState().setApiFormats(He(c.HostedChat.ApiFormats)), F.getState().setAccessMode(String(i?.AccessMode || "Owner"));
|
|
593
593
|
let l = c.WorkspaceFiles && i?.WorkspaceFiles ? i.WorkspaceFiles : null;
|
|
594
|
-
|
|
594
|
+
F.getState().setWorkspaceFiles(l), l || _.getState().setWorkspacePanelOpen(!1), t(c) && n.fetchSessions(o, Se(o));
|
|
595
595
|
let u = i?.Model;
|
|
596
|
-
u?.id && (
|
|
596
|
+
u?.id && (I.getState().setSelectedModel(u.id), I.getState().upsertModels([u]), I.getState().setModelSource(u.source || "")), Ue(o);
|
|
597
597
|
} catch (t) {
|
|
598
|
-
console.error("Failed to fetch bootstrap:", t),
|
|
598
|
+
console.error("Failed to fetch bootstrap:", t), F.getState().setCapabilities(e({ Data: {
|
|
599
599
|
Agent: { Framework: "" },
|
|
600
600
|
ApiFormats: ["responses", "chat_completions"],
|
|
601
601
|
Capabilities: {}
|
|
602
|
-
} })), n.fetchSessions("default-agent",
|
|
602
|
+
} })), n.fetchSessions("default-agent", Se("default-agent")), Ue("default-agent");
|
|
603
603
|
}
|
|
604
604
|
})();
|
|
605
605
|
}, []);
|
|
606
606
|
}
|
|
607
607
|
//#endregion
|
|
608
608
|
//#region src/stores/message.ts
|
|
609
|
-
var
|
|
609
|
+
var J = P()((e) => ({
|
|
610
610
|
messages: [],
|
|
611
611
|
setMessages: (t) => e({ messages: t }),
|
|
612
612
|
patchMessages: (t) => e((e) => ({ messages: t(e.messages) }))
|
|
613
613
|
}));
|
|
614
614
|
//#endregion
|
|
615
615
|
//#region src/utils/responses-stream.js
|
|
616
|
-
function
|
|
616
|
+
function Ge() {
|
|
617
617
|
return {
|
|
618
618
|
toolNames: /* @__PURE__ */ new Map(),
|
|
619
619
|
toolArguments: /* @__PURE__ */ new Map(),
|
|
@@ -621,55 +621,55 @@ function Ke() {
|
|
|
621
621
|
currentResponseId: ""
|
|
622
622
|
};
|
|
623
623
|
}
|
|
624
|
-
function
|
|
624
|
+
function Ke(e) {
|
|
625
625
|
return typeof e == "string" ? e : Array.isArray(e) ? e.map((e) => typeof e == "string" ? e : e && typeof e == "object" && typeof e.text == "string" ? e.text : "").join("") : e && typeof e == "object" && typeof e.text == "string" ? e.text : "";
|
|
626
626
|
}
|
|
627
|
-
function
|
|
627
|
+
function Y(e) {
|
|
628
628
|
return e == null ? "" : typeof e == "string" ? e : typeof e == "object" ? JSON.stringify(e, null, 2) : String(e);
|
|
629
629
|
}
|
|
630
|
-
function
|
|
630
|
+
function X(...e) {
|
|
631
631
|
for (let t of e) {
|
|
632
|
-
let e =
|
|
632
|
+
let e = Ke(t);
|
|
633
633
|
if (e) return e;
|
|
634
634
|
}
|
|
635
635
|
return "";
|
|
636
636
|
}
|
|
637
|
-
function
|
|
637
|
+
function qe(e, t) {
|
|
638
638
|
return String(e?.id || e?.item_id || e?.call_id || t?.item_id || t?.call_id || t?.output_index || "");
|
|
639
639
|
}
|
|
640
|
-
function
|
|
640
|
+
function Je(e, t, n, r, i) {
|
|
641
641
|
t && (e.toolNames.set(t, r), e.toolArguments.set(t, i));
|
|
642
642
|
let a = String(n?.call_id || "");
|
|
643
643
|
a && (e.callIds.set(a, t || r), e.toolNames.set(a, r), e.toolArguments.set(a, i));
|
|
644
644
|
}
|
|
645
|
-
function
|
|
645
|
+
function Ye(e, t, n, r = "tool") {
|
|
646
646
|
let i = String(n?.call_id || "");
|
|
647
647
|
return String(n?.name || n?.tool_name || (t ? e.toolNames.get(t) : "") || (i ? e.toolNames.get(i) : "") || r);
|
|
648
648
|
}
|
|
649
|
-
function
|
|
649
|
+
function Xe(e) {
|
|
650
650
|
if (!e || typeof e != "object") return "";
|
|
651
|
-
let t =
|
|
652
|
-
return
|
|
651
|
+
let t = Ke(e.content);
|
|
652
|
+
return X(e.output_text, e.text, e.summary_text, e.summary, e.delta, t);
|
|
653
653
|
}
|
|
654
|
-
function
|
|
655
|
-
let t = e?.response && typeof e.response == "object" ? e.response : e, n =
|
|
654
|
+
function Ze(e) {
|
|
655
|
+
let t = e?.response && typeof e.response == "object" ? e.response : e, n = X(t?.output_text, t?.text);
|
|
656
656
|
if (n) return n;
|
|
657
657
|
let r = Array.isArray(t?.output) ? t.output : [];
|
|
658
658
|
for (let e of r) {
|
|
659
|
-
let t =
|
|
659
|
+
let t = Xe(e);
|
|
660
660
|
if (t) return t;
|
|
661
661
|
}
|
|
662
662
|
return "";
|
|
663
663
|
}
|
|
664
|
-
function
|
|
664
|
+
function Qe(e) {
|
|
665
665
|
let t = e?.response && typeof e.response == "object" ? e.response : e;
|
|
666
666
|
return Array.isArray(t?.output) ? t.output : [];
|
|
667
667
|
}
|
|
668
|
-
function
|
|
669
|
-
let r = e?.item || e?.output_item || e || {}, i = String(r.type || "").trim(), a =
|
|
668
|
+
function $e({ data: e, state: t, status: n }) {
|
|
669
|
+
let r = e?.item || e?.output_item || e || {}, i = String(r.type || "").trim(), a = qe(r, e);
|
|
670
670
|
if (i === "function_call") {
|
|
671
|
-
let e =
|
|
672
|
-
return
|
|
671
|
+
let e = Ye(t, a, r), i = Y(r.arguments ?? r.args ?? r.input);
|
|
672
|
+
return Je(t, a, r, e, i), [{
|
|
673
673
|
type: "tool_upsert",
|
|
674
674
|
name: e,
|
|
675
675
|
args: i,
|
|
@@ -678,27 +678,27 @@ function et({ data: e, state: t, status: n }) {
|
|
|
678
678
|
}
|
|
679
679
|
if (i === "function_call_output") return [{
|
|
680
680
|
type: "tool_result",
|
|
681
|
-
name:
|
|
682
|
-
output:
|
|
681
|
+
name: Ye(t, a, r),
|
|
682
|
+
output: Y(r.output ?? r.result ?? r.content)
|
|
683
683
|
}];
|
|
684
684
|
if (i === "mcp_approval_request") return [{
|
|
685
685
|
type: "tool_upsert",
|
|
686
686
|
name: String(r.name || "approval"),
|
|
687
|
-
args:
|
|
687
|
+
args: Y(r.arguments ?? r.args),
|
|
688
688
|
status: "paused",
|
|
689
689
|
approvalRequestId: String(r.id || r.approval_request_id || ""),
|
|
690
690
|
previousResponseId: String(e?.response_id || t.currentResponseId || ""),
|
|
691
691
|
serverLabel: String(r.server_label || "")
|
|
692
692
|
}];
|
|
693
693
|
if (i === "reasoning" || i === "reasoning_summary" || i === "reasoning_summary_text") {
|
|
694
|
-
let e =
|
|
694
|
+
let e = Xe(r);
|
|
695
695
|
return e ? [{
|
|
696
696
|
type: "reasoning_delta",
|
|
697
697
|
text: e
|
|
698
698
|
}] : [];
|
|
699
699
|
}
|
|
700
700
|
if (i === "message") {
|
|
701
|
-
let e =
|
|
701
|
+
let e = Xe(r);
|
|
702
702
|
return e ? [{
|
|
703
703
|
type: n === "completed" ? "text_final" : "text_delta",
|
|
704
704
|
text: e
|
|
@@ -706,31 +706,31 @@ function et({ data: e, state: t, status: n }) {
|
|
|
706
706
|
}
|
|
707
707
|
return [];
|
|
708
708
|
}
|
|
709
|
-
function
|
|
709
|
+
function et({ eventName: e, data: t, state: n }) {
|
|
710
710
|
let r = String(t?.type || e || "").trim(), i = String(t?.id || t?.response?.id || t?.response_id || "");
|
|
711
711
|
if (i.startsWith("resp_") && (n.currentResponseId = i), r === "response.tool_call") return [{
|
|
712
712
|
type: "tool_upsert",
|
|
713
713
|
name: String(t?.name || t?.tool_name || "tool"),
|
|
714
|
-
args:
|
|
714
|
+
args: Y(t?.args ?? t?.arguments),
|
|
715
715
|
status: "running"
|
|
716
716
|
}];
|
|
717
717
|
if (r === "response.tool_result" || r === "response.ksadk.tool_result") return [{
|
|
718
718
|
type: "tool_result",
|
|
719
719
|
name: String(t?.name || t?.tool_name || "tool"),
|
|
720
|
-
output:
|
|
720
|
+
output: Y(t?.output ?? t?.result)
|
|
721
721
|
}];
|
|
722
|
-
if (r === "response.output_item.added") return
|
|
722
|
+
if (r === "response.output_item.added") return $e({
|
|
723
723
|
data: t,
|
|
724
724
|
state: n,
|
|
725
725
|
status: "running"
|
|
726
726
|
});
|
|
727
|
-
if (r === "response.output_item.done") return
|
|
727
|
+
if (r === "response.output_item.done") return $e({
|
|
728
728
|
data: t,
|
|
729
729
|
state: n,
|
|
730
730
|
status: "completed"
|
|
731
731
|
});
|
|
732
732
|
if (r === "response.function_call_arguments.delta") {
|
|
733
|
-
let e = String(t?.item_id || t?.call_id || ""), r =
|
|
733
|
+
let e = String(t?.item_id || t?.call_id || ""), r = Ye(n, e, t), i = `${n.toolArguments.get(e) || ""}${String(t?.delta || "")}`;
|
|
734
734
|
return n.toolArguments.set(e, i), [{
|
|
735
735
|
type: "tool_upsert",
|
|
736
736
|
name: r,
|
|
@@ -739,7 +739,7 @@ function tt({ eventName: e, data: t, state: n }) {
|
|
|
739
739
|
}];
|
|
740
740
|
}
|
|
741
741
|
if (r === "response.function_call_arguments.done") {
|
|
742
|
-
let e = String(t?.item_id || t?.call_id || ""), r =
|
|
742
|
+
let e = String(t?.item_id || t?.call_id || ""), r = Ye(n, e, t), i = Y(t?.arguments ?? n.toolArguments.get(e));
|
|
743
743
|
return n.toolArguments.set(e, i), [{
|
|
744
744
|
type: "tool_upsert",
|
|
745
745
|
name: r,
|
|
@@ -748,28 +748,28 @@ function tt({ eventName: e, data: t, state: n }) {
|
|
|
748
748
|
}];
|
|
749
749
|
}
|
|
750
750
|
if (r === "response.reasoning.delta" || r === "response.reasoning_text.delta" || r === "response.reasoning_summary.delta" || r === "response.reasoning_summary_text.delta") {
|
|
751
|
-
let e =
|
|
751
|
+
let e = X(t?.delta, t?.text);
|
|
752
752
|
return e ? [{
|
|
753
753
|
type: "reasoning_delta",
|
|
754
754
|
text: e
|
|
755
755
|
}] : [];
|
|
756
756
|
}
|
|
757
757
|
if (r === "response.output_text.delta") {
|
|
758
|
-
let e =
|
|
758
|
+
let e = X(t?.delta, t?.text);
|
|
759
759
|
return e ? [{
|
|
760
760
|
type: "text_delta",
|
|
761
761
|
text: e
|
|
762
762
|
}] : [];
|
|
763
763
|
}
|
|
764
764
|
if (r === "response.output_text.done") {
|
|
765
|
-
let e =
|
|
765
|
+
let e = X(t?.text, t?.delta);
|
|
766
766
|
return e ? [{
|
|
767
767
|
type: "text_final",
|
|
768
768
|
text: e
|
|
769
769
|
}] : [];
|
|
770
770
|
}
|
|
771
771
|
if (r === "response.content_part.delta") {
|
|
772
|
-
let e = String(t?.part?.type || t?.delta?.type || t?.content_type || ""), n =
|
|
772
|
+
let e = String(t?.part?.type || t?.delta?.type || t?.content_type || ""), n = X(t?.delta?.text, t?.delta, t?.text);
|
|
773
773
|
return n ? e.includes("reasoning") ? [{
|
|
774
774
|
type: "reasoning_delta",
|
|
775
775
|
text: n
|
|
@@ -779,7 +779,7 @@ function tt({ eventName: e, data: t, state: n }) {
|
|
|
779
779
|
}] : [];
|
|
780
780
|
}
|
|
781
781
|
if (r === "response.completed") {
|
|
782
|
-
let e =
|
|
782
|
+
let e = Ze(t), r = Qe(t).flatMap((e) => $e({
|
|
783
783
|
data: {
|
|
784
784
|
...t,
|
|
785
785
|
item: e
|
|
@@ -830,13 +830,13 @@ function tt({ eventName: e, data: t, state: n }) {
|
|
|
830
830
|
}
|
|
831
831
|
//#endregion
|
|
832
832
|
//#region src/core/stream/responses-protocol.ts
|
|
833
|
-
var
|
|
833
|
+
var tt = class {
|
|
834
834
|
id = "responses";
|
|
835
835
|
createState() {
|
|
836
|
-
return
|
|
836
|
+
return Ge();
|
|
837
837
|
}
|
|
838
838
|
parse(e, t) {
|
|
839
|
-
return
|
|
839
|
+
return et({
|
|
840
840
|
eventName: e.eventName,
|
|
841
841
|
data: e.data,
|
|
842
842
|
state: t
|
|
@@ -858,23 +858,23 @@ var nt = class {
|
|
|
858
858
|
};
|
|
859
859
|
//#endregion
|
|
860
860
|
//#region src/utils/stream-parsing.ts
|
|
861
|
-
function
|
|
861
|
+
function nt(e) {
|
|
862
862
|
return typeof e == "string" ? e : Array.isArray(e) ? e.map((e) => typeof e == "string" ? e : e && typeof e == "object" && "text" in e && typeof e.text == "string" ? e.text : "").join("") : "";
|
|
863
863
|
}
|
|
864
|
-
function
|
|
864
|
+
function rt(e) {
|
|
865
865
|
return e && typeof e == "object" ? e : {};
|
|
866
866
|
}
|
|
867
|
-
function
|
|
868
|
-
let t =
|
|
867
|
+
function it(e) {
|
|
868
|
+
let t = rt(e).choices, n = rt(Array.isArray(t) ? t[0] : null), r = rt(n.delta), i = rt(n.message);
|
|
869
869
|
return {
|
|
870
|
-
content:
|
|
871
|
-
reasoning:
|
|
872
|
-
finalText:
|
|
870
|
+
content: nt(r.content),
|
|
871
|
+
reasoning: nt(r.reasoning_content),
|
|
872
|
+
finalText: nt(i.content)
|
|
873
873
|
};
|
|
874
874
|
}
|
|
875
875
|
//#endregion
|
|
876
876
|
//#region src/core/stream/chat-completions-protocol.ts
|
|
877
|
-
var
|
|
877
|
+
var at = class {
|
|
878
878
|
id = "chat_completions";
|
|
879
879
|
createState() {
|
|
880
880
|
return {};
|
|
@@ -882,7 +882,7 @@ var ot = class {
|
|
|
882
882
|
parse(e) {
|
|
883
883
|
let t = e.data;
|
|
884
884
|
if (typeof t != "object" || !t) return [];
|
|
885
|
-
let n =
|
|
885
|
+
let n = it(t), r = [];
|
|
886
886
|
return n.reasoning && r.push({
|
|
887
887
|
type: "reasoning_delta",
|
|
888
888
|
text: n.reasoning
|
|
@@ -894,14 +894,14 @@ var ot = class {
|
|
|
894
894
|
text: n.finalText
|
|
895
895
|
}), r;
|
|
896
896
|
}
|
|
897
|
-
},
|
|
898
|
-
|
|
899
|
-
function
|
|
900
|
-
return
|
|
897
|
+
}, ot = /* @__PURE__ */ new Map();
|
|
898
|
+
ot.set("responses", new tt()), ot.set("chat_completions", new at());
|
|
899
|
+
function st(e) {
|
|
900
|
+
return ot.get(e) || ot.get("responses");
|
|
901
901
|
}
|
|
902
902
|
//#endregion
|
|
903
903
|
//#region src/utils/stream-control.js
|
|
904
|
-
function
|
|
904
|
+
function ct(e = []) {
|
|
905
905
|
return e.some((e) => {
|
|
906
906
|
if (e?.type !== "terminal") return !1;
|
|
907
907
|
let t = String(e.status || "").toLowerCase();
|
|
@@ -910,7 +910,7 @@ function lt(e = []) {
|
|
|
910
910
|
}
|
|
911
911
|
//#endregion
|
|
912
912
|
//#region src/core/transport/sse-parser.ts
|
|
913
|
-
function
|
|
913
|
+
function lt(e) {
|
|
914
914
|
let t = [], n = e.trim();
|
|
915
915
|
if (!n) return t;
|
|
916
916
|
let r = n.split("\n");
|
|
@@ -940,7 +940,7 @@ function ut(e) {
|
|
|
940
940
|
}
|
|
941
941
|
return t;
|
|
942
942
|
}
|
|
943
|
-
function
|
|
943
|
+
function ut(e) {
|
|
944
944
|
let t = e.split("\n\n");
|
|
945
945
|
return {
|
|
946
946
|
chunks: t,
|
|
@@ -949,34 +949,36 @@ function dt(e) {
|
|
|
949
949
|
}
|
|
950
950
|
//#endregion
|
|
951
951
|
//#region src/utils/error.ts
|
|
952
|
-
function
|
|
952
|
+
function dt(e) {
|
|
953
953
|
return e instanceof Error ? e.message : String(e);
|
|
954
954
|
}
|
|
955
|
-
var
|
|
956
|
-
function
|
|
955
|
+
var ft = 1280;
|
|
956
|
+
function pt(e) {
|
|
957
957
|
let { apiFormats: t } = e;
|
|
958
958
|
return t.includes("responses") ? "responses" : t.includes("chat_completions") ? "chat_completions" : "responses";
|
|
959
959
|
}
|
|
960
|
-
function
|
|
961
|
-
let r = Math.min(
|
|
960
|
+
function mt(e, t, n) {
|
|
961
|
+
let r = Math.min(ft, Math.max(420, t - n - 360));
|
|
962
962
|
return Math.min(Math.max(e, 420), r);
|
|
963
963
|
}
|
|
964
964
|
//#endregion
|
|
965
965
|
//#region src/core/run/engine.ts
|
|
966
|
-
var
|
|
966
|
+
var ht = new Set([
|
|
967
967
|
"completed",
|
|
968
968
|
"failed",
|
|
969
969
|
"error",
|
|
970
970
|
"cancelled",
|
|
971
971
|
"canceled",
|
|
972
|
-
"aborted"
|
|
972
|
+
"aborted",
|
|
973
|
+
"interrupted",
|
|
974
|
+
"resume_failed"
|
|
973
975
|
]);
|
|
974
|
-
function
|
|
976
|
+
function gt(e) {
|
|
975
977
|
if (e.EventType !== "run_status") return null;
|
|
976
978
|
let t = String(e.Content?.status || "").trim().toLowerCase();
|
|
977
|
-
return
|
|
979
|
+
return ht.has(t) ? t : null;
|
|
978
980
|
}
|
|
979
|
-
function
|
|
981
|
+
function _t(e, t) {
|
|
980
982
|
let n = String(t?.type || e || "").trim();
|
|
981
983
|
if (n === "response.created") return {
|
|
982
984
|
phase: "运行已创建",
|
|
@@ -1022,11 +1024,11 @@ function vt(e, t) {
|
|
|
1022
1024
|
status: "failed"
|
|
1023
1025
|
} : null;
|
|
1024
1026
|
}
|
|
1025
|
-
function
|
|
1027
|
+
function vt() {
|
|
1026
1028
|
let e = globalThis.crypto;
|
|
1027
1029
|
return e && typeof e.randomUUID == "function" ? `run_${e.randomUUID()}` : `run_${Date.now()}_${Math.random().toString(16).slice(2)}`;
|
|
1028
1030
|
}
|
|
1029
|
-
var
|
|
1031
|
+
var yt = {
|
|
1030
1032
|
idle: [
|
|
1031
1033
|
"creating-session",
|
|
1032
1034
|
"uploading-files",
|
|
@@ -1064,7 +1066,7 @@ var bt = {
|
|
|
1064
1066
|
],
|
|
1065
1067
|
error: ["connecting", "idle"],
|
|
1066
1068
|
cancelled: ["idle"]
|
|
1067
|
-
},
|
|
1069
|
+
}, bt = class {
|
|
1068
1070
|
_stage = "idle";
|
|
1069
1071
|
listeners = /* @__PURE__ */ new Set();
|
|
1070
1072
|
abortController = null;
|
|
@@ -1098,7 +1100,7 @@ var bt = {
|
|
|
1098
1100
|
for (let e of this.listeners) e(t);
|
|
1099
1101
|
}
|
|
1100
1102
|
setStage(e) {
|
|
1101
|
-
let t =
|
|
1103
|
+
let t = yt[this._stage];
|
|
1102
1104
|
t && !t.includes(e) && console.warn(`[RunEngine] Invalid transition: ${this._stage} → ${e}`), this._stage = e, this.emit({
|
|
1103
1105
|
type: "stage_changed",
|
|
1104
1106
|
stage: e
|
|
@@ -1125,11 +1127,11 @@ var bt = {
|
|
|
1125
1127
|
status: "connecting",
|
|
1126
1128
|
countEvent: !1
|
|
1127
1129
|
});
|
|
1128
|
-
let a = t ? "responses" :
|
|
1130
|
+
let a = t ? "responses" : pt({
|
|
1129
1131
|
agentFramework: this.config.agentFramework,
|
|
1130
1132
|
apiFormats: this.config.apiFormats
|
|
1131
|
-
}), o =
|
|
1132
|
-
|
|
1133
|
+
}), o = st(a), s = o.createState(), c = vt();
|
|
1134
|
+
L.getState().setCurrentRunId(c);
|
|
1133
1135
|
let l = this.buildRequestBody(n, a, t, e, i, c), u = await this.api.runAgent(l, { signal: this.abortController?.signal });
|
|
1134
1136
|
this.setStage("streaming"), this.emit({
|
|
1135
1137
|
type: "activity",
|
|
@@ -1156,7 +1158,7 @@ var bt = {
|
|
|
1156
1158
|
f.terminalStatus = (await this.consumeStream(e, o, s, t)).terminalStatus;
|
|
1157
1159
|
}
|
|
1158
1160
|
if (f.terminalStatus === "cancelled") {
|
|
1159
|
-
this.setStage("stopping"),
|
|
1161
|
+
this.setStage("stopping"), L.getState().stopActivity("运行时已取消本次执行。"), this.emit({
|
|
1160
1162
|
type: "activity",
|
|
1161
1163
|
phase: "运行已取消",
|
|
1162
1164
|
status: "stopped",
|
|
@@ -1190,18 +1192,23 @@ var bt = {
|
|
|
1190
1192
|
error: e instanceof Error ? e : Error(String(e))
|
|
1191
1193
|
})));
|
|
1192
1194
|
} finally {
|
|
1193
|
-
|
|
1195
|
+
L.getState().setStreaming(!1), this.setStage("idle"), this.activeCompactionId = null, this.activeSessionId = null, e.onSettled?.(n);
|
|
1194
1196
|
}
|
|
1195
1197
|
})(), !0;
|
|
1196
1198
|
}
|
|
1197
1199
|
stop() {
|
|
1198
|
-
this._stage
|
|
1200
|
+
if (this._stage === "idle") return;
|
|
1201
|
+
this.setStage("stopping");
|
|
1202
|
+
let e = L.getState().currentRunId;
|
|
1203
|
+
e && this.api.cancelRun(this.config.agentId, e).catch((e) => {
|
|
1204
|
+
console.warn("[RunEngine] cancelRun on stop failed:", e);
|
|
1205
|
+
}), this.abortController?.abort(), L.getState().stopActivity(e ? "已向运行时发送取消请求;如果当前框架只支持协作式取消,后台可能会在下一个安全点停止。" : void 0), L.getState().setCurrentRunId(""), this.setStage("cancelled"), this.emit({
|
|
1199
1206
|
type: "system_message",
|
|
1200
|
-
content: "已停止接收本次输出;如果运行时不支持取消,后台执行可能仍会继续。"
|
|
1201
|
-
})
|
|
1207
|
+
content: e ? "已请求取消本次运行。" : "已停止接收本次输出;如果运行时不支持取消,后台执行可能仍会继续。"
|
|
1208
|
+
});
|
|
1202
1209
|
}
|
|
1203
1210
|
disconnect() {
|
|
1204
|
-
this._stage !== "idle" && (this.abortController?.abort(),
|
|
1211
|
+
this._stage !== "idle" && (this.abortController?.abort(), L.getState().setStreaming(!1), L.getState().clearActivity(), this._stage = "idle", this.activeCompactionId = null, this.activeSessionId = null);
|
|
1205
1212
|
}
|
|
1206
1213
|
async cancelRemote(e) {
|
|
1207
1214
|
try {
|
|
@@ -1212,7 +1219,7 @@ var bt = {
|
|
|
1212
1219
|
this.stop();
|
|
1213
1220
|
}
|
|
1214
1221
|
resumeRun(e) {
|
|
1215
|
-
this.abortController?.abort(), this.abortController = new AbortController(), this.activeSessionId = e.sessionId,
|
|
1222
|
+
this.abortController?.abort(), this.abortController = new AbortController(), this.activeSessionId = e.sessionId, L.getState().setCurrentRunId(e.invocationId), this.setStage("connecting"), this.emit({
|
|
1216
1223
|
type: "activity",
|
|
1217
1224
|
phase: "恢复运行事件订阅",
|
|
1218
1225
|
status: "connecting",
|
|
@@ -1236,11 +1243,11 @@ var bt = {
|
|
|
1236
1243
|
let { value: e, done: n } = await r.read();
|
|
1237
1244
|
if (n) break;
|
|
1238
1245
|
a += i.decode(e, { stream: !0 });
|
|
1239
|
-
let { chunks: o, remainder: s } =
|
|
1246
|
+
let { chunks: o, remainder: s } = ut(a);
|
|
1240
1247
|
a = s;
|
|
1241
1248
|
for (let e of o) {
|
|
1242
1249
|
if (!e.trim()) continue;
|
|
1243
|
-
let n =
|
|
1250
|
+
let n = lt(e);
|
|
1244
1251
|
for (let e of n) e.eventName !== "__done__" && (this.emit({
|
|
1245
1252
|
type: "activity",
|
|
1246
1253
|
phase: "收到恢复事件",
|
|
@@ -1248,7 +1255,7 @@ var bt = {
|
|
|
1248
1255
|
}), this.emit({
|
|
1249
1256
|
type: "stream_event",
|
|
1250
1257
|
event: e.data
|
|
1251
|
-
}), t =
|
|
1258
|
+
}), t = gt(e.data) || t);
|
|
1252
1259
|
}
|
|
1253
1260
|
}
|
|
1254
1261
|
this.setStage("completing"), t === "cancelled" || t === "canceled" || t === "aborted" ? this.emit({
|
|
@@ -1256,11 +1263,21 @@ var bt = {
|
|
|
1256
1263
|
phase: "后台长任务已取消",
|
|
1257
1264
|
status: "stopped",
|
|
1258
1265
|
countEvent: !1
|
|
1266
|
+
}) : t === "interrupted" ? this.emit({
|
|
1267
|
+
type: "activity",
|
|
1268
|
+
phase: "后台长任务已中断",
|
|
1269
|
+
status: "stopped",
|
|
1270
|
+
countEvent: !1
|
|
1259
1271
|
}) : t === "failed" || t === "error" ? this.emit({
|
|
1260
1272
|
type: "activity",
|
|
1261
1273
|
phase: "后台长任务失败",
|
|
1262
1274
|
status: "failed",
|
|
1263
1275
|
countEvent: !1
|
|
1276
|
+
}) : t === "resume_failed" ? this.emit({
|
|
1277
|
+
type: "activity",
|
|
1278
|
+
phase: "后台长任务恢复失败",
|
|
1279
|
+
status: "failed",
|
|
1280
|
+
countEvent: !1
|
|
1264
1281
|
}) : this.emit({
|
|
1265
1282
|
type: "activity",
|
|
1266
1283
|
phase: "后台长任务已完成",
|
|
@@ -1270,15 +1287,15 @@ var bt = {
|
|
|
1270
1287
|
} catch (e) {
|
|
1271
1288
|
e instanceof DOMException && e.name === "AbortError" || console.error("Failed to subscribe to run events:", e);
|
|
1272
1289
|
} finally {
|
|
1273
|
-
|
|
1290
|
+
L.getState().setStreaming(!1), L.getState().setCurrentRunId(""), this.setStage("idle"), this.activeSessionId = null;
|
|
1274
1291
|
}
|
|
1275
1292
|
})();
|
|
1276
1293
|
}
|
|
1277
1294
|
resumeCheckpoint(e) {
|
|
1278
1295
|
if (this._stage !== "idle") return !1;
|
|
1279
1296
|
this.abortController = new AbortController(), this.activeSessionId = e.sessionId;
|
|
1280
|
-
let t =
|
|
1281
|
-
return
|
|
1297
|
+
let t = vt();
|
|
1298
|
+
return L.getState().setCurrentRunId(t), (async () => {
|
|
1282
1299
|
try {
|
|
1283
1300
|
if (this.setStage("connecting"), this.emit({
|
|
1284
1301
|
type: "activity",
|
|
@@ -1310,7 +1327,7 @@ var bt = {
|
|
|
1310
1327
|
checkpointId: e.checkpointId,
|
|
1311
1328
|
resumeAttemptId: e.resumeAttemptId,
|
|
1312
1329
|
invocationId: t
|
|
1313
|
-
}, { signal: this.abortController?.signal }), r =
|
|
1330
|
+
}, { signal: this.abortController?.signal }), r = st("responses"), i = r.createState();
|
|
1314
1331
|
this.setStage("streaming"), this.emit({
|
|
1315
1332
|
type: "activity",
|
|
1316
1333
|
source: "restore",
|
|
@@ -1321,7 +1338,7 @@ var bt = {
|
|
|
1321
1338
|
let a = `msg-${Date.now()}`, o = await this.consumeStream(n, r, i, a);
|
|
1322
1339
|
if (o.terminalStatus && o.terminalStatus !== "completed") {
|
|
1323
1340
|
if (o.terminalStatus === "cancelled") {
|
|
1324
|
-
this.setStage("stopping"),
|
|
1341
|
+
this.setStage("stopping"), L.getState().stopActivity("运行时已取消本次恢复。"), this.emit({
|
|
1325
1342
|
type: "activity",
|
|
1326
1343
|
source: "restore",
|
|
1327
1344
|
phase: "恢复已取消",
|
|
@@ -1352,7 +1369,7 @@ var bt = {
|
|
|
1352
1369
|
error: e instanceof Error ? e : Error(String(e))
|
|
1353
1370
|
}));
|
|
1354
1371
|
} finally {
|
|
1355
|
-
|
|
1372
|
+
L.getState().setStreaming(!1), L.getState().setCurrentRunId(""), this.setStage("idle"), this.activeSessionId = null, e.onSettled?.(e.sessionId);
|
|
1356
1373
|
}
|
|
1357
1374
|
})(), !0;
|
|
1358
1375
|
}
|
|
@@ -1386,7 +1403,7 @@ var bt = {
|
|
|
1386
1403
|
} catch (e) {
|
|
1387
1404
|
this.emit({
|
|
1388
1405
|
type: "system_message",
|
|
1389
|
-
content: `【系统提示】图片 ${t.name} 读取失败,原因: ${
|
|
1406
|
+
content: `【系统提示】图片 ${t.name} 读取失败,原因: ${dt(e)}`
|
|
1390
1407
|
});
|
|
1391
1408
|
}
|
|
1392
1409
|
continue;
|
|
@@ -1403,7 +1420,7 @@ var bt = {
|
|
|
1403
1420
|
} catch (e) {
|
|
1404
1421
|
this.emit({
|
|
1405
1422
|
type: "system_message",
|
|
1406
|
-
content: `【系统提示】文件 ${t.name} 上传失败,原因: ${
|
|
1423
|
+
content: `【系统提示】文件 ${t.name} 上传失败,原因: ${dt(e)}`
|
|
1407
1424
|
});
|
|
1408
1425
|
}
|
|
1409
1426
|
}
|
|
@@ -1423,7 +1440,7 @@ var bt = {
|
|
|
1423
1440
|
ApiFormat: t,
|
|
1424
1441
|
Model: this.config.selectedModel || void 0,
|
|
1425
1442
|
ModelMetadata: this.config.selectedModelMetadata || void 0,
|
|
1426
|
-
ModelOptions:
|
|
1443
|
+
ModelOptions: Me(je(this.config.thinkingMode))
|
|
1427
1444
|
};
|
|
1428
1445
|
if (n) o.ResponsesInput = r.responsesInput, o.PreviousResponseId = r.previousResponseId;
|
|
1429
1446
|
else {
|
|
@@ -1451,32 +1468,32 @@ var bt = {
|
|
|
1451
1468
|
type: "assistant_message_created",
|
|
1452
1469
|
messageId: r
|
|
1453
1470
|
})), o += a.decode(e, { stream: !0 });
|
|
1454
|
-
let { chunks: u, remainder: d } =
|
|
1471
|
+
let { chunks: u, remainder: d } = ut(o);
|
|
1455
1472
|
o = d;
|
|
1456
1473
|
for (let e of u) {
|
|
1457
1474
|
if (!e.trim()) continue;
|
|
1458
1475
|
if (this.isCompactionChunk(e)) {
|
|
1459
|
-
let t =
|
|
1476
|
+
let t = lt(e);
|
|
1460
1477
|
for (let e of t) e.eventName.startsWith("response.compaction") && this.upsertCompactionMessage({
|
|
1461
1478
|
...e.data,
|
|
1462
1479
|
phase: e.eventName.split(".").pop()
|
|
1463
1480
|
});
|
|
1464
1481
|
continue;
|
|
1465
1482
|
}
|
|
1466
|
-
let a =
|
|
1483
|
+
let a = lt(e), o = !1, c;
|
|
1467
1484
|
for (let e of a) {
|
|
1468
1485
|
if (e.eventName === "__done__") {
|
|
1469
1486
|
o = !0;
|
|
1470
1487
|
continue;
|
|
1471
1488
|
}
|
|
1472
|
-
let i =
|
|
1489
|
+
let i = _t(e.eventName, e.data);
|
|
1473
1490
|
i && this.emit({
|
|
1474
1491
|
type: "activity",
|
|
1475
1492
|
...i
|
|
1476
1493
|
});
|
|
1477
1494
|
let a = t.parse(e, n);
|
|
1478
1495
|
for (let e of a) this.dispatchAction(e, r);
|
|
1479
|
-
if (
|
|
1496
|
+
if (ct(a)) {
|
|
1480
1497
|
o = !0;
|
|
1481
1498
|
let e = a.find((e) => e.type === "terminal");
|
|
1482
1499
|
c = e && "status" in e ? String(e.status || "") : void 0;
|
|
@@ -1587,18 +1604,18 @@ var bt = {
|
|
|
1587
1604
|
phase: "failed"
|
|
1588
1605
|
}), null);
|
|
1589
1606
|
}
|
|
1590
|
-
},
|
|
1591
|
-
function
|
|
1607
|
+
}, xt = [], St = [];
|
|
1608
|
+
function Z(e) {
|
|
1592
1609
|
return typeof e == "string" ? e.trim() : "";
|
|
1593
1610
|
}
|
|
1594
|
-
function
|
|
1611
|
+
function Ct(e) {
|
|
1595
1612
|
let t = typeof e == "number" ? e : Number(e);
|
|
1596
1613
|
return Number.isFinite(t) ? t : void 0;
|
|
1597
1614
|
}
|
|
1598
|
-
function
|
|
1615
|
+
function wt(e) {
|
|
1599
1616
|
return typeof e == "string" || typeof e == "number" ? e : void 0;
|
|
1600
1617
|
}
|
|
1601
|
-
function
|
|
1618
|
+
function Tt(e) {
|
|
1602
1619
|
return e && typeof e == "object" && !Array.isArray(e) ? e : void 0;
|
|
1603
1620
|
}
|
|
1604
1621
|
function Et(e) {
|
|
@@ -1627,47 +1644,47 @@ function jt(e) {
|
|
|
1627
1644
|
return t ? e.filter((e) => e.runId === t) : [];
|
|
1628
1645
|
}
|
|
1629
1646
|
function Mt(e) {
|
|
1630
|
-
let t =
|
|
1647
|
+
let t = Tt(e);
|
|
1631
1648
|
if (!t) return null;
|
|
1632
|
-
let n =
|
|
1649
|
+
let n = Tt(t.Metadata ?? t.metadata), r = Tt(t.Content ?? t.content), i = Z(t.CheckpointId ?? t.checkpointId ?? t.checkpoint_id ?? n?.checkpoint_id ?? n?.checkpointId ?? r?.checkpoint_id ?? r?.checkpointId), a = Z(t.RunId ?? t.runId ?? t.run_id ?? n?.run_id ?? n?.runId ?? r?.run_id ?? r?.runId);
|
|
1633
1650
|
return !i || !a ? null : {
|
|
1634
1651
|
checkpointId: i,
|
|
1635
1652
|
runId: a,
|
|
1636
|
-
sessionId:
|
|
1637
|
-
invocationId:
|
|
1638
|
-
seqId:
|
|
1639
|
-
timestamp:
|
|
1640
|
-
framework:
|
|
1641
|
-
frameworkRef:
|
|
1642
|
-
phase:
|
|
1643
|
-
stage:
|
|
1644
|
-
summary:
|
|
1645
|
-
nextAction:
|
|
1646
|
-
status:
|
|
1653
|
+
sessionId: Z(t.SessionId ?? t.sessionId ?? t.session_id) || void 0,
|
|
1654
|
+
invocationId: Z(t.InvocationId ?? t.invocationId ?? t.invocation_id) || void 0,
|
|
1655
|
+
seqId: Ct(t.SeqId ?? t.seqId ?? t.seq_id),
|
|
1656
|
+
timestamp: wt(t.Timestamp ?? t.timestamp ?? t.CreatedAt ?? t.createdAt),
|
|
1657
|
+
framework: Z(t.Framework ?? t.framework ?? n?.framework ?? r?.framework) || void 0,
|
|
1658
|
+
frameworkRef: Tt(t.FrameworkRef ?? t.frameworkRef ?? t.framework_ref ?? n?.framework_ref ?? n?.frameworkRef),
|
|
1659
|
+
phase: Z(t.Phase ?? t.phase ?? n?.phase ?? r?.phase) || void 0,
|
|
1660
|
+
stage: Z(t.Stage ?? t.stage ?? n?.stage ?? n?.title) || void 0,
|
|
1661
|
+
summary: Z(t.Summary ?? t.summary ?? n?.summary ?? n?.description) || void 0,
|
|
1662
|
+
nextAction: Z(t.NextAction ?? t.nextAction ?? t.next_action ?? n?.nextAction ?? n?.next_action) || void 0,
|
|
1663
|
+
status: Z(t.Status ?? t.status ?? n?.status ?? r?.status) || void 0,
|
|
1647
1664
|
metadata: n
|
|
1648
1665
|
};
|
|
1649
1666
|
}
|
|
1650
1667
|
function Nt(e) {
|
|
1651
|
-
let t =
|
|
1668
|
+
let t = Tt(e);
|
|
1652
1669
|
if (!t) return null;
|
|
1653
|
-
let n =
|
|
1670
|
+
let n = Z(t.ReceiptId ?? t.receiptId ?? t.receipt_id), r = Z(t.IdempotencyKey ?? t.idempotencyKey ?? t.idempotency_key), i = Z(t.ToolName ?? t.toolName ?? t.tool_name);
|
|
1654
1671
|
return !n || !r || !i ? null : {
|
|
1655
1672
|
receiptId: n,
|
|
1656
1673
|
idempotencyKey: r,
|
|
1657
1674
|
toolName: i,
|
|
1658
|
-
toolCallId:
|
|
1659
|
-
runId:
|
|
1660
|
-
checkpointId:
|
|
1661
|
-
sessionId:
|
|
1662
|
-
invocationId:
|
|
1663
|
-
seqId:
|
|
1664
|
-
timestamp:
|
|
1665
|
-
status:
|
|
1675
|
+
toolCallId: Z(t.ToolCallId ?? t.toolCallId ?? t.tool_call_id) || void 0,
|
|
1676
|
+
runId: Z(t.RunId ?? t.runId ?? t.run_id) || void 0,
|
|
1677
|
+
checkpointId: Z(t.CheckpointId ?? t.checkpointId ?? t.checkpoint_id) || void 0,
|
|
1678
|
+
sessionId: Z(t.SessionId ?? t.sessionId ?? t.session_id) || void 0,
|
|
1679
|
+
invocationId: Z(t.InvocationId ?? t.invocationId ?? t.invocation_id) || void 0,
|
|
1680
|
+
seqId: Ct(t.SeqId ?? t.seqId ?? t.seq_id),
|
|
1681
|
+
timestamp: wt(t.Timestamp ?? t.timestamp ?? t.CreatedAt ?? t.createdAt),
|
|
1682
|
+
status: Z(t.Status ?? t.status) || void 0,
|
|
1666
1683
|
replayed: !!(t.Replayed ?? t.replayed),
|
|
1667
|
-
metadata:
|
|
1684
|
+
metadata: Tt(t.Metadata ?? t.metadata)
|
|
1668
1685
|
};
|
|
1669
1686
|
}
|
|
1670
|
-
var Q =
|
|
1687
|
+
var Q = P()((e, t) => ({
|
|
1671
1688
|
checkpointsBySessionId: {},
|
|
1672
1689
|
toolReceiptsBySessionId: {},
|
|
1673
1690
|
setSessionCheckpoints: (t, n) => e((e) => ({ checkpointsBySessionId: {
|
|
@@ -1696,7 +1713,7 @@ var Q = N()((e, t) => ({
|
|
|
1696
1713
|
},
|
|
1697
1714
|
getSessionCheckpoints: (e) => {
|
|
1698
1715
|
let n = String(e || "");
|
|
1699
|
-
return n && t().checkpointsBySessionId[n] ||
|
|
1716
|
+
return n && t().checkpointsBySessionId[n] || xt;
|
|
1700
1717
|
},
|
|
1701
1718
|
setSessionToolReceipts: (t, n) => e((e) => ({ toolReceiptsBySessionId: {
|
|
1702
1719
|
...e.toolReceiptsBySessionId,
|
|
@@ -1707,7 +1724,7 @@ var Q = N()((e, t) => ({
|
|
|
1707
1724
|
} })),
|
|
1708
1725
|
getSessionToolReceipts: (e) => {
|
|
1709
1726
|
let n = String(e || "");
|
|
1710
|
-
return n && t().toolReceiptsBySessionId[n] ||
|
|
1727
|
+
return n && t().toolReceiptsBySessionId[n] || St;
|
|
1711
1728
|
},
|
|
1712
1729
|
clearSessionCheckpoints: (t) => e((e) => {
|
|
1713
1730
|
let n = String(t || "");
|
|
@@ -1727,7 +1744,9 @@ var Q = N()((e, t) => ({
|
|
|
1727
1744
|
"error",
|
|
1728
1745
|
"cancelled",
|
|
1729
1746
|
"canceled",
|
|
1730
|
-
"aborted"
|
|
1747
|
+
"aborted",
|
|
1748
|
+
"interrupted",
|
|
1749
|
+
"resume_failed"
|
|
1731
1750
|
]), Ft = new Set([
|
|
1732
1751
|
"tool_call",
|
|
1733
1752
|
"tool_result",
|
|
@@ -1822,7 +1841,7 @@ function Bt(e) {
|
|
|
1822
1841
|
function Vt(e) {
|
|
1823
1842
|
let t = e?.Metadata?.responses_output;
|
|
1824
1843
|
if (!Array.isArray(t)) return {};
|
|
1825
|
-
let n =
|
|
1844
|
+
let n = Ge(), r = et({
|
|
1826
1845
|
eventName: "response.completed",
|
|
1827
1846
|
data: { response: {
|
|
1828
1847
|
id: String(e.Metadata?.response_id || ""),
|
|
@@ -2227,7 +2246,7 @@ var $ = !1, sn = new Set(["completed"]), cn = new Set([
|
|
|
2227
2246
|
"incomplete"
|
|
2228
2247
|
]);
|
|
2229
2248
|
function ln(e) {
|
|
2230
|
-
$ || ($ = !0,
|
|
2249
|
+
$ || ($ = !0, J.getState().patchMessages((t) => [...t, {
|
|
2231
2250
|
id: e,
|
|
2232
2251
|
role: "model",
|
|
2233
2252
|
content: "",
|
|
@@ -2237,7 +2256,7 @@ function ln(e) {
|
|
|
2237
2256
|
}
|
|
2238
2257
|
function un(e) {
|
|
2239
2258
|
let t = String(e || "").trim().toLowerCase(), n = sn.has(t) ? "completed" : cn.has(t) ? "error" : null;
|
|
2240
|
-
n &&
|
|
2259
|
+
n && J.getState().patchMessages((e) => e.map((e) => {
|
|
2241
2260
|
if (!e.tools) return e;
|
|
2242
2261
|
let t = !1, r = Object.fromEntries(Object.entries(e.tools).map(([e, r]) => r.status === "running" ? (t = !0, [e, {
|
|
2243
2262
|
...r,
|
|
@@ -2250,14 +2269,14 @@ function un(e) {
|
|
|
2250
2269
|
}));
|
|
2251
2270
|
}
|
|
2252
2271
|
function dn(e) {
|
|
2253
|
-
if (e.sessionId &&
|
|
2272
|
+
if (e.sessionId && z.getState().currentSessionId !== e.sessionId) {
|
|
2254
2273
|
e.type === "stage_changed" && (e.stage === "completing" || e.stage === "error" || e.stage === "cancelled") && ($ = !1);
|
|
2255
2274
|
return;
|
|
2256
2275
|
}
|
|
2257
|
-
let t =
|
|
2276
|
+
let t = J.getState();
|
|
2258
2277
|
switch (e.type) {
|
|
2259
2278
|
case "activity":
|
|
2260
|
-
|
|
2279
|
+
L.getState().updateActivity({
|
|
2261
2280
|
sessionId: e.sessionId,
|
|
2262
2281
|
source: e.source,
|
|
2263
2282
|
status: e.status,
|
|
@@ -2353,16 +2372,16 @@ function dn(e) {
|
|
|
2353
2372
|
break;
|
|
2354
2373
|
}
|
|
2355
2374
|
case "stage_changed":
|
|
2356
|
-
e.stage === "streaming" || e.stage === "connecting" ?
|
|
2375
|
+
e.stage === "streaming" || e.stage === "connecting" ? L.getState().setSessionStreaming(e.sessionId, !0) : (e.stage === "completing" || e.stage === "error" || e.stage === "cancelled") && (L.getState().setSessionStreaming(e.sessionId, !1), $ = !1);
|
|
2357
2376
|
break;
|
|
2358
2377
|
case "stream_ended":
|
|
2359
|
-
|
|
2360
|
-
let t =
|
|
2378
|
+
L.getState().setSessionStreaming(e.sessionId, !1), globalThis.setTimeout(() => {
|
|
2379
|
+
let t = L.getState();
|
|
2361
2380
|
t.getSessionActivity(e.sessionId)?.status === "completed" && t.clearSessionActivity(e.sessionId);
|
|
2362
2381
|
}, 2400), $ = !1;
|
|
2363
2382
|
break;
|
|
2364
2383
|
case "error":
|
|
2365
|
-
|
|
2384
|
+
L.getState().setSessionStreaming(e.sessionId, !1), L.getState().updateActivity({
|
|
2366
2385
|
sessionId: e.sessionId,
|
|
2367
2386
|
status: "failed",
|
|
2368
2387
|
phase: "连接断开或生成出错",
|
|
@@ -2377,27 +2396,29 @@ function dn(e) {
|
|
|
2377
2396
|
case "terminal":
|
|
2378
2397
|
un(e.status);
|
|
2379
2398
|
break;
|
|
2380
|
-
case "stream_event":
|
|
2381
|
-
|
|
2382
|
-
|
|
2383
|
-
|
|
2384
|
-
|
|
2399
|
+
case "stream_event": {
|
|
2400
|
+
let t = e.sessionId || e.event.SessionId;
|
|
2401
|
+
if (e.event.EventType === "run_checkpoint" && t && Q.getState().upsertSessionCheckpoint(t, e.event), e.event.EventType === "run_status") {
|
|
2402
|
+
let n = String(e.event.Content?.status || "").trim().toLowerCase();
|
|
2403
|
+
n === "completed" ? L.getState().updateActivity({
|
|
2404
|
+
sessionId: t,
|
|
2385
2405
|
status: "completed",
|
|
2386
2406
|
phase: "后台长任务已完成",
|
|
2387
2407
|
countEvent: !1
|
|
2388
|
-
}) :
|
|
2389
|
-
sessionId:
|
|
2408
|
+
}) : n === "cancelled" || n === "canceled" || n === "aborted" ? L.getState().updateActivity({
|
|
2409
|
+
sessionId: t,
|
|
2390
2410
|
status: "stopped",
|
|
2391
2411
|
phase: "后台长任务已取消",
|
|
2392
2412
|
countEvent: !1
|
|
2393
|
-
}) : (
|
|
2394
|
-
sessionId:
|
|
2413
|
+
}) : (n === "failed" || n === "error") && L.getState().updateActivity({
|
|
2414
|
+
sessionId: t,
|
|
2395
2415
|
status: "failed",
|
|
2396
2416
|
phase: "后台长任务失败",
|
|
2397
2417
|
countEvent: !1
|
|
2398
2418
|
});
|
|
2399
2419
|
}
|
|
2400
2420
|
break;
|
|
2421
|
+
}
|
|
2401
2422
|
}
|
|
2402
2423
|
}
|
|
2403
2424
|
function fn() {
|
|
@@ -2406,7 +2427,7 @@ function fn() {
|
|
|
2406
2427
|
//#endregion
|
|
2407
2428
|
//#region src/hooks/useRunAgent.ts
|
|
2408
2429
|
function pn(e) {
|
|
2409
|
-
let t =
|
|
2430
|
+
let t = M(/* @__PURE__ */ new Map()), n = M(() => {}), { agentId: r, apiFormats: i, agentFramework: a, selectedModel: o, selectedModelMetadata: s, thinkingMode: c, currentSessionIdRef: l, queuedDraftRef: u, onRunSettled: d, uiCapabilities: f } = e, p = A((e) => {
|
|
2410
2431
|
e.updateConfig({
|
|
2411
2432
|
agentId: r,
|
|
2412
2433
|
apiFormats: i,
|
|
@@ -2424,25 +2445,25 @@ function pn(e) {
|
|
|
2424
2445
|
s,
|
|
2425
2446
|
c,
|
|
2426
2447
|
f.RunLifecycle?.CheckpointResumePreview
|
|
2427
|
-
]), m =
|
|
2448
|
+
]), m = A((n) => {
|
|
2428
2449
|
let r = String(n || "new-session"), i = t.current.get(r);
|
|
2429
|
-
return i ? p(i) : (i = new
|
|
2450
|
+
return i ? p(i) : (i = new bt(e.api), p(i), i.subscribe(dn), t.current.set(r, i)), i;
|
|
2430
2451
|
}, [e.api, p]);
|
|
2431
|
-
|
|
2452
|
+
j(() => {
|
|
2432
2453
|
for (let e of t.current.values()) p(e);
|
|
2433
2454
|
}, [p]);
|
|
2434
|
-
let h =
|
|
2455
|
+
let h = A((e) => {
|
|
2435
2456
|
u.current.push(e), _.getState().setQueuedDrafts((t) => [...t, e]);
|
|
2436
|
-
}, [u]), g =
|
|
2457
|
+
}, [u]), g = A((e) => {
|
|
2437
2458
|
let i = l.current, a = m(i);
|
|
2438
2459
|
if (a.stage !== "idle") return !1;
|
|
2439
|
-
fn(), _.getState().setMobileActionsOpen(!1),
|
|
2460
|
+
fn(), _.getState().setMobileActionsOpen(!1), L.getState().setSessionStreaming(i, !0);
|
|
2440
2461
|
let o = e.text.trim(), s = String(Date.now()), c = e.attachments.map((e) => ({
|
|
2441
2462
|
name: e.name,
|
|
2442
2463
|
url: URL.createObjectURL(e),
|
|
2443
2464
|
type: e.type || "application/octet-stream"
|
|
2444
2465
|
}));
|
|
2445
|
-
(o || c.length > 0) &&
|
|
2466
|
+
(o || c.length > 0) && J.getState().patchMessages((e) => [...e, {
|
|
2446
2467
|
id: s,
|
|
2447
2468
|
role: "user",
|
|
2448
2469
|
content: o,
|
|
@@ -2456,24 +2477,24 @@ function pn(e) {
|
|
|
2456
2477
|
previousResponseId: e.previousResponseId,
|
|
2457
2478
|
sessionId: i,
|
|
2458
2479
|
onSessionCreated: (e) => {
|
|
2459
|
-
|
|
2480
|
+
z.getState().upsertSessions([{
|
|
2460
2481
|
SessionId: e,
|
|
2461
2482
|
UpdatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
2462
|
-
}]), l.current = e,
|
|
2483
|
+
}]), l.current = e, Ce(r, e), z.getState().setCurrentSessionId(e), i !== e && t.current.set(e, a);
|
|
2463
2484
|
},
|
|
2464
2485
|
onSessionUpsert: () => {},
|
|
2465
2486
|
onSettled: (e) => {
|
|
2466
2487
|
d?.(e), n.current();
|
|
2467
2488
|
}
|
|
2468
2489
|
});
|
|
2469
|
-
return u ||
|
|
2490
|
+
return u || L.getState().setSessionStreaming(i, !1), u;
|
|
2470
2491
|
}, [
|
|
2471
2492
|
r,
|
|
2472
2493
|
l,
|
|
2473
2494
|
m,
|
|
2474
2495
|
d
|
|
2475
2496
|
]);
|
|
2476
|
-
return
|
|
2497
|
+
return j(() => {
|
|
2477
2498
|
n.current = () => {
|
|
2478
2499
|
let e = u.current.shift();
|
|
2479
2500
|
if (!e) {
|
|
@@ -2485,14 +2506,14 @@ function pn(e) {
|
|
|
2485
2506
|
});
|
|
2486
2507
|
};
|
|
2487
2508
|
}, [u, g]), {
|
|
2488
|
-
submitDraft:
|
|
2509
|
+
submitDraft: A(async (e, t, n, r) => {
|
|
2489
2510
|
let i = {
|
|
2490
2511
|
text: e,
|
|
2491
2512
|
attachments: t,
|
|
2492
2513
|
responsesInput: n,
|
|
2493
2514
|
previousResponseId: r
|
|
2494
2515
|
};
|
|
2495
|
-
if (m(l.current).stage !== "idle" &&
|
|
2516
|
+
if (m(l.current).stage !== "idle" && L.getState().isSessionStreaming(l.current)) {
|
|
2496
2517
|
n === void 0 && h({
|
|
2497
2518
|
text: e,
|
|
2498
2519
|
attachments: t
|
|
@@ -2509,25 +2530,25 @@ function pn(e) {
|
|
|
2509
2530
|
m,
|
|
2510
2531
|
g
|
|
2511
2532
|
]),
|
|
2512
|
-
stopGeneration:
|
|
2533
|
+
stopGeneration: A(() => {
|
|
2513
2534
|
m(l.current).stop();
|
|
2514
2535
|
}, [l, m]),
|
|
2515
|
-
disconnectRun:
|
|
2536
|
+
disconnectRun: A(() => {
|
|
2516
2537
|
m(l.current).disconnect();
|
|
2517
2538
|
}, [l, m]),
|
|
2518
|
-
resumeCheckpoint:
|
|
2539
|
+
resumeCheckpoint: A((e) => {
|
|
2519
2540
|
let t = m(e.sessionId);
|
|
2520
2541
|
if (t.stage !== "idle") return !1;
|
|
2521
|
-
fn(), _.getState().setMobileActionsOpen(!1),
|
|
2542
|
+
fn(), _.getState().setMobileActionsOpen(!1), L.getState().setSessionStreaming(e.sessionId, !0);
|
|
2522
2543
|
let r = t.resumeCheckpoint({
|
|
2523
2544
|
...e,
|
|
2524
2545
|
onSettled: (e) => {
|
|
2525
2546
|
d?.(e), n.current();
|
|
2526
2547
|
}
|
|
2527
2548
|
});
|
|
2528
|
-
return r ||
|
|
2549
|
+
return r || L.getState().setSessionStreaming(e.sessionId, !1), r;
|
|
2529
2550
|
}, [m, d]),
|
|
2530
|
-
resetCompaction:
|
|
2551
|
+
resetCompaction: A(() => {
|
|
2531
2552
|
fn();
|
|
2532
2553
|
}, [])
|
|
2533
2554
|
};
|
|
@@ -2537,10 +2558,10 @@ function pn(e) {
|
|
|
2537
2558
|
function mn(e) {
|
|
2538
2559
|
let { agentId: t, currentSessionId: n, isStreaming: r, api: i, submitDraft: a } = e;
|
|
2539
2560
|
return {
|
|
2540
|
-
submitResponseFeedback:
|
|
2561
|
+
submitResponseFeedback: A(async (e) => {
|
|
2541
2562
|
if (!n) return;
|
|
2542
2563
|
let r = null;
|
|
2543
|
-
|
|
2564
|
+
J.getState().patchMessages((t) => {
|
|
2544
2565
|
let n = v(t, {
|
|
2545
2566
|
messageId: e.message.id,
|
|
2546
2567
|
rating: e.rating,
|
|
@@ -2556,12 +2577,12 @@ function mn(e) {
|
|
|
2556
2577
|
rating: e.rating,
|
|
2557
2578
|
comment: e.comment || ""
|
|
2558
2579
|
})))?.Feedback);
|
|
2559
|
-
r &&
|
|
2580
|
+
r && J.getState().patchMessages((t) => s(t, {
|
|
2560
2581
|
messageId: e.message.id,
|
|
2561
2582
|
feedback: r
|
|
2562
2583
|
}));
|
|
2563
2584
|
} catch (t) {
|
|
2564
|
-
console.error("Failed to submit response feedback:", t),
|
|
2585
|
+
console.error("Failed to submit response feedback:", t), J.getState().patchMessages((t) => C(t, {
|
|
2565
2586
|
messageId: e.message.id,
|
|
2566
2587
|
previousFeedback: r
|
|
2567
2588
|
}));
|
|
@@ -2571,10 +2592,10 @@ function mn(e) {
|
|
|
2571
2592
|
n,
|
|
2572
2593
|
i
|
|
2573
2594
|
]),
|
|
2574
|
-
deleteResponseFeedback:
|
|
2595
|
+
deleteResponseFeedback: A(async (e) => {
|
|
2575
2596
|
if (!n) return;
|
|
2576
2597
|
let r = e.feedback ? { ...e.feedback } : null;
|
|
2577
|
-
|
|
2598
|
+
J.getState().patchMessages((t) => d(t, { messageId: e.id }));
|
|
2578
2599
|
try {
|
|
2579
2600
|
await i.deleteResponseFeedback(h({
|
|
2580
2601
|
agentId: t,
|
|
@@ -2582,7 +2603,7 @@ function mn(e) {
|
|
|
2582
2603
|
message: e
|
|
2583
2604
|
}));
|
|
2584
2605
|
} catch (t) {
|
|
2585
|
-
console.error("Failed to delete response feedback:", t),
|
|
2606
|
+
console.error("Failed to delete response feedback:", t), J.getState().patchMessages((t) => C(t, {
|
|
2586
2607
|
messageId: e.id,
|
|
2587
2608
|
previousFeedback: r
|
|
2588
2609
|
}));
|
|
@@ -2592,14 +2613,14 @@ function mn(e) {
|
|
|
2592
2613
|
n,
|
|
2593
2614
|
i
|
|
2594
2615
|
]),
|
|
2595
|
-
respondToApproval:
|
|
2596
|
-
!e.approvalRequestId || r || (
|
|
2616
|
+
respondToApproval: A((e) => {
|
|
2617
|
+
!e.approvalRequestId || r || (J.getState().patchMessages((t) => t.map((t) => ({
|
|
2597
2618
|
...t,
|
|
2598
2619
|
tools: t.tools ? Object.fromEntries(Object.entries(t.tools).map(([t, n]) => [t, n.approvalRequestId === e.approvalRequestId ? {
|
|
2599
2620
|
...n,
|
|
2600
2621
|
approvalStatus: e.approve ? "approved" : "rejected"
|
|
2601
2622
|
} : n])) : t.tools
|
|
2602
|
-
}))),
|
|
2623
|
+
}))), J.getState().patchMessages((t) => [...t, {
|
|
2603
2624
|
id: String(Date.now() + Math.random()),
|
|
2604
2625
|
role: "system",
|
|
2605
2626
|
content: e.approve ? "已批准工具调用,正在继续运行。" : "已拒绝工具调用,正在通知运行时。",
|
|
@@ -2626,25 +2647,40 @@ function gn(e) {
|
|
|
2626
2647
|
}
|
|
2627
2648
|
return 0;
|
|
2628
2649
|
}
|
|
2629
|
-
|
|
2650
|
+
var _n = new Set([
|
|
2651
|
+
"in_progress",
|
|
2652
|
+
"running",
|
|
2653
|
+
"resuming",
|
|
2654
|
+
"starting",
|
|
2655
|
+
"queued",
|
|
2656
|
+
"pending"
|
|
2657
|
+
]);
|
|
2658
|
+
function vn(e) {
|
|
2630
2659
|
return String(e?.EventType || e?.event_type || "").trim();
|
|
2631
2660
|
}
|
|
2632
|
-
function
|
|
2661
|
+
function yn(e = [], t = {}) {
|
|
2633
2662
|
let n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map(), i = Array.isArray(e) ? e : [], a = Number.isFinite(Number(t.now)) ? Number(t.now) : Date.now(), o = Number.isFinite(Number(t.staleAfterMs)) ? Number(t.staleAfterMs) : 1800 * 1e3;
|
|
2634
2663
|
for (let e of i) {
|
|
2635
2664
|
let t = hn(e);
|
|
2636
2665
|
if (!t) continue;
|
|
2637
2666
|
let i = gn(e);
|
|
2638
|
-
i && r.set(t, Math.max(r.get(t) || 0, i)),
|
|
2667
|
+
i && r.set(t, Math.max(r.get(t) || 0, i)), vn(e) === "run_status" && n.set(t, String(e?.Content?.status || e?.content?.status || "").trim());
|
|
2639
2668
|
}
|
|
2640
2669
|
return Array.from(n.entries()).filter(([e, t]) => {
|
|
2641
2670
|
let n = r.get(e) || 0, i = n > 0 && a - n > o;
|
|
2642
|
-
return t
|
|
2671
|
+
return _n.has(t) && !i;
|
|
2643
2672
|
}).map(([e]) => e);
|
|
2644
2673
|
}
|
|
2645
2674
|
//#endregion
|
|
2646
2675
|
//#region src/utils/session-event-history.ts
|
|
2647
|
-
|
|
2676
|
+
function bn(e, t) {
|
|
2677
|
+
let n = Math.max(0, Number(e.offset) || 0), r = Math.max(0, Number(e.total) || 0);
|
|
2678
|
+
return n >= r ? null : {
|
|
2679
|
+
offset: n,
|
|
2680
|
+
limit: Math.min(Math.max(1, Number(t) || 1), r - n)
|
|
2681
|
+
};
|
|
2682
|
+
}
|
|
2683
|
+
async function xn(e, t, n) {
|
|
2648
2684
|
let r = Math.max(1, Number(n?.pageSize) || 50), i = n?.shouldContinue || (() => !0), a = () => !i(), o = await t(e, {
|
|
2649
2685
|
offset: 0,
|
|
2650
2686
|
limit: 1
|
|
@@ -2657,34 +2693,43 @@ async function yn(e, t, n) {
|
|
|
2657
2693
|
offset: Number(o.Offset ?? 0),
|
|
2658
2694
|
limit: Number(o.Limit ?? o.Events?.length ?? 0)
|
|
2659
2695
|
};
|
|
2660
|
-
let c =
|
|
2661
|
-
offset:
|
|
2662
|
-
|
|
2663
|
-
});
|
|
2696
|
+
let c = bn({
|
|
2697
|
+
offset: 0,
|
|
2698
|
+
total: s
|
|
2699
|
+
}, r);
|
|
2700
|
+
if (!c) return {
|
|
2701
|
+
events: [],
|
|
2702
|
+
total: s,
|
|
2703
|
+
offset: 0,
|
|
2704
|
+
limit: 0
|
|
2705
|
+
};
|
|
2706
|
+
let l = await t(e, c);
|
|
2664
2707
|
if (a()) return null;
|
|
2665
|
-
let u = l.Events || [];
|
|
2666
|
-
for (;
|
|
2667
|
-
let n =
|
|
2668
|
-
offset:
|
|
2669
|
-
|
|
2670
|
-
});
|
|
2708
|
+
let u = l.Events || [], d = u.length;
|
|
2709
|
+
for (; d < s;) {
|
|
2710
|
+
let n = bn({
|
|
2711
|
+
offset: d,
|
|
2712
|
+
total: s
|
|
2713
|
+
}, r);
|
|
2714
|
+
if (!n) break;
|
|
2715
|
+
let i = await t(e, n);
|
|
2671
2716
|
if (a()) return null;
|
|
2672
|
-
u = rn(i.Events || [], u),
|
|
2717
|
+
u = rn(i.Events || [], u), d += (i.Events || []).length;
|
|
2673
2718
|
}
|
|
2674
2719
|
return {
|
|
2675
2720
|
events: u,
|
|
2676
2721
|
total: s,
|
|
2677
|
-
offset:
|
|
2722
|
+
offset: d,
|
|
2678
2723
|
limit: u.length
|
|
2679
2724
|
};
|
|
2680
2725
|
}
|
|
2681
2726
|
//#endregion
|
|
2682
2727
|
//#region src/hooks/useSessionLifecycle.ts
|
|
2683
|
-
var
|
|
2684
|
-
function
|
|
2728
|
+
var Sn = 9e4, Cn = 30, wn = 50, Tn = 500;
|
|
2729
|
+
function En(e, t) {
|
|
2685
2730
|
return t.length ? e.length ? e.length >= t.length : !1 : !0;
|
|
2686
2731
|
}
|
|
2687
|
-
function
|
|
2732
|
+
function Dn(e) {
|
|
2688
2733
|
if (e.EventType !== "run_status") return null;
|
|
2689
2734
|
let t = String(e.Content?.status || "").trim().toLowerCase();
|
|
2690
2735
|
return t === "completed" ? {
|
|
@@ -2693,13 +2738,19 @@ function Tn(e) {
|
|
|
2693
2738
|
} : t === "cancelled" || t === "canceled" || t === "aborted" ? {
|
|
2694
2739
|
status: "stopped",
|
|
2695
2740
|
phase: "后台长任务已取消"
|
|
2741
|
+
} : t === "interrupted" ? {
|
|
2742
|
+
status: "stopped",
|
|
2743
|
+
phase: "后台长任务已中断"
|
|
2696
2744
|
} : t === "failed" || t === "error" ? {
|
|
2697
2745
|
status: "failed",
|
|
2698
2746
|
phase: "后台长任务失败"
|
|
2747
|
+
} : t === "resume_failed" ? {
|
|
2748
|
+
status: "failed",
|
|
2749
|
+
phase: "后台长任务恢复失败"
|
|
2699
2750
|
} : null;
|
|
2700
2751
|
}
|
|
2701
|
-
function
|
|
2702
|
-
let { agentId: t, api: n, isMobile: r, resetCompaction: i, uiCapabilities: a, disconnectRun: o } = e, s =
|
|
2752
|
+
function On(e) {
|
|
2753
|
+
let { agentId: t, api: n, isMobile: r, resetCompaction: i, uiCapabilities: a, disconnectRun: o } = e, s = M(e.currentSessionId), l = M(e.agentId), u = M(null), d = M(null), f = M(null), p = A(async (e, t, r) => {
|
|
2703
2754
|
let i = r.filter((e) => c(e, !1, !1));
|
|
2704
2755
|
if (!i.length) return;
|
|
2705
2756
|
let a = await Promise.all(i.map(async (r) => {
|
|
@@ -2720,11 +2771,11 @@ function En(e) {
|
|
|
2720
2771
|
}));
|
|
2721
2772
|
if (s.current !== t) return;
|
|
2722
2773
|
let o = new Map(a.filter((e) => !!e).map((e) => [e.messageId, e.feedback]));
|
|
2723
|
-
o.size &&
|
|
2774
|
+
o.size && J.getState().patchMessages((e) => e.map((e) => o.has(e.id) ? {
|
|
2724
2775
|
...e,
|
|
2725
2776
|
feedback: o.get(e.id)
|
|
2726
2777
|
} : e));
|
|
2727
|
-
}, [n]), m =
|
|
2778
|
+
}, [n]), m = A(async (e) => {
|
|
2728
2779
|
u.current?.abort();
|
|
2729
2780
|
let t = new AbortController();
|
|
2730
2781
|
u.current = t;
|
|
@@ -2732,14 +2783,14 @@ function En(e) {
|
|
|
2732
2783
|
u.current !== t || t.signal.aborted || t.abort();
|
|
2733
2784
|
}, o = globalThis.setTimeout(() => {
|
|
2734
2785
|
a();
|
|
2735
|
-
},
|
|
2786
|
+
}, Sn);
|
|
2736
2787
|
try {
|
|
2737
2788
|
let o = (await n.subscribeRunEvents({
|
|
2738
2789
|
sessionId: e.sessionId,
|
|
2739
2790
|
invocationId: e.invocationId,
|
|
2740
2791
|
afterSeqId: e.afterSeqId
|
|
2741
2792
|
}, { signal: t.signal })).getReader(), c = new TextDecoder(), l = "", u = Array.isArray(e.initialEvents) ? e.initialEvents : [];
|
|
2742
|
-
for (
|
|
2793
|
+
for (L.getState().setCurrentRunId(e.invocationId), L.getState().updateActivity({
|
|
2743
2794
|
sessionId: e.sessionId,
|
|
2744
2795
|
status: "running",
|
|
2745
2796
|
phase: "后台长任务运行中",
|
|
@@ -2763,8 +2814,8 @@ function En(e) {
|
|
|
2763
2814
|
try {
|
|
2764
2815
|
let t = JSON.parse(o);
|
|
2765
2816
|
u = rn(u, [t]), i ||= on(t), r ||= i, t.EventType === "run_checkpoint" && Q.getState().upsertSessionCheckpoint(e.sessionId, t);
|
|
2766
|
-
let n =
|
|
2767
|
-
if (n &&
|
|
2817
|
+
let n = Dn(t);
|
|
2818
|
+
if (n && L.getState().updateActivity({
|
|
2768
2819
|
sessionId: e.sessionId,
|
|
2769
2820
|
status: n.status,
|
|
2770
2821
|
phase: n.phase,
|
|
@@ -2775,7 +2826,7 @@ function En(e) {
|
|
|
2775
2826
|
break;
|
|
2776
2827
|
}
|
|
2777
2828
|
let c = nn(u);
|
|
2778
|
-
|
|
2829
|
+
En(c, J.getState().messages) && J.getState().setMessages(c);
|
|
2779
2830
|
} catch (e) {
|
|
2780
2831
|
console.warn("Failed to parse run event data", o, e);
|
|
2781
2832
|
}
|
|
@@ -2784,24 +2835,24 @@ function En(e) {
|
|
|
2784
2835
|
} catch (e) {
|
|
2785
2836
|
e instanceof DOMException && e.name === "AbortError" || console.error("Failed to subscribe run events:", e);
|
|
2786
2837
|
} finally {
|
|
2787
|
-
globalThis.clearTimeout(o), u.current === t && (u.current = null),
|
|
2838
|
+
globalThis.clearTimeout(o), u.current === t && (u.current = null), L.getState().setCurrentRunId(""), r && s.current === e.sessionId && d.current?.(e.sessionId), f.current?.(l.current, e.sessionId);
|
|
2788
2839
|
}
|
|
2789
|
-
}, [n]), h =
|
|
2840
|
+
}, [n]), h = A(async (e) => {
|
|
2790
2841
|
s.current = e;
|
|
2791
2842
|
let t = () => s.current === e;
|
|
2792
|
-
|
|
2843
|
+
z.getState().setCurrentSessionId(e), i(), u.current?.abort(), r && _.getState().setMobileSidebarOpen(!1);
|
|
2793
2844
|
try {
|
|
2794
|
-
let r = await
|
|
2795
|
-
pageSize:
|
|
2845
|
+
let r = await xn(e, n.listSessionEvents, {
|
|
2846
|
+
pageSize: Tn,
|
|
2796
2847
|
shouldContinue: t
|
|
2797
2848
|
});
|
|
2798
|
-
if (!r || (
|
|
2849
|
+
if (!r || (z.getState().setSessionEventCache(e, {
|
|
2799
2850
|
events: r.events,
|
|
2800
2851
|
total: r.total,
|
|
2801
2852
|
offset: r.offset,
|
|
2802
2853
|
limit: r.limit
|
|
2803
2854
|
}), !t())) return;
|
|
2804
|
-
let i =
|
|
2855
|
+
let i = F.getState().capabilities || a;
|
|
2805
2856
|
if (i.RunLifecycle.Enabled && i.RunLifecycle.Checkpoints ? (n.listSessionCheckpoints({
|
|
2806
2857
|
agentId: l.current,
|
|
2807
2858
|
sessionId: e
|
|
@@ -2819,8 +2870,8 @@ function En(e) {
|
|
|
2819
2870
|
})) : Q.getState().clearSessionCheckpoints(e), r.events) {
|
|
2820
2871
|
let n = r.events, a = nn(n);
|
|
2821
2872
|
if (!t()) return;
|
|
2822
|
-
|
|
2823
|
-
let o =
|
|
2873
|
+
J.getState().setMessages(a), p(l.current, e, a);
|
|
2874
|
+
let o = yn(n, {
|
|
2824
2875
|
now: Date.now(),
|
|
2825
2876
|
staleAfterMs: 1800 * 1e3
|
|
2826
2877
|
}), s = an(n);
|
|
@@ -2832,7 +2883,7 @@ function En(e) {
|
|
|
2832
2883
|
});
|
|
2833
2884
|
} else {
|
|
2834
2885
|
if (!t()) return;
|
|
2835
|
-
|
|
2886
|
+
J.getState().setMessages([]), Q.getState().setSessionCheckpoints(e, []), Q.getState().setSessionToolReceipts(e, []);
|
|
2836
2887
|
}
|
|
2837
2888
|
} catch (e) {
|
|
2838
2889
|
console.error("Failed to load session events:", e);
|
|
@@ -2844,73 +2895,73 @@ function En(e) {
|
|
|
2844
2895
|
i,
|
|
2845
2896
|
m,
|
|
2846
2897
|
a
|
|
2847
|
-
]), g =
|
|
2898
|
+
]), g = A(async (e = "default-agent", t = null) => {
|
|
2848
2899
|
try {
|
|
2849
|
-
let r =
|
|
2850
|
-
r.sessionsAgentId && r.sessionsAgentId !== e && r.resetSessionPagination(e),
|
|
2900
|
+
let r = z.getState();
|
|
2901
|
+
r.sessionsAgentId && r.sessionsAgentId !== e && r.resetSessionPagination(e), z.getState().setLoadingSessions(!0);
|
|
2851
2902
|
let i = await n.listSessions(e, {
|
|
2852
2903
|
page: 1,
|
|
2853
|
-
pageSize:
|
|
2904
|
+
pageSize: Cn
|
|
2854
2905
|
});
|
|
2855
|
-
|
|
2906
|
+
z.getState().upsertSessions(i.Sessions || [], {
|
|
2856
2907
|
agentId: e,
|
|
2857
2908
|
total: Number(i.Total ?? i.Sessions?.length ?? 0),
|
|
2858
2909
|
page: Number(i.Page ?? 1),
|
|
2859
|
-
pageSize: Number(i.PageSize ??
|
|
2910
|
+
pageSize: Number(i.PageSize ?? Cn),
|
|
2860
2911
|
replace: !0
|
|
2861
2912
|
});
|
|
2862
|
-
let a =
|
|
2863
|
-
c && c !== o ? h(c) : !c && o && (s.current = null,
|
|
2913
|
+
let a = z.getState().sessions, o = s.current, c = we(a, o || t || Se(e));
|
|
2914
|
+
c && c !== o ? h(c) : !c && o && (s.current = null, z.getState().setCurrentSessionId(null), J.getState().setMessages([]), Q.getState().clearSessionCheckpoints());
|
|
2864
2915
|
} catch (e) {
|
|
2865
|
-
if (e instanceof
|
|
2916
|
+
if (e instanceof W) return;
|
|
2866
2917
|
console.error("Failed to fetch sessions:", e);
|
|
2867
2918
|
} finally {
|
|
2868
|
-
|
|
2919
|
+
z.getState().setLoadingSessions(!1);
|
|
2869
2920
|
}
|
|
2870
|
-
}, [n, h]), v =
|
|
2871
|
-
let e =
|
|
2921
|
+
}, [n, h]), v = A(async () => {
|
|
2922
|
+
let e = z.getState();
|
|
2872
2923
|
if (e.isLoadingSessions || !e.hasMoreSessions) return;
|
|
2873
|
-
let t =
|
|
2924
|
+
let t = le({
|
|
2874
2925
|
total: e.sessionsTotal,
|
|
2875
|
-
pageSize: e.sessionsPageSize ||
|
|
2926
|
+
pageSize: e.sessionsPageSize || Cn,
|
|
2876
2927
|
loadedPages: e.loadedPages
|
|
2877
2928
|
});
|
|
2878
2929
|
if (!t) return;
|
|
2879
|
-
let r = e.sessionsPageSize ||
|
|
2930
|
+
let r = e.sessionsPageSize || Cn, i = e.sessionsAgentId || l.current || "default-agent";
|
|
2880
2931
|
try {
|
|
2881
|
-
|
|
2932
|
+
z.getState().setLoadingSessions(!0);
|
|
2882
2933
|
let a = await n.listSessions(i, {
|
|
2883
2934
|
page: t,
|
|
2884
2935
|
pageSize: r
|
|
2885
2936
|
});
|
|
2886
|
-
|
|
2937
|
+
z.getState().upsertSessions(a.Sessions || [], {
|
|
2887
2938
|
agentId: i,
|
|
2888
2939
|
total: Number(a.Total ?? e.sessionsTotal),
|
|
2889
2940
|
page: Number(a.Page ?? t),
|
|
2890
2941
|
pageSize: Number(a.PageSize ?? r)
|
|
2891
2942
|
});
|
|
2892
2943
|
} catch (e) {
|
|
2893
|
-
if (e instanceof
|
|
2944
|
+
if (e instanceof W) return;
|
|
2894
2945
|
console.error("Failed to load more sessions:", e);
|
|
2895
2946
|
} finally {
|
|
2896
|
-
|
|
2947
|
+
z.getState().setLoadingSessions(!1);
|
|
2897
2948
|
}
|
|
2898
2949
|
}, [n]);
|
|
2899
|
-
|
|
2950
|
+
j(() => {
|
|
2900
2951
|
d.current = h;
|
|
2901
|
-
}, [h]),
|
|
2952
|
+
}, [h]), j(() => {
|
|
2902
2953
|
f.current = g;
|
|
2903
2954
|
}, [g]);
|
|
2904
|
-
let y =
|
|
2955
|
+
let y = A(async () => {
|
|
2905
2956
|
try {
|
|
2906
2957
|
o?.();
|
|
2907
2958
|
let e = (await n.createSession(t)).SessionId;
|
|
2908
|
-
e && (
|
|
2959
|
+
e && (z.getState().upsertSessions([{
|
|
2909
2960
|
SessionId: e,
|
|
2910
2961
|
UpdatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
2911
|
-
}]), s.current = e,
|
|
2962
|
+
}]), s.current = e, z.getState().setCurrentSessionId(e), J.getState().setMessages([]), Q.getState().setSessionCheckpoints(e, []), Q.getState().setSessionToolReceipts(e, []), r && (_.getState().setMobileSidebarOpen(!1), _.getState().setMobileActionsOpen(!1)), g(t, e));
|
|
2912
2963
|
} catch (e) {
|
|
2913
|
-
if (e instanceof
|
|
2964
|
+
if (e instanceof W) return;
|
|
2914
2965
|
console.error("Failed to create session:", e);
|
|
2915
2966
|
}
|
|
2916
2967
|
}, [
|
|
@@ -2919,11 +2970,11 @@ function En(e) {
|
|
|
2919
2970
|
o,
|
|
2920
2971
|
g,
|
|
2921
2972
|
r
|
|
2922
|
-
]), b =
|
|
2973
|
+
]), b = A(async (e) => {
|
|
2923
2974
|
try {
|
|
2924
|
-
await n.deleteSession(e),
|
|
2975
|
+
await n.deleteSession(e), z.getState().removeSession(e), z.getState().clearSessionEventCache(e), s.current === e && (s.current = null, J.getState().setMessages([]), Q.getState().clearSessionCheckpoints(e), z.getState().setCurrentSessionId(null), g(t));
|
|
2925
2976
|
} catch (e) {
|
|
2926
|
-
if (e instanceof
|
|
2977
|
+
if (e instanceof W) return;
|
|
2927
2978
|
console.error("Failed to delete session", e);
|
|
2928
2979
|
}
|
|
2929
2980
|
}, [
|
|
@@ -2935,29 +2986,26 @@ function En(e) {
|
|
|
2935
2986
|
fetchSessions: g,
|
|
2936
2987
|
loadMoreSessions: v,
|
|
2937
2988
|
loadSession: h,
|
|
2938
|
-
loadOlderSessionEvents:
|
|
2939
|
-
let t =
|
|
2940
|
-
if (!t || t.
|
|
2941
|
-
let r =
|
|
2942
|
-
try {
|
|
2943
|
-
|
|
2944
|
-
let
|
|
2945
|
-
|
|
2946
|
-
limit: i
|
|
2947
|
-
}), o = rn(a.Events || [], t.events);
|
|
2948
|
-
if (R.getState().setSessionEventCache(e, {
|
|
2989
|
+
loadOlderSessionEvents: A(async (e) => {
|
|
2990
|
+
let t = z.getState().eventCache[e];
|
|
2991
|
+
if (!t || t.isLoadingOlder) return;
|
|
2992
|
+
let r = bn(t, wn);
|
|
2993
|
+
if (r) try {
|
|
2994
|
+
z.getState().setSessionEventLoadingOlder(e, !0);
|
|
2995
|
+
let i = await n.listSessionEvents(e, r), a = i.Events || [], o = rn(a, t.events), c = t.offset + a.length;
|
|
2996
|
+
if (z.getState().setSessionEventCache(e, {
|
|
2949
2997
|
events: o,
|
|
2950
|
-
total: Number(
|
|
2951
|
-
offset:
|
|
2998
|
+
total: Number(i.Total ?? t.total),
|
|
2999
|
+
offset: c,
|
|
2952
3000
|
limit: o.length
|
|
2953
3001
|
}), s.current === e) {
|
|
2954
3002
|
let t = nn(o);
|
|
2955
|
-
|
|
3003
|
+
J.getState().setMessages(t), p(l.current, e, t);
|
|
2956
3004
|
}
|
|
2957
3005
|
} catch (e) {
|
|
2958
|
-
e instanceof
|
|
3006
|
+
e instanceof W || console.error("Failed to load older session events:", e);
|
|
2959
3007
|
} finally {
|
|
2960
|
-
|
|
3008
|
+
z.getState().setSessionEventLoadingOlder(e, !1);
|
|
2961
3009
|
}
|
|
2962
3010
|
}, [n, p]),
|
|
2963
3011
|
createNewSession: y,
|
|
@@ -2969,28 +3017,28 @@ function En(e) {
|
|
|
2969
3017
|
}
|
|
2970
3018
|
//#endregion
|
|
2971
3019
|
//#region src/components/chat/ConnectedSidebar.tsx
|
|
2972
|
-
function
|
|
2973
|
-
let u =
|
|
3020
|
+
function kn({ uiCapabilities: e, createNewSession: n, deleteSession: a, loadSession: s, loadMoreSessions: c }) {
|
|
3021
|
+
let u = z((e) => e.sessions), d = z((e) => e.currentSessionId), f = z((e) => e.pinnedSessionIds), m = z((e) => e.isLoadingSessions), h = z((e) => e.hasMoreSessions), g = _((e) => e.sidebarOpen), v = _((e) => e.mobileSidebarOpen), { isMobile: y } = Pe(), b = t(e), { desktopSidebarVisible: ee } = ge({
|
|
2974
3022
|
isMobile: y,
|
|
2975
3023
|
desktopSidebarOpen: g,
|
|
2976
3024
|
mobileSidebarOpen: v
|
|
2977
3025
|
});
|
|
2978
|
-
return b ? y ? /* @__PURE__ */
|
|
3026
|
+
return b ? y ? /* @__PURE__ */ E(S, {
|
|
2979
3027
|
open: v,
|
|
2980
3028
|
onOpenChange: (e) => _.getState().setMobileSidebarOpen(e),
|
|
2981
|
-
children: /* @__PURE__ */
|
|
3029
|
+
children: /* @__PURE__ */ D(o, {
|
|
2982
3030
|
side: "left",
|
|
2983
3031
|
className: "w-[88vw] max-w-sm border-slate-200 bg-slate-50 p-0 dark:border-slate-800 dark:bg-slate-950",
|
|
2984
3032
|
children: [
|
|
2985
|
-
/* @__PURE__ */
|
|
3033
|
+
/* @__PURE__ */ E(r, {
|
|
2986
3034
|
className: "sr-only",
|
|
2987
3035
|
children: "历史记录"
|
|
2988
3036
|
}),
|
|
2989
|
-
/* @__PURE__ */
|
|
3037
|
+
/* @__PURE__ */ E(i, {
|
|
2990
3038
|
className: "sr-only",
|
|
2991
3039
|
children: "查看和切换历史对话。"
|
|
2992
3040
|
}),
|
|
2993
|
-
/* @__PURE__ */
|
|
3041
|
+
/* @__PURE__ */ E(l, {
|
|
2994
3042
|
sessions: u,
|
|
2995
3043
|
currentSessionId: d,
|
|
2996
3044
|
onCreateNewSession: n,
|
|
@@ -2999,7 +3047,7 @@ function Dn({ uiCapabilities: e, createNewSession: n, deleteSession: a, loadSess
|
|
|
2999
3047
|
t.stopPropagation(), a(e);
|
|
3000
3048
|
},
|
|
3001
3049
|
onTogglePinSession: (e, t) => {
|
|
3002
|
-
t.stopPropagation(),
|
|
3050
|
+
t.stopPropagation(), z.getState().togglePinnedSession(e);
|
|
3003
3051
|
},
|
|
3004
3052
|
onLoadMoreSessions: c,
|
|
3005
3053
|
sessionTitle: te,
|
|
@@ -3009,9 +3057,9 @@ function Dn({ uiCapabilities: e, createNewSession: n, deleteSession: a, loadSess
|
|
|
3009
3057
|
})
|
|
3010
3058
|
]
|
|
3011
3059
|
})
|
|
3012
|
-
}) : /* @__PURE__ */
|
|
3060
|
+
}) : /* @__PURE__ */ E("aside", {
|
|
3013
3061
|
className: p("flex-shrink-0 overflow-hidden border-r border-slate-200 transition-[width] duration-300 ease-in-out dark:border-slate-800", ee ? "w-[280px]" : "w-0 border-r-0"),
|
|
3014
|
-
children: /* @__PURE__ */
|
|
3062
|
+
children: /* @__PURE__ */ E(l, {
|
|
3015
3063
|
sessions: u,
|
|
3016
3064
|
currentSessionId: d,
|
|
3017
3065
|
onCreateNewSession: n,
|
|
@@ -3020,7 +3068,7 @@ function Dn({ uiCapabilities: e, createNewSession: n, deleteSession: a, loadSess
|
|
|
3020
3068
|
t.stopPropagation(), a(e);
|
|
3021
3069
|
},
|
|
3022
3070
|
onTogglePinSession: (e, t) => {
|
|
3023
|
-
t.stopPropagation(),
|
|
3071
|
+
t.stopPropagation(), z.getState().togglePinnedSession(e);
|
|
3024
3072
|
},
|
|
3025
3073
|
onLoadMoreSessions: c,
|
|
3026
3074
|
sessionTitle: te,
|
|
@@ -3032,78 +3080,78 @@ function Dn({ uiCapabilities: e, createNewSession: n, deleteSession: a, loadSess
|
|
|
3032
3080
|
}
|
|
3033
3081
|
//#endregion
|
|
3034
3082
|
//#region src/components/ui/dialog.tsx
|
|
3035
|
-
var
|
|
3083
|
+
var An = N.Root, jn = N.Portal, Mn = O.forwardRef(({ className: e, ...t }, n) => /* @__PURE__ */ E(N.Overlay, {
|
|
3036
3084
|
ref: n,
|
|
3037
3085
|
className: p("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", e),
|
|
3038
3086
|
...t
|
|
3039
3087
|
}));
|
|
3040
|
-
|
|
3041
|
-
var
|
|
3088
|
+
Mn.displayName = N.Overlay.displayName;
|
|
3089
|
+
var Nn = O.forwardRef(({ className: e, children: t, ...n }, r) => /* @__PURE__ */ D(jn, { children: [/* @__PURE__ */ E(Mn, {}), /* @__PURE__ */ D(N.Content, {
|
|
3042
3090
|
ref: r,
|
|
3043
3091
|
className: p("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg", e),
|
|
3044
3092
|
...n,
|
|
3045
|
-
children: [t, /* @__PURE__ */
|
|
3093
|
+
children: [t, /* @__PURE__ */ D(N.Close, {
|
|
3046
3094
|
className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",
|
|
3047
|
-
children: [/* @__PURE__ */ T
|
|
3095
|
+
children: [/* @__PURE__ */ E(T, { className: "h-4 w-4" }), /* @__PURE__ */ E("span", {
|
|
3048
3096
|
className: "sr-only",
|
|
3049
3097
|
children: "Close"
|
|
3050
3098
|
})]
|
|
3051
3099
|
})]
|
|
3052
3100
|
})] }));
|
|
3053
|
-
|
|
3054
|
-
var
|
|
3101
|
+
Nn.displayName = N.Content.displayName;
|
|
3102
|
+
var Pn = ({ className: e, ...t }) => /* @__PURE__ */ E("div", {
|
|
3055
3103
|
className: p("flex flex-col space-y-1.5 text-center sm:text-left", e),
|
|
3056
3104
|
...t
|
|
3057
3105
|
});
|
|
3058
|
-
|
|
3059
|
-
var
|
|
3106
|
+
Pn.displayName = "DialogHeader";
|
|
3107
|
+
var Fn = ({ className: e, ...t }) => /* @__PURE__ */ E("div", {
|
|
3060
3108
|
className: p("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", e),
|
|
3061
3109
|
...t
|
|
3062
3110
|
});
|
|
3063
|
-
|
|
3064
|
-
var
|
|
3111
|
+
Fn.displayName = "DialogFooter";
|
|
3112
|
+
var In = O.forwardRef(({ className: e, ...t }, n) => /* @__PURE__ */ E(N.Title, {
|
|
3065
3113
|
ref: n,
|
|
3066
3114
|
className: p("text-lg font-semibold leading-none tracking-tight", e),
|
|
3067
3115
|
...t
|
|
3068
3116
|
}));
|
|
3069
|
-
|
|
3070
|
-
var
|
|
3117
|
+
In.displayName = N.Title.displayName;
|
|
3118
|
+
var Ln = O.forwardRef(({ className: e, ...t }, n) => /* @__PURE__ */ E(N.Description, {
|
|
3071
3119
|
ref: n,
|
|
3072
3120
|
className: p("text-sm text-muted-foreground", e),
|
|
3073
3121
|
...t
|
|
3074
3122
|
}));
|
|
3075
|
-
|
|
3123
|
+
Ln.displayName = N.Description.displayName;
|
|
3076
3124
|
//#endregion
|
|
3077
3125
|
//#region src/components/chat/AttachmentPreview.tsx
|
|
3078
|
-
function
|
|
3126
|
+
function Rn(e, t) {
|
|
3079
3127
|
if (!(!t || e)) return {
|
|
3080
3128
|
width: `min(${t.width}px, calc(100vw - 5rem))`,
|
|
3081
3129
|
height: `min(${t.height}px, calc(100vh - 9rem))`
|
|
3082
3130
|
};
|
|
3083
3131
|
}
|
|
3084
|
-
function
|
|
3132
|
+
function zn(e, t) {
|
|
3085
3133
|
if (!(!t || e)) return { width: `min(${t.width + 32}px, calc(100vw - 3rem))` };
|
|
3086
3134
|
}
|
|
3087
|
-
function
|
|
3088
|
-
return /* @__PURE__ */
|
|
3135
|
+
function Bn({ attachment: e, isMobile: t, previewImageSize: n, onClose: r, onImageLoad: i }) {
|
|
3136
|
+
return /* @__PURE__ */ E(An, {
|
|
3089
3137
|
open: !!e?.url,
|
|
3090
3138
|
onOpenChange: (e) => !e && r(),
|
|
3091
|
-
children: /* @__PURE__ */
|
|
3139
|
+
children: /* @__PURE__ */ D(Nn, {
|
|
3092
3140
|
className: p("gap-0 overflow-hidden border-slate-700 bg-slate-950 p-0 text-slate-100 shadow-2xl [&>button]:right-3 [&>button]:top-3 [&>button]:rounded-md [&>button]:border [&>button]:border-slate-700 [&>button]:bg-slate-900/70 [&>button]:p-1.5 [&>button]:text-slate-200 [&>button]:opacity-100", t ? "left-0 top-0 h-[var(--app-height)] max-h-[var(--app-height)] w-screen max-w-none translate-x-0 translate-y-0 rounded-none border-0" : "max-h-[calc(100vh-2rem)] max-w-[calc(100vw-2rem)] rounded-2xl"),
|
|
3093
|
-
style:
|
|
3094
|
-
children: [/* @__PURE__ */
|
|
3141
|
+
style: zn(t, n),
|
|
3142
|
+
children: [/* @__PURE__ */ E("div", {
|
|
3095
3143
|
className: "flex items-center gap-3 border-b border-slate-800 px-4 py-3 pr-16",
|
|
3096
|
-
children: /* @__PURE__ */
|
|
3144
|
+
children: /* @__PURE__ */ E(In, {
|
|
3097
3145
|
className: "truncate text-sm font-medium",
|
|
3098
3146
|
children: e?.name || "附件预览"
|
|
3099
3147
|
})
|
|
3100
|
-
}), /* @__PURE__ */
|
|
3148
|
+
}), /* @__PURE__ */ E("div", {
|
|
3101
3149
|
className: p("flex items-center justify-center overflow-auto bg-slate-950", t ? "h-full p-4 pb-[calc(var(--safe-area-bottom)+1rem)]" : "max-h-[calc(100vh-7rem)] p-4"),
|
|
3102
|
-
children: e ? e.type.startsWith("image/") ? /* @__PURE__ */
|
|
3150
|
+
children: e ? e.type.startsWith("image/") ? /* @__PURE__ */ E("img", {
|
|
3103
3151
|
src: e.url,
|
|
3104
3152
|
alt: e.name,
|
|
3105
3153
|
className: p("object-contain", t ? "h-auto max-h-full w-full max-w-full" : "h-auto w-auto max-h-[calc(100vh-9rem)] max-w-[calc(100vw-5rem)]"),
|
|
3106
|
-
style:
|
|
3154
|
+
style: Rn(t, n),
|
|
3107
3155
|
onLoad: (e) => {
|
|
3108
3156
|
let t = e.currentTarget;
|
|
3109
3157
|
i({
|
|
@@ -3111,7 +3159,7 @@ function Rn({ attachment: e, isMobile: t, previewImageSize: n, onClose: r, onIma
|
|
|
3111
3159
|
height: t.naturalHeight
|
|
3112
3160
|
});
|
|
3113
3161
|
}
|
|
3114
|
-
}) : /* @__PURE__ */
|
|
3162
|
+
}) : /* @__PURE__ */ E("iframe", {
|
|
3115
3163
|
src: e.url,
|
|
3116
3164
|
title: e.name,
|
|
3117
3165
|
className: "h-full min-h-[24rem] w-full rounded-xl border border-slate-800 bg-white"
|
|
@@ -3122,7 +3170,7 @@ function Rn({ attachment: e, isMobile: t, previewImageSize: n, onClose: r, onIma
|
|
|
3122
3170
|
}
|
|
3123
3171
|
//#endregion
|
|
3124
3172
|
//#region src/utils/context.js
|
|
3125
|
-
function
|
|
3173
|
+
function Vn(e) {
|
|
3126
3174
|
if (typeof e == "number" && Number.isFinite(e) && e > 0) return e;
|
|
3127
3175
|
if (typeof e == "string" && e.trim()) {
|
|
3128
3176
|
let t = Number(e);
|
|
@@ -3130,15 +3178,15 @@ function zn(e) {
|
|
|
3130
3178
|
}
|
|
3131
3179
|
return null;
|
|
3132
3180
|
}
|
|
3133
|
-
function
|
|
3181
|
+
function Hn(e) {
|
|
3134
3182
|
return /[\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]/u.test(e);
|
|
3135
3183
|
}
|
|
3136
|
-
function
|
|
3184
|
+
function Un(e) {
|
|
3137
3185
|
let t = String(e || "").trim();
|
|
3138
3186
|
if (!t) return 0;
|
|
3139
3187
|
let n = 0, r = 0;
|
|
3140
3188
|
for (let e of t) {
|
|
3141
|
-
if (
|
|
3189
|
+
if (Hn(e)) {
|
|
3142
3190
|
n += 1;
|
|
3143
3191
|
continue;
|
|
3144
3192
|
}
|
|
@@ -3146,24 +3194,24 @@ function Vn(e) {
|
|
|
3146
3194
|
}
|
|
3147
3195
|
return Math.max(1, n + Math.ceil(r / 4));
|
|
3148
3196
|
}
|
|
3149
|
-
function
|
|
3197
|
+
function Wn(e) {
|
|
3150
3198
|
if (!e) return 0;
|
|
3151
|
-
if (e.role === "system") return e.eventType === "context_checkpoint" ?
|
|
3152
|
-
let t =
|
|
3153
|
-
return e.tools && (t += Object.values(e.tools).reduce((e, t) => e +
|
|
3199
|
+
if (e.role === "system") return e.eventType === "context_checkpoint" ? Un(e.summary || "") : 0;
|
|
3200
|
+
let t = Un(e.content || "");
|
|
3201
|
+
return e.tools && (t += Object.values(e.tools).reduce((e, t) => e + Un(t?.name || "") + Un(t?.args || "") + Un(t?.output || ""), 0)), t;
|
|
3154
3202
|
}
|
|
3155
|
-
function
|
|
3156
|
-
return e ?
|
|
3203
|
+
function Gn(e) {
|
|
3204
|
+
return e ? Vn(e.context_window_tokens) ?? Vn(e?.limits?.context_window_tokens) : null;
|
|
3157
3205
|
}
|
|
3158
|
-
function
|
|
3159
|
-
return e ?
|
|
3206
|
+
function Kn(e) {
|
|
3207
|
+
return e ? Vn(e.auto_compact_threshold_percentage) ?? 84 : 84;
|
|
3160
3208
|
}
|
|
3161
|
-
function
|
|
3162
|
-
let r =
|
|
3209
|
+
function qn({ messages: e, draftInput: t, selectedModel: n }) {
|
|
3210
|
+
let r = Gn(n);
|
|
3163
3211
|
if (!r) return null;
|
|
3164
3212
|
let i = [...e || []].reverse().find((e) => e?.role === "system" && e?.eventType === "context_checkpoint" && e?.status === "running");
|
|
3165
3213
|
if (i) {
|
|
3166
|
-
let e =
|
|
3214
|
+
let e = Wn(i);
|
|
3167
3215
|
return {
|
|
3168
3216
|
label: "正在压缩上下文…",
|
|
3169
3217
|
phase: "compressing",
|
|
@@ -3172,10 +3220,10 @@ function Gn({ messages: e, draftInput: t, selectedModel: n }) {
|
|
|
3172
3220
|
percent: Math.min(100, Math.max(0, Math.round(e / r * 100)))
|
|
3173
3221
|
};
|
|
3174
3222
|
}
|
|
3175
|
-
let a = (e || []).reduce((e, t) => e +
|
|
3223
|
+
let a = (e || []).reduce((e, t) => e + Wn(t), 0) + Un(t || "");
|
|
3176
3224
|
if (a <= 0) return null;
|
|
3177
3225
|
let o = Math.min(100, Math.max(0, Math.round(a / r * 100)));
|
|
3178
|
-
return o >=
|
|
3226
|
+
return o >= Kn(n) ? {
|
|
3179
3227
|
label: `估算上下文 ${o}% · 即将压缩`,
|
|
3180
3228
|
phase: "warning",
|
|
3181
3229
|
percent: o,
|
|
@@ -3191,37 +3239,39 @@ function Gn({ messages: e, draftInput: t, selectedModel: n }) {
|
|
|
3191
3239
|
}
|
|
3192
3240
|
//#endregion
|
|
3193
3241
|
//#region src/components/chat/ConnectedMessageList.tsx
|
|
3194
|
-
function
|
|
3195
|
-
let u =
|
|
3242
|
+
function Jn({ agentName: e, isMobile: t, onDeleteFeedback: n, onSubmitFeedback: r, onRespondToApproval: i, onStopGeneration: a, onCancelRemote: o, checkpointResumeEnabled: s = !1, onResumeCheckpoint: c, onLoadOlderSessionEvents: l }) {
|
|
3243
|
+
let u = J((e) => e.messages), d = z((e) => e.currentSessionId), f = L((e) => !!(e.getSessionActivity(d) && e.isSessionStreaming(d))), p = L((e) => e.getSessionActivity(d)), h = Q((e) => e.getSessionCheckpoints(d)), g = z((e) => d ? e.eventCache[d] : null), v = _((e) => e.input), y = I((e) => e.availableModels), b = I((e) => e.selectedModel), ee = _((e) => e.previewAttachment), te = _((e) => e.previewImageSize), x = M(null), S = M(!0), C = M(!1), w = M(0), T = M(f), O = M(!1), k = M(!0), re = ie(() => y.find((e) => e.id === b) || null, [y, b]), A = ie(() => qn({
|
|
3196
3244
|
messages: u,
|
|
3197
3245
|
draftInput: v,
|
|
3198
|
-
selectedModel:
|
|
3246
|
+
selectedModel: re
|
|
3199
3247
|
}), [
|
|
3200
3248
|
v,
|
|
3201
3249
|
u,
|
|
3202
|
-
|
|
3250
|
+
re
|
|
3203
3251
|
]);
|
|
3204
|
-
return
|
|
3205
|
-
|
|
3206
|
-
}, [f]),
|
|
3252
|
+
return j(() => {
|
|
3253
|
+
T.current = f;
|
|
3254
|
+
}, [f]), j(() => {
|
|
3255
|
+
k.current = !0, S.current = !0, C.current = !1, w.current = 0;
|
|
3256
|
+
}, [d]), j(() => {
|
|
3207
3257
|
let e = x.current;
|
|
3208
3258
|
if (!e) return;
|
|
3209
3259
|
let t = () => {
|
|
3210
|
-
let t = e.scrollHeight - e.scrollTop - e.clientHeight, n = e.scrollTop <
|
|
3211
|
-
if (
|
|
3260
|
+
let t = e.scrollHeight - e.scrollTop - e.clientHeight, n = e.scrollTop < w.current - 2;
|
|
3261
|
+
if (w.current = e.scrollTop, e.scrollTop < 200 && d && g && g.offset > 0 && !g.isLoadingOlder && !O.current && l) {
|
|
3212
3262
|
let t = e.scrollHeight;
|
|
3213
|
-
|
|
3263
|
+
O.current = !0, l(d).then(() => {
|
|
3214
3264
|
requestAnimationFrame(() => {
|
|
3215
3265
|
let e = x.current;
|
|
3216
3266
|
if (!e) return;
|
|
3217
3267
|
let n = e.scrollHeight - t;
|
|
3218
|
-
e.scrollTop += n,
|
|
3268
|
+
e.scrollTop += n, w.current = e.scrollTop;
|
|
3219
3269
|
});
|
|
3220
3270
|
}).finally(() => {
|
|
3221
|
-
|
|
3271
|
+
O.current = !1;
|
|
3222
3272
|
});
|
|
3223
3273
|
}
|
|
3224
|
-
if (
|
|
3274
|
+
if (T.current && n) {
|
|
3225
3275
|
C.current = !0, S.current = !1;
|
|
3226
3276
|
return;
|
|
3227
3277
|
}
|
|
@@ -3237,15 +3287,33 @@ function Kn({ agentName: e, isMobile: t, onDeleteFeedback: n, onSubmitFeedback:
|
|
|
3237
3287
|
g,
|
|
3238
3288
|
d,
|
|
3239
3289
|
l
|
|
3240
|
-
]),
|
|
3290
|
+
]), j(() => {
|
|
3241
3291
|
let e = x.current;
|
|
3242
|
-
|
|
3243
|
-
|
|
3292
|
+
if (e) {
|
|
3293
|
+
if (u.length > 0 && k.current) {
|
|
3294
|
+
let e = z.getState().currentSessionId, t = 0, n = -1, r = 0, i = () => {
|
|
3295
|
+
if (z.getState().currentSessionId !== e) return;
|
|
3296
|
+
let a = x.current;
|
|
3297
|
+
if (a) {
|
|
3298
|
+
if (a.scrollHeight !== n && (n = a.scrollHeight, a.scrollTop = a.scrollHeight, w.current = a.scrollTop, r += 1, r < 8)) {
|
|
3299
|
+
t = requestAnimationFrame(i);
|
|
3300
|
+
return;
|
|
3301
|
+
}
|
|
3302
|
+
S.current = !0, C.current = !1, k.current = !1;
|
|
3303
|
+
}
|
|
3304
|
+
};
|
|
3305
|
+
return t = requestAnimationFrame(i), () => {
|
|
3306
|
+
cancelAnimationFrame(t);
|
|
3307
|
+
};
|
|
3308
|
+
}
|
|
3309
|
+
S.current && (e.scrollTop = e.scrollHeight, w.current = e.scrollTop);
|
|
3310
|
+
}
|
|
3311
|
+
}, [u, f]), /* @__PURE__ */ D(ne, { children: [/* @__PURE__ */ E(m, {
|
|
3244
3312
|
agentName: e,
|
|
3245
3313
|
isMobile: t,
|
|
3246
3314
|
isStreaming: f,
|
|
3247
3315
|
activity: p,
|
|
3248
|
-
contextIndicator:
|
|
3316
|
+
contextIndicator: A,
|
|
3249
3317
|
messages: u,
|
|
3250
3318
|
onDeleteFeedback: n,
|
|
3251
3319
|
onOpenAttachmentPreview: (e) => {
|
|
@@ -3258,7 +3326,7 @@ function Kn({ agentName: e, isMobile: t, onDeleteFeedback: n, onSubmitFeedback:
|
|
|
3258
3326
|
checkpoints: s ? h : [],
|
|
3259
3327
|
onResumeCheckpoint: c,
|
|
3260
3328
|
scrollRef: x
|
|
3261
|
-
}), /* @__PURE__ */
|
|
3329
|
+
}), /* @__PURE__ */ E(Bn, {
|
|
3262
3330
|
attachment: ee,
|
|
3263
3331
|
isMobile: t,
|
|
3264
3332
|
previewImageSize: te,
|
|
@@ -3270,7 +3338,7 @@ function Kn({ agentName: e, isMobile: t, onDeleteFeedback: n, onSubmitFeedback:
|
|
|
3270
3338
|
}
|
|
3271
3339
|
//#endregion
|
|
3272
3340
|
//#region src/utils/attachment.ts
|
|
3273
|
-
function
|
|
3341
|
+
function Yn(e) {
|
|
3274
3342
|
return [
|
|
3275
3343
|
e.name,
|
|
3276
3344
|
e.size,
|
|
@@ -3278,19 +3346,19 @@ function qn(e) {
|
|
|
3278
3346
|
e.type
|
|
3279
3347
|
].join(":");
|
|
3280
3348
|
}
|
|
3281
|
-
function
|
|
3349
|
+
function Xn(e, t) {
|
|
3282
3350
|
let n = /* @__PURE__ */ new Map();
|
|
3283
|
-
for (let t of e) n.set(
|
|
3284
|
-
for (let e of t) n.set(
|
|
3351
|
+
for (let t of e) n.set(Yn(t), t);
|
|
3352
|
+
for (let e of t) n.set(Yn(e), e);
|
|
3285
3353
|
return Array.from(n.values());
|
|
3286
3354
|
}
|
|
3287
|
-
function
|
|
3355
|
+
function Zn(e) {
|
|
3288
3356
|
return Array.from(e.clipboardData.items || []).filter((e) => e.kind === "file").map((e) => e.getAsFile()).filter((e) => !!e);
|
|
3289
3357
|
}
|
|
3290
3358
|
//#endregion
|
|
3291
3359
|
//#region src/components/chat/ConnectedComposer.tsx
|
|
3292
|
-
function
|
|
3293
|
-
let o = _((e) => e.input), s = _((e) => e.attachments), c =
|
|
3360
|
+
function Qn({ composerMaxHeight: e, submitDraft: t, stopGeneration: n, cancelRemote: r, isMobile: i }) {
|
|
3361
|
+
let o = _((e) => e.input), s = _((e) => e.attachments), c = z((e) => e.currentSessionId), l = L((e) => !!(e.getSessionActivity(c) && e.isSessionStreaming(c))), u = _((e) => e.queuedDrafts), d = J((e) => e.messages), f = I((e) => e.availableModels), p = I((e) => e.selectedModel), m = M(null), h = M(null), g = ie(() => f.find((e) => e.id === p) || null, [f, p]), v = ie(() => qn({
|
|
3294
3362
|
messages: d,
|
|
3295
3363
|
draftInput: o,
|
|
3296
3364
|
selectedModel: g
|
|
@@ -3298,18 +3366,18 @@ function Xn({ composerMaxHeight: e, submitDraft: t, stopGeneration: n, cancelRem
|
|
|
3298
3366
|
o,
|
|
3299
3367
|
d,
|
|
3300
3368
|
g
|
|
3301
|
-
]), y =
|
|
3369
|
+
]), y = A((e, n) => {
|
|
3302
3370
|
!e && n.length === 0 || (_.getState().setInput(""), _.getState().setAttachments([]), t(e, n));
|
|
3303
3371
|
}, [t]);
|
|
3304
|
-
|
|
3372
|
+
j(() => {
|
|
3305
3373
|
h.current && (h.current.style.height = "auto", h.current.style.height = `${Math.min(h.current.scrollHeight, e)}px`);
|
|
3306
3374
|
}, [o, e]);
|
|
3307
3375
|
let b = (t) => {
|
|
3308
3376
|
_.getState().setInput(t.target.value), t.target.style.height = "auto", t.target.style.height = `${Math.min(t.target.scrollHeight, e)}px`;
|
|
3309
3377
|
}, ee = (e) => {
|
|
3310
|
-
e.length && _.getState().setAttachments((t) =>
|
|
3378
|
+
e.length && _.getState().setAttachments((t) => Xn(t, e));
|
|
3311
3379
|
};
|
|
3312
|
-
return /* @__PURE__ */
|
|
3380
|
+
return /* @__PURE__ */ E(a, {
|
|
3313
3381
|
attachments: s,
|
|
3314
3382
|
composerContextIndicator: v,
|
|
3315
3383
|
composerMaxHeight: e,
|
|
@@ -3321,7 +3389,7 @@ function Xn({ composerMaxHeight: e, submitDraft: t, stopGeneration: n, cancelRem
|
|
|
3321
3389
|
onAppendAttachments: ee,
|
|
3322
3390
|
onInputChange: b,
|
|
3323
3391
|
onPaste: (e) => {
|
|
3324
|
-
let t =
|
|
3392
|
+
let t = Zn(e);
|
|
3325
3393
|
t.length && (e.preventDefault(), e.stopPropagation(), ee(t));
|
|
3326
3394
|
},
|
|
3327
3395
|
onRemoveAttachment: (e) => _.getState().setAttachments((t) => t.filter((t, n) => n !== e)),
|
|
@@ -3333,8 +3401,8 @@ function Xn({ composerMaxHeight: e, submitDraft: t, stopGeneration: n, cancelRem
|
|
|
3333
3401
|
}
|
|
3334
3402
|
//#endregion
|
|
3335
3403
|
//#region src/api/session.ts
|
|
3336
|
-
async function
|
|
3337
|
-
let n = await
|
|
3404
|
+
async function $n(e, t) {
|
|
3405
|
+
let n = await q("ListSessions", {
|
|
3338
3406
|
AgentId: e,
|
|
3339
3407
|
Page: t?.page,
|
|
3340
3408
|
PageSize: t?.pageSize
|
|
@@ -3346,16 +3414,16 @@ async function Zn(e, t) {
|
|
|
3346
3414
|
PageSize: Number.isFinite(Number(n.PageSize)) ? Number(n.PageSize) : t?.pageSize ?? n.Sessions?.length ?? 0
|
|
3347
3415
|
};
|
|
3348
3416
|
}
|
|
3349
|
-
async function
|
|
3350
|
-
return (await
|
|
3417
|
+
async function er(e, t) {
|
|
3418
|
+
return (await q("CreateSession", { AgentId: e }, t)).Session;
|
|
3351
3419
|
}
|
|
3352
|
-
async function
|
|
3353
|
-
await
|
|
3420
|
+
async function tr(e, t) {
|
|
3421
|
+
await q("DeleteSession", { SessionId: e }, t);
|
|
3354
3422
|
}
|
|
3355
3423
|
//#endregion
|
|
3356
3424
|
//#region src/api/events.ts
|
|
3357
|
-
async function
|
|
3358
|
-
let n = await
|
|
3425
|
+
async function nr(e, t) {
|
|
3426
|
+
let n = await q("ListSessionEvents", {
|
|
3359
3427
|
SessionId: e,
|
|
3360
3428
|
Offset: t?.offset,
|
|
3361
3429
|
Limit: t?.limit
|
|
@@ -3369,34 +3437,34 @@ async function er(e, t) {
|
|
|
3369
3437
|
}
|
|
3370
3438
|
//#endregion
|
|
3371
3439
|
//#region src/api/run.ts
|
|
3372
|
-
async function
|
|
3373
|
-
return
|
|
3440
|
+
async function rr(e, t) {
|
|
3441
|
+
return Re("RunAgent", e, t);
|
|
3374
3442
|
}
|
|
3375
3443
|
//#endregion
|
|
3376
3444
|
//#region src/api/checkpoints.ts
|
|
3377
|
-
async function
|
|
3445
|
+
async function ir(e, t) {
|
|
3378
3446
|
let n = {
|
|
3379
3447
|
AgentId: e.agentId,
|
|
3380
3448
|
SessionId: e.sessionId
|
|
3381
3449
|
};
|
|
3382
|
-
return e.runId && (n.RunId = e.runId),
|
|
3450
|
+
return e.runId && (n.RunId = e.runId), q("ListSessionCheckpoints", n, t);
|
|
3383
3451
|
}
|
|
3384
|
-
async function
|
|
3385
|
-
return
|
|
3452
|
+
async function ar(e, t) {
|
|
3453
|
+
return q("GetCheckpointResumePreview", {
|
|
3386
3454
|
AgentId: e.agentId,
|
|
3387
3455
|
SessionId: e.sessionId,
|
|
3388
3456
|
RunId: e.runId,
|
|
3389
3457
|
CheckpointId: e.checkpointId
|
|
3390
3458
|
}, t);
|
|
3391
3459
|
}
|
|
3392
|
-
async function
|
|
3460
|
+
async function or(e, t) {
|
|
3393
3461
|
let n = {
|
|
3394
3462
|
AgentId: e.agentId,
|
|
3395
3463
|
SessionId: e.sessionId
|
|
3396
3464
|
};
|
|
3397
|
-
return e.runId && (n.RunId = e.runId), e.checkpointId && (n.CheckpointId = e.checkpointId),
|
|
3465
|
+
return e.runId && (n.RunId = e.runId), e.checkpointId && (n.CheckpointId = e.checkpointId), q("ListToolReceipts", n, t);
|
|
3398
3466
|
}
|
|
3399
|
-
async function
|
|
3467
|
+
async function sr(e, t) {
|
|
3400
3468
|
let n = {
|
|
3401
3469
|
AgentId: e.agentId,
|
|
3402
3470
|
SessionId: e.sessionId,
|
|
@@ -3404,28 +3472,28 @@ async function ar(e, t) {
|
|
|
3404
3472
|
CheckpointId: e.checkpointId,
|
|
3405
3473
|
Stream: !0
|
|
3406
3474
|
};
|
|
3407
|
-
return e.resumeAttemptId && (n.ResumeAttemptId = e.resumeAttemptId), e.invocationId && (n.InvocationId = e.invocationId),
|
|
3475
|
+
return e.resumeAttemptId && (n.ResumeAttemptId = e.resumeAttemptId), e.invocationId && (n.InvocationId = e.invocationId), Re("ResumeRun", n, t);
|
|
3408
3476
|
}
|
|
3409
3477
|
//#endregion
|
|
3410
3478
|
//#region src/api/workspace.ts
|
|
3411
|
-
async function
|
|
3412
|
-
return
|
|
3479
|
+
async function cr(e, t, n) {
|
|
3480
|
+
return q("ListWorkspaceFiles", {
|
|
3413
3481
|
AgentId: e,
|
|
3414
3482
|
Path: t,
|
|
3415
3483
|
Recursive: n
|
|
3416
3484
|
});
|
|
3417
3485
|
}
|
|
3418
|
-
async function
|
|
3419
|
-
return
|
|
3486
|
+
async function lr(e) {
|
|
3487
|
+
return Ie("AddWorkspaceFile", e);
|
|
3420
3488
|
}
|
|
3421
|
-
async function
|
|
3422
|
-
return
|
|
3489
|
+
async function ur(e, t) {
|
|
3490
|
+
return q("DeleteWorkspaceFile", {
|
|
3423
3491
|
AgentId: e,
|
|
3424
3492
|
Path: t
|
|
3425
3493
|
});
|
|
3426
3494
|
}
|
|
3427
|
-
async function
|
|
3428
|
-
return
|
|
3495
|
+
async function dr(e, t, n) {
|
|
3496
|
+
return Le("GetWorkspaceFileContent", {
|
|
3429
3497
|
AgentId: e,
|
|
3430
3498
|
FilePath: t
|
|
3431
3499
|
}, {
|
|
@@ -3435,133 +3503,133 @@ async function lr(e, t, n) {
|
|
|
3435
3503
|
}
|
|
3436
3504
|
//#endregion
|
|
3437
3505
|
//#region src/api/upload.ts
|
|
3438
|
-
async function
|
|
3439
|
-
return
|
|
3506
|
+
async function fr(e, t) {
|
|
3507
|
+
return Ie("UploadFile", e, t);
|
|
3440
3508
|
}
|
|
3441
3509
|
//#endregion
|
|
3442
3510
|
//#region src/core/api/facade.ts
|
|
3443
|
-
var
|
|
3511
|
+
var pr = class {
|
|
3444
3512
|
async listSessions(e, t) {
|
|
3445
|
-
return
|
|
3513
|
+
return $n(e, t);
|
|
3446
3514
|
}
|
|
3447
3515
|
async createSession(e, t) {
|
|
3448
|
-
return { SessionId: (await
|
|
3516
|
+
return { SessionId: (await er(e, t)).SessionId };
|
|
3449
3517
|
}
|
|
3450
3518
|
async deleteSession(e, t) {
|
|
3451
|
-
await
|
|
3519
|
+
await tr(e, t);
|
|
3452
3520
|
}
|
|
3453
3521
|
async listSessionEvents(e, t) {
|
|
3454
|
-
return
|
|
3522
|
+
return nr(e, t);
|
|
3455
3523
|
}
|
|
3456
3524
|
async listSessionCheckpoints(e, t) {
|
|
3457
|
-
return
|
|
3525
|
+
return ir(e, t);
|
|
3458
3526
|
}
|
|
3459
3527
|
async previewCheckpointResume(e, t) {
|
|
3460
|
-
return
|
|
3528
|
+
return ar(e, t);
|
|
3461
3529
|
}
|
|
3462
3530
|
async listToolReceipts(e, t) {
|
|
3463
|
-
return
|
|
3531
|
+
return or(e, t);
|
|
3464
3532
|
}
|
|
3465
3533
|
async runAgent(e, t) {
|
|
3466
|
-
return
|
|
3534
|
+
return rr(e, t);
|
|
3467
3535
|
}
|
|
3468
3536
|
async resumeRun(e, t) {
|
|
3469
|
-
return
|
|
3537
|
+
return sr(e, t);
|
|
3470
3538
|
}
|
|
3471
3539
|
async subscribeRunEvents(e, t) {
|
|
3472
|
-
return
|
|
3540
|
+
return ze("SubscribeRunEvents", {
|
|
3473
3541
|
SessionId: e.sessionId,
|
|
3474
3542
|
InvocationId: e.invocationId,
|
|
3475
3543
|
AfterSeqId: String(e.afterSeqId)
|
|
3476
3544
|
}, t);
|
|
3477
3545
|
}
|
|
3478
3546
|
async cancelRun(e, t, n) {
|
|
3479
|
-
return
|
|
3547
|
+
return q("CancelRun", {
|
|
3480
3548
|
AgentId: e,
|
|
3481
3549
|
InvocationId: t
|
|
3482
3550
|
}, n);
|
|
3483
3551
|
}
|
|
3484
3552
|
async getResponseFeedback(e, t) {
|
|
3485
|
-
return
|
|
3553
|
+
return q("GetResponseFeedback", e, t);
|
|
3486
3554
|
}
|
|
3487
3555
|
async upsertResponseFeedback(e, t) {
|
|
3488
|
-
return
|
|
3556
|
+
return q("UpsertResponseFeedback", e, t);
|
|
3489
3557
|
}
|
|
3490
3558
|
async deleteResponseFeedback(e, t) {
|
|
3491
|
-
await
|
|
3559
|
+
await q("DeleteResponseFeedback", e, t);
|
|
3492
3560
|
}
|
|
3493
3561
|
async listWorkspaceFiles(e, t, n) {
|
|
3494
|
-
return
|
|
3562
|
+
return cr(e, t, n);
|
|
3495
3563
|
}
|
|
3496
3564
|
async addWorkspaceFile(e) {
|
|
3497
|
-
return
|
|
3565
|
+
return lr(e);
|
|
3498
3566
|
}
|
|
3499
3567
|
async deleteWorkspaceFile(e, t) {
|
|
3500
|
-
await
|
|
3568
|
+
await ur(e, t);
|
|
3501
3569
|
}
|
|
3502
3570
|
async getWorkspaceFileContent(e, t, n) {
|
|
3503
|
-
return
|
|
3571
|
+
return dr(e, t, n);
|
|
3504
3572
|
}
|
|
3505
3573
|
async listAgentModels(e) {
|
|
3506
|
-
return
|
|
3574
|
+
return Ve(e);
|
|
3507
3575
|
}
|
|
3508
3576
|
async getAgentUiBootstrap() {
|
|
3509
|
-
return
|
|
3577
|
+
return Be();
|
|
3510
3578
|
}
|
|
3511
3579
|
async uploadFile(e, t) {
|
|
3512
|
-
return
|
|
3513
|
-
}
|
|
3514
|
-
},
|
|
3515
|
-
function
|
|
3516
|
-
let a = e ||
|
|
3517
|
-
isMobile:
|
|
3518
|
-
viewportHeight:
|
|
3519
|
-
}), { fetchSessions:
|
|
3580
|
+
return fr(e, t);
|
|
3581
|
+
}
|
|
3582
|
+
}, mr = new pr(), hr = k.lazy(() => import("./ArtifactsPanel-D3AiN69_.js").then((e) => ({ default: e.ArtifactsPanel }))), gr = k.lazy(() => import("./NativeTerminalPanel-mQwtEFvo.js").then((e) => e.n).then((e) => ({ default: e.NativeTerminalPanel })));
|
|
3583
|
+
function _r({ apiAdapter: e, initialSurface: r = "chat", routeShell: i } = {}) {
|
|
3584
|
+
let a = e || mr, o = F((e) => e.agentId), s = z((e) => e.currentSessionId), c = L((e) => e.isStreaming), l = _((e) => e.sidebarOpen), u = _((e) => e.mobileSidebarOpen), d = _((e) => e.mobileActionsOpen), f = F((e) => e.agentName), p = I((e) => e.selectedModel), m = I((e) => e.availableModels), h = I((e) => e.modelSource), v = I((e) => e.modelCatalogLoaded), te = I((e) => e.thinkingMode), x = F((e) => e.agentFramework), S = F((e) => e.workspaceFiles), C = F((e) => e.accessMode), T = _((e) => e.workspacePanelOpen), O = _((e) => e.workspacePanelWidth), k = _((e) => e.workspacePanelFullscreen), ie = F((e) => e.apiFormats), N = F((e) => e.capabilities), P = w((e) => e.visible && !!e.content), oe = M([]), se = M(null), { isMobile: R, viewportHeight: ce } = Pe(), le = _e({
|
|
3585
|
+
isMobile: R,
|
|
3586
|
+
viewportHeight: ce
|
|
3587
|
+
}), { fetchSessions: ue, loadMoreSessions: de, loadSession: fe, loadOlderSessionEvents: pe, createNewSession: me, deleteSession: he, currentSessionIdRef: B, agentIdRef: V, runSubscriptionAbortRef: ge } = On({
|
|
3520
3588
|
agentId: o,
|
|
3521
3589
|
currentSessionId: s,
|
|
3522
|
-
isMobile:
|
|
3523
|
-
uiCapabilities:
|
|
3590
|
+
isMobile: R,
|
|
3591
|
+
uiCapabilities: N,
|
|
3524
3592
|
api: a,
|
|
3525
3593
|
resetCompaction: () => {},
|
|
3526
|
-
disconnectRun: () =>
|
|
3527
|
-
}),
|
|
3594
|
+
disconnectRun: () => se.current?.()
|
|
3595
|
+
}), ve = A((e) => {
|
|
3528
3596
|
if (!e) return;
|
|
3529
3597
|
let t = () => {
|
|
3530
|
-
|
|
3598
|
+
z.getState().clearSessionEventCache(e), ue(V.current, e);
|
|
3531
3599
|
};
|
|
3532
3600
|
queueMicrotask(t), window.setTimeout(t, 1800), window.setTimeout(t, 5e3);
|
|
3533
|
-
}, [
|
|
3601
|
+
}, [V, ue]), ye = m.find((e) => e.id === p) || null, { submitDraft: be, stopGeneration: xe, disconnectRun: Se, resumeCheckpoint: we } = pn({
|
|
3534
3602
|
agentId: o,
|
|
3535
3603
|
currentSessionId: s,
|
|
3536
3604
|
agentFramework: x,
|
|
3537
|
-
apiFormats:
|
|
3605
|
+
apiFormats: ie,
|
|
3538
3606
|
selectedModel: p,
|
|
3539
|
-
selectedModelMetadata:
|
|
3607
|
+
selectedModelMetadata: ye,
|
|
3540
3608
|
thinkingMode: te,
|
|
3541
|
-
uiCapabilities:
|
|
3542
|
-
isMobile:
|
|
3609
|
+
uiCapabilities: N,
|
|
3610
|
+
isMobile: R,
|
|
3543
3611
|
api: a,
|
|
3544
|
-
currentSessionIdRef:
|
|
3545
|
-
agentIdRef:
|
|
3546
|
-
queuedDraftRef:
|
|
3547
|
-
onRunSettled:
|
|
3612
|
+
currentSessionIdRef: B,
|
|
3613
|
+
agentIdRef: V,
|
|
3614
|
+
queuedDraftRef: oe,
|
|
3615
|
+
onRunSettled: ve
|
|
3548
3616
|
});
|
|
3549
|
-
|
|
3550
|
-
|
|
3551
|
-
}, [
|
|
3552
|
-
let
|
|
3553
|
-
let e =
|
|
3554
|
-
|
|
3617
|
+
j(() => {
|
|
3618
|
+
se.current = Se;
|
|
3619
|
+
}, [Se]);
|
|
3620
|
+
let Te = A(() => {
|
|
3621
|
+
let e = B.current;
|
|
3622
|
+
ge.current?.abort(), L.getState().stopActivity(), L.getState().stopSessionActivity(e), xe();
|
|
3555
3623
|
}, [
|
|
3556
|
-
|
|
3557
|
-
|
|
3558
|
-
|
|
3559
|
-
]),
|
|
3560
|
-
let e =
|
|
3624
|
+
B,
|
|
3625
|
+
ge,
|
|
3626
|
+
xe
|
|
3627
|
+
]), Ee = A(async () => {
|
|
3628
|
+
let e = B.current, t = L.getState(), n = t.currentRunId || t.getSessionActivity(e)?.runId || "";
|
|
3561
3629
|
if (n) try {
|
|
3562
|
-
await a.cancelRun(o, n),
|
|
3630
|
+
await a.cancelRun(o, n), L.getState().stopSessionActivity(e, "取消请求已发送,后台运行会停在最近 checkpoint。");
|
|
3563
3631
|
} catch (t) {
|
|
3564
|
-
console.warn("[App] cancelRun failed:", t),
|
|
3632
|
+
console.warn("[App] cancelRun failed:", t), L.getState().updateActivity({
|
|
3565
3633
|
sessionId: e,
|
|
3566
3634
|
status: "failed",
|
|
3567
3635
|
phase: "取消请求失败",
|
|
@@ -3569,130 +3637,130 @@ function hr({ apiAdapter: e, initialSurface: r = "chat", routeShell: i } = {}) {
|
|
|
3569
3637
|
countEvent: !1
|
|
3570
3638
|
});
|
|
3571
3639
|
}
|
|
3572
|
-
|
|
3640
|
+
ve(e);
|
|
3573
3641
|
}, [
|
|
3574
3642
|
a,
|
|
3575
3643
|
o,
|
|
3576
|
-
|
|
3577
|
-
|
|
3578
|
-
]), { submitResponseFeedback:
|
|
3644
|
+
B,
|
|
3645
|
+
ve
|
|
3646
|
+
]), { submitResponseFeedback: De, deleteResponseFeedback: Oe, respondToApproval: Ae } = mn({
|
|
3579
3647
|
agentId: o,
|
|
3580
3648
|
currentSessionId: s,
|
|
3581
3649
|
isStreaming: c,
|
|
3582
3650
|
api: a,
|
|
3583
|
-
submitDraft:
|
|
3651
|
+
submitDraft: be
|
|
3584
3652
|
});
|
|
3585
|
-
|
|
3586
|
-
|
|
3653
|
+
We({ fetchSessions: ue }), j(() => {
|
|
3654
|
+
V.current = o, B.current = s, Ce(o, s);
|
|
3587
3655
|
}, [
|
|
3588
3656
|
o,
|
|
3589
3657
|
s,
|
|
3590
|
-
|
|
3591
|
-
|
|
3592
|
-
]),
|
|
3593
|
-
|
|
3594
|
-
}, [
|
|
3595
|
-
|
|
3596
|
-
}, [
|
|
3597
|
-
|
|
3598
|
-
}, [
|
|
3599
|
-
let
|
|
3658
|
+
V,
|
|
3659
|
+
B
|
|
3660
|
+
]), j(() => {
|
|
3661
|
+
R ? _.getState().setWorkspacePanelFullscreen(!1) : (_.getState().setMobileSidebarOpen(!1), _.getState().setMobileActionsOpen(!1));
|
|
3662
|
+
}, [R]), j(() => {
|
|
3663
|
+
T || _.getState().setWorkspacePanelFullscreen(!1);
|
|
3664
|
+
}, [T]), j(() => () => {
|
|
3665
|
+
ge.current?.abort();
|
|
3666
|
+
}, [ge]);
|
|
3667
|
+
let Me = t(N), Ne = !!N.Thinking, H = g({
|
|
3600
3668
|
workspaceFiles: S,
|
|
3601
3669
|
accessMode: C
|
|
3602
|
-
}),
|
|
3603
|
-
capability:
|
|
3670
|
+
}), U = y({ isMobile: R }), W = ke({
|
|
3671
|
+
capability: N.NativeDashboard,
|
|
3604
3672
|
agentFramework: x,
|
|
3605
3673
|
accessMode: C,
|
|
3606
3674
|
origin: window.location.origin
|
|
3607
|
-
}),
|
|
3608
|
-
|
|
3609
|
-
|
|
3610
|
-
}, [r,
|
|
3611
|
-
let
|
|
3675
|
+
}), G = !Me, Fe = x === "openclaw" ? "OpenClaw" : x === "hermes" ? "Hermes" : "原生运行时", K = ye?.display_name || p || "", q = !R && l && Me, Ie = M(!1), [Le, Re] = ae(r === "tui"), ze = Le && !!N.NativeTerminal?.Enabled;
|
|
3676
|
+
j(() => {
|
|
3677
|
+
Ie.current || r !== "workspace" || !H || (Ie.current = !0, _.getState().setWorkspacePanelOpen(!0), _.getState().setWorkspacePanelFullscreen(!0));
|
|
3678
|
+
}, [r, H]);
|
|
3679
|
+
let Be = /* @__PURE__ */ D("div", {
|
|
3612
3680
|
className: "flex h-[var(--app-height)] min-h-[var(--app-height)] overflow-hidden bg-white font-sans text-slate-800 dark:bg-slate-900 dark:text-slate-200",
|
|
3613
3681
|
children: [
|
|
3614
|
-
/* @__PURE__ */
|
|
3615
|
-
uiCapabilities:
|
|
3616
|
-
createNewSession:
|
|
3617
|
-
deleteSession:
|
|
3618
|
-
loadSession:
|
|
3619
|
-
loadMoreSessions:
|
|
3682
|
+
/* @__PURE__ */ E(kn, {
|
|
3683
|
+
uiCapabilities: N,
|
|
3684
|
+
createNewSession: me,
|
|
3685
|
+
deleteSession: he,
|
|
3686
|
+
loadSession: fe,
|
|
3687
|
+
loadMoreSessions: de
|
|
3620
3688
|
}),
|
|
3621
|
-
/* @__PURE__ */
|
|
3689
|
+
/* @__PURE__ */ D("main", {
|
|
3622
3690
|
className: "relative flex min-w-0 flex-1 flex-col bg-white dark:bg-slate-900",
|
|
3623
|
-
children: [/* @__PURE__ */
|
|
3691
|
+
children: [/* @__PURE__ */ E(n, {
|
|
3624
3692
|
agentName: f,
|
|
3625
3693
|
currentSessionId: s,
|
|
3626
|
-
nativeLauncherMode:
|
|
3627
|
-
isMobile:
|
|
3694
|
+
nativeLauncherMode: G,
|
|
3695
|
+
isMobile: R,
|
|
3628
3696
|
sidebarOpen: l,
|
|
3629
3697
|
mobileSidebarOpen: u,
|
|
3630
3698
|
onToggleSidebar: () => {
|
|
3631
|
-
|
|
3699
|
+
R ? _.getState().toggleMobileSidebar() : _.getState().toggleSidebar();
|
|
3632
3700
|
},
|
|
3633
3701
|
availableModels: m,
|
|
3634
3702
|
selectedModel: p,
|
|
3635
3703
|
onSelectModel: (e) => {
|
|
3636
|
-
|
|
3704
|
+
I.getState().setSelectedModel(e), R && _.getState().setMobileActionsOpen(!1);
|
|
3637
3705
|
},
|
|
3638
|
-
selectedModelLabel:
|
|
3706
|
+
selectedModelLabel: K,
|
|
3639
3707
|
modelCatalogLoaded: v,
|
|
3640
3708
|
modelSource: h,
|
|
3641
|
-
thinkingEnabled:
|
|
3709
|
+
thinkingEnabled: Ne,
|
|
3642
3710
|
thinkingMode: te,
|
|
3643
|
-
onSelectThinkingMode: (e) =>
|
|
3711
|
+
onSelectThinkingMode: (e) => I.getState().setThinkingMode(je(e)),
|
|
3644
3712
|
mobileActionsOpen: d,
|
|
3645
3713
|
onMobileActionsOpenChange: (e) => _.getState().setMobileActionsOpen(e),
|
|
3646
|
-
workspaceEnabled:
|
|
3714
|
+
workspaceEnabled: H,
|
|
3647
3715
|
onOpenWorkspace: () => _.getState().setWorkspacePanelOpen(!0),
|
|
3648
|
-
nativeManagementLink:
|
|
3649
|
-
nativeTerminal:
|
|
3650
|
-
}),
|
|
3651
|
-
productLabel:
|
|
3652
|
-
nativeManagementLink:
|
|
3653
|
-
nativeTerminal:
|
|
3654
|
-
workspaceEnabled:
|
|
3716
|
+
nativeManagementLink: W,
|
|
3717
|
+
nativeTerminal: N.NativeTerminal
|
|
3718
|
+
}), G ? /* @__PURE__ */ E(b, {
|
|
3719
|
+
productLabel: Fe,
|
|
3720
|
+
nativeManagementLink: W,
|
|
3721
|
+
nativeTerminal: N.NativeTerminal,
|
|
3722
|
+
workspaceEnabled: H,
|
|
3655
3723
|
onOpenWorkspace: () => _.getState().setWorkspacePanelOpen(!0)
|
|
3656
|
-
}) : /* @__PURE__ */
|
|
3724
|
+
}) : /* @__PURE__ */ D(ne, { children: [/* @__PURE__ */ E(Jn, {
|
|
3657
3725
|
agentName: f,
|
|
3658
|
-
isMobile:
|
|
3659
|
-
onDeleteFeedback:
|
|
3660
|
-
onSubmitFeedback:
|
|
3661
|
-
onRespondToApproval:
|
|
3662
|
-
onStopGeneration:
|
|
3663
|
-
onCancelRemote:
|
|
3664
|
-
checkpointResumeEnabled:
|
|
3665
|
-
onResumeCheckpoint:
|
|
3666
|
-
onLoadOlderSessionEvents:
|
|
3667
|
-
}), /* @__PURE__ */
|
|
3668
|
-
composerMaxHeight:
|
|
3669
|
-
submitDraft:
|
|
3670
|
-
stopGeneration:
|
|
3671
|
-
cancelRemote:
|
|
3672
|
-
isMobile:
|
|
3726
|
+
isMobile: R,
|
|
3727
|
+
onDeleteFeedback: Oe,
|
|
3728
|
+
onSubmitFeedback: De,
|
|
3729
|
+
onRespondToApproval: Ae,
|
|
3730
|
+
onStopGeneration: Te,
|
|
3731
|
+
onCancelRemote: N.StopRun ? Ee : void 0,
|
|
3732
|
+
checkpointResumeEnabled: N.RunLifecycle.Enabled && N.RunLifecycle.Checkpoints && N.RunLifecycle.CheckpointResume,
|
|
3733
|
+
onResumeCheckpoint: we,
|
|
3734
|
+
onLoadOlderSessionEvents: pe
|
|
3735
|
+
}), /* @__PURE__ */ E(Qn, {
|
|
3736
|
+
composerMaxHeight: le,
|
|
3737
|
+
submitDraft: be,
|
|
3738
|
+
stopGeneration: Te,
|
|
3739
|
+
cancelRemote: N.StopRun ? Ee : void 0,
|
|
3740
|
+
isMobile: R
|
|
3673
3741
|
})] })]
|
|
3674
3742
|
}),
|
|
3675
|
-
/* @__PURE__ */
|
|
3743
|
+
/* @__PURE__ */ E(ee, {
|
|
3676
3744
|
agentId: o,
|
|
3677
3745
|
capability: S,
|
|
3678
|
-
workspacePanelOpen:
|
|
3679
|
-
workspacePanelWidth:
|
|
3680
|
-
workspacePanelFullscreen:
|
|
3681
|
-
isMobile:
|
|
3682
|
-
workspaceEnabled:
|
|
3746
|
+
workspacePanelOpen: T,
|
|
3747
|
+
workspacePanelWidth: O,
|
|
3748
|
+
workspacePanelFullscreen: k,
|
|
3749
|
+
isMobile: R,
|
|
3750
|
+
workspaceEnabled: H,
|
|
3683
3751
|
workspaceFiles: S,
|
|
3684
|
-
workspacePanelPresentation:
|
|
3752
|
+
workspacePanelPresentation: U,
|
|
3685
3753
|
closeWorkspacePanel: () => {
|
|
3686
3754
|
_.getState().setWorkspacePanelFullscreen(!1), _.getState().setWorkspacePanelOpen(!1);
|
|
3687
3755
|
},
|
|
3688
3756
|
handleWorkspacePanelResizeStart: (e) => {
|
|
3689
|
-
if (
|
|
3757
|
+
if (k || R) return;
|
|
3690
3758
|
e.preventDefault();
|
|
3691
|
-
let t = e.clientX, n =
|
|
3759
|
+
let t = e.clientX, n = O, r = Me && q ? 280 : 0, i = document.body.style.cursor, a = document.body.style.userSelect;
|
|
3692
3760
|
document.body.style.cursor = "col-resize", document.body.style.userSelect = "none";
|
|
3693
3761
|
let o = (e) => {
|
|
3694
3762
|
let i = n + t - e.clientX;
|
|
3695
|
-
_.getState().setWorkspacePanelWidth(
|
|
3763
|
+
_.getState().setWorkspacePanelWidth(mt(i, window.innerWidth, r));
|
|
3696
3764
|
}, s = () => {
|
|
3697
3765
|
document.body.style.cursor = i, document.body.style.userSelect = a, window.removeEventListener("pointermove", o), window.removeEventListener("pointerup", s), window.removeEventListener("pointercancel", s);
|
|
3698
3766
|
};
|
|
@@ -3700,53 +3768,53 @@ function hr({ apiAdapter: e, initialSurface: r = "chat", routeShell: i } = {}) {
|
|
|
3700
3768
|
},
|
|
3701
3769
|
api: a
|
|
3702
3770
|
}),
|
|
3703
|
-
|
|
3771
|
+
P && /* @__PURE__ */ E(re, {
|
|
3704
3772
|
fallback: null,
|
|
3705
|
-
children: /* @__PURE__ */
|
|
3773
|
+
children: /* @__PURE__ */ E(hr, {})
|
|
3706
3774
|
}),
|
|
3707
|
-
|
|
3775
|
+
ze ? /* @__PURE__ */ E(re, {
|
|
3708
3776
|
fallback: null,
|
|
3709
|
-
children: /* @__PURE__ */
|
|
3710
|
-
capability:
|
|
3777
|
+
children: /* @__PURE__ */ E(gr, {
|
|
3778
|
+
capability: N.NativeTerminal,
|
|
3711
3779
|
open: !0,
|
|
3712
3780
|
sessionId: s,
|
|
3713
|
-
onClose: () =>
|
|
3781
|
+
onClose: () => Re(!1)
|
|
3714
3782
|
})
|
|
3715
3783
|
}) : null
|
|
3716
3784
|
]
|
|
3717
3785
|
});
|
|
3718
|
-
return i ? /* @__PURE__ */
|
|
3786
|
+
return i ? /* @__PURE__ */ E(i, { children: Be }) : Be;
|
|
3719
3787
|
}
|
|
3720
3788
|
//#endregion
|
|
3721
3789
|
//#region src/core/transport/sse-transport.ts
|
|
3722
|
-
function
|
|
3790
|
+
function vr(e, t) {
|
|
3723
3791
|
if (e.eventName === "__ping__") {
|
|
3724
|
-
|
|
3792
|
+
L.getState().updateActivity({ countEvent: !1 });
|
|
3725
3793
|
return;
|
|
3726
3794
|
}
|
|
3727
3795
|
t.onEvent(e);
|
|
3728
3796
|
}
|
|
3729
|
-
var
|
|
3797
|
+
var yr = class {
|
|
3730
3798
|
protocol = "sse-post";
|
|
3731
3799
|
async connect(e, t) {
|
|
3732
|
-
let n = (await
|
|
3800
|
+
let n = (await Re(e.action, e.body || {}, { signal: e.signal })).getReader(), r = new TextDecoder(), i = "", a = !1;
|
|
3733
3801
|
return (async () => {
|
|
3734
3802
|
try {
|
|
3735
3803
|
for (; !a;) {
|
|
3736
3804
|
let { value: e, done: a } = await n.read();
|
|
3737
3805
|
if (a) break;
|
|
3738
3806
|
i += r.decode(e, { stream: !0 });
|
|
3739
|
-
let { chunks: o, remainder: s } =
|
|
3807
|
+
let { chunks: o, remainder: s } = ut(i);
|
|
3740
3808
|
i = s;
|
|
3741
3809
|
for (let e of o) {
|
|
3742
3810
|
if (!e.trim()) continue;
|
|
3743
|
-
let n =
|
|
3811
|
+
let n = lt(e);
|
|
3744
3812
|
for (let e of n) {
|
|
3745
3813
|
if (e.eventName === "__done__") {
|
|
3746
3814
|
t.onComplete();
|
|
3747
3815
|
return;
|
|
3748
3816
|
}
|
|
3749
|
-
|
|
3817
|
+
vr(e, t);
|
|
3750
3818
|
}
|
|
3751
3819
|
}
|
|
3752
3820
|
}
|
|
@@ -3758,27 +3826,27 @@ var _r = class {
|
|
|
3758
3826
|
a = !0, n.cancel().catch(() => {});
|
|
3759
3827
|
};
|
|
3760
3828
|
}
|
|
3761
|
-
},
|
|
3829
|
+
}, br = class {
|
|
3762
3830
|
protocol = "sse-get";
|
|
3763
3831
|
async connect(e, t) {
|
|
3764
|
-
let n = (await
|
|
3832
|
+
let n = (await ze(e.action, e.params || {}, { signal: e.signal })).getReader(), r = new TextDecoder(), i = "", a = !1;
|
|
3765
3833
|
return (async () => {
|
|
3766
3834
|
try {
|
|
3767
3835
|
for (; !a;) {
|
|
3768
3836
|
let { value: e, done: a } = await n.read();
|
|
3769
3837
|
if (a) break;
|
|
3770
3838
|
i += r.decode(e, { stream: !0 });
|
|
3771
|
-
let { chunks: o, remainder: s } =
|
|
3839
|
+
let { chunks: o, remainder: s } = ut(i);
|
|
3772
3840
|
i = s;
|
|
3773
3841
|
for (let e of o) {
|
|
3774
3842
|
if (!e.trim()) continue;
|
|
3775
|
-
let n =
|
|
3843
|
+
let n = lt(e);
|
|
3776
3844
|
for (let e of n) {
|
|
3777
3845
|
if (e.eventName === "__done__") {
|
|
3778
3846
|
t.onComplete();
|
|
3779
3847
|
return;
|
|
3780
3848
|
}
|
|
3781
|
-
|
|
3849
|
+
vr(e, t);
|
|
3782
3850
|
}
|
|
3783
3851
|
}
|
|
3784
3852
|
}
|
|
@@ -3792,4 +3860,4 @@ var _r = class {
|
|
|
3792
3860
|
}
|
|
3793
3861
|
};
|
|
3794
3862
|
//#endregion
|
|
3795
|
-
export {
|
|
3863
|
+
export { _r as AgentWorkbench, pr as ApiFacadeImpl, bt as RunEngineImpl, br as SseGetTransport, yr as SsePostTransport, st as createProtocol };
|