nolo-cli 0.8.0 → 0.9.1

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 (183) hide show
  1. package/_executeModel-UD44KGZ4.js +203 -0
  2. package/action-ZJWE3Y5S.js +28 -0
  3. package/addContentAction-TVDBNJM5.js +26 -0
  4. package/addDialogAgentAction-EKH774VT.js +68 -0
  5. package/agentDeleteCommand-TCPEFJTF.js +327 -0
  6. package/agentEmailCommands-CZ3UILZ4.js +626 -0
  7. package/agentListCommands-SJKO2FFB.js +223 -0
  8. package/agentMachineCommands-PSNABISZ.js +425 -0
  9. package/agentPullCommand-O2MTUAFR.js +122 -0
  10. package/agentRecordCommands-MH2JKFHS.js +94 -0
  11. package/agentRunCommand-4KH6MIZR.js +110 -0
  12. package/agentRunControl-K4VKNEHF.js +57 -0
  13. package/agentRuntimeLocal-SKHJUWSS.js +104 -0
  14. package/agentSlice-3WXXN4VK.js +42 -0
  15. package/authCommand-PXFX6JDT.js +581 -0
  16. package/authCommands-356AYWEK.js +35 -0
  17. package/chunk-2EISRLRC.js +238 -0
  18. package/chunk-2FTTDCD4.js +675 -0
  19. package/chunk-2K2ECKSG.js +222 -0
  20. package/chunk-2PUGVR6E.js +19 -0
  21. package/chunk-3ASDTTEI.js +1774 -0
  22. package/chunk-3EUW3WEO.js +8 -0
  23. package/chunk-3LY4F7SV.js +9293 -0
  24. package/chunk-3TZDXYSF.js +71 -0
  25. package/chunk-3WYQEUBI.js +34 -0
  26. package/chunk-4CQLVGRV.js +50 -0
  27. package/chunk-4IJYA27C.js +342 -0
  28. package/chunk-4K2KKCSD.js +577 -0
  29. package/chunk-4SN6J65J.js +38 -0
  30. package/chunk-4VNS5WPM.js +42 -0
  31. package/chunk-4ZDM73SD.js +34 -0
  32. package/chunk-5CS33IBL.js +301 -0
  33. package/chunk-5KLGBAAR.js +386 -0
  34. package/chunk-5MIDPSSK.js +206 -0
  35. package/chunk-5MMAK75Q.js +15 -0
  36. package/chunk-5PJ3VWCS.js +360 -0
  37. package/chunk-63SLEOLK.js +175 -0
  38. package/chunk-63W5N6P3.js +150 -0
  39. package/chunk-6GANEXVO.js +231 -0
  40. package/chunk-6HYVJV7B.js +102 -0
  41. package/chunk-6WD3OOJS.js +20 -0
  42. package/chunk-7OOXPE3N.js +628 -0
  43. package/chunk-7QRKCBOP.js +1078 -0
  44. package/chunk-ATNTHIZI.js +13 -0
  45. package/chunk-AUQ747NZ.js +902 -0
  46. package/chunk-AVMKZHBC.js +85 -0
  47. package/chunk-AZPCASRE.js +36 -0
  48. package/chunk-BBYVOSU2.js +792 -0
  49. package/chunk-C3RUNRHT.js +51 -0
  50. package/chunk-CF2WZF4N.js +134 -0
  51. package/chunk-CF7PE763.js +10 -0
  52. package/chunk-CKOJQDKR.js +198 -0
  53. package/chunk-COMXDWNM.js +807 -0
  54. package/chunk-CPB2YM4D.js +171 -0
  55. package/chunk-CWMSB67P.js +34 -0
  56. package/chunk-DCOA4QSN.js +105 -0
  57. package/chunk-DFFIZ25G.js +30 -0
  58. package/chunk-DWLEOOGR.js +8 -0
  59. package/chunk-DZ3XJVET.js +231 -0
  60. package/chunk-EHLHSX7R.js +1433 -0
  61. package/chunk-ELRRLDWI.js +478 -0
  62. package/chunk-EXTIQUCI.js +482 -0
  63. package/chunk-EYEEHCU4.js +3066 -0
  64. package/chunk-G3SUCT4W.js +8 -0
  65. package/chunk-G43KEVSC.js +1447 -0
  66. package/chunk-GAKEBQD6.js +30 -0
  67. package/chunk-GBRG75BQ.js +86 -0
  68. package/chunk-GG4AJPSR.js +191 -0
  69. package/chunk-H33743XH.js +25 -0
  70. package/chunk-HNMXYYJR.js +12 -0
  71. package/chunk-I42VC5KR.js +15 -0
  72. package/chunk-IDZTNRP2.js +85 -0
  73. package/chunk-ISNCLGUZ.js +146 -0
  74. package/chunk-IWX4UW2E.js +548 -0
  75. package/chunk-JBTJAPUF.js +35 -0
  76. package/chunk-JEXVIMYZ.js +55 -0
  77. package/chunk-JRKKFRAV.js +537 -0
  78. package/chunk-JZPBVBIY.js +94 -0
  79. package/chunk-KKY4B2Q2.js +21 -0
  80. package/chunk-KOCA5FCS.js +4750 -0
  81. package/chunk-KQHGZWSV.js +63 -0
  82. package/chunk-KTVVPRJS.js +138 -0
  83. package/chunk-KUG52IAP.js +8 -0
  84. package/chunk-KX6YBIHG.js +8 -0
  85. package/chunk-LARL2V6G.js +9017 -0
  86. package/chunk-LCBAMY2M.js +60 -0
  87. package/chunk-LM6IYQ3F.js +16 -0
  88. package/chunk-M76ECQRD.js +13658 -0
  89. package/chunk-MGOJ5R6J.js +113 -0
  90. package/chunk-MKMWT7SA.js +27196 -0
  91. package/chunk-MRC4Q34M.js +188 -0
  92. package/chunk-OLZBQWZU.js +6 -0
  93. package/chunk-OPZYGHUC.js +89 -0
  94. package/chunk-OWOHNGCN.js +50 -0
  95. package/chunk-PAKN26FP.js +239 -0
  96. package/chunk-PCWC3JTN.js +91 -0
  97. package/chunk-PG5PNA7Y.js +939 -0
  98. package/chunk-Q2YZULBH.js +104 -0
  99. package/chunk-QSJ3HFEF.js +8 -0
  100. package/chunk-QYXLLLGL.js +4519 -0
  101. package/chunk-ROWQEJRP.js +139 -0
  102. package/chunk-S7Z2HMCN.js +25 -0
  103. package/chunk-SBR32ZZS.js +1901 -0
  104. package/chunk-SH2CFQOH.js +3391 -0
  105. package/chunk-SL35K7AH.js +226 -0
  106. package/chunk-TILFE6LV.js +381 -0
  107. package/chunk-TSS3XJY4.js +2052 -0
  108. package/chunk-U4TRT5V4.js +246 -0
  109. package/chunk-U6VC4MU4.js +8 -0
  110. package/chunk-UAD2WT54.js +64 -0
  111. package/chunk-UUJDGGAK.js +421 -0
  112. package/chunk-VF4K2QE6.js +21 -0
  113. package/chunk-VHBWHNVT.js +59 -0
  114. package/chunk-VIDPVFP3.js +20 -0
  115. package/chunk-VP4WJWKW.js +8882 -0
  116. package/chunk-W4NVOSFF.js +37 -0
  117. package/chunk-WKM6FH35.js +190 -0
  118. package/chunk-WWC7I6TA.js +8 -0
  119. package/chunk-X7W4TNB4.js +1550 -0
  120. package/chunk-XE635NI4.js +1948 -0
  121. package/chunk-XKIMRZO2.js +221 -0
  122. package/chunk-XS466O7S.js +933 -0
  123. package/chunk-Y5GCAMGP.js +9 -0
  124. package/chunk-YBWOP46I.js +3272 -0
  125. package/chunk-YPRZSPF3.js +148 -0
  126. package/chunk-YYUCRDOK.js +69 -0
  127. package/chunk-Z4NR32XR.js +50 -0
  128. package/chunk-ZIG5LJ7X.js +24765 -0
  129. package/chunk-ZNFJWEN4.js +56 -0
  130. package/chunk-ZQ2UM4KG.js +2878 -0
  131. package/cliExecutor-DNE7TCC4.js +36 -0
  132. package/clipboardy-BVE3LVEH.js +12001 -0
  133. package/createAgentAutomationAction-63OIP6X5.js +866 -0
  134. package/createDialogAction-ZLYZDYBB.js +54 -0
  135. package/createPageAction-AL5FSDCK.js +171 -0
  136. package/db-HCJ5PRB5.js +271 -0
  137. package/dbSlice-PR44QPXY.js +60 -0
  138. package/deleteFile-4SKGPHOZ.js +41 -0
  139. package/dialogCommands-F6YI5742.js +63 -0
  140. package/dialogSlice-JSBNZRLR.js +148 -0
  141. package/docCreateCommands-4CTO7ERT.js +219 -0
  142. package/docDeleteCommands-VBWERDRG.js +180 -0
  143. package/docReadCommands-KNP4MFYB.js +133 -0
  144. package/docStore-ADP5VYY4.js +98 -0
  145. package/docUpdateCommands-4BCBJQHA.js +317 -0
  146. package/fetchMessages-U6ZHN56A.js +17 -0
  147. package/getPricing-3E6UNPKL.js +30 -0
  148. package/handleSendMessageAction-IJDQ6ARA.js +185 -0
  149. package/index.js +188 -112943
  150. package/lib-FYYBQIXS.js +19839 -0
  151. package/localDialogRead-Z5UTAJPU.js +26 -0
  152. package/localFirstLog-DHNOY2NA.js +19 -0
  153. package/localRuntimeAuthority-TEGCOWX4.js +471 -0
  154. package/localRuntimeDb-LGDF6FQP.js +12 -0
  155. package/machineCommands-EA3M4XTN.js +779 -0
  156. package/machineInfo-M6KB6HZN.js +10 -0
  157. package/machineWsRunDispatch-NAPKE5ZA.js +110 -0
  158. package/memoryCommands-O4MIPIWQ.js +476 -0
  159. package/models-4OPOOLFS.js +9 -0
  160. package/offlineMarxistsAgentCommand-BCPJITJL.js +242 -0
  161. package/package.json +3 -25
  162. package/read-RIJCIVKX.js +17 -0
  163. package/readDocTool-GZD2N3LO.js +16 -0
  164. package/readlineWorkspace-KMWT4T4S.js +5509 -0
  165. package/removeDialogAgentAction-GJQJNDW6.js +73 -0
  166. package/runAgentClientLoop-U5Q6NDTJ.js +291 -0
  167. package/runtimeDoctorCommands-LRHLPDRC.js +289 -0
  168. package/setDialogExtraReferencesAction-M7OQG54N.js +60 -0
  169. package/setPrimaryDialogAgentAction-46UNFJDL.js +80 -0
  170. package/settingSlice-FVUUH4JA.js +199 -0
  171. package/skillSummaryMarker-42HKSXYY.js +9 -0
  172. package/slateToRenderMarkdown-Y5IYN73U.js +7 -0
  173. package/slateUtils-2M7MUTWX.js +19 -0
  174. package/spaceCommands-E2CFRPZJ.js +454 -0
  175. package/spaceSlice-L3R6IMXE.js +147 -0
  176. package/streamAgentChatTurn-UBDAOQWE.js +4528 -0
  177. package/tableCommands-GOFP7QKA.js +1286 -0
  178. package/toolApiClient-QI3YBNWB.js +26 -0
  179. package/tools-TMJXZTCA.js +85 -0
  180. package/tuiSummaryLlmCaller-RV3THLZF.js +78 -0
  181. package/understanding-GQKNDDWM.js +271 -0
  182. package/updateCommands-VOSPKXFF.js +31 -0
  183. package/updateDialogTitleAction-ZTWRDXI2.js +188 -0
@@ -0,0 +1,73 @@
1
+ import {
2
+ cleanupCliSessionForDialog
3
+ } from "./chunk-KTVVPRJS.js";
4
+ import {
5
+ getPrimaryDialogAgentId,
6
+ removeDialogAgentId
7
+ } from "./chunk-Z4NR32XR.js";
8
+ import {
9
+ require_date_fns
10
+ } from "./chunk-M76ECQRD.js";
11
+ import {
12
+ getActiveDialogKey
13
+ } from "./chunk-3ASDTTEI.js";
14
+ import "./chunk-TSS3XJY4.js";
15
+ import "./chunk-Y5GCAMGP.js";
16
+ import {
17
+ patch,
18
+ selectById
19
+ } from "./chunk-COMXDWNM.js";
20
+ import "./chunk-AZPCASRE.js";
21
+ import "./chunk-2EISRLRC.js";
22
+ import "./chunk-KX6YBIHG.js";
23
+ import "./chunk-SH2CFQOH.js";
24
+ import "./chunk-I42VC5KR.js";
25
+ import "./chunk-WWC7I6TA.js";
26
+ import "./chunk-QSJ3HFEF.js";
27
+ import "./chunk-ELRRLDWI.js";
28
+ import "./chunk-EYEEHCU4.js";
29
+ import "./chunk-QYXLLLGL.js";
30
+ import "./chunk-GBRG75BQ.js";
31
+ import "./chunk-4SN6J65J.js";
32
+ import "./chunk-LCBAMY2M.js";
33
+ import "./chunk-3EUW3WEO.js";
34
+ import "./chunk-U6VC4MU4.js";
35
+ import "./chunk-CF7PE763.js";
36
+ import "./chunk-G3SUCT4W.js";
37
+ import "./chunk-KUG52IAP.js";
38
+ import {
39
+ __toESM
40
+ } from "./chunk-4VNS5WPM.js";
41
+
42
+ // packages/chat/dialog/actions/removeDialogAgentAction.ts
43
+ var import_date_fns = __toESM(require_date_fns());
44
+ var removeDialogAgentAction = async (agentId, thunkApi) => {
45
+ const { dispatch, getState } = thunkApi;
46
+ const state = getState();
47
+ const currentDialogKey = getActiveDialogKey();
48
+ if (!currentDialogKey) {
49
+ throw new Error("No current dialog selected");
50
+ }
51
+ const dialogConfig = selectById(
52
+ state,
53
+ currentDialogKey
54
+ );
55
+ if (!dialogConfig) {
56
+ throw new Error("Dialog configuration not found");
57
+ }
58
+ if (getPrimaryDialogAgentId(dialogConfig) === agentId) {
59
+ await cleanupCliSessionForDialog({ dispatch, getState }, dialogConfig);
60
+ }
61
+ return await dispatch(
62
+ patch({
63
+ dbKey: currentDialogKey,
64
+ changes: {
65
+ cybots: removeDialogAgentId(dialogConfig.cybots || [], agentId),
66
+ updatedAt: (0, import_date_fns.formatISO)(/* @__PURE__ */ new Date())
67
+ }
68
+ })
69
+ ).unwrap();
70
+ };
71
+ export {
72
+ removeDialogAgentAction
73
+ };
@@ -0,0 +1,291 @@
1
+ import {
2
+ fetchAgentContexts
3
+ } from "./chunk-3WYQEUBI.js";
4
+ import {
5
+ generateRequestBody,
6
+ mergeReferences,
7
+ performFetchRequest
8
+ } from "./chunk-SBR32ZZS.js";
9
+ import "./chunk-KKY4B2Q2.js";
10
+ import "./chunk-C3RUNRHT.js";
11
+ import {
12
+ findToolExecutor,
13
+ getToolResultErrorData
14
+ } from "./chunk-MKMWT7SA.js";
15
+ import "./chunk-GAKEBQD6.js";
16
+ import "./chunk-KQHGZWSV.js";
17
+ import "./chunk-XKIMRZO2.js";
18
+ import "./chunk-3LY4F7SV.js";
19
+ import "./chunk-VP4WJWKW.js";
20
+ import "./chunk-63W5N6P3.js";
21
+ import "./chunk-UUJDGGAK.js";
22
+ import "./chunk-PG5PNA7Y.js";
23
+ import "./chunk-ZQ2UM4KG.js";
24
+ import "./chunk-Q2YZULBH.js";
25
+ import {
26
+ updateTokensAction
27
+ } from "./chunk-ZIG5LJ7X.js";
28
+ import "./chunk-4ZDM73SD.js";
29
+ import "./chunk-MRC4Q34M.js";
30
+ import "./chunk-PCWC3JTN.js";
31
+ import "./chunk-CWMSB67P.js";
32
+ import "./chunk-4K2KKCSD.js";
33
+ import "./chunk-KTVVPRJS.js";
34
+ import "./chunk-Z4NR32XR.js";
35
+ import "./chunk-M76ECQRD.js";
36
+ import "./chunk-YYUCRDOK.js";
37
+ import "./chunk-MGOJ5R6J.js";
38
+ import "./chunk-UAD2WT54.js";
39
+ import "./chunk-DCOA4QSN.js";
40
+ import "./chunk-PAKN26FP.js";
41
+ import "./chunk-JRKKFRAV.js";
42
+ import {
43
+ canonicalizeToolName
44
+ } from "./chunk-AUQ747NZ.js";
45
+ import "./chunk-5MMAK75Q.js";
46
+ import {
47
+ getApiEndpoint
48
+ } from "./chunk-BBYVOSU2.js";
49
+ import "./chunk-5CS33IBL.js";
50
+ import "./chunk-JZPBVBIY.js";
51
+ import "./chunk-IWX4UW2E.js";
52
+ import "./chunk-5MIDPSSK.js";
53
+ import {
54
+ extractCustomId
55
+ } from "./chunk-DFFIZ25G.js";
56
+ import "./chunk-3ASDTTEI.js";
57
+ import "./chunk-DWLEOOGR.js";
58
+ import "./chunk-HNMXYYJR.js";
59
+ import "./chunk-63SLEOLK.js";
60
+ import {
61
+ selectCurrentServer
62
+ } from "./chunk-TSS3XJY4.js";
63
+ import "./chunk-Y5GCAMGP.js";
64
+ import {
65
+ read
66
+ } from "./chunk-COMXDWNM.js";
67
+ import "./chunk-AZPCASRE.js";
68
+ import "./chunk-2EISRLRC.js";
69
+ import "./chunk-KX6YBIHG.js";
70
+ import "./chunk-SH2CFQOH.js";
71
+ import "./chunk-I42VC5KR.js";
72
+ import "./chunk-WWC7I6TA.js";
73
+ import "./chunk-QSJ3HFEF.js";
74
+ import "./chunk-ELRRLDWI.js";
75
+ import {
76
+ selectIdentityToken
77
+ } from "./chunk-EYEEHCU4.js";
78
+ import "./chunk-QYXLLLGL.js";
79
+ import "./chunk-GBRG75BQ.js";
80
+ import "./chunk-4SN6J65J.js";
81
+ import "./chunk-LCBAMY2M.js";
82
+ import "./chunk-3EUW3WEO.js";
83
+ import "./chunk-U6VC4MU4.js";
84
+ import "./chunk-CF7PE763.js";
85
+ import {
86
+ asOptionalTrimmedString
87
+ } from "./chunk-G3SUCT4W.js";
88
+ import {
89
+ isRecord
90
+ } from "./chunk-KUG52IAP.js";
91
+ import "./chunk-4VNS5WPM.js";
92
+
93
+ // packages/ai/agent/executeToolCall.ts
94
+ async function executeToolCall(tc, thunkApi, context) {
95
+ const toolName = tc.function?.name ?? "";
96
+ const toolArgs = (() => {
97
+ try {
98
+ return JSON.parse(tc.function?.arguments ?? "{}");
99
+ } catch {
100
+ return {};
101
+ }
102
+ })();
103
+ try {
104
+ const toolDefinition = findToolExecutor(toolName);
105
+ if (!toolDefinition) {
106
+ return `[\u5DE5\u5177 "${toolName}" \u672A\u627E\u5230]`;
107
+ }
108
+ const result = await toolDefinition.executor(toolArgs, thunkApi, {
109
+ parentMessageId: context?.parentMessageId ?? ""
110
+ });
111
+ const raw = result?.rawData ?? result;
112
+ return typeof raw === "string" ? raw : JSON.stringify(raw);
113
+ } catch (err) {
114
+ console.error(`[executeToolCall] tool "${toolName}" \u6267\u884C\u5931\u8D25:`, err);
115
+ const structured = getToolResultErrorData(err);
116
+ if (structured?.rawData !== void 0) {
117
+ const raw = structured.rawData;
118
+ return typeof raw === "string" ? raw : JSON.stringify(raw);
119
+ }
120
+ return `[\u5DE5\u5177 "${toolName}" \u6267\u884C\u5931\u8D25: ${err?.message ?? err}]`;
121
+ }
122
+ }
123
+
124
+ // packages/ai/agent/toolFailureGuard.ts
125
+ function parseToolResult(content) {
126
+ if (typeof content !== "string" || !content.trim()) return null;
127
+ try {
128
+ return JSON.parse(content);
129
+ } catch {
130
+ return null;
131
+ }
132
+ }
133
+ function pickString(value) {
134
+ return asOptionalTrimmedString(value) ?? null;
135
+ }
136
+ function getToolError(parsed) {
137
+ if (!parsed || typeof parsed !== "object") return null;
138
+ const error = pickString(parsed.error);
139
+ if (error) return error;
140
+ const message = pickString(parsed.message);
141
+ if (message && (parsed.ok === false || parsed.success === false || parsed.status === "error")) {
142
+ return message;
143
+ }
144
+ if (parsed.ok === false) return "tool returned ok=false";
145
+ if (parsed.success === false) return "tool returned success=false";
146
+ return null;
147
+ }
148
+ function stableStringify(value) {
149
+ if (Array.isArray(value)) {
150
+ return `[${value.map((item) => stableStringify(item)).join(",")}]`;
151
+ }
152
+ if (isRecord(value)) {
153
+ return `{${Object.entries(value).sort(([left], [right]) => left.localeCompare(right)).map(([key, item]) => `${JSON.stringify(key)}:${stableStringify(item)}`).join(",")}}`;
154
+ }
155
+ return JSON.stringify(value);
156
+ }
157
+ function normalizeToolArgumentsForFailureSignature(rawArguments) {
158
+ if (typeof rawArguments !== "string") return stableStringify(rawArguments ?? null);
159
+ const trimmed = rawArguments.trim();
160
+ if (!trimmed) return "";
161
+ try {
162
+ return stableStringify(JSON.parse(trimmed));
163
+ } catch {
164
+ return trimmed;
165
+ }
166
+ }
167
+ function recordConsecutiveToolFailure(guard, toolCall, toolResult, maxConsecutiveFailures = 3) {
168
+ const parsed = parseToolResult(toolResult);
169
+ const error = getToolError(parsed);
170
+ if (!error) {
171
+ guard.signature = null;
172
+ guard.count = 0;
173
+ return null;
174
+ }
175
+ const toolName = canonicalizeToolName(toolCall.function.name);
176
+ const signature = stableStringify({
177
+ toolName,
178
+ arguments: normalizeToolArgumentsForFailureSignature(toolCall.function.arguments),
179
+ error
180
+ });
181
+ if (signature === guard.signature) {
182
+ guard.count += 1;
183
+ } else {
184
+ guard.signature = signature;
185
+ guard.count = 1;
186
+ }
187
+ if (guard.count < maxConsecutiveFailures) return null;
188
+ return [
189
+ `\u5DF2\u505C\u6B62\u5DE5\u5177\u5FAA\u73AF\uFF1A${toolName} \u4F7F\u7528\u540C\u4E00\u7EC4\u53C2\u6570\u8FDE\u7EED ${guard.count} \u6B21\u8FD4\u56DE\u540C\u4E00\u4E2A\u9519\u8BEF\u3002`,
190
+ `\u9519\u8BEF\uFF1A${error}`,
191
+ "\u8BF7\u5148\u8C03\u6574\u53C2\u6570\u3001\u6362\u4E00\u79CD\u64CD\u4F5C\u8DEF\u5F84\uFF0C\u6216\u5411\u7528\u6237\u786E\u8BA4\u540E\u518D\u7EE7\u7EED\uFF1B\u4E0D\u8981\u7EE7\u7EED\u91CD\u590D\u540C\u4E00\u4E2A\u5931\u8D25\u8C03\u7528\u3002"
192
+ ].join("\n");
193
+ }
194
+
195
+ // packages/ai/agent/runAgentClientLoop.ts
196
+ async function runAgentClientLoop(args, thunkApi) {
197
+ const { agentKey, content, parentMessageId, billingDialogKey } = args;
198
+ const { getState, dispatch } = thunkApi;
199
+ const state = getState();
200
+ const agentConfig = await dispatch(read({ dbKey: agentKey })).unwrap();
201
+ const agentContexts = await fetchAgentContexts(
202
+ mergeReferences(agentConfig.references, args.extraReferences),
203
+ dispatch
204
+ );
205
+ const initialMessages = [{ role: "user", content }];
206
+ const body = generateRequestBody({
207
+ agentConfig,
208
+ messages: initialMessages,
209
+ userInput: typeof content === "string" ? content : JSON.stringify(content),
210
+ contexts: agentContexts
211
+ });
212
+ body.stream = false;
213
+ const messages = body.messages;
214
+ const api = getApiEndpoint(agentConfig);
215
+ const currentServer = selectCurrentServer(state);
216
+ const token = selectIdentityToken(state) ?? "";
217
+ let finalContent = "";
218
+ let toolCallCount = 0;
219
+ const toolFailureGuard = {
220
+ signature: null,
221
+ count: 0
222
+ };
223
+ loop:
224
+ for (; ; ) {
225
+ body.messages = messages;
226
+ const response = await performFetchRequest({
227
+ agentConfig,
228
+ api,
229
+ bodyData: body,
230
+ currentServer,
231
+ token,
232
+ dialogId: billingDialogKey ? extractCustomId(billingDialogKey) || void 0 : void 0
233
+ });
234
+ const data = await response.json();
235
+ const choice = data.choices?.[0];
236
+ if (billingDialogKey && data?.usage) {
237
+ await updateTokensAction(
238
+ {
239
+ dialogId: extractCustomId(billingDialogKey),
240
+ dialogKey: billingDialogKey,
241
+ usage: data.usage,
242
+ agentConfig
243
+ },
244
+ thunkApi
245
+ );
246
+ }
247
+ if (!choice) {
248
+ console.warn("[runAgentClientLoop] \u54CD\u5E94\u4E2D\u627E\u4E0D\u5230 choices[0]\uFF0C\u505C\u6B62");
249
+ break;
250
+ }
251
+ const assistantMsg = choice.message;
252
+ const finishReason = choice.finish_reason ?? "";
253
+ messages.push(assistantMsg);
254
+ if (typeof assistantMsg.content === "string" && assistantMsg.content) {
255
+ finalContent = assistantMsg.content;
256
+ }
257
+ if (!assistantMsg.tool_calls?.length || finishReason === "stop") {
258
+ break;
259
+ }
260
+ for (const tc of assistantMsg.tool_calls) {
261
+ toolCallCount++;
262
+ const toolResultContent = await executeToolCall(tc, thunkApi, {
263
+ parentMessageId,
264
+ agentKey
265
+ });
266
+ const stopReason = recordConsecutiveToolFailure(
267
+ toolFailureGuard,
268
+ tc,
269
+ toolResultContent
270
+ );
271
+ if (stopReason) {
272
+ finalContent = stopReason;
273
+ messages.push({
274
+ role: "tool",
275
+ tool_call_id: tc.id,
276
+ content: toolResultContent
277
+ });
278
+ break loop;
279
+ }
280
+ messages.push({
281
+ role: "tool",
282
+ tool_call_id: tc.id,
283
+ content: toolResultContent
284
+ });
285
+ }
286
+ }
287
+ return { content: finalContent, toolCallCount };
288
+ }
289
+ export {
290
+ runAgentClientLoop
291
+ };
@@ -0,0 +1,289 @@
1
+ import {
2
+ resolveAuthToken,
3
+ resolveServerUrl
4
+ } from "./chunk-ISNCLGUZ.js";
5
+ import "./chunk-OLZBQWZU.js";
6
+ import {
7
+ resolveAgentRuntimeDecision
8
+ } from "./chunk-ZNFJWEN4.js";
9
+ import {
10
+ createCliAuthorityBrokerClient,
11
+ createCliAuthorityBrokerSocketInvoker,
12
+ resolveCliAuthorityBrokerEndpoint,
13
+ resolveCliAuthorityBrokerHealthPath,
14
+ resolveCliAuthorityBrokerMetadataPath,
15
+ resolveCliAuthorityStoreDriver
16
+ } from "./chunk-U4TRT5V4.js";
17
+ import {
18
+ toErrorMessage
19
+ } from "./chunk-HNMXYYJR.js";
20
+ import "./chunk-LM6IYQ3F.js";
21
+ import "./chunk-4SN6J65J.js";
22
+ import "./chunk-LCBAMY2M.js";
23
+ import "./chunk-CF7PE763.js";
24
+ import "./chunk-G3SUCT4W.js";
25
+ import "./chunk-4VNS5WPM.js";
26
+
27
+ // packages/cli/cliAuthorityBrokerHealth.ts
28
+ import fs from "node:fs/promises";
29
+ var defaultCliAuthorityBrokerHealthDeps = {
30
+ async readJson(filePath) {
31
+ return JSON.parse(await fs.readFile(filePath, "utf8"));
32
+ },
33
+ isPidAlive(pid) {
34
+ try {
35
+ process.kill(pid, 0);
36
+ return true;
37
+ } catch (error) {
38
+ return error.code === "EPERM";
39
+ }
40
+ },
41
+ async openEndpoint(endpoint) {
42
+ const client = createCliAuthorityBrokerClient({
43
+ endpoint,
44
+ invoke: createCliAuthorityBrokerSocketInvoker({ endpoint })
45
+ });
46
+ await client.open();
47
+ }
48
+ };
49
+ function asBrokerHealthRecord(value) {
50
+ return typeof value === "object" && value !== null ? value : {};
51
+ }
52
+ async function probeCliAuthorityBrokerHealth(args) {
53
+ const deps = {
54
+ ...defaultCliAuthorityBrokerHealthDeps,
55
+ ...args.deps
56
+ };
57
+ let metadata;
58
+ let health;
59
+ try {
60
+ [metadata, health] = await Promise.all([
61
+ deps.readJson(args.metadataPath).then(asBrokerHealthRecord),
62
+ deps.readJson(args.healthPath).then(asBrokerHealthRecord)
63
+ ]);
64
+ } catch (error) {
65
+ return {
66
+ ok: false,
67
+ error: `authority broker health artifacts are unavailable: ${toErrorMessage(error)}`
68
+ };
69
+ }
70
+ if (health.ok !== true) {
71
+ return { ok: false, error: "authority broker health artifact is not ok" };
72
+ }
73
+ if (typeof metadata.endpoint !== "string" || metadata.endpoint !== args.endpoint || health.endpoint !== args.endpoint) {
74
+ return { ok: false, error: "authority broker endpoint metadata does not match" };
75
+ }
76
+ if (typeof metadata.pid !== "number" || !Number.isInteger(metadata.pid) || metadata.pid <= 0 || health.pid !== metadata.pid) {
77
+ return { ok: false, error: "authority broker pid metadata is invalid" };
78
+ }
79
+ if (!deps.isPidAlive(metadata.pid)) {
80
+ return {
81
+ ok: false,
82
+ error: `authority broker metadata pid ${metadata.pid} is not alive`
83
+ };
84
+ }
85
+ try {
86
+ await deps.openEndpoint(args.endpoint);
87
+ } catch (error) {
88
+ return {
89
+ ok: false,
90
+ error: `authority broker endpoint is unreachable: ${toErrorMessage(error)}`
91
+ };
92
+ }
93
+ return { ok: true };
94
+ }
95
+
96
+ // packages/cli/runtimeDoctorCommands.ts
97
+ function detectLocalAgentConfig(env) {
98
+ return Boolean(readLocalAgentKey(env) || env.NOLO_AGENT_CACHE_READY);
99
+ }
100
+ function readLocalAgentKey(env) {
101
+ return env.NOLO_LOCAL_AGENT_KEY || env.NOLO_AGENT || "";
102
+ }
103
+ function detectLocalProvider(env) {
104
+ return Boolean(
105
+ env.OPENAI_API_KEY || env.ANTHROPIC_API_KEY || env.GOOGLE_API_KEY || env.GEMINI_API_KEY || env.NOLO_LOCAL_OPENAI_BASE_URL || env.OLLAMA_BASE_URL
106
+ );
107
+ }
108
+ function detectProviderLabel(env) {
109
+ if (env.NOLO_LOCAL_OPENAI_BASE_URL) return `openai-compatible endpoint ${env.NOLO_LOCAL_OPENAI_BASE_URL}`;
110
+ if (env.OLLAMA_BASE_URL) return `ollama-compatible endpoint ${env.OLLAMA_BASE_URL}`;
111
+ if (env.OPENAI_API_KEY) return "openai via env OPENAI_API_KEY";
112
+ if (env.ANTHROPIC_API_KEY) return "anthropic via env ANTHROPIC_API_KEY";
113
+ if (env.GOOGLE_API_KEY) return "google via env GOOGLE_API_KEY";
114
+ if (env.GEMINI_API_KEY) return "google via env GEMINI_API_KEY";
115
+ return "missing";
116
+ }
117
+ async function defaultLocalRuntimeProbe(env, deps = {}) {
118
+ const { resolveCliLocalRuntimeDbPath } = await import("./localRuntimeDb-LGDF6FQP.js");
119
+ const dbPath = resolveCliLocalRuntimeDbPath({ env });
120
+ const authorityDriver = resolveCliAuthorityStoreDriver({ env });
121
+ const authorityEndpoint = resolveCliAuthorityBrokerEndpoint({ transport: "tcp", env });
122
+ const authorityMetadataPath = resolveCliAuthorityBrokerMetadataPath({ transport: "tcp", env });
123
+ const authorityHealthPath = resolveCliAuthorityBrokerHealthPath({ transport: "tcp", env });
124
+ const agentKey = readLocalAgentKey(env);
125
+ try {
126
+ const db = deps.getDb ? await deps.getDb() : await import("./localRuntimeDb-LGDF6FQP.js").then(
127
+ ({ getDefaultCliLocalRuntimeDb }) => getDefaultCliLocalRuntimeDb({ env })
128
+ );
129
+ const authorityHealth = await (deps.probeAuthorityHealth ?? probeCliAuthorityBrokerHealth)({
130
+ endpoint: authorityEndpoint,
131
+ metadataPath: authorityMetadataPath,
132
+ healthPath: authorityHealthPath
133
+ });
134
+ if (!authorityHealth.ok) {
135
+ return {
136
+ ok: true,
137
+ dbPath,
138
+ authorityDriver,
139
+ authorityEndpoint,
140
+ authorityMetadataPath,
141
+ authorityHealthPath,
142
+ authorityHealthy: false,
143
+ authorityError: authorityHealth.error,
144
+ agentFound: false,
145
+ ...agentKey ? { agentKey } : {}
146
+ };
147
+ }
148
+ if (!agentKey) {
149
+ return {
150
+ ok: true,
151
+ dbPath,
152
+ authorityDriver,
153
+ authorityEndpoint,
154
+ authorityMetadataPath,
155
+ authorityHealthPath,
156
+ authorityHealthy: true,
157
+ agentFound: false
158
+ };
159
+ }
160
+ try {
161
+ const record = await db.get(agentKey);
162
+ return {
163
+ ok: true,
164
+ dbPath,
165
+ authorityDriver,
166
+ authorityEndpoint,
167
+ authorityMetadataPath,
168
+ authorityHealthPath,
169
+ authorityHealthy: true,
170
+ agentFound: record != null,
171
+ agentKey
172
+ };
173
+ } catch {
174
+ return {
175
+ ok: true,
176
+ dbPath,
177
+ authorityDriver,
178
+ authorityEndpoint,
179
+ authorityMetadataPath,
180
+ authorityHealthPath,
181
+ authorityHealthy: true,
182
+ agentFound: false,
183
+ agentKey
184
+ };
185
+ }
186
+ } catch (error) {
187
+ const errorMessage = toErrorMessage(error);
188
+ return {
189
+ ok: false,
190
+ dbPath,
191
+ authorityDriver,
192
+ authorityEndpoint,
193
+ authorityMetadataPath,
194
+ authorityHealthPath,
195
+ authorityHealthy: false,
196
+ authorityError: errorMessage,
197
+ agentFound: false,
198
+ ...agentKey ? { agentKey } : {},
199
+ error: errorMessage
200
+ };
201
+ }
202
+ }
203
+ async function runDoctorRuntimeCommand(args, deps = {}) {
204
+ const env = deps.env ?? process.env;
205
+ const output = deps.output ?? process.stdout;
206
+ const authToken = resolveAuthToken(args, env);
207
+ const serverUrl = resolveServerUrl(args, env);
208
+ const localProbe = await (deps.localRuntimeProbe ?? defaultLocalRuntimeProbe)(env);
209
+ const hasLocalAgentConfig = detectLocalAgentConfig(env) && localProbe.ok && localProbe.agentFound;
210
+ const hasLocalProvider = detectLocalProvider(env);
211
+ const missingLocalCapabilities = [
212
+ ...localProbe.ok ? [] : ["leveldb"],
213
+ ...localProbe.authorityHealthy === false ? ["authority-broker"] : [],
214
+ ...hasLocalAgentConfig ? [] : ["agent-config"],
215
+ ...hasLocalProvider ? [] : ["provider"]
216
+ ];
217
+ const decision = resolveAgentRuntimeDecision({
218
+ requestedMode: "auto",
219
+ syncRequested: false,
220
+ host: "cli",
221
+ hasLocalAgentConfig,
222
+ hasLocalProvider,
223
+ hasLocalPersistence: true,
224
+ missingLocalCapabilities,
225
+ requiresServer: false,
226
+ serverFallbackAvailable: Boolean(
227
+ authToken || args.includes("--server") || args.includes("--server-url") || env.NOLO_SERVER || env.BASE_URL
228
+ )
229
+ });
230
+ output.write(`Runtime: ${decision.mode}
231
+ `);
232
+ output.write(`Reason: ${decision.reason}
233
+ `);
234
+ output.write(`LevelDB: ${localProbe.ok ? "ok" : "failed"}
235
+ `);
236
+ output.write(`DB path: ${localProbe.dbPath}
237
+ `);
238
+ output.write(`Authority driver: ${localProbe.authorityDriver ?? "unknown"}
239
+ `);
240
+ if (localProbe.authorityEndpoint) {
241
+ output.write(`Authority endpoint: ${localProbe.authorityEndpoint}
242
+ `);
243
+ }
244
+ if (localProbe.authorityMetadataPath) {
245
+ output.write(`Authority metadata: ${localProbe.authorityMetadataPath}
246
+ `);
247
+ }
248
+ if (localProbe.authorityHealthPath) {
249
+ output.write(`Authority health: ${localProbe.authorityHealthPath}
250
+ `);
251
+ }
252
+ output.write(
253
+ `Authority broker: ${localProbe.authorityHealthy === true ? "healthy" : localProbe.authorityHealthy === false ? "unhealthy" : "unknown"}
254
+ `
255
+ );
256
+ if (localProbe.authorityHealthy === false && localProbe.authorityError) {
257
+ output.write(`Authority error: ${localProbe.authorityError}
258
+ `);
259
+ }
260
+ if (!localProbe.ok && localProbe.error) {
261
+ output.write(`DB error: ${localProbe.error}
262
+ `);
263
+ }
264
+ if (localProbe.agentKey) {
265
+ output.write(`Agent config: ${localProbe.agentFound ? "found" : "missing"} (${localProbe.agentKey})
266
+ `);
267
+ } else {
268
+ output.write("Agent config: missing (no local agent key)\n");
269
+ }
270
+ output.write(`Provider: ${hasLocalProvider ? "available" : "missing"} (${detectProviderLabel(env)})
271
+ `);
272
+ output.write("Persistence: LevelDB local store\n");
273
+ output.write(`Sync: ${authToken ? "available" : "unavailable"}${authToken ? "" : " (not authenticated)"}
274
+ `);
275
+ output.write(`Server fallback: ${decision.runnable && decision.mode === "server" ? serverUrl : authToken || env.NOLO_SERVER || env.BASE_URL ? serverUrl : "unavailable"}
276
+ `);
277
+ if (decision.missingLocalCapabilities.length > 0) {
278
+ output.write("Missing local capabilities:\n");
279
+ for (const capability of decision.missingLocalCapabilities) {
280
+ output.write(`- ${capability}
281
+ `);
282
+ }
283
+ }
284
+ return decision.runnable ? 0 : 1;
285
+ }
286
+ export {
287
+ defaultLocalRuntimeProbe,
288
+ runDoctorRuntimeCommand
289
+ };