nolo-cli 0.16.0-alpha.2 → 0.16.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/{_executeModel-QAUS6B7J.js → _executeModel-TZUDMB24.js} +14 -13
  2. package/{agentDeleteCommand-365DMKHW.js → agentDeleteCommand-EMXLYNAH.js} +9 -8
  3. package/{agentEmailCommands-TQMXL36I.js → agentEmailCommands-H3VL4WUZ.js} +19 -18
  4. package/{agentListCommands-6B5X4RC6.js → agentListCommands-HQZNTYEG.js} +10 -9
  5. package/{agentMachineCommands-LOEARB6V.js → agentMachineCommands-QJPXHLIG.js} +9 -8
  6. package/{agentRecordCommands-DCH2WBL2.js → agentRecordCommands-VABNJQU5.js} +18 -17
  7. package/{agentRunCommand-SGMH67WT.js → agentRunCommand-37H22M3U.js} +18 -17
  8. package/{agentRuntimeLocal-YSYZ33ER.js → agentRuntimeLocal-WGVEZMXW.js} +6 -5
  9. package/{agentSlice-IVE735EV.js → agentSlice-ILWKFTS5.js} +1 -1
  10. package/{appDeleteCommands-6QYOO3JB.js → appDeleteCommands-N5AHOOHG.js} +10 -9
  11. package/{appDeployCommands-WTCT6XO6.js → appDeployCommands-GDD4CHRI.js} +10 -9
  12. package/{appDeployStatusCommands-CGWGZJKB.js → appDeployStatusCommands-3ZQH2E2A.js} +10 -9
  13. package/{appGetCommands-O4OCAMRW.js → appGetCommands-U4BGN2SW.js} +10 -9
  14. package/{appListCommands-UENFP4XY.js → appListCommands-S5BF2T4A.js} +10 -9
  15. package/{authCommand-YFTR3347.js → authCommand-WKMPIXR6.js} +8 -2
  16. package/{chunk-HRQCKQA5.js → chunk-27DJM3CW.js} +1 -242
  17. package/{chunk-RKM3K52F.js → chunk-2L6OCZ6Z.js} +1 -1
  18. package/{chunk-Z24FGIU2.js → chunk-36GPBUJ2.js} +1 -1
  19. package/{chunk-J55UHASN.js → chunk-3GSNWWY3.js} +1 -1
  20. package/{chunk-6565R2TI.js → chunk-3SCCWSA3.js} +10 -8
  21. package/{chunk-YNHQIXX5.js → chunk-463YM7CS.js} +8 -8
  22. package/chunk-4MSDMVUW.js +247 -0
  23. package/{chunk-QLFCNUVQ.js → chunk-64E4G62G.js} +11 -11
  24. package/{chunk-YC3DJILJ.js → chunk-7LFS3UL6.js} +8 -6
  25. package/{chunk-GRTFNYLR.js → chunk-AO2YB7PG.js} +2 -2
  26. package/{chunk-VE6XMVKG.js → chunk-CT3XKUX4.js} +8 -8
  27. package/{chunk-4IJYA27C.js → chunk-I4NUTIXT.js} +1 -1
  28. package/{chunk-RSYUDGGZ.js → chunk-LTZL7WC3.js} +1 -1
  29. package/{chunk-WRN5EQT7.js → chunk-MEZVPVXM.js} +1 -1
  30. package/{chunk-6MHDWKOT.js → chunk-MRDODOWX.js} +1 -1
  31. package/{chunk-I66RU7P7.js → chunk-NY6KTTLA.js} +1 -1
  32. package/{chunk-QZVGMD5F.js → chunk-ONELX7AM.js} +1 -1
  33. package/{chunk-EMXI3N3Z.js → chunk-R2PO4VB4.js} +2 -2
  34. package/{chunk-WPN6RMDF.js → chunk-TKNX6GFV.js} +3 -3
  35. package/{chunk-O53CP2QR.js → chunk-TY27RYCD.js} +2 -2
  36. package/{chunk-BFRVXJJJ.js → chunk-VD24AND2.js} +6 -6
  37. package/{chunk-OQMPU2ML.js → chunk-VOVNQ4YU.js} +3 -3
  38. package/{chunk-ISYE6GZB.js → chunk-W3574B3G.js} +1 -1
  39. package/{chunk-E237VE6U.js → chunk-WFFFQD6S.js} +1 -1
  40. package/{chunk-G2MKOQCB.js → chunk-WIZX3ACC.js} +1 -1
  41. package/{chunk-4NLUNENX.js → chunk-WNUSEMPU.js} +1 -1
  42. package/{chunk-EHLHSX7R.js → chunk-XXUNUXCS.js} +9 -2
  43. package/{chunk-YYIRR6QC.js → chunk-Y6G5CIAW.js} +11 -11
  44. package/{chunk-WA6KZL5V.js → chunk-ZODEA6YR.js} +9 -7
  45. package/{createAgentAutomationAction-TS6NNZ4X.js → createAgentAutomationAction-QHGTCNTZ.js} +2 -2
  46. package/{createDialogAction-5HVQ33EX.js → createDialogAction-BEO3QLUA.js} +3 -3
  47. package/{createPageAction-4F3ZGQJD.js → createPageAction-35EGISA5.js} +2 -2
  48. package/{dialogCommands-ZL6L24BS.js → dialogCommands-V7UHKTXT.js} +10 -9
  49. package/{dialogSlice-FAWUQDJW.js → dialogSlice-PWTRW5CX.js} +2 -2
  50. package/{docCreateCommands-LYROQTFH.js → docCreateCommands-TNC5RGE6.js} +9 -8
  51. package/{docDeleteCommands-6TWGTZNR.js → docDeleteCommands-PDMKS5KK.js} +10 -9
  52. package/{docReadCommands-PRULNF26.js → docReadCommands-GGAFPAUO.js} +9 -8
  53. package/{docStore-2UHVWLTV.js → docStore-BIJALNX5.js} +3 -3
  54. package/{docUpdateCommands-NNYYWJBI.js → docUpdateCommands-NCZK5UPH.js} +9 -8
  55. package/{handleSendMessageAction-LJPUYNOH.js → handleSendMessageAction-EN7ZJLBM.js} +190 -4
  56. package/index.js +47 -47
  57. package/{machineCommands-JQPEQFSE.js → machineCommands-3XWBAXZL.js} +17 -16
  58. package/{machineWsRunDispatch-FFFNWVEW.js → machineWsRunDispatch-OZMHQJ43.js} +17 -16
  59. package/package.json +1 -1
  60. package/{readlineWorkspace-QSXHSBHA.js → readlineWorkspace-3FRNDMQP.js} +21 -20
  61. package/{runAgentClientLoop-A75BUU6D.js → runAgentClientLoop-ZAZSFAAO.js} +11 -10
  62. package/{spaceCommands-4LE45GB7.js → spaceCommands-IASX6FPL.js} +9 -8
  63. package/{spaceSlice-444MFUP6.js → spaceSlice-HGDO7QJK.js} +2 -2
  64. package/{streamAgentChatTurn-DJAE7USZ.js → streamAgentChatTurn-KTDBTZUL.js} +13 -12
  65. package/{tools-YB6LXSVN.js → tools-IUKU5H6C.js} +5 -5
  66. package/{tuiSummaryLlmCaller-QQL3JA5I.js → tuiSummaryLlmCaller-RV6ZXCLV.js} +3 -2
  67. package/{updateDialogTitleAction-6HGFBM64.js → updateDialogTitleAction-6R62F4XS.js} +2 -2
@@ -19,12 +19,12 @@ import {
19
19
  setPrimaryDialogAgent,
20
20
  updateDialogTitle,
21
21
  updateTokens
22
- } from "./chunk-YNHQIXX5.js";
22
+ } from "./chunk-463YM7CS.js";
23
23
  import "./chunk-V2J635L5.js";
24
24
  import "./chunk-MRC4Q34M.js";
25
25
  import "./chunk-MTU75CZ2.js";
26
26
  import "./chunk-CWMSB67P.js";
27
- import "./chunk-OQMPU2ML.js";
27
+ import "./chunk-VOVNQ4YU.js";
28
28
  import "./chunk-JS33TCQ3.js";
29
29
  import "./chunk-SOTZ6RDN.js";
30
30
  import "./chunk-Z4NR32XR.js";
@@ -21,21 +21,22 @@ import {
21
21
  resolveDocKind,
22
22
  resolveWriteTargets,
23
23
  writePageRecord
24
- } from "./chunk-E237VE6U.js";
25
- import "./chunk-4NLUNENX.js";
26
- import "./chunk-QZVGMD5F.js";
24
+ } from "./chunk-WFFFQD6S.js";
25
+ import "./chunk-WNUSEMPU.js";
26
+ import "./chunk-ONELX7AM.js";
27
27
  import "./chunk-VHBWHNVT.js";
28
28
  import "./chunk-VF4K2QE6.js";
29
29
  import "./chunk-VC6OZXO5.js";
30
30
  import "./chunk-WZSRQNQG.js";
31
- import "./chunk-YC3DJILJ.js";
32
- import "./chunk-WA6KZL5V.js";
31
+ import "./chunk-7LFS3UL6.js";
32
+ import "./chunk-ZODEA6YR.js";
33
33
  import "./chunk-ZNFJWEN4.js";
34
34
  import "./chunk-OIQPORYI.js";
35
- import "./chunk-6MHDWKOT.js";
35
+ import "./chunk-MRDODOWX.js";
36
36
  import "./chunk-LSFAWXKC.js";
37
- import "./chunk-RKM3K52F.js";
38
- import "./chunk-HRQCKQA5.js";
37
+ import "./chunk-2L6OCZ6Z.js";
38
+ import "./chunk-4MSDMVUW.js";
39
+ import "./chunk-27DJM3CW.js";
39
40
  import "./chunk-B4KT7RN2.js";
40
41
  import "./chunk-4QQFLN5C.js";
41
42
  import "./chunk-5MMAK75Q.js";
@@ -10,25 +10,26 @@ import {
10
10
  requireTokenUser,
11
11
  resolveDocKind,
12
12
  resolveWriteTargets
13
- } from "./chunk-E237VE6U.js";
13
+ } from "./chunk-WFFFQD6S.js";
14
14
  import {
15
15
  deleteDbRecordOnServers
16
- } from "./chunk-J55UHASN.js";
17
- import "./chunk-4NLUNENX.js";
18
- import "./chunk-QZVGMD5F.js";
16
+ } from "./chunk-3GSNWWY3.js";
17
+ import "./chunk-WNUSEMPU.js";
18
+ import "./chunk-ONELX7AM.js";
19
19
  import "./chunk-VHBWHNVT.js";
20
20
  import "./chunk-KQHGZWSV.js";
21
21
  import "./chunk-VF4K2QE6.js";
22
22
  import "./chunk-VC6OZXO5.js";
23
23
  import "./chunk-WZSRQNQG.js";
24
- import "./chunk-YC3DJILJ.js";
25
- import "./chunk-WA6KZL5V.js";
24
+ import "./chunk-7LFS3UL6.js";
25
+ import "./chunk-ZODEA6YR.js";
26
26
  import "./chunk-ZNFJWEN4.js";
27
27
  import "./chunk-OIQPORYI.js";
28
- import "./chunk-6MHDWKOT.js";
28
+ import "./chunk-MRDODOWX.js";
29
29
  import "./chunk-LSFAWXKC.js";
30
- import "./chunk-RKM3K52F.js";
31
- import "./chunk-HRQCKQA5.js";
30
+ import "./chunk-2L6OCZ6Z.js";
31
+ import "./chunk-4MSDMVUW.js";
32
+ import "./chunk-27DJM3CW.js";
32
33
  import "./chunk-B4KT7RN2.js";
33
34
  import "./chunk-4QQFLN5C.js";
34
35
  import "./chunk-5MMAK75Q.js";
@@ -9,21 +9,22 @@ import {
9
9
  requireTokenUser,
10
10
  resolveDocKind,
11
11
  resolveWriteTargets
12
- } from "./chunk-E237VE6U.js";
13
- import "./chunk-4NLUNENX.js";
14
- import "./chunk-QZVGMD5F.js";
12
+ } from "./chunk-WFFFQD6S.js";
13
+ import "./chunk-WNUSEMPU.js";
14
+ import "./chunk-ONELX7AM.js";
15
15
  import "./chunk-VHBWHNVT.js";
16
16
  import "./chunk-VF4K2QE6.js";
17
17
  import "./chunk-VC6OZXO5.js";
18
18
  import "./chunk-WZSRQNQG.js";
19
- import "./chunk-YC3DJILJ.js";
20
- import "./chunk-WA6KZL5V.js";
19
+ import "./chunk-7LFS3UL6.js";
20
+ import "./chunk-ZODEA6YR.js";
21
21
  import "./chunk-ZNFJWEN4.js";
22
22
  import "./chunk-OIQPORYI.js";
23
- import "./chunk-6MHDWKOT.js";
23
+ import "./chunk-MRDODOWX.js";
24
24
  import "./chunk-LSFAWXKC.js";
25
- import "./chunk-RKM3K52F.js";
26
- import "./chunk-HRQCKQA5.js";
25
+ import "./chunk-2L6OCZ6Z.js";
26
+ import "./chunk-4MSDMVUW.js";
27
+ import "./chunk-27DJM3CW.js";
27
28
  import "./chunk-B4KT7RN2.js";
28
29
  import "./chunk-4QQFLN5C.js";
29
30
  import "./chunk-5MMAK75Q.js";
@@ -24,13 +24,13 @@ import {
24
24
  updateTitleDoc,
25
25
  useDocField,
26
26
  useDocState
27
- } from "./chunk-O53CP2QR.js";
28
- import "./chunk-YNHQIXX5.js";
27
+ } from "./chunk-TY27RYCD.js";
28
+ import "./chunk-463YM7CS.js";
29
29
  import "./chunk-V2J635L5.js";
30
30
  import "./chunk-MRC4Q34M.js";
31
31
  import "./chunk-MTU75CZ2.js";
32
32
  import "./chunk-CWMSB67P.js";
33
- import "./chunk-OQMPU2ML.js";
33
+ import "./chunk-VOVNQ4YU.js";
34
34
  import "./chunk-JS33TCQ3.js";
35
35
  import "./chunk-SOTZ6RDN.js";
36
36
  import "./chunk-Z4NR32XR.js";
@@ -20,9 +20,9 @@ import {
20
20
  resolveDocKind,
21
21
  resolveWriteTargets,
22
22
  writePageRecord
23
- } from "./chunk-E237VE6U.js";
24
- import "./chunk-4NLUNENX.js";
25
- import "./chunk-QZVGMD5F.js";
23
+ } from "./chunk-WFFFQD6S.js";
24
+ import "./chunk-WNUSEMPU.js";
25
+ import "./chunk-ONELX7AM.js";
26
26
  import "./chunk-VHBWHNVT.js";
27
27
  import "./chunk-VF4K2QE6.js";
28
28
  import {
@@ -30,14 +30,15 @@ import {
30
30
  resolvePageSkillMetadata
31
31
  } from "./chunk-VC6OZXO5.js";
32
32
  import "./chunk-WZSRQNQG.js";
33
- import "./chunk-YC3DJILJ.js";
34
- import "./chunk-WA6KZL5V.js";
33
+ import "./chunk-7LFS3UL6.js";
34
+ import "./chunk-ZODEA6YR.js";
35
35
  import "./chunk-ZNFJWEN4.js";
36
36
  import "./chunk-OIQPORYI.js";
37
- import "./chunk-6MHDWKOT.js";
37
+ import "./chunk-MRDODOWX.js";
38
38
  import "./chunk-LSFAWXKC.js";
39
- import "./chunk-RKM3K52F.js";
40
- import "./chunk-HRQCKQA5.js";
39
+ import "./chunk-2L6OCZ6Z.js";
40
+ import "./chunk-4MSDMVUW.js";
41
+ import "./chunk-27DJM3CW.js";
41
42
  import "./chunk-B4KT7RN2.js";
42
43
  import "./chunk-4QQFLN5C.js";
43
44
  import "./chunk-5MMAK75Q.js";
@@ -2,14 +2,14 @@ import {
2
2
  messageStreamEnd,
3
3
  prepareAndPersistUserMessage,
4
4
  resolveHandleSendMessageContext
5
- } from "./chunk-YNHQIXX5.js";
5
+ } from "./chunk-463YM7CS.js";
6
6
  import "./chunk-V2J635L5.js";
7
7
  import "./chunk-MRC4Q34M.js";
8
8
  import "./chunk-MTU75CZ2.js";
9
9
  import "./chunk-CWMSB67P.js";
10
10
  import {
11
11
  streamAgentChatTurn
12
- } from "./chunk-OQMPU2ML.js";
12
+ } from "./chunk-VOVNQ4YU.js";
13
13
  import "./chunk-JS33TCQ3.js";
14
14
  import "./chunk-SOTZ6RDN.js";
15
15
  import "./chunk-Z4NR32XR.js";
@@ -58,6 +58,143 @@ import "./chunk-CF7PE763.js";
58
58
  import "./chunk-G3SUCT4W.js";
59
59
  import "./chunk-4VNS5WPM.js";
60
60
 
61
+ // packages/chat/dialog/actions/parseOAuthError.ts
62
+ var PROVIDER_NAMES = {
63
+ antigravity: "Antigravity (Google)",
64
+ claude: "Claude",
65
+ chatgpt: "ChatGPT",
66
+ xai: "xAI Grok",
67
+ cursor: "Cursor",
68
+ cloudflare: "Cloudflare"
69
+ };
70
+ function asRecord(value) {
71
+ if (value && typeof value === "object" && !Array.isArray(value)) {
72
+ return value;
73
+ }
74
+ return null;
75
+ }
76
+ function asString(value) {
77
+ return typeof value === "string" && value.length > 0 ? value : void 0;
78
+ }
79
+ function collectValidationFromDetails(details) {
80
+ if (!Array.isArray(details)) return {};
81
+ let url;
82
+ let text;
83
+ let learnMoreUrl;
84
+ for (const detail of details) {
85
+ const rec = asRecord(detail);
86
+ if (!rec) continue;
87
+ const metadata = asRecord(rec.metadata);
88
+ if (metadata) {
89
+ url = url ?? asString(metadata.validation_url);
90
+ text = text ?? asString(metadata.validation_url_link_text);
91
+ learnMoreUrl = learnMoreUrl ?? asString(metadata.validation_learn_more_url);
92
+ }
93
+ const help = asRecord(rec);
94
+ if (Array.isArray(help.links)) {
95
+ for (const link of help.links) {
96
+ const linkRec = asRecord(link);
97
+ if (!linkRec) continue;
98
+ const linkUrl = asString(linkRec.url);
99
+ if (!linkUrl) continue;
100
+ const desc = asString(linkRec.description);
101
+ if (!url && desc && /verify|continue/i.test(desc)) {
102
+ url = linkUrl;
103
+ text = desc;
104
+ } else if (!learnMoreUrl && /learn more/i.test(desc ?? "")) {
105
+ learnMoreUrl = linkUrl;
106
+ }
107
+ }
108
+ }
109
+ }
110
+ return { url, text, learnMoreUrl };
111
+ }
112
+ function parseSendError(errorMessage) {
113
+ const summary = errorMessage.replace(/^local\s+/, "").split("\n")[0].trim();
114
+ const providerMatch = errorMessage.match(/local\s+(\w+)\s+OAuth provider failed/i);
115
+ const providerName = providerMatch ? PROVIDER_NAMES[providerMatch[1].toLowerCase()] ?? providerMatch[1] : void 0;
116
+ const statusMatch = errorMessage.match(/HTTP\s+(\d{3})/);
117
+ const status = statusMatch?.[1];
118
+ const jsonStart = errorMessage.indexOf("{");
119
+ let payload = null;
120
+ if (jsonStart >= 0) {
121
+ let candidate = errorMessage.slice(jsonStart);
122
+ for (let depth = 0; depth < 3; depth += 1) {
123
+ try {
124
+ const parsed = JSON.parse(candidate);
125
+ payload = parsed;
126
+ const message = asString(parsed?.error?.message);
127
+ if (message && message.trim().startsWith("{")) {
128
+ candidate = message;
129
+ continue;
130
+ }
131
+ break;
132
+ } catch {
133
+ break;
134
+ }
135
+ }
136
+ }
137
+ const errorRec = payload ? asRecord(payload.error) : null;
138
+ const innerMessage = errorRec ? asString(errorRec.message) : void 0;
139
+ const statusFromBody = errorRec ? asString(errorRec.status) : void 0;
140
+ const details = errorRec?.details;
141
+ const { url, text, learnMoreUrl } = collectValidationFromDetails(details);
142
+ let reason = errorRec ? asString(errorRec.reason) : void 0;
143
+ let domain = errorRec ? asString(errorRec.domain) : void 0;
144
+ if (!reason && Array.isArray(details)) {
145
+ const first = asRecord(details[0]);
146
+ reason = first ? asString(first.reason) : void 0;
147
+ domain = first ? asString(first.domain) : void 0;
148
+ }
149
+ const parts = [];
150
+ const head = providerName ? `${providerName} \u8FDE\u63A5\u5931\u8D25` : "\u53D1\u9001\u5931\u8D25";
151
+ parts.push(
152
+ `${head}${status ? ` (HTTP ${status})` : ""}${statusFromBody ? ` ${statusFromBody}` : ""}`
153
+ );
154
+ if (reason) {
155
+ parts.push(`\u539F\u56E0\uFF1A${reason}`);
156
+ }
157
+ if (domain) {
158
+ parts.push(`\u670D\u52A1\uFF1A${domain}`);
159
+ }
160
+ const humanMessage = innerMessage && innerMessage.trim() !== "Verify your account to continue." ? innerMessage : void 0;
161
+ if (humanMessage) {
162
+ parts.push(`\u63D0\u793A\uFF1A${humanMessage}`);
163
+ }
164
+ const extraLinks = [];
165
+ if (learnMoreUrl) {
166
+ extraLinks.push({ text: "\u4E86\u89E3\u66F4\u591A", url: learnMoreUrl });
167
+ }
168
+ if (url) {
169
+ return {
170
+ summary: parts.join("\n"),
171
+ validationUrl: url,
172
+ validationLinkText: text ?? "\u9A8C\u8BC1\u6211\u7684\u8D26\u53F7",
173
+ extraLinks
174
+ };
175
+ }
176
+ const MAX_FALLBACK = 500;
177
+ const fallbackText = errorMessage.length > MAX_FALLBACK ? `${errorMessage.slice(0, MAX_FALLBACK)}\u2026` : errorMessage;
178
+ return { summary: parts.join("\n"), extraLinks, fallbackText };
179
+ }
180
+ function buildSendErrorMessageMarkdown(parsed) {
181
+ const lines = ["[\u53D1\u9001\u5931\u8D25]", "", parsed.summary];
182
+ if (parsed.validationUrl) {
183
+ lines.push(
184
+ "",
185
+ `\u8BF7\u70B9\u51FB\u94FE\u63A5\u5B8C\u6210\u9A8C\u8BC1\uFF1A`,
186
+ `- [${parsed.validationLinkText ?? "\u9A8C\u8BC1\u6211\u7684\u8D26\u53F7"}](${parsed.validationUrl})`
187
+ );
188
+ }
189
+ for (const link of parsed.extraLinks) {
190
+ lines.push(`- [${link.text}](${link.url})`);
191
+ }
192
+ if (parsed.fallbackText && !parsed.validationUrl) {
193
+ lines.push("", "```", parsed.fallbackText, "```");
194
+ }
195
+ return lines.join("\n");
196
+ }
197
+
61
198
  // packages/chat/dialog/actions/handleSendMessageAction.ts
62
199
  var getDialogConfig = (state, dialogKey) => {
63
200
  const resolvedDialogKey = dialogKey ?? getActiveDialogKey();
@@ -139,12 +276,43 @@ var finalizeQuickChatStreamStartupFailure = async (dispatch, dialogConfig, agent
139
276
  })
140
277
  ).unwrap?.();
141
278
  };
279
+ var buildActionableErrorText = (errorMessage) => {
280
+ return buildSendErrorMessageMarkdown(parseSendError(errorMessage));
281
+ };
282
+ var finalizeSendFailureInDialog = async (dispatch, dialogConfig, agentKey, errorMessage) => {
283
+ const dialogKey = dialogConfig.dbKey;
284
+ const dialogId = dialogConfig.id ?? (dialogKey ? extractCustomId(dialogKey) : "");
285
+ const { key: msgKey, messageId } = createDialogMessageKeyAndId(dialogId);
286
+ await dispatch(
287
+ messageStreamEnd({
288
+ finalContentBuffer: [
289
+ {
290
+ type: "text",
291
+ text: `[\u53D1\u9001\u5931\u8D25]
292
+
293
+ ${buildActionableErrorText(errorMessage)}`
294
+ }
295
+ ],
296
+ totalUsage: null,
297
+ msgKey,
298
+ agentConfig: {
299
+ dbKey: agentKey
300
+ },
301
+ dialogId,
302
+ dialogKey: dialogKey ?? "",
303
+ messageId,
304
+ reasoningBuffer: ""
305
+ })
306
+ ).unwrap?.();
307
+ };
142
308
  var handleSendMessageAction = async (args, { dispatch, getState, rejectWithValue }) => {
309
+ let dialogConfig = null;
310
+ let agentKeyToUse;
143
311
  try {
144
312
  logQuickChatPerfStage(args.quickChatPerfStartedAt, "handle-send-message-entered", {
145
313
  dialogKey: args.dialogKey ?? null
146
314
  });
147
- const dialogConfig = await ensureDialogConfig(dispatch, getState, args.dialogKey);
315
+ dialogConfig = await ensureDialogConfig(dispatch, getState, args.dialogKey);
148
316
  if (!dialogConfig) {
149
317
  throw new Error(
150
318
  "handleSendMessage: Dialog configuration is missing."
@@ -163,11 +331,13 @@ var handleSendMessageAction = async (args, { dispatch, getState, rejectWithValue
163
331
  logQuickChatPerfStage(args.quickChatPerfStartedAt, "handle-send-message-user-persisted", {
164
332
  dialogKey: dialogConfig.dbKey
165
333
  });
166
- const { agentKeyToUse, effectiveRuntimeOptions } = resolveHandleSendMessageContext({
334
+ const resolvedContext = resolveHandleSendMessageContext({
167
335
  dialogConfig,
168
336
  targetAgentKey: args.targetAgentKey,
169
337
  runtimeOptions: args.runtimeOptions
170
338
  });
339
+ agentKeyToUse = resolvedContext.agentKeyToUse;
340
+ const effectiveRuntimeOptions = resolvedContext.effectiveRuntimeOptions;
171
341
  if (!agentKeyToUse) {
172
342
  return;
173
343
  }
@@ -207,6 +377,22 @@ ${userInputText}` : args.userInput;
207
377
  } catch (error) {
208
378
  console.error("handleSendMessage failed:", error);
209
379
  const errorMessage = error instanceof Error ? error.message : typeof error === "string" ? error : error?.message || error?.error || String(error);
380
+ try {
381
+ if (dialogConfig && agentKeyToUse) {
382
+ await finalizeSendFailureInDialog(
383
+ dispatch,
384
+ dialogConfig,
385
+ agentKeyToUse,
386
+ errorMessage
387
+ );
388
+ return rejectWithValue({
389
+ __errorInDialog: true,
390
+ message: errorMessage
391
+ });
392
+ }
393
+ } catch (writeError) {
394
+ console.error("handleSendMessage: failed to write error into dialog:", writeError);
395
+ }
210
396
  return rejectWithValue(errorMessage);
211
397
  }
212
398
  };