nolo-cli 0.47.0-alpha.2 → 0.47.0-alpha.4

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 (63) hide show
  1. package/{_executeModel-5PG6CUWD.js → _executeModel-4NLFAYUJ.js} +14 -12
  2. package/{agentDeleteCommand-SHSPQZHI.js → agentDeleteCommand-O5XR2A7X.js} +2 -2
  3. package/{agentEmailCommands-LQKO5GRW.js → agentEmailCommands-QXG4VPDL.js} +16 -13
  4. package/{agentListCommands-5QTNEYMQ.js → agentListCommands-NF75BYVM.js} +2 -2
  5. package/{agentMachineCommands-P5K454CN.js → agentMachineCommands-KGOXL5IA.js} +6 -5
  6. package/{agentRecordCommands-Z4QYCNP4.js → agentRecordCommands-MV6RBJU2.js} +16 -13
  7. package/{agentRunCommand-HV3Y34B5.js → agentRunCommand-PGKXK34X.js} +17 -14
  8. package/{agentRunControl-LHXOP4IU.js → agentRunControl-4GHHSXFZ.js} +1 -1
  9. package/{agentRuntimeLocal-ZKXYFLXI.js → agentRuntimeLocal-O6X4KCUS.js} +2 -2
  10. package/{agentSlice-NKFLP3RI.js → agentSlice-HM5KSZIO.js} +1 -1
  11. package/{agentSuperviseCommands-IMRZ56RC.js → agentSuperviseCommands-VB6BUS5H.js} +2 -2
  12. package/{appDeleteCommands-XYGAZIJX.js → appDeleteCommands-SZTC24KA.js} +2 -2
  13. package/{appDeployCommands-7T5CABRB.js → appDeployCommands-EAUHYRPF.js} +2 -2
  14. package/{appDeployStatusCommands-KTFQMRPZ.js → appDeployStatusCommands-K3AKGODG.js} +2 -2
  15. package/{appGetCommands-HOX2ULSV.js → appGetCommands-L56BQOH5.js} +2 -2
  16. package/{appListCommands-3SLCEHND.js → appListCommands-WTZKJM4T.js} +2 -2
  17. package/{chatQueueReduxAdapter-WMMBQK3Y.js → chatQueueReduxAdapter-Z7GK6NWM.js} +2 -2
  18. package/{chunk-RQSOAMPJ.js → chunk-3L2WKC3W.js} +12 -7
  19. package/{chunk-4ZNDBDWG.js → chunk-4RUHYZLJ.js} +2 -2
  20. package/chunk-5XTOKQLW.js +121 -0
  21. package/{chunk-HOM6NILS.js → chunk-65NEZURC.js} +1 -1
  22. package/{chunk-IWUPQUWA.js → chunk-6H5FASZ4.js} +1 -1
  23. package/{chunk-MQRZ5QUH.js → chunk-ALXHV7NK.js} +4 -2
  24. package/{chunk-WPFNAEIW.js → chunk-B75HVLQU.js} +1 -1
  25. package/{chunk-MUIJYGYW.js → chunk-BPRFPWWC.js} +1 -1
  26. package/{chunk-G46DB6KG.js → chunk-BPYHNK6B.js} +2 -2
  27. package/{chunk-YNOGNUBC.js → chunk-CXCSIBWY.js} +73 -27
  28. package/{chunk-XMI3APSU.js → chunk-E5HL3EXN.js} +6 -6
  29. package/chunk-EADNWBAZ.js +59 -0
  30. package/{chunk-H2JQB6B6.js → chunk-EPSE5WQL.js} +2 -2
  31. package/{chunk-25J3BB35.js → chunk-EUG45QJR.js} +90 -27
  32. package/{chunk-Q6DMA2OM.js → chunk-GEGFB75V.js} +38 -193
  33. package/{chunk-7XZ5GXSN.js → chunk-J3UALFHL.js} +1 -1
  34. package/{chunk-5BPZLBFB.js → chunk-KMWZ2MEG.js} +8 -6
  35. package/chunk-NF64D32W.js +8 -0
  36. package/{chunk-MWT2BBCH.js → chunk-T4P5XHZZ.js} +12 -10
  37. package/{chunk-FAWK6DBF.js → chunk-UVEH34NR.js} +8 -8
  38. package/{chunk-6LYUN76O.js → chunk-V7FV73B7.js} +3 -3
  39. package/{chunk-AEXP2UZT.js → chunk-WHVQA7PJ.js} +8 -2
  40. package/{chunk-5PPFYHU2.js → chunk-WQDU7TFJ.js} +2 -2
  41. package/{chunk-JEGPB5H2.js → chunk-XXS34H5T.js} +3 -3
  42. package/{createAgentAutomationAction-ENDNA3Q4.js → createAgentAutomationAction-QWWQTQ2Q.js} +3 -3
  43. package/{createDialogAction-2KNX6S2D.js → createDialogAction-XDMNGRXN.js} +4 -4
  44. package/{createPageAction-SNBCYPK6.js → createPageAction-74TUIHWA.js} +3 -3
  45. package/{dialogCommands-6E5P35DG.js → dialogCommands-WPG6I2ZR.js} +8 -3
  46. package/{dialogSlice-RTPOD6EW.js → dialogSlice-YUVIK53X.js} +2 -2
  47. package/{docCreateCommands-JWY25UFB.js → docCreateCommands-3T6427C5.js} +2 -2
  48. package/{docDeleteCommands-BPJOCSX4.js → docDeleteCommands-6ZXYJWUC.js} +2 -2
  49. package/{docReadCommands-BSEZCYTQ.js → docReadCommands-3VVYJYXK.js} +2 -2
  50. package/{docStore-TYHVLU7G.js → docStore-4J3GA3JF.js} +4 -4
  51. package/{docUpdateCommands-S2IE2VV4.js → docUpdateCommands-Z3RO54Y7.js} +2 -2
  52. package/{handleSendMessageAction-QYXDQXGH.js → handleSendMessageAction-5H53O6P2.js} +2 -2
  53. package/index.js +46 -46
  54. package/{machineCommands-QCE4KLGR.js → machineCommands-3L465LNQ.js} +17 -14
  55. package/{machineWsRunDispatch-FBRMGU5D.js → machineWsRunDispatch-YOHDI23Y.js} +16 -13
  56. package/package.json +1 -1
  57. package/{readlineWorkspace-2TACWKMN.js → readlineWorkspace-SQMRU5UF.js} +22 -19
  58. package/{runAgentClientLoop-GBLDVBT5.js → runAgentClientLoop-4Z2U3Y4R.js} +12 -10
  59. package/{spaceCommands-XOLPJMRK.js → spaceCommands-BH3JJ5NE.js} +2 -2
  60. package/{spaceSlice-OQPAGQDP.js → spaceSlice-R23R5VKL.js} +3 -3
  61. package/{streamAgentChatTurn-SN5XJJ7U.js → streamAgentChatTurn-L2NUEMDF.js} +13 -11
  62. package/{tools-Y65Y3CI4.js → tools-W7X3QSN2.js} +9 -7
  63. package/{updateDialogTitleAction-OAOP7CCE.js → updateDialogTitleAction-Y3NM74D7.js} +3 -3
@@ -0,0 +1,121 @@
1
+ import {
2
+ createDrainExhaustedResponse,
3
+ isCoreDrainingBody,
4
+ normalizeNonNegativeMs,
5
+ parseRetryAfterHeaderMs
6
+ } from "./chunk-3L2WKC3W.js";
7
+ import {
8
+ toErrorMessage
9
+ } from "./chunk-HNMXYYJR.js";
10
+ import {
11
+ isLoopbackHostname
12
+ } from "./chunk-4SN6J65J.js";
13
+
14
+ // packages/core/fetchWithTransientRetry.ts
15
+ var TRANSIENT_FETCH_MAX_ATTEMPTS = 3;
16
+ var TRANSIENT_FETCH_RETRY_BASE_DELAY_MS = 250;
17
+ var CORE_DRAINING_MAX_ATTEMPTS = 30;
18
+ var RETRYABLE_HTTP_STATUSES = /* @__PURE__ */ new Set([429, 503]);
19
+ function isTransientFetchError(error) {
20
+ const message = toErrorMessage(error);
21
+ return /certificate|handshake|network|socket|timed out|timeout|ECONNRESET/i.test(
22
+ message
23
+ );
24
+ }
25
+ async function defaultSleep(ms) {
26
+ await new Promise((resolve) => setTimeout(resolve, ms));
27
+ }
28
+ function transientFetchRetryDelayMs(attempt) {
29
+ return Math.min(attempt * TRANSIENT_FETCH_RETRY_BASE_DELAY_MS, 2e3);
30
+ }
31
+ var MAX_RETRY_DELAY_MS = 1e4;
32
+ async function resolveRetryAfterMs(response, attempt) {
33
+ const headerMs = parseRetryAfterHeaderMs(
34
+ response.headers.get("retry-after")
35
+ );
36
+ if (headerMs !== null) {
37
+ return Math.min(headerMs, MAX_RETRY_DELAY_MS);
38
+ }
39
+ try {
40
+ const body = await response.clone().text();
41
+ const parsed = JSON.parse(body);
42
+ const ms = normalizeNonNegativeMs(parsed?.retryAfterMs, 0);
43
+ if (ms > 0) return Math.min(ms, MAX_RETRY_DELAY_MS);
44
+ } catch {
45
+ }
46
+ return transientFetchRetryDelayMs(attempt);
47
+ }
48
+ function isRetryLoopbackInput(input) {
49
+ try {
50
+ const target = typeof input === "string" || input instanceof URL ? new URL(String(input)) : new URL(input.url);
51
+ return isLoopbackHostname(target.hostname);
52
+ } catch {
53
+ return false;
54
+ }
55
+ }
56
+ async function isCoreDrainingResponse(response) {
57
+ if (response.status !== 503) return false;
58
+ try {
59
+ const body = await response.clone().json();
60
+ return isCoreDrainingBody(body);
61
+ } catch {
62
+ return false;
63
+ }
64
+ }
65
+ async function fetchWithTransientRetry(fetchImpl, input, init, options = {}) {
66
+ const retryableStatuses = options.retryableStatuses ?? RETRYABLE_HTTP_STATUSES;
67
+ const requestedMaxAttempts = Number(options.maxAttempts);
68
+ const maxAttempts = Number.isFinite(requestedMaxAttempts) ? Math.min(100, Math.max(1, Math.floor(requestedMaxAttempts))) : TRANSIENT_FETCH_MAX_ATTEMPTS;
69
+ const requestedCoreDrainingMaxAttempts = Number(options.coreDrainingMaxAttempts);
70
+ const coreDrainingMaxAttempts = Number.isFinite(requestedCoreDrainingMaxAttempts) ? Math.min(100, Math.max(1, Math.floor(requestedCoreDrainingMaxAttempts))) : CORE_DRAINING_MAX_ATTEMPTS;
71
+ const loopMaxAttempts = Math.max(maxAttempts, coreDrainingMaxAttempts);
72
+ let lastError;
73
+ for (let attempt = 1; attempt <= loopMaxAttempts; attempt += 1) {
74
+ try {
75
+ if (options.loopbackRequest && isRetryLoopbackInput(input)) {
76
+ return await options.loopbackRequest(input, init);
77
+ }
78
+ const response = await fetchImpl(input, init);
79
+ const retryableStatus = retryableStatuses.has(response.status) && !init?.signal?.aborted;
80
+ const callerAllowsRetry = retryableStatus ? await options.shouldRetryResponse?.(response) ?? true : false;
81
+ if (retryableStatus && callerAllowsRetry) {
82
+ const coreDraining = await isCoreDrainingResponse(response);
83
+ const attemptBudget = coreDraining ? coreDrainingMaxAttempts : maxAttempts;
84
+ if (attempt < attemptBudget) {
85
+ const delayMs = await resolveRetryAfterMs(response, attempt);
86
+ options.onRetry?.({
87
+ attempt: attempt + 1,
88
+ maxAttempts: attemptBudget,
89
+ delayMs
90
+ });
91
+ await (options.sleep ?? defaultSleep)(delayMs);
92
+ continue;
93
+ }
94
+ if (coreDraining) {
95
+ return createDrainExhaustedResponse(response);
96
+ }
97
+ }
98
+ return response;
99
+ } catch (error) {
100
+ if (init?.signal?.aborted) throw error;
101
+ if (!isTransientFetchError(error)) throw error;
102
+ if (options.retryNetworkErrors === false) throw error;
103
+ lastError = error;
104
+ if (attempt < maxAttempts) {
105
+ const delayMs = transientFetchRetryDelayMs(attempt);
106
+ options.onRetry?.({
107
+ attempt: attempt + 1,
108
+ maxAttempts,
109
+ delayMs
110
+ });
111
+ await (options.sleep ?? defaultSleep)(delayMs);
112
+ }
113
+ }
114
+ }
115
+ throw lastError;
116
+ }
117
+
118
+ export {
119
+ isTransientFetchError,
120
+ fetchWithTransientRetry
121
+ };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  clearCliLocalRuntimePreparedAgentCache
3
- } from "./chunk-Q6DMA2OM.js";
3
+ } from "./chunk-GEGFB75V.js";
4
4
  import {
5
5
  getReadableCliDb
6
6
  } from "./chunk-43CXXVJD.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  i18n_default,
3
3
  toolRegistry
4
- } from "./chunk-YNOGNUBC.js";
4
+ } from "./chunk-CXCSIBWY.js";
5
5
  import {
6
6
  canonicalizeToolNames
7
7
  } from "./chunk-O6OSWFZQ.js";
@@ -1,8 +1,10 @@
1
+ import {
2
+ isGatewayHttpStatus
3
+ } from "./chunk-NF64D32W.js";
1
4
  import {
2
5
  CORE_DRAIN_REASON,
3
- isGatewayHttpStatus,
4
6
  parseRetryAfterHeaderMs
5
- } from "./chunk-RQSOAMPJ.js";
7
+ } from "./chunk-3L2WKC3W.js";
6
8
  import {
7
9
  asTrimmedLowercaseString
8
10
  } from "./chunk-QSJ3HFEF.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  fetchReferenceContents,
3
3
  resolveReferenceAssets
4
- } from "./chunk-5BPZLBFB.js";
4
+ } from "./chunk-KMWZ2MEG.js";
5
5
 
6
6
  // packages/ai/agent/fetchAgentContexts.ts
7
7
  async function fetchAgentContexts(references, dispatch) {
@@ -36,7 +36,7 @@ import {
36
36
  requiresBareImageUrl,
37
37
  resolveToolGuidedSections,
38
38
  toBareImageUrlMessages
39
- } from "./chunk-G46DB6KG.js";
39
+ } from "./chunk-BPYHNK6B.js";
40
40
  import {
41
41
  convertMessagesToResponsesInput,
42
42
  extractReasoningFromResponseOutput,
@@ -170,7 +170,7 @@ var MENU_USAGE_INSTRUCTIONS = `--- \u4EA4\u4E92\u8BF4\u660E ---
170
170
  var AGENT_ORCHESTRATION_RUN_INSTRUCTIONS = `--- \u591A Agent \u7F16\u6392\uFF08\u540E\u53F0 Run\uFF09 ---
171
171
  \u7528 startAgentRun \u542F\u52A8\u5B50 Agent\uFF08wait:false \u5F02\u6B65 fork+exec \u8FD4\u56DE runId\uFF1Bwait:true \u540C\u6B65\u7B49\u7ED3\u679C\uFF09\uFF0C\u7528 controlAgentRun \u89C2\u5BDF/\u505C\u6B62\uFF08wait/signal/proc \u8BED\u4E49\uFF09\u3002\u4F55\u65F6\u6D3E\u53D1\u89C1\u300C\u591A Agent \u534F\u4F5C\u300D\u6BB5\uFF1B\u672C\u6BB5\u53EA\u8BB2\u6D3E\u53D1\u4E4B\u540E\u600E\u4E48\u76EF\u3001\u600E\u4E48\u6392\u9519\u3002
172
172
 
173
- 1. \u76EF\u68A2\uFF1A**\u5F02\u6B65\u6D3E\u53D1\u540E\u7ACB\u5373\u6536\u5C3E\uFF0C\u7B49\u7EC8\u6001\u901A\u77E5\u3002** \u8981\u7ACB\u5373\u62FF\u7ED3\u679C\u5C31\u522B\u7528\u5F02\u6B65\uFF1A<100s \u5B50\u4EFB\u52A1\u76F4\u63A5 startAgentRun({ wait: true })\uFF1B\u5DF2\u5F02\u6B65\u6D3E\u51FA\u7684\u7528 controlAgentRun(action:"wait", runId) \u963B\u585E\u5230\u7EC8\u6001\u3002\u652F\u6301\u7EC8\u6001\u5524\u9192\u7684\u73AF\u5883\uFF08\u684C\u9762 TUI\uFF09run \u5230\u7EC8\u6001\u81EA\u52A8\u6458\u8981\u5524\u9192\u4F60\uFF0C\u65E0\u5E76\u884C\u5DE5\u4F5C\u5219\u4E00\u53E5\u8BDD\u6536\u5C3E\uFF1B\u6CA1\u6709\u7EC8\u6001\u5524\u9192\u7684\u73AF\u5883\uFF08\u88F8 CLI\u3001\u670D\u52A1\u7AEF runtime\uFF09\u7528 wait \u963B\u585E\uFF0C\u540C\u6837\u4E0D\u8981\u81EA\u5DF1\u5FAA\u73AF\u67E5\u3002
173
+ 1. \u76EF\u68A2\uFF1A**\u5F02\u6B65\u6D3E\u53D1\u540E\u7ACB\u5373\u6536\u5C3E\uFF0C\u7B49\u7EC8\u6001\u901A\u77E5\u3002** \u963B\u585E\u7B49\u5F85\uFF08startAgentRun wait:true / controlAgentRun wait\uFF09\u7684\u771F\u5B9E\u4EE3\u4EF7\u662F\u51BB\u7ED3\u5BF9\u8BDD\u2014\u2014\u7528\u6237\u5728\u7B49\u5F85\u671F\u95F4\u65E0\u6CD5\u63D2\u8BDD\uFF0C\u7F16\u6392\u8005\u4E5F\u65E0\u6CD5\u5E76\u884C\u63A8\u8FDB\u5176\u4ED6\u5DE5\u4F5C\uFF0C\u56E0\u6B64\u963B\u585E\u7B49\u5F85\u4EC5\u9650\u4E09\u79CD\u60C5\u51B5\uFF1A\u2460 \u9884\u8BA1 <100s \u4E14\u9A6C\u4E0A\u8981\u7528\u7ED3\u679C\u7684\u5B50\u4EFB\u52A1\uFF1B\u2461 \u7528\u6237\u660E\u786E\u8981\u6C42\u540C\u6B65\u7B49\u5F85\u6216\u6B63\u5728\u4E0E\u8BE5\u5B50\u4EFB\u52A1\u5BF9\u8BDD\uFF1B\u2462 \u73AF\u5883\u4E0D\u652F\u6301\u7EC8\u6001\u5524\u9192\uFF0C\u4E14\u5F53\u524D\u6CA1\u6709\u53EF\u5E76\u884C\u63A8\u8FDB\u7684\u5176\u4ED6\u5DE5\u4F5C\uFF08\u6B64\u65F6 startAgentRun \u76F4\u63A5 wait:true\uFF0C\u5DF2\u5F02\u6B65\u6D3E\u51FA\u7684\u7528 controlAgentRun(action:"wait", runId) \u963B\u585E\u5230\u7EC8\u6001\uFF09\u3002\u652F\u6301\u7EC8\u6001\u5524\u9192\u7684\u73AF\u5883\uFF08\u684C\u9762 TUI / web\uFF09\uFF1A\u591A\u5206\u949F\u7EA7 run \u4E00\u5F8B\u5F02\u6B65\u6D3E\u53D1\u5E76\u7ACB\u5373\u6536\u5C3E\u7ED3\u675F\u56DE\u5408\uFF08\u4E00\u53E5\u8BDD\u8BF4\u660E\u540E\u7EED\u52A8\u4F5C\u5373\u53EF\uFF09\uFF0C\u7EC8\u6001\u81EA\u52A8\u6458\u8981\u5524\u9192\u540E\u7EE7\u7EED\uFF1B\u4E32\u884C\u4F9D\u8D56\uFF08\u6267\u884C\u2192\u5BA1\u67E5\u2192\u96C6\u6210\uFF09\u4E0D\u662F\u963B\u585E\u5BF9\u8BDD\u7684\u7406\u7531\u2014\u2014\u9760 wake \u63A5\u529B\u5373\u53EF\u3002\u6CA1\u6709\u7EC8\u6001\u5524\u9192\u7684\u73AF\u5883\uFF08\u88F8 CLI\u3001\u670D\u52A1\u7AEF runtime\uFF09\u624D\u7528 wait \u963B\u585E\uFF0C\u540C\u6837\u4E0D\u8981\u81EA\u5DF1\u5FAA\u73AF\u67E5\u3002
174
174
  2. \u7B49\u5F85/\u7981\u6B62\u8F6E\u8BE2/\u7981\u7A7A\u8F6C/\u522B\u590D\u8FF0 status \u7684\u8BED\u4E49\u4EE5 startAgentRun \u4E0E controlAgentRun \u5DE5\u5177\u63CF\u8FF0\u4E3A\u51C6\u3002controlAgentRun \u53EA\u5728\u300C\u7B54\u6848\u4F1A\u6539\u53D8\u4F60\u4E0B\u4E00\u6B65\u52A8\u4F5C\u300D\u65F6\u7528\uFF08\u80FD\u5426\u6C47\u603B\u3001\u8981\u4E0D\u8981\u53EB\u505C/\u8865\u6D3E\uFF09\uFF1B\u4E00\u6B21\u6027\u6B7B\u6D3B\u68C0\u67E5\u7528 status(runId, tailLines:0)\u3002\u5E76\u884C\uFF1A\u591A\u4E2A\u72EC\u7ACB\u5B50\u4EFB\u52A1\u4E00\u6B21\u6D3E\u5B8C\uFF0C\u4E4B\u540E\u7B49\u5404\u81EA\u7EC8\u6001\u9010\u4E2A\u6C47\u603B\u3002\u65E0\u6587\u4EF6\u4EA4\u96C6\u3001\u65E0\u771F\u5B9E\u6570\u636E\u4F9D\u8D56\u7684\u4EFB\u52A1\u9ED8\u8BA4\u5E76\u53D1\u6D3E\u53D1\u2014\u2014\u4E0D\u8981\u56E0\u5B83\u4EEC\u6070\u597D\u5171\u7528\u540C\u4E00\u6267\u884C agent/\u901A\u9053\u800C\u81EA\u884C\u52A0\u300C\u901A\u9053\u4E32\u884C\u300D\u7684\u4FDD\u5B88\u5047\u8BBE\uFF08\u540C\u901A\u9053\u5141\u8BB8\u5E76\u53D1 fork \u591A\u5B9E\u4F8B\uFF0C\u5B9E\u4F8B\u95F4\u65E0\u4E0A\u4E0B\u6587\u5171\u4EAB\uFF09\uFF1B\u53EA\u6709\u4EFB\u52A1\u95F4\u5B58\u5728\u771F\u5B9E\u6587\u4EF6/\u6570\u636E\u4F9D\u8D56\u6216 brief \u660E\u793A\u51B2\u7A81\u9762\u65F6\u624D\u4E32\u884C\u3002
175
175
  3. \u6392\u9519\uFF1A\u5148\u5206\u8BCA\u518D\u4E0B\u7ED3\u8BBA\u3002\u2460 \u590D\u6838 agentKey \u662F\u5426\u7167\u6284\u81EA listAgents\uFF08\u4E0D\u662F\u5C31\u5148\u4FEE key\uFF0C\u4E0D\u7B97\u901A\u9053\u6545\u969C\uFF09\uFF1B\u2461 \u62A5\u9519\u542B not found / invalid ref / Local agent config not found \u2192 \u5148 readAgent \u590D\u6838\uFF0C**\u7981\u6B62**\u636E\u6B64\u63A8\u65AD\u51ED\u8BC1\u7F3A\u5931\u6216\u901A\u9053\u5168\u6302\uFF1B\u2462 \u540C\u4E00\u5DF2\u9A8C\u8BC1 key \u4E0A\u4ECD\u5931\u8D25\u4E14\u9519\u8BEF\u660E\u786E\u6307\u5411\u901A\u9053\uFF08429\u3001\u9274\u6743\u5931\u8D25\u3001machine offline\uFF09\u2192 \u624D\u8BB0\u4E3A\u901A\u9053\u6545\u969C\u3002
176
176
  4. \u5224\u5B9A\u300C\u6D3E\u53D1\u901A\u9053\u6574\u4F53\u4E0D\u53EF\u7528\u300D\u524D\uFF0C\u81F3\u5C11\u5BF9 2 \u4E2A\u4E0D\u540C\u5019\u9009\u5404\u5B8C\u6210\u300C\u5DF2\u9A8C\u8BC1 key + \u4E00\u6B21\u771F\u5B9E\u6D3E\u53D1\u300D\uFF1B\u5019\u9009\u4E0D\u8DB3 2 \u4E2A\u5C31\u5982\u5B9E\u62A5\u544A\u300C\u4EC5\u6B64\u5019\u9009\u4E14\u901A\u9053\u5931\u8D25\u300D\uFF0C\u4E0D\u5F97\u5938\u5927\u6210\u5168\u5E93\u4E0D\u53EF\u7528\u3002\u53EA\u6709 status=failed/\u8D85\u65F6\u6216 progress \u957F\u65F6\u95F4\u6BEB\u65E0\u52A8\u9759\uFF08\u7591\u4F3C\u5361\u6B7B\uFF09\u624D\u62C9 tailLines:30 \u770B\u65E5\u5FD7\uFF1Bstop \u4E4B\u524D\u5148\u770B\u65E5\u5FD7\u786E\u8BA4\u662F\u771F\u5361\u6B7B\uFF0C\u5E76\u7528 list/status \u786E\u8BA4 run \u771F\u5B9E\u5B58\u5728\u4E14\u975E\u7EC8\u6001\u2014\u2014\u522B\u5047\u8BBE\u300C\u6D3E\u53D1\u4E86\u5C31\u5728\u8DD1\u300D\u3002`;
@@ -185,7 +185,7 @@ var AGENT_COLLABORATION_INSTRUCTIONS = `--- Agent \u7F16\u6392\u4E0E\u534F\u4F5C
185
185
 
186
186
  **\u6D3E\u53D1\u901A\u9053**\uFF1A
187
187
  - \u76EE\u6807\u8BB0\u5F55\u5DF2\u58F0\u660E delegation.serverBase / runtimeServerBase \u2192 \u5DE5\u5177\u81EA\u52A8\u8DEF\u7531\u5230\u5BF9\u5E94 nolo server\uFF0C\u65E0\u9700\u91CD\u590D\u586B serverBase\uFF1B\u7528\u6237\u7ED9\u51FA\u53EF\u8BBF\u95EE\u7684 server origin \u65F6\u53EF\u4F20 serverBase \u8986\u76D6\u81EA\u52A8\u8DEF\u7531\uFF0C\u52FF\u81C6\u9020\u5730\u5740\u3001\u52FF\u628A localhost \u5F53\u8FDC\u7AEF\u673A\u5668\u3002
188
- - \u901A\u9053\u8BED\u4E49\uFF1AstartAgentRun \u5F02\u6B65\uFF08wait:false\uFF09\u53EA\u8868\u793A\u5DF2\u542F\u52A8/\u6392\u961F\uFF0C**\u4E0D\u8868\u793A\u4EFB\u52A1\u5B8C\u6210**\uFF1Bdone/failed \u540E\u7CFB\u7EDF\u7528 terminal wake \u7EE7\u7EED\u7236\u5BF9\u8BDD\uFF0C\u4F60\u518D\u8BFB child evidence \u51B3\u5B9A\u4E0B\u4E00\u6B65\u3002\u8981\u77ED\u7ED3\u679C\u76F4\u63A5\u540C\u6B65\u7B49\uFF08wait:true\uFF09\uFF1B\u8981\u8BA9\u7528\u6237\u524D\u53F0\u5B9E\u65F6\u770B\u5230\u53D1\u8A00\uFF0C\u7528 runStreamingAgent\u3002
188
+ - \u901A\u9053\u8BED\u4E49\uFF1AstartAgentRun \u5F02\u6B65\uFF08wait:false\uFF09\u53EA\u8868\u793A\u5DF2\u542F\u52A8/\u6392\u961F\uFF0C**\u4E0D\u8868\u793A\u4EFB\u52A1\u5B8C\u6210**\uFF1Bdone/failed \u540E\u7CFB\u7EDF\u7528 terminal wake \u7EE7\u7EED\u7236\u5BF9\u8BDD\uFF0C\u4F60\u518D\u8BFB child evidence \u51B3\u5B9A\u4E0B\u4E00\u6B65\u3002\u4EC5\u5F53\u9884\u8BA1 <100s \u4E14\u9A6C\u4E0A\u8981\u7528\u7ED3\u679C\u3001\u7528\u6237\u660E\u786E\u8981\u6C42\u540C\u6B65\u7B49\u5F85\uFF08\u6216\u6B63\u5728\u4E0E\u8BE5\u5B50\u4EFB\u52A1\u5BF9\u8BDD\uFF09\u3001\u6216\u73AF\u5883\u4E0D\u652F\u6301\u7EC8\u6001\u5524\u9192\u4E14\u65E0\u5E76\u884C\u5DE5\u4F5C\u65F6\uFF0C\u624D\u7528 wait:true \u540C\u6B65\u7B49\uFF08\u963B\u585E\u4F1A\u51BB\u7ED3\u5BF9\u8BDD\uFF09\uFF1B\u5426\u5219\u4E00\u5F8B\u5F02\u6B65\u6D3E\u53D1\uFF0C\u9760\u7EC8\u6001\u5524\u9192\u63A5\u529B\u3002\u8981\u8BA9\u7528\u6237\u524D\u53F0\u5B9E\u65F6\u770B\u5230\u53D1\u8A00\uFF0C\u7528 runStreamingAgent\u3002
189
189
  - \u591A Agent \u534F\u4F5C\u4E0D\u9650\u4E8E\u4EE3\u7801\u4EFB\u52A1\uFF1A\u6E38\u620F\u8BBE\u8BA1\u3001\u7535\u5F71\u7B56\u5212\u3001\u5199\u4F5C\u3001\u8FD0\u8425\u3001\u7814\u7A76\u7B49\u5F02\u6B65\u5206\u5DE5\u573A\u666F\u540C\u6837\u9002\u7528\u3002
190
190
 
191
191
  **\u53D1\u6563 / \u4F1A\u5546\uFF08\u7CFB\u7EDF\u7EA7\u51B3\u7B56\u673A\u5236\uFF09**\uFF1A
@@ -1,10 +1,16 @@
1
+ import {
2
+ fetchWithTransientRetry
3
+ } from "./chunk-5XTOKQLW.js";
4
+ import {
5
+ isGatewayHttpStatus
6
+ } from "./chunk-NF64D32W.js";
1
7
  import {
2
8
  CORE_DRAIN_REASON,
3
9
  DRAIN_EXHAUSTED_USER_MESSAGE,
4
- isGatewayHttpStatus,
10
+ isDrainExhaustedResponse,
5
11
  normalizeNonNegativeMs,
6
12
  parseRetryAfterHeaderMs
7
- } from "./chunk-RQSOAMPJ.js";
13
+ } from "./chunk-3L2WKC3W.js";
8
14
  import {
9
15
  omitNullishAgentSummaryFields,
10
16
  sortSafeAgentSummaries,
@@ -37,7 +43,7 @@ import {
37
43
  } from "./chunk-INZZJSQF.js";
38
44
  import {
39
45
  createDocState
40
- } from "./chunk-5PPFYHU2.js";
46
+ } from "./chunk-WQDU7TFJ.js";
41
47
  import {
42
48
  ToolApiError,
43
49
  buildToolRequestHeaders,
@@ -64,7 +70,7 @@ import {
64
70
  buildBuiltinObjectSkillDbKey,
65
71
  buildBuiltinObjectSkillPageContent,
66
72
  createDialogAction
67
- } from "./chunk-4ZNDBDWG.js";
73
+ } from "./chunk-4RUHYZLJ.js";
68
74
  import {
69
75
  addCategory,
70
76
  addContentToSpace,
@@ -84,7 +90,7 @@ import {
84
90
  loadTableRows,
85
91
  updateContentCategory,
86
92
  updateContentTitle
87
- } from "./chunk-H2JQB6B6.js";
93
+ } from "./chunk-EPSE5WQL.js";
88
94
  import {
89
95
  normalizeAppRouteId,
90
96
  resolveDialogRuntimeAgentKey,
@@ -94,13 +100,13 @@ import {
94
100
  selectMsgById,
95
101
  uiAskChoiceFunc,
96
102
  uiAskChoiceFunctionSchema
97
- } from "./chunk-FAWK6DBF.js";
103
+ } from "./chunk-UVEH34NR.js";
98
104
  import {
99
105
  createAgent,
100
106
  runLlm,
101
107
  streamAgentChatTurn,
102
108
  updateAgent
103
- } from "./chunk-6LYUN76O.js";
109
+ } from "./chunk-V7FV73B7.js";
104
110
  import {
105
111
  getActiveDialogKey,
106
112
  require_react,
@@ -15038,22 +15044,41 @@ var getRuntime2 = (thunkApi) => {
15038
15044
  return state ? selectRuntimeSnapshot(state) : null;
15039
15045
  };
15040
15046
  var authHeaders2 = (token) => token ? { Authorization: `Bearer ${token}` } : {};
15047
+ var DrainExhaustedError = class extends Error {
15048
+ constructor() {
15049
+ super(DRAIN_EXHAUSTED_USER_MESSAGE);
15050
+ this.name = "DrainExhaustedError";
15051
+ }
15052
+ };
15053
+ function isDrainExhaustedError(error) {
15054
+ return error instanceof DrainExhaustedError;
15055
+ }
15056
+ async function throwIfDrainExhausted(response) {
15057
+ if (await isDrainExhaustedResponse(response)) {
15058
+ throw new DrainExhaustedError();
15059
+ }
15060
+ }
15041
15061
  async function readRemoteRecord2(args) {
15042
15062
  const serverBase = normalizeServerOrigin(args.serverBase);
15043
15063
  if (!serverBase || !args.token) return null;
15044
15064
  const query = args.includeDeleted ? "?includeDeleted=true" : "";
15045
- const response = await fetch(
15065
+ const response = await fetchWithTransientRetry(
15066
+ fetch,
15046
15067
  `${serverBase}/api/v1/db/read/${encodeURIComponent(args.dbKey)}${query}`,
15047
15068
  { headers: authHeaders2(args.token) }
15048
15069
  );
15049
- if (!response.ok) return null;
15070
+ if (!response.ok) {
15071
+ await throwIfDrainExhausted(response);
15072
+ return null;
15073
+ }
15050
15074
  const payload = await response.json().catch(() => null);
15051
15075
  return payload?.data ?? payload;
15052
15076
  }
15053
15077
  async function queryRemoteUserRecords(args) {
15054
15078
  const serverBase = normalizeServerOrigin(args.serverBase);
15055
15079
  if (!serverBase || !args.token || !args.userId) return [];
15056
- const response = await fetch(
15080
+ const response = await fetchWithTransientRetry(
15081
+ fetch,
15057
15082
  `${serverBase}/api/v1/db/query/${encodeURIComponent(args.userId)}?limit=${args.limit}`,
15058
15083
  {
15059
15084
  method: "POST",
@@ -15067,7 +15092,10 @@ async function queryRemoteUserRecords(args) {
15067
15092
  })
15068
15093
  }
15069
15094
  );
15070
- if (!response.ok) return [];
15095
+ if (!response.ok) {
15096
+ await throwIfDrainExhausted(response);
15097
+ return [];
15098
+ }
15071
15099
  const payload = await response.json().catch(() => null);
15072
15100
  return Array.isArray(payload?.data?.data) ? payload.data.data : Array.isArray(payload?.data) ? payload.data : [];
15073
15101
  }
@@ -15079,7 +15107,10 @@ async function queryBestRecords(thunkApi, type, limit) {
15079
15107
  userId: runtime?.currentUserId,
15080
15108
  type,
15081
15109
  limit
15082
- }).catch(() => []);
15110
+ }).catch((error) => {
15111
+ if (isDrainExhaustedError(error)) throw error;
15112
+ return [];
15113
+ });
15083
15114
  return remoteRecords;
15084
15115
  }
15085
15116
  async function readBestRecord(thunkApi, dbKey, includeDeleted = false) {
@@ -15089,7 +15120,10 @@ async function readBestRecord(thunkApi, dbKey, includeDeleted = false) {
15089
15120
  token: runtime?.currentToken,
15090
15121
  dbKey,
15091
15122
  includeDeleted
15092
- }).catch(() => null);
15123
+ }).catch((error) => {
15124
+ if (isDrainExhaustedError(error)) throw error;
15125
+ return null;
15126
+ });
15093
15127
  }
15094
15128
  var listDialogsFunctionSchema = {
15095
15129
  name: "listDialogs",
@@ -15249,7 +15283,7 @@ async function readDialogFunc(args, thunkApi) {
15249
15283
  let messages = [];
15250
15284
  const serverBase = normalizeServerOrigin(runtime?.currentServer);
15251
15285
  if (serverBase && runtime?.currentToken) {
15252
- const response = await fetch(`${serverBase}/rpc/getConvMsgs`, {
15286
+ const response = await fetchWithTransientRetry(fetch, `${serverBase}/rpc/getConvMsgs`, {
15253
15287
  method: "POST",
15254
15288
  headers: {
15255
15289
  "Content-Type": "application/json",
@@ -15260,6 +15294,8 @@ async function readDialogFunc(args, thunkApi) {
15260
15294
  if (response?.ok) {
15261
15295
  const payload = await response.json().catch(() => []);
15262
15296
  messages = Array.isArray(payload) ? payload : [];
15297
+ } else if (response) {
15298
+ await throwIfDrainExhausted(response);
15263
15299
  }
15264
15300
  }
15265
15301
  return {
@@ -15349,7 +15385,7 @@ async function deleteDialogsFunc(args, thunkApi) {
15349
15385
  const deletedDialogIds = [];
15350
15386
  const deletedDialogKeys = [];
15351
15387
  const failures = [];
15352
- const { deleteDialog } = await import("./dialogSlice-RTPOD6EW.js");
15388
+ const { deleteDialog } = await import("./dialogSlice-YUVIK53X.js");
15353
15389
  for (const target of targets) {
15354
15390
  try {
15355
15391
  await thunkApi.dispatch(deleteDialog(target.dbKey)).unwrap();
@@ -15380,7 +15416,7 @@ async function fetchUserFavoriteAgentMap(thunkApi) {
15380
15416
  try {
15381
15417
  const serverBase = normalizeServerOrigin(runtime.currentServer);
15382
15418
  if (!serverBase) return {};
15383
- const response = await fetch(`${serverBase}/rpc/listFavorites`, {
15419
+ const response = await fetchWithTransientRetry(fetch, `${serverBase}/rpc/listFavorites`, {
15384
15420
  method: "POST",
15385
15421
  headers: {
15386
15422
  "Content-Type": "application/json",
@@ -15388,7 +15424,10 @@ async function fetchUserFavoriteAgentMap(thunkApi) {
15388
15424
  },
15389
15425
  body: JSON.stringify({ targetType: "agent" })
15390
15426
  }).catch(() => null);
15391
- if (!response || !response.ok) return {};
15427
+ if (!response || !response.ok) {
15428
+ if (response) await throwIfDrainExhausted(response);
15429
+ return {};
15430
+ }
15392
15431
  const data = await response.json().catch(() => ({}));
15393
15432
  const favoritedAtByKey = {};
15394
15433
  const items = Array.isArray(data?.items) ? data.items : [];
@@ -15405,7 +15444,8 @@ async function fetchUserFavoriteAgentMap(thunkApi) {
15405
15444
  }
15406
15445
  }
15407
15446
  return favoritedAtByKey;
15408
- } catch {
15447
+ } catch (error) {
15448
+ if (isDrainExhaustedError(error)) throw error;
15409
15449
  return {};
15410
15450
  }
15411
15451
  }
@@ -15454,7 +15494,10 @@ async function listAgentsFunc(args, thunkApi) {
15454
15494
  (record) => record?.dbKey === favKey || record?.id === favKey || record?.publicKey === favKey || `agent-pub-${record?.id}` === favKey
15455
15495
  );
15456
15496
  if (!isAlreadyPresent) {
15457
- const favRecord = await readBestRecord(thunkApi, favKey).catch(() => null);
15497
+ const favRecord = await readBestRecord(thunkApi, favKey).catch((error) => {
15498
+ if (isDrainExhaustedError(error)) throw error;
15499
+ return null;
15500
+ });
15458
15501
  if (favRecord) {
15459
15502
  const key = favRecord?.dbKey || favRecord?.id || favKey;
15460
15503
  recordsMap.set(key, favRecord);
@@ -15544,7 +15587,7 @@ async function listSpacesFunc(_args, thunkApi) {
15544
15587
  const runtime = getRuntime2(thunkApi);
15545
15588
  const serverBase = normalizeServerOrigin(runtime?.currentServer);
15546
15589
  if (serverBase && runtime?.currentToken && runtime?.currentUserId) {
15547
- const response = await fetch(`${serverBase}/rpc/getUserSpaceMemberships`, {
15590
+ const response = await fetchWithTransientRetry(fetch, `${serverBase}/rpc/getUserSpaceMemberships`, {
15548
15591
  method: "POST",
15549
15592
  headers: {
15550
15593
  "Content-Type": "application/json",
@@ -15569,6 +15612,9 @@ async function listSpacesFunc(_args, thunkApi) {
15569
15612
  };
15570
15613
  }
15571
15614
  }
15615
+ if (response) {
15616
+ await throwIfDrainExhausted(response);
15617
+ }
15572
15618
  }
15573
15619
  throw new Error("listSpaces requires a signed-in user and reachable Nolo server.");
15574
15620
  }
@@ -23221,7 +23267,7 @@ var runAgentBackground = createAsyncThunk("agent/runBackground", async (args, {
23221
23267
  // packages/ai/tools/agent/startAgentRunTool.ts
23222
23268
  var startAgentRunFunctionSchema = {
23223
23269
  name: "startAgentRun",
23224
- description: "\u542F\u52A8\u4E00\u4E2A Agent \u6267\u884C\u5B50\u4EFB\u52A1\u3002\u9ED8\u8BA4\u5F02\u6B65\uFF08Unix fork+exec\uFF09\uFF1A\u7ACB\u5373\u8FD4\u56DE runId\uFF0C\u4E0D\u963B\u585E\u5F53\u524D\u5BF9\u8BDD\uFF0C\u4E4B\u540E\u7528 controlAgentRun \u89C2\u5BDF/\u505C\u6B62\uFF1B\u5F02\u6B65\u6D3E\u53D1\u540E\u7981\u6B62\u8F6E\u8BE2\u67E5\u8BE2\u2014\u2014\u4E0D\u8981\u53CD\u590D\u8C03 status \u7B49\u7ED3\u679C\uFF0C\u7528\u6237\u754C\u9762\u5DF2\u5728\u5B9E\u65F6\u663E\u793A\u6BCF\u6761 run \u7684\u72B6\u6001\u3002\u8981\u540C\u6B65\u7ED3\u679C\u76F4\u63A5\u4F20 wait:true\uFF1A\u8BA2\u9605 SSE \u7B49 done/failed \u5E76\u76F4\u63A5\u8FD4\u56DE\u5B50\u4EFB\u52A1\u7ED3\u679C\uFF08\u9002\u5408 <100s \u7684\u5B50\u4EFB\u52A1\uFF09\u3002wait:true \u65F6\u53EF\u7528 resultMode \u63A7\u5236\u8FD4\u56DE\u5185\u5BB9\uFF1Afull=\u8FD4\u56DE\u5B8C\u6574\u8F93\u51FA\uFF1Bsummary=\u53EA\u8FD4\u56DE\u5934\u5C3E\u603B\u7ED3\uFF08\u622A\u65AD\u4E2D\u95F4\uFF0C\u9632\u957F\u8F93\u51FA\u6491\u7206\u4E0A\u4E0B\u6587\uFF09\u3002\u9002\u5408\u957F\u4EFB\u52A1\u3001\u5E76\u884C\u5B50\u4EFB\u52A1\u3001\u9700\u8981\u4E2D\u9014\u89C2\u5BDF\u6216\u53EB\u505C\u7684\u573A\u666F\u3002",
23270
+ description: "\u542F\u52A8\u4E00\u4E2A Agent \u6267\u884C\u5B50\u4EFB\u52A1\u3002\u9ED8\u8BA4\u5F02\u6B65\uFF08Unix fork+exec\uFF09\uFF1A\u7ACB\u5373\u8FD4\u56DE runId\uFF0C\u4E0D\u963B\u585E\u5F53\u524D\u5BF9\u8BDD\uFF0C\u4E4B\u540E\u7528 controlAgentRun \u89C2\u5BDF/\u505C\u6B62\uFF1B\u5F02\u6B65\u6D3E\u53D1\u540E\u7981\u6B62\u8F6E\u8BE2\u67E5\u8BE2\u2014\u2014\u4E0D\u8981\u53CD\u590D\u8C03 status \u7B49\u7ED3\u679C\uFF0C\u7528\u6237\u754C\u9762\u5DF2\u5728\u5B9E\u65F6\u663E\u793A\u6BCF\u6761 run \u7684\u72B6\u6001\u3002\u8981\u540C\u6B65\u7ED3\u679C\u76F4\u63A5\u4F20 wait:true\uFF1A\u8BA2\u9605 SSE \u7B49 done/failed \u5E76\u76F4\u63A5\u8FD4\u56DE\u5B50\u4EFB\u52A1\u7ED3\u679C\u3002\u963B\u585E\u7B49\u5F85\u4F1A\u51BB\u7ED3\u5BF9\u8BDD\uFF0C\u4EC5\u9650\u4E09\u79CD\u60C5\u51B5\uFF1A<100s \u4E14\u9A6C\u4E0A\u8981\u7528\u7ED3\u679C\uFF1B\u7528\u6237\u660E\u786E\u8981\u6C42\u540C\u6B65\u7B49\u5F85\u6216\u6B63\u5728\u4E0E\u8BE5\u5B50\u4EFB\u52A1\u5BF9\u8BDD\uFF1B\u73AF\u5883\u4E0D\u652F\u6301\u7EC8\u6001\u5524\u9192\u4E14\u65E0\u5E76\u884C\u5DE5\u4F5C\uFF08\u8BE6\u89C1 wait \u53C2\u6570\u63CF\u8FF0\uFF09\u3002wait:true \u65F6\u53EF\u7528 resultMode \u63A7\u5236\u8FD4\u56DE\u5185\u5BB9\uFF1Afull=\u8FD4\u56DE\u5B8C\u6574\u8F93\u51FA\uFF1Bsummary=\u53EA\u8FD4\u56DE\u5934\u5C3E\u603B\u7ED3\uFF08\u622A\u65AD\u4E2D\u95F4\uFF0C\u9632\u957F\u8F93\u51FA\u6491\u7206\u4E0A\u4E0B\u6587\uFF09\u3002\u9002\u5408\u957F\u4EFB\u52A1\u3001\u5E76\u884C\u5B50\u4EFB\u52A1\u3001\u9700\u8981\u4E2D\u9014\u89C2\u5BDF\u6216\u53EB\u505C\u7684\u573A\u666F\u3002",
23225
23271
  parameters: {
23226
23272
  type: "object",
23227
23273
  properties: {
@@ -23254,7 +23300,7 @@ var startAgentRunFunctionSchema = {
23254
23300
  },
23255
23301
  wait: {
23256
23302
  type: "boolean",
23257
- description: "\u53EF\u9009\u3002\u4E3A true \u65F6\u540C\u6B65\u7B49\u5F85\u5B50\u4EFB\u52A1\u5B8C\u6210\u5E76\u76F4\u63A5\u8FD4\u56DE\u7ED3\u679C\uFF08\u8BA2\u9605 SSE \u7B49 done/failed\uFF09\uFF0C\u4E0D\u8FD4\u56DE runId \u8BA9\u8C03\u7528\u65B9\u8F6E\u8BE2\uFF1B\u9002\u5408 <100s \u4E14\u9700\u8981\u7ACB\u5373\u62FF\u7ED3\u679C\u7684\u5B50\u4EFB\u52A1\u3002\u9ED8\u8BA4 false\uFF08\u5F02\u6B65 fork+exec\uFF0C\u8FD4\u56DE runId \u540E\u7528 controlAgentRun \u89C2\u5BDF\uFF09\u3002",
23303
+ description: "\u53EF\u9009\u3002\u4E3A true \u65F6\u540C\u6B65\u7B49\u5F85\u5B50\u4EFB\u52A1\u5B8C\u6210\u5E76\u76F4\u63A5\u8FD4\u56DE\u7ED3\u679C\uFF08\u8BA2\u9605 SSE \u7B49 done/failed\uFF09\uFF0C\u4E0D\u8FD4\u56DE runId \u8BA9\u8C03\u7528\u65B9\u8F6E\u8BE2\u3002\u963B\u585E\u7B49\u5F85\u4F1A\u51BB\u7ED3\u5F53\u524D\u5BF9\u8BDD\uFF08\u7528\u6237\u65E0\u6CD5\u63D2\u8BDD\u3001\u7F16\u6392\u8005\u4E5F\u65E0\u6CD5\u5E76\u884C\u63A8\u8FDB\u5176\u4ED6\u5DE5\u4F5C\uFF09\uFF0C\u4EC5\u9650\u4E09\u79CD\u60C5\u51B5\uFF1A\u2460 \u9884\u8BA1 <100s \u4E14\u9A6C\u4E0A\u8981\u7528\u7ED3\u679C\uFF1B\u2461 \u7528\u6237\u660E\u786E\u8981\u6C42\u540C\u6B65\u7B49\u5F85\u6216\u6B63\u5728\u4E0E\u8BE5\u5B50\u4EFB\u52A1\u5BF9\u8BDD\uFF1B\u2462 \u73AF\u5883\u4E0D\u652F\u6301\u7EC8\u6001\u5524\u9192\u4E14\u5F53\u524D\u6CA1\u6709\u53EF\u5E76\u884C\u63A8\u8FDB\u7684\u5176\u4ED6\u5DE5\u4F5C\u3002\u9ED8\u8BA4 false\uFF08\u5F02\u6B65 fork+exec\uFF0C\u8FD4\u56DE runId \u540E\u7528 controlAgentRun \u89C2\u5BDF\uFF09\u3002",
23258
23304
  default: false
23259
23305
  },
23260
23306
  resultMode: {
@@ -23349,14 +23395,14 @@ ${text.slice(-SUMMARY_TAIL_CHARS)}`;
23349
23395
  // packages/ai/tools/agent/controlAgentRunTool.ts
23350
23396
  var controlAgentRunFunctionSchema = {
23351
23397
  name: "controlAgentRun",
23352
- description: "\u89C2\u5BDF\u548C\u63A7\u5236\u540E\u53F0 agent run\u3002\u4E00\u4E2A\u5DE5\u5177\u4E94\u4E2A\u6838\u5FC3 action\uFF1Alist\uFF08\u5217\u51FA run\uFF0C\u652F\u6301\u6309\u6279\u6B21/\u72B6\u6001\u8FC7\u6EE4\u4E0E\u5206\u9875\uFF09\u3001status\uFF08\u67E5\u5355\u6761 + \u53EF\u9009\u65E5\u5FD7\uFF09\u3001stop\uFF08\u53D6\u6D88 run\uFF09\u3001append\uFF08\u5411\u8FD0\u884C\u4E2D\u6216\u7EC8\u6001\u4EFB\u52A1\u8FFD\u52A0\u65B0\u6307\u4EE4/\u7EA0\u504F\uFF09\u3001wait\uFF08\u540C\u6B65\u7B49\u5F85 run \u5230\u8FBE\u7EC8\u6001\u5E76\u8FD4\u56DE\u7ED3\u679C\uFF0CUnix wait \u8BED\u4E49\uFF1B\u53E6\u6709 todo \u67E5\u8BE2 runtime todo\uFF09\u3002\u76F8\u5F53\u4E8E Unix \u7684 wait + signal + /proc + write\u3002\u7528 startAgentRun \u62FF\u5230 runId \u540E\uFF0C\u7528\u672C\u5DE5\u5177\u8DDF\u8FDB\u5EA6\u3001\u7B49\u7ED3\u679C\u3001\u8FFD\u52A0\u6307\u4EE4\u6216\u53EB\u505C\u3002\u5F02\u6B65\u6D3E\u53D1\u540E\u7981\u6B62\u8F6E\u8BE2\u67E5\u8BE2\u2014\u2014\u4E0D\u8981\u53CD\u590D\u8C03 status \u7B49\u7ED3\u679C\uFF0C\u7528\u6237\u754C\u9762\u5DF2\u5728\u5B9E\u65F6\u663E\u793A\u6BCF\u6761 run \u7684\u72B6\u6001\uFF1B\u8981\u540C\u6B65\u7ED3\u679C\u76F4\u63A5\u7528 startAgentRun(wait:true) \u6216\u672C\u5DE5\u5177 wait action\u3002list \u9ED8\u8BA4\u53EA\u8FD4\u56DE\u6700\u8FD1 20 \u6761\uFF0C\u907F\u514D\u5168\u91CF\u51B2\u7206\u4E0A\u4E0B\u6587\uFF1B\u7528 status/batchId/limit/offset \u53D6\u6240\u9700\u5206\u9875\u3002\u6CE8\u610F\uFF1A\u7528\u6237\u754C\u9762\u5DF2\u7ECF\u5728\u72EC\u7ACB\u5B9E\u65F6\u663E\u793A\u6BCF\u6761 run \u7684\u72B6\u6001\uFF0C\u672C\u5DE5\u5177\u662F\u7ED9\u4F60\u81EA\u5DF1\u505A\u51B3\u7B56\u7528\u7684\uFF0C\u4E0D\u662F\u7528\u6765\u7ED9\u7528\u6237\u6C47\u62A5\u8FDB\u5EA6\u7684\u2014\u2014\u4E0D\u5FC5\u4E3A\u4E86\u300C\u8BA9\u7528\u6237\u770B\u5230\u72B6\u6001\u300D\u800C\u8F6E\u8BE2\uFF0C\u4E5F\u4E0D\u8981\u628A\u8FD4\u56DE\u503C\u590D\u8FF0\u7ED9\u7528\u6237\u3002",
23398
+ description: "\u89C2\u5BDF\u548C\u63A7\u5236\u540E\u53F0 agent run\u3002\u4E00\u4E2A\u5DE5\u5177\u4E94\u4E2A\u6838\u5FC3 action\uFF1Alist\uFF08\u5217\u51FA run\uFF0C\u652F\u6301\u6309\u6279\u6B21/\u72B6\u6001\u8FC7\u6EE4\u4E0E\u5206\u9875\uFF09\u3001status\uFF08\u67E5\u5355\u6761 + \u53EF\u9009\u65E5\u5FD7\uFF09\u3001stop\uFF08\u53D6\u6D88 run\uFF09\u3001append\uFF08\u5411\u8FD0\u884C\u4E2D\u6216\u7EC8\u6001\u4EFB\u52A1\u8FFD\u52A0\u65B0\u6307\u4EE4/\u7EA0\u504F\uFF09\u3001wait\uFF08\u53D7\u9650\u7684\u7EC8\u6001\u963B\u585E\u7B49\u5F85\uFF1A\u963B\u585E\u5230 run \u7EC8\u6001\u5E76\u8FD4\u56DE\u7ED3\u679C\uFF0C\u4E0D\u662F\u8F6E\u8BE2\uFF1B\u53E6\u6709 todo \u67E5\u8BE2 runtime todo\uFF09\u3002\u76F8\u5F53\u4E8E Unix \u7684 wait + signal + /proc + write\u3002\u7528 startAgentRun \u62FF\u5230 runId \u540E\uFF0C\u7528\u672C\u5DE5\u5177\u8DDF\u8FDB\u5EA6\u3001\u7B49\u7ED3\u679C\u3001\u8FFD\u52A0\u6307\u4EE4\u6216\u53EB\u505C\u3002\u5F02\u6B65\u6D3E\u53D1\u540E\u7981\u6B62\u8F6E\u8BE2\u67E5\u8BE2\u2014\u2014\u4E0D\u8981\u53CD\u590D\u8C03 status \u7B49\u7ED3\u679C\uFF0C\u7528\u6237\u754C\u9762\u5DF2\u5728\u5B9E\u65F6\u663E\u793A\u6BCF\u6761 run \u7684\u72B6\u6001\uFF1B\u963B\u585E\u7B49\u5F85\uFF08startAgentRun wait:true \u6216\u672C\u5DE5\u5177 wait action\uFF09\u4F1A\u51BB\u7ED3\u5F53\u524D\u5BF9\u8BDD\uFF0C\u4EC5\u9650\u4E09\u79CD\u60C5\u51B5\uFF1A\u2460 \u9884\u8BA1 <100s \u4E14\u9A6C\u4E0A\u8981\u7528\u7ED3\u679C\uFF1B\u2461 \u7528\u6237\u660E\u786E\u8981\u6C42\u540C\u6B65\u7B49\u5F85\u6216\u6B63\u5728\u4E0E\u8BE5\u5B50\u4EFB\u52A1\u5BF9\u8BDD\uFF1B\u2462 \u73AF\u5883\u4E0D\u652F\u6301\u7EC8\u6001\u5524\u9192\u4E14\u5F53\u524D\u6CA1\u6709\u53EF\u5E76\u884C\u63A8\u8FDB\u7684\u5176\u4ED6\u5DE5\u4F5C\u2014\u2014\u4E32\u884C\u4F9D\u8D56\u4E0D\u662F\u963B\u585E\u5BF9\u8BDD\u7684\u7406\u7531\uFF0C\u652F\u6301\u7EC8\u6001\u5524\u9192\u7684\u73AF\u5883\uFF08\u684C\u9762 TUI / web\uFF09\u591A\u5206\u949F\u7EA7 run \u4E00\u5F8B\u5F02\u6B65\u6D3E\u53D1\u5E76\u7ACB\u5373\u6536\u5C3E\u3002list \u9ED8\u8BA4\u53EA\u8FD4\u56DE\u6700\u8FD1 20 \u6761\uFF0C\u907F\u514D\u5168\u91CF\u51B2\u7206\u4E0A\u4E0B\u6587\uFF1B\u7528 status/batchId/limit/offset \u53D6\u6240\u9700\u5206\u9875\u3002\u6CE8\u610F\uFF1A\u7528\u6237\u754C\u9762\u5DF2\u7ECF\u5728\u72EC\u7ACB\u5B9E\u65F6\u663E\u793A\u6BCF\u6761 run \u7684\u72B6\u6001\uFF0C\u672C\u5DE5\u5177\u662F\u7ED9\u4F60\u81EA\u5DF1\u505A\u51B3\u7B56\u7528\u7684\uFF0C\u4E0D\u662F\u7528\u6765\u7ED9\u7528\u6237\u6C47\u62A5\u8FDB\u5EA6\u7684\u2014\u2014\u4E0D\u5FC5\u4E3A\u4E86\u300C\u8BA9\u7528\u6237\u770B\u5230\u72B6\u6001\u300D\u800C\u8F6E\u8BE2\uFF0C\u4E5F\u4E0D\u8981\u628A\u8FD4\u56DE\u503C\u590D\u8FF0\u7ED9\u7528\u6237\u3002",
23353
23399
  parameters: {
23354
23400
  type: "object",
23355
23401
  properties: {
23356
23402
  action: {
23357
23403
  type: "string",
23358
23404
  enum: ["list", "status", "stop", "todo", "wait", "append"],
23359
- description: "\u8981\u6267\u884C\u7684\u64CD\u4F5C\uFF1Alist=\u5217\u51FA run\uFF08\u7701\u7565 runId\uFF09\uFF1Bstatus=\u67E5\u5355\u6761 run \u72B6\u6001 + \u53EF\u9009\u65E5\u5FD7\uFF1Bstop=\u53D6\u6D88 run\uFF1Bappend=\u5411\u4EFB\u52A1\u8FFD\u52A0\u6307\u4EE4\uFF08\u8FD0\u884C\u4E2D\u5165\u961F\uFF0C\u7EC8\u6001 continuation\uFF09\uFF1Bwait=\u540C\u6B65\u7B49\u5F85 run \u5230\u8FBE\u7EC8\u6001\u5E76\u8FD4\u56DE\u7ED3\u679C\uFF08Unix wait \u8BED\u4E49\uFF1B\u5BA2\u6237\u7AEF\u8BA2\u9605\u8BE5 dialog \u7684 SSE \u4E8B\u4EF6\u6D41\u7B49 done/failed\uFF0C\u5DF2\u7EC8\u6001\u7ACB\u5373\u8FD4\u56DE\uFF09\uFF1Btodo=\u5217\u51FA runtime todo\uFF08\u7531 startAgentRun \u7684 batchId/trackTodo \u4EA7\u751F\uFF0C\u72B6\u6001\u7531\u5173\u8054 run \u63A8\u5BFC\uFF09\u3002"
23405
+ description: "\u8981\u6267\u884C\u7684\u64CD\u4F5C\uFF1Alist=\u5217\u51FA run\uFF08\u7701\u7565 runId\uFF09\uFF1Bstatus=\u67E5\u5355\u6761 run \u72B6\u6001 + \u53EF\u9009\u65E5\u5FD7\uFF1Bstop=\u53D6\u6D88 run\uFF1Bappend=\u5411\u4EFB\u52A1\u8FFD\u52A0\u6307\u4EE4\uFF08\u8FD0\u884C\u4E2D\u5165\u961F\uFF0C\u7EC8\u6001 continuation\uFF09\uFF1Bwait=\u53D7\u9650\u7684\u7EC8\u6001\u963B\u585E\u7B49\u5F85\uFF08\u4E0D\u662F\u8F6E\u8BE2\uFF09\uFF1A\u5BA2\u6237\u7AEF\u8BA2\u9605\u8BE5 dialog \u7684 SSE \u4E8B\u4EF6\u6D41\u7B49 done/failed\uFF0C\u5DF2\u7EC8\u6001\u7ACB\u5373\u8FD4\u56DE\u3002\u963B\u585E\u7B49\u5F85\u4F1A\u51BB\u7ED3\u5F53\u524D\u5BF9\u8BDD\uFF0C\u4EC5\u9650\u4E09\u79CD\u60C5\u51B5\uFF1A\u2460 \u9884\u8BA1 <100s \u4E14\u9A6C\u4E0A\u8981\u7528\u7ED3\u679C\uFF1B\u2461 \u7528\u6237\u660E\u786E\u8981\u6C42\u540C\u6B65\u7B49\u5F85\u6216\u6B63\u5728\u4E0E\u8BE5\u5B50\u4EFB\u52A1\u5BF9\u8BDD\uFF1B\u2462 \u73AF\u5883\u4E0D\u652F\u6301\u7EC8\u6001\u5524\u9192\u4E14\u65E0\u5E76\u884C\u5DE5\u4F5C\uFF1Btodo=\u5217\u51FA runtime todo\uFF08\u7531 startAgentRun \u7684 batchId/trackTodo \u4EA7\u751F\uFF0C\u72B6\u6001\u7531\u5173\u8054 run \u63A8\u5BFC\uFF09\u3002"
23360
23406
  },
23361
23407
  runId: {
23362
23408
  type: "string",
@@ -24911,7 +24957,7 @@ var executeToolRun = createAsyncThunk(
24911
24957
  if (!executionInput) {
24912
24958
  throw new Error(`ToolRun ${id} has no input to execute with.`);
24913
24959
  }
24914
- const { findToolExecutor: findToolExecutor2 } = await import("./tools-Y65Y3CI4.js");
24960
+ const { findToolExecutor: findToolExecutor2 } = await import("./tools-W7X3QSN2.js");
24915
24961
  const { executor } = findToolExecutor2(run.toolName);
24916
24962
  toolRunStarted({
24917
24963
  id: run.id,
@@ -24935,7 +24981,7 @@ var executeToolRun = createAsyncThunk(
24935
24981
  const latestState = thunkApi.getState();
24936
24982
  const userId = latestState.auth?.currentUser?.userId;
24937
24983
  if (userId) {
24938
- const { fetchUserSpaceMemberships } = await import("./spaceSlice-OQPAGQDP.js");
24984
+ const { fetchUserSpaceMemberships } = await import("./spaceSlice-R23R5VKL.js");
24939
24985
  await thunkApi.dispatch(fetchUserSpaceMemberships(userId));
24940
24986
  }
24941
24987
  }
@@ -27418,7 +27464,7 @@ async function updateDocFunc(args, thunkApi) {
27418
27464
  updated_at: (/* @__PURE__ */ new Date()).toISOString()
27419
27465
  };
27420
27466
  await dispatch(write({ data: updatedPageData, customKey: id })).unwrap();
27421
- const { getDocState, applyExternalDocUpdate } = await import("./docStore-TYHVLU7G.js");
27467
+ const { getDocState, applyExternalDocUpdate } = await import("./docStore-4J3GA3JF.js");
27422
27468
  if (getDocState().pageKey === id) {
27423
27469
  applyExternalDocUpdate({
27424
27470
  slateData: finalSlateData,
@@ -5,14 +5,14 @@ import {
5
5
  inlineImageUrlsForCustomProvider,
6
6
  prepareTools,
7
7
  shouldInlineImageUrlsForAgent
8
- } from "./chunk-IWUPQUWA.js";
8
+ } from "./chunk-6H5FASZ4.js";
9
9
  import {
10
10
  INVALID_TOOL_ARGS_REPLACEMENT,
11
11
  buildInvalidToolCallSelfHealResult,
12
12
  parseToolCallArguments,
13
13
  performFetchRequest,
14
14
  sanitizeOutboundMessages
15
- } from "./chunk-5BPZLBFB.js";
15
+ } from "./chunk-KMWZ2MEG.js";
16
16
  import {
17
17
  createSSEParser,
18
18
  createToolRunId,
@@ -23,22 +23,22 @@ import {
23
23
  toolRunSetPending,
24
24
  toolRunStarted,
25
25
  toolRunSucceeded
26
- } from "./chunk-YNOGNUBC.js";
26
+ } from "./chunk-CXCSIBWY.js";
27
27
  import {
28
28
  getPublicImageAgentMode
29
29
  } from "./chunk-VIDPVFP3.js";
30
30
  import {
31
31
  getCurrentSpaceId
32
- } from "./chunk-H2JQB6B6.js";
32
+ } from "./chunk-EPSE5WQL.js";
33
33
  import {
34
34
  addToolMessage,
35
35
  messageStreamEnd,
36
36
  messageStreaming,
37
37
  updateToolMessage
38
- } from "./chunk-FAWK6DBF.js";
38
+ } from "./chunk-UVEH34NR.js";
39
39
  import {
40
40
  streamAgentChatTurn
41
- } from "./chunk-6LYUN76O.js";
41
+ } from "./chunk-V7FV73B7.js";
42
42
  import {
43
43
  addActiveController,
44
44
  removeActiveController,
@@ -0,0 +1,59 @@
1
+ // packages/cli/client/localRuntimeFetchRetry.ts
2
+ import { request as httpRequest } from "node:http";
3
+ import { request as httpsRequest } from "node:https";
4
+ function toNodeRequestBody(body) {
5
+ if (typeof body === "string") return Buffer.from(body);
6
+ if (body instanceof Uint8Array) return Buffer.from(body);
7
+ if (body instanceof ArrayBuffer) return Buffer.from(body);
8
+ return null;
9
+ }
10
+ async function defaultLoopbackRequest(input, init) {
11
+ const target = typeof input === "string" || input instanceof URL ? new URL(String(input)) : new URL(input.url);
12
+ const headers = new Headers(init?.headers);
13
+ const body = toNodeRequestBody(init?.body);
14
+ if (body && !headers.has("Content-Length")) {
15
+ headers.set("Content-Length", String(body.byteLength));
16
+ }
17
+ return await new Promise((resolve, reject) => {
18
+ const requestImpl = target.protocol === "https:" ? httpsRequest : httpRequest;
19
+ const req = requestImpl(
20
+ target,
21
+ {
22
+ method: init?.method ?? "GET",
23
+ headers: Object.fromEntries(headers.entries())
24
+ },
25
+ (res) => {
26
+ const chunks = [];
27
+ res.on(
28
+ "data",
29
+ (chunk) => chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk))
30
+ );
31
+ res.on("end", () => {
32
+ resolve(
33
+ new Response(Buffer.concat(chunks), {
34
+ status: res.statusCode ?? 500,
35
+ headers: res.headers
36
+ })
37
+ );
38
+ });
39
+ }
40
+ );
41
+ req.on("error", reject);
42
+ init?.signal?.addEventListener(
43
+ "abort",
44
+ () => {
45
+ req.destroy(
46
+ init.signal?.reason instanceof Error ? init.signal?.reason : new Error("request aborted")
47
+ );
48
+ reject(init.signal?.reason ?? new Error("request aborted"));
49
+ },
50
+ { once: true }
51
+ );
52
+ if (body) req.write(body);
53
+ req.end();
54
+ });
55
+ }
56
+
57
+ export {
58
+ defaultLoopbackRequest
59
+ };
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  deleteDialog,
3
3
  toast
4
- } from "./chunk-FAWK6DBF.js";
4
+ } from "./chunk-UVEH34NR.js";
5
5
  import {
6
6
  deleteServerSyncedCredential
7
- } from "./chunk-6LYUN76O.js";
7
+ } from "./chunk-V7FV73B7.js";
8
8
  import {
9
9
  require_date_fns
10
10
  } from "./chunk-M76ECQRD.js";