nolo-cli 0.8.0-alpha.2 → 0.8.0-alpha.21

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 (188) hide show
  1. package/README.md +1 -1
  2. package/_executeModel-42U3VOVZ.js +205 -0
  3. package/action-TLI3V62L.js +28 -0
  4. package/addContentAction-57RSIIMR.js +26 -0
  5. package/addDialogAgentAction-G3VWEA6E.js +68 -0
  6. package/agentDeleteCommand-5DD2IM3J.js +327 -0
  7. package/agentEmailCommands-6FACJBU4.js +628 -0
  8. package/agentListCommands-I6KZYCIG.js +223 -0
  9. package/agentMachineCommands-VKLIGMZA.js +425 -0
  10. package/agentPullCommand-O2MTUAFR.js +122 -0
  11. package/agentRecordCommands-7TZICYDT.js +96 -0
  12. package/agentRunCommand-L4OM23KV.js +114 -0
  13. package/agentRunControl-K4VKNEHF.js +57 -0
  14. package/agentRuntimeLocal-ZYEIPTY4.js +104 -0
  15. package/agentSlice-BX7GXSNO.js +42 -0
  16. package/authCommand-EB5JSOX5.js +581 -0
  17. package/authCommands-XPEHTKSM.js +35 -0
  18. package/chunk-25LCXTML.js +175 -0
  19. package/chunk-2ECQG4YX.js +22296 -0
  20. package/chunk-2FTTDCD4.js +675 -0
  21. package/chunk-2JCXITPK.js +1078 -0
  22. package/chunk-3ASDTTEI.js +1774 -0
  23. package/chunk-3EUW3WEO.js +8 -0
  24. package/chunk-3LY4F7SV.js +9293 -0
  25. package/chunk-4CQLVGRV.js +50 -0
  26. package/chunk-4IJYA27C.js +342 -0
  27. package/chunk-4O3CARJ4.js +231 -0
  28. package/chunk-4QEWT7KD.js +933 -0
  29. package/chunk-4SN6J65J.js +38 -0
  30. package/chunk-4VNS5WPM.js +42 -0
  31. package/chunk-4XENYTF5.js +222 -0
  32. package/chunk-4ZDM73SD.js +34 -0
  33. package/chunk-5CS33IBL.js +301 -0
  34. package/chunk-5EFXE3O7.js +138 -0
  35. package/chunk-5KLGBAAR.js +386 -0
  36. package/chunk-5MIDPSSK.js +206 -0
  37. package/chunk-5MMAK75Q.js +15 -0
  38. package/chunk-63W5N6P3.js +150 -0
  39. package/chunk-6HYVJV7B.js +102 -0
  40. package/chunk-6KHNO3SK.js +1948 -0
  41. package/chunk-6WD3OOJS.js +20 -0
  42. package/chunk-7DAJ4AI4.js +191 -0
  43. package/chunk-7GNGZRLZ.js +1939 -0
  44. package/chunk-7KCUSYT2.js +354 -0
  45. package/chunk-7U44LYTR.js +238 -0
  46. package/chunk-AFON4QUU.js +112 -0
  47. package/chunk-AGFH73SK.js +239 -0
  48. package/chunk-AL2KDGR2.js +27339 -0
  49. package/chunk-AS4PVWA4.js +221 -0
  50. package/chunk-ATNTHIZI.js +13 -0
  51. package/chunk-AVMKZHBC.js +85 -0
  52. package/chunk-AZPCASRE.js +36 -0
  53. package/chunk-BBYVOSU2.js +792 -0
  54. package/chunk-C3RUNRHT.js +51 -0
  55. package/chunk-C4FTUXVF.js +146 -0
  56. package/chunk-CF2WZF4N.js +134 -0
  57. package/chunk-CF7PE763.js +10 -0
  58. package/chunk-CKOJQDKR.js +198 -0
  59. package/chunk-CMKUBIGW.js +1550 -0
  60. package/chunk-CWMSB67P.js +34 -0
  61. package/chunk-DCOA4QSN.js +105 -0
  62. package/chunk-DFFIZ25G.js +30 -0
  63. package/chunk-DSZUWUYB.js +478 -0
  64. package/chunk-DWLEOOGR.js +8 -0
  65. package/chunk-DZ3XJVET.js +231 -0
  66. package/chunk-EHLHSX7R.js +1433 -0
  67. package/chunk-ENOG22KJ.js +939 -0
  68. package/chunk-FSO5B7GH.js +171 -0
  69. package/chunk-FVYY6MCS.js +1447 -0
  70. package/chunk-G3SUCT4W.js +8 -0
  71. package/chunk-GAKEBQD6.js +30 -0
  72. package/chunk-GBRG75BQ.js +86 -0
  73. package/chunk-GU3PEVGZ.js +4723 -0
  74. package/chunk-H33743XH.js +25 -0
  75. package/chunk-HNMXYYJR.js +12 -0
  76. package/chunk-HNW7IJSK.js +71 -0
  77. package/chunk-I42VC5KR.js +15 -0
  78. package/chunk-I6XMPTMR.js +113 -0
  79. package/chunk-IDZTNRP2.js +85 -0
  80. package/chunk-ISNCLGUZ.js +146 -0
  81. package/chunk-IWX4UW2E.js +548 -0
  82. package/chunk-JBTJAPUF.js +35 -0
  83. package/chunk-JEXVIMYZ.js +55 -0
  84. package/chunk-JRKKFRAV.js +537 -0
  85. package/chunk-JZPBVBIY.js +94 -0
  86. package/chunk-KKY4B2Q2.js +21 -0
  87. package/chunk-KQHGZWSV.js +63 -0
  88. package/chunk-KUG52IAP.js +8 -0
  89. package/chunk-KX6YBIHG.js +8 -0
  90. package/chunk-LCBAMY2M.js +60 -0
  91. package/chunk-LM6IYQ3F.js +16 -0
  92. package/chunk-LTRXGFMS.js +83 -0
  93. package/chunk-M76ECQRD.js +13658 -0
  94. package/chunk-MRC4Q34M.js +188 -0
  95. package/chunk-MTU75CZ2.js +91 -0
  96. package/chunk-N54XAP77.js +19 -0
  97. package/chunk-O2ZNTTET.js +3272 -0
  98. package/chunk-O4BU24WZ.js +3212 -0
  99. package/chunk-OLZBQWZU.js +6 -0
  100. package/chunk-OOSFSFMA.js +271 -0
  101. package/chunk-OPZYGHUC.js +89 -0
  102. package/chunk-OWOHNGCN.js +50 -0
  103. package/chunk-P3PKED2I.js +962 -0
  104. package/chunk-QSJ3HFEF.js +8 -0
  105. package/chunk-RCSJFQPB.js +9036 -0
  106. package/chunk-RL776AGR.js +190 -0
  107. package/chunk-ROWQEJRP.js +139 -0
  108. package/chunk-S7Z2HMCN.js +25 -0
  109. package/chunk-SDJDLO5W.js +628 -0
  110. package/chunk-SOTZ6RDN.js +69 -0
  111. package/chunk-TILFE6LV.js +381 -0
  112. package/chunk-U4TRT5V4.js +246 -0
  113. package/chunk-U6VC4MU4.js +8 -0
  114. package/chunk-UAD2WT54.js +64 -0
  115. package/chunk-UB6SN4NJ.js +421 -0
  116. package/chunk-URUUZLPA.js +807 -0
  117. package/chunk-UTLZINAP.js +3066 -0
  118. package/chunk-VC6OZXO5.js +298 -0
  119. package/chunk-VF4K2QE6.js +21 -0
  120. package/chunk-VHBWHNVT.js +59 -0
  121. package/chunk-VIDPVFP3.js +20 -0
  122. package/chunk-VP4WJWKW.js +8882 -0
  123. package/chunk-VUW5FBDB.js +573 -0
  124. package/chunk-VVX233PH.js +482 -0
  125. package/chunk-VX3SXJ3N.js +2052 -0
  126. package/chunk-W4NVOSFF.js +37 -0
  127. package/chunk-WWC7I6TA.js +8 -0
  128. package/chunk-WZSRQNQG.js +2587 -0
  129. package/chunk-XBUBEFNX.js +34 -0
  130. package/chunk-XENYHRUE.js +104 -0
  131. package/chunk-Y5GCAMGP.js +9 -0
  132. package/chunk-YPRZSPF3.js +148 -0
  133. package/chunk-Z4NR32XR.js +50 -0
  134. package/chunk-ZNFJWEN4.js +56 -0
  135. package/cliExecutor-K3F7DMRO.js +36 -0
  136. package/clipboardy-BVE3LVEH.js +12001 -0
  137. package/createAgentAutomationAction-RJF3N2QY.js +866 -0
  138. package/createDialogAction-DRSPS6CE.js +55 -0
  139. package/createPageAction-6B2WMNO3.js +172 -0
  140. package/db-HCJ5PRB5.js +271 -0
  141. package/dbSlice-Q3TM2FJV.js +60 -0
  142. package/deleteFile-OW53A6BX.js +41 -0
  143. package/dialogCommands-4IX4XIZE.js +63 -0
  144. package/dialogSlice-3M7KX2TX.js +148 -0
  145. package/docCreateCommands-SIL3NPGT.js +220 -0
  146. package/docDeleteCommands-7IOMLUS4.js +181 -0
  147. package/docReadCommands-FNFXUA5L.js +134 -0
  148. package/docStore-SV7E34D4.js +98 -0
  149. package/docUpdateCommands-X2HNDVUC.js +318 -0
  150. package/fetchMessages-KTNM7QAR.js +17 -0
  151. package/getPricing-3E6UNPKL.js +30 -0
  152. package/handleSendMessageAction-JYETO5RZ.js +185 -0
  153. package/index.js +188 -112958
  154. package/lib-FYYBQIXS.js +19839 -0
  155. package/localDialogRead-2VRI24F4.js +26 -0
  156. package/localFirstLog-DHNOY2NA.js +19 -0
  157. package/localRuntimeAuthority-TEGCOWX4.js +471 -0
  158. package/localRuntimeDb-LGDF6FQP.js +12 -0
  159. package/machineCommands-RIO3RP5Q.js +781 -0
  160. package/machineInfo-M6KB6HZN.js +10 -0
  161. package/machineWsRunDispatch-W7UYLGB5.js +112 -0
  162. package/memoryCommands-O4MIPIWQ.js +476 -0
  163. package/models-4OPOOLFS.js +9 -0
  164. package/offlineMarxistsAgentCommand-BCPJITJL.js +242 -0
  165. package/package.json +4 -24
  166. package/read-GW7ZEI23.js +17 -0
  167. package/readDocTool-HUFU6OCT.js +16 -0
  168. package/readlineWorkspace-27JR7WPW.js +5682 -0
  169. package/removeDialogAgentAction-CXKR4NJI.js +73 -0
  170. package/runAgentClientLoop-HZFAPJHS.js +293 -0
  171. package/runtimeDoctorCommands-LRHLPDRC.js +289 -0
  172. package/setDialogExtraReferencesAction-6RKUSXHX.js +60 -0
  173. package/setPrimaryDialogAgentAction-T3UTBEFG.js +80 -0
  174. package/settingSlice-IVKXJXMG.js +199 -0
  175. package/skillDiscovery-UGSQGX2U.js +16 -0
  176. package/skillSummaryMarker-42HKSXYY.js +9 -0
  177. package/slateToRenderMarkdown-Y5IYN73U.js +7 -0
  178. package/slateUtils-2M7MUTWX.js +19 -0
  179. package/spaceCommands-E7VOF4LO.js +450 -0
  180. package/spaceSlice-TSVROA5U.js +149 -0
  181. package/streamAgentChatTurn-3C5RQZJF.js +4510 -0
  182. package/tableCommands-O7O2LBEG.js +1286 -0
  183. package/toolApiClient-QI3YBNWB.js +26 -0
  184. package/tools-EQDEKR6N.js +87 -0
  185. package/tuiSummaryLlmCaller-RV3THLZF.js +78 -0
  186. package/understanding-3CUQQ6SV.js +271 -0
  187. package/updateCommands-VOSPKXFF.js +31 -0
  188. package/updateDialogTitleAction-3XV7VWSZ.js +188 -0
@@ -0,0 +1,381 @@
1
+ import {
2
+ asOptionalFiniteNumber
3
+ } from "./chunk-WWC7I6TA.js";
4
+ import {
5
+ asTrimmedString
6
+ } from "./chunk-3EUW3WEO.js";
7
+ import {
8
+ asOptionalTrimmedString
9
+ } from "./chunk-G3SUCT4W.js";
10
+ import {
11
+ isRecord
12
+ } from "./chunk-KUG52IAP.js";
13
+
14
+ // packages/agent-runtime/agentRecordConfig.ts
15
+ function stringField(record, key) {
16
+ const value = record[key];
17
+ return typeof value === "string" ? value : void 0;
18
+ }
19
+ function numberField(record, key) {
20
+ return asOptionalFiniteNumber(record[key]);
21
+ }
22
+ function objectField(record, key) {
23
+ const value = record[key];
24
+ return isRecord(value) ? value : void 0;
25
+ }
26
+ function appendUniqueStrings(values, next) {
27
+ if (!Array.isArray(next)) return values;
28
+ const seen = new Set(values);
29
+ for (const value of next) {
30
+ const toolName = typeof value === "string" ? value : isRecord(value) && typeof value.name === "string" ? value.name : isRecord(value) && isRecord(value.function) && typeof value.function.name === "string" ? value.function.name : "";
31
+ if (toolName && !seen.has(toolName)) {
32
+ seen.add(toolName);
33
+ values.push(toolName);
34
+ }
35
+ }
36
+ return values;
37
+ }
38
+ function resolveAgentRuntimeToolNames(record) {
39
+ const tools = appendUniqueStrings(
40
+ appendUniqueStrings([], record.toolNames),
41
+ record.tools
42
+ );
43
+ return tools.length > 0 ? tools : void 0;
44
+ }
45
+ function resolveAgentRuntimeConfigFromRecord(key, record) {
46
+ const name = stringField(record, "name");
47
+ const prompt = stringField(record, "prompt");
48
+ const model = stringField(record, "model");
49
+ const apiSource = stringField(record, "apiSource");
50
+ const cliProvider = stringField(record, "cliProvider");
51
+ const customProviderUrl = stringField(record, "customProviderUrl");
52
+ const apiKey = stringField(record, "apiKey");
53
+ const apiKeyHeader = stringField(record, "apiKeyHeader");
54
+ const apiKeyFromAgentKey = stringField(record, "apiKeyFromAgentKey");
55
+ const apiKeyRef = stringField(record, "apiKeyRef");
56
+ const credentialRef = stringField(record, "credentialRef");
57
+ const credentialSynced = record.credentialSynced === true;
58
+ const useServerProxy = record.useServerProxy === true;
59
+ const provider = stringField(record, "provider") ?? stringField(record, "apiSource");
60
+ const toolNames = resolveAgentRuntimeToolNames(record);
61
+ const temperature = numberField(record, "temperature");
62
+ const topP = numberField(record, "top_p");
63
+ const frequencyPenalty = numberField(record, "frequency_penalty");
64
+ const presencePenalty = numberField(record, "presence_penalty");
65
+ const maxTokens = numberField(record, "max_tokens");
66
+ const reasoningEffort = stringField(record, "reasoning_effort") || stringField(record, "reasoningEffort");
67
+ const runtimeBinding = objectField(record, "runtimeBinding");
68
+ const runtimeToolPolicy = objectField(record, "runtimeToolPolicy") ?? objectField(runtimeBinding ?? {}, "runtimeToolPolicy");
69
+ const delegation = objectField(record, "delegation");
70
+ return {
71
+ key,
72
+ ...name ? { name } : {},
73
+ ...prompt ? { prompt } : {},
74
+ ...model ? { model } : {},
75
+ ...provider ? { provider } : {},
76
+ ...apiSource ? { apiSource } : {},
77
+ ...cliProvider ? { cliProvider } : {},
78
+ ...customProviderUrl ? { customProviderUrl } : {},
79
+ ...apiKey ? { apiKey } : {},
80
+ ...apiKeyHeader ? { apiKeyHeader } : {},
81
+ ...apiKeyFromAgentKey ? { apiKeyFromAgentKey } : {},
82
+ ...apiKeyRef ? { apiKeyRef } : {},
83
+ ...credentialRef ? { credentialRef } : {},
84
+ ...credentialSynced ? { credentialSynced } : {},
85
+ ...useServerProxy ? { useServerProxy } : {},
86
+ ...toolNames ? { toolNames } : {},
87
+ ...temperature !== void 0 ? { temperature } : {},
88
+ ...topP !== void 0 ? { top_p: topP } : {},
89
+ ...frequencyPenalty !== void 0 ? { frequency_penalty: frequencyPenalty } : {},
90
+ ...presencePenalty !== void 0 ? { presence_penalty: presencePenalty } : {},
91
+ ...maxTokens !== void 0 ? { max_tokens: maxTokens } : {},
92
+ ...reasoningEffort ? { reasoning_effort: reasoningEffort } : {},
93
+ ...runtimeBinding ? { runtimeBinding } : {},
94
+ ...runtimeToolPolicy ? { runtimeToolPolicy } : {},
95
+ ...delegation ? { delegation } : {},
96
+ rawRecord: record
97
+ };
98
+ }
99
+
100
+ // packages/agent-runtime/desktopRequestSnapshot.ts
101
+ var DESKTOP_AGENT_CONFIG_SNAPSHOT_STRING_FIELDS = [
102
+ "name",
103
+ "prompt",
104
+ "provider",
105
+ "model",
106
+ "apiSource",
107
+ "cliProvider",
108
+ "customProviderUrl",
109
+ "credentialRef",
110
+ "apiKeyRef",
111
+ "apiKeyHeader",
112
+ "reasoning_effort",
113
+ "reasoningEffort"
114
+ ];
115
+ var DESKTOP_AGENT_CONFIG_SNAPSHOT_NUMBER_FIELDS = [
116
+ "temperature",
117
+ "top_p",
118
+ "frequency_penalty",
119
+ "presence_penalty",
120
+ "max_tokens"
121
+ ];
122
+ var DESKTOP_AGENT_CONFIG_SNAPSHOT_OBJECT_FIELDS = [
123
+ "runtimeBinding",
124
+ "runtimeToolPolicy",
125
+ "delegation"
126
+ ];
127
+ var DESKTOP_AGENT_CONFIG_SNAPSHOT_FORBIDDEN_KEYS = [
128
+ "apiKey",
129
+ "apiKeyFromAgentKey",
130
+ "token",
131
+ "secret",
132
+ "password",
133
+ "accessToken",
134
+ "refreshToken",
135
+ "authorization",
136
+ "authToken",
137
+ "AUTH_TOKEN",
138
+ "AUTH",
139
+ "clientSecret",
140
+ "privateKey",
141
+ "bearer"
142
+ ];
143
+ var DESKTOP_TOOL_CALL_ARGUMENTS_MAX_CHARS = 8192;
144
+ var REDACTED_SECRET_PLACEHOLDER = "[redacted]";
145
+ var FORBIDDEN_KEY_SET = new Set(
146
+ DESKTOP_AGENT_CONFIG_SNAPSHOT_FORBIDDEN_KEYS.map((k) => k.toLowerCase())
147
+ );
148
+ function isForbiddenKey(key) {
149
+ return FORBIDDEN_KEY_SET.has(key.toLowerCase());
150
+ }
151
+ function isDesktopSnapshotSensitivePropertyName(key) {
152
+ return isForbiddenKey(key);
153
+ }
154
+ function redactSensitiveJsonTree(value, depth = 0) {
155
+ if (depth > 6) return null;
156
+ if (value === null || typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
157
+ return value;
158
+ }
159
+ if (Array.isArray(value)) {
160
+ return value.map((item) => redactSensitiveJsonTree(item, depth + 1));
161
+ }
162
+ if (typeof value !== "object") return null;
163
+ const out = {};
164
+ for (const [key, child] of Object.entries(value)) {
165
+ if (isDesktopSnapshotSensitivePropertyName(key)) {
166
+ out[key] = REDACTED_SECRET_PLACEHOLDER;
167
+ continue;
168
+ }
169
+ out[key] = redactSensitiveJsonTree(child, depth + 1);
170
+ }
171
+ return out;
172
+ }
173
+ function sanitizeToolCallArguments(raw, maxChars = DESKTOP_TOOL_CALL_ARGUMENTS_MAX_CHARS) {
174
+ const source = typeof raw === "string" ? raw : raw == null ? "{}" : String(raw);
175
+ let candidate = source;
176
+ try {
177
+ const parsed = JSON.parse(source);
178
+ if (parsed && typeof parsed === "object") {
179
+ candidate = JSON.stringify(redactSensitiveJsonTree(parsed));
180
+ }
181
+ } catch {
182
+ }
183
+ if (candidate.length <= maxChars) return candidate;
184
+ return candidate.slice(0, maxChars);
185
+ }
186
+ function stringField2(record, key) {
187
+ return asOptionalTrimmedString(record[key]);
188
+ }
189
+ function numberField2(record, key) {
190
+ return asOptionalFiniteNumber(record[key]);
191
+ }
192
+ function uniqueToolNames(values) {
193
+ if (!Array.isArray(values)) return void 0;
194
+ const names = [];
195
+ const seen = /* @__PURE__ */ new Set();
196
+ for (const value of values) {
197
+ const name = asTrimmedString(value) || asTrimmedString(value?.name) || asTrimmedString(
198
+ value?.function?.name
199
+ );
200
+ if (!name || seen.has(name)) continue;
201
+ seen.add(name);
202
+ names.push(name);
203
+ }
204
+ return names.length > 0 ? names : void 0;
205
+ }
206
+ function sanitizePlainObject(value, depth = 0) {
207
+ if (!isRecord(value)) return void 0;
208
+ if (depth > 4) return void 0;
209
+ const out = {};
210
+ for (const [key, child] of Object.entries(value)) {
211
+ if (isForbiddenKey(key)) continue;
212
+ if (child === null) {
213
+ out[key] = null;
214
+ continue;
215
+ }
216
+ if (typeof child === "string" || typeof child === "number" || typeof child === "boolean") {
217
+ out[key] = child;
218
+ continue;
219
+ }
220
+ if (Array.isArray(child)) {
221
+ const items = child.map((item) => {
222
+ if (item === null || typeof item === "string" || typeof item === "number" || typeof item === "boolean") {
223
+ return item;
224
+ }
225
+ if (isRecord(item)) {
226
+ return sanitizePlainObject(item, depth + 1);
227
+ }
228
+ return void 0;
229
+ }).filter((item) => item !== void 0);
230
+ out[key] = items;
231
+ continue;
232
+ }
233
+ if (typeof child === "object") {
234
+ const nested = sanitizePlainObject(child, depth + 1);
235
+ if (nested) out[key] = nested;
236
+ }
237
+ }
238
+ return out;
239
+ }
240
+ function pickAllowlistedAgentConfigFields(source, dbKey) {
241
+ const snapshot = { dbKey };
242
+ for (const key of DESKTOP_AGENT_CONFIG_SNAPSHOT_STRING_FIELDS) {
243
+ if (key === "reasoningEffort") continue;
244
+ const value = stringField2(source, key);
245
+ if (value !== void 0) {
246
+ snapshot[key] = value;
247
+ }
248
+ }
249
+ const reasoningEffort = stringField2(source, "reasoning_effort") || stringField2(source, "reasoningEffort");
250
+ if (reasoningEffort) snapshot.reasoning_effort = reasoningEffort;
251
+ for (const key of DESKTOP_AGENT_CONFIG_SNAPSHOT_NUMBER_FIELDS) {
252
+ const value = numberField2(source, key);
253
+ if (value !== void 0) {
254
+ snapshot[key] = value;
255
+ }
256
+ }
257
+ if (source.useServerProxy === true) {
258
+ snapshot.useServerProxy = true;
259
+ } else if (source.useServerProxy === false) {
260
+ snapshot.useServerProxy = false;
261
+ }
262
+ const tools = uniqueToolNames(source.tools) ?? uniqueToolNames(source.toolNames);
263
+ if (tools) snapshot.tools = tools;
264
+ for (const key of DESKTOP_AGENT_CONFIG_SNAPSHOT_OBJECT_FIELDS) {
265
+ const value = sanitizePlainObject(source[key]);
266
+ if (value) {
267
+ snapshot[key] = value;
268
+ }
269
+ }
270
+ return snapshot;
271
+ }
272
+ function buildDesktopAgentRuntimeAgentConfigSnapshot(source, agentRef) {
273
+ if (!isRecord(source)) return null;
274
+ const ref = asTrimmedString(agentRef);
275
+ if (!ref) return null;
276
+ const claimed = stringField2(source, "dbKey") || stringField2(source, "key");
277
+ if (claimed && claimed !== ref) return null;
278
+ const dbKey = claimed || ref;
279
+ return pickAllowlistedAgentConfigFields(source, dbKey);
280
+ }
281
+ function sanitizeMessageContent(content) {
282
+ if (content === null || content === void 0) return null;
283
+ if (typeof content === "string") return content;
284
+ if (!Array.isArray(content)) return null;
285
+ const parts = [];
286
+ for (const part of content) {
287
+ if (!part || typeof part !== "object") continue;
288
+ const record = part;
289
+ if (record.type === "text" && typeof record.text === "string") {
290
+ parts.push({ type: "text", text: record.text });
291
+ }
292
+ }
293
+ return parts.length > 0 ? parts : null;
294
+ }
295
+ function sanitizeToolCalls(value) {
296
+ if (!Array.isArray(value)) return void 0;
297
+ const calls = [];
298
+ for (const item of value) {
299
+ if (!item || typeof item !== "object") continue;
300
+ const record = item;
301
+ const id = asTrimmedString(record.id);
302
+ const fn = record.function && typeof record.function === "object" ? record.function : null;
303
+ const name = asTrimmedString(fn?.name);
304
+ const rawArgs = typeof fn?.arguments === "string" ? fn.arguments : "{}";
305
+ if (!id || !name) continue;
306
+ calls.push({
307
+ id,
308
+ type: "function",
309
+ function: { name, arguments: sanitizeToolCallArguments(rawArgs) }
310
+ });
311
+ }
312
+ return calls.length > 0 ? calls : void 0;
313
+ }
314
+ function sanitizeChatMessage(value) {
315
+ if (!isRecord(value)) return null;
316
+ const role = value.role;
317
+ if (role !== "system" && role !== "user" && role !== "assistant" && role !== "tool") {
318
+ return null;
319
+ }
320
+ const content = sanitizeMessageContent(value.content);
321
+ const message = {
322
+ role,
323
+ content
324
+ };
325
+ const toolCallId = asOptionalTrimmedString(value.tool_call_id) ?? asOptionalTrimmedString(value.toolCallId);
326
+ if (toolCallId) message.tool_call_id = toolCallId;
327
+ const toolCalls = sanitizeToolCalls(value.tool_calls);
328
+ if (toolCalls) message.tool_calls = toolCalls;
329
+ if (typeof value.reasoning_content === "string" && value.reasoning_content) {
330
+ message.reasoning_content = value.reasoning_content;
331
+ }
332
+ return message;
333
+ }
334
+ function buildDesktopAgentRuntimeDialogHistorySnapshot(args) {
335
+ const dialogId = asTrimmedString(args.dialogId);
336
+ if (!dialogId) return null;
337
+ if (!Array.isArray(args.messages)) return null;
338
+ let messages = args.messages.map((item) => sanitizeChatMessage(item)).filter((item) => item !== null);
339
+ messages = messages.filter((msg) => {
340
+ const raw = msg;
341
+ return raw.isStreaming !== true;
342
+ });
343
+ const inputText = normalizeContentToText(args.currentInput);
344
+ if (inputText && messages.length > 0) {
345
+ const last = messages[messages.length - 1];
346
+ if (last.role === "user" && normalizeContentToText(last.content) === inputText) {
347
+ messages = messages.slice(0, -1);
348
+ }
349
+ }
350
+ return { dialogId, messages };
351
+ }
352
+ function normalizeContentToText(content) {
353
+ if (typeof content === "string") return content.trim();
354
+ if (!Array.isArray(content)) return "";
355
+ return content.flatMap((part) => part?.type === "text" && part.text ? [part.text] : []).join("\n").trim();
356
+ }
357
+ function assertDesktopAgentRuntimeTurnBodyHasNoRawSecrets(body) {
358
+ if (!body || typeof body !== "object") return;
359
+ const json = JSON.stringify(body);
360
+ const walk = (value, path) => {
361
+ if (!value || typeof value !== "object") return;
362
+ if (Array.isArray(value)) {
363
+ value.forEach((item, index) => walk(item, `${path}[${index}]`));
364
+ return;
365
+ }
366
+ for (const [key, child] of Object.entries(value)) {
367
+ if (isForbiddenKey(key)) {
368
+ throw new Error(`Forbidden secret field in request body at ${path}.${key}`);
369
+ }
370
+ walk(child, path ? `${path}.${key}` : key);
371
+ }
372
+ };
373
+ walk(body, "");
374
+ }
375
+
376
+ export {
377
+ resolveAgentRuntimeConfigFromRecord,
378
+ buildDesktopAgentRuntimeAgentConfigSnapshot,
379
+ buildDesktopAgentRuntimeDialogHistorySnapshot,
380
+ assertDesktopAgentRuntimeTurnBodyHasNoRawSecrets
381
+ };
@@ -0,0 +1,246 @@
1
+ import {
2
+ resolveNoloHome
3
+ } from "./chunk-LM6IYQ3F.js";
4
+
5
+ // packages/database-engine/cliAuthorityBrokerClient.ts
6
+ import { createConnection } from "node:net";
7
+ var DEFAULT_ITERATOR_PAGE_SIZE = 200;
8
+ var CliAuthorityBrokerUnavailableError = class extends Error {
9
+ reason = "cli_authority_broker_unavailable";
10
+ status = 503;
11
+ endpoint;
12
+ constructor(endpoint, cause) {
13
+ super(`CLI authority broker unavailable at ${endpoint}. Start the local authority broker and retry.`);
14
+ this.name = "CliAuthorityBrokerUnavailableError";
15
+ this.endpoint = endpoint;
16
+ if (cause !== void 0) {
17
+ this.cause = cause;
18
+ }
19
+ }
20
+ };
21
+ var CliAuthorityBrokerProtocolError = class extends Error {
22
+ code;
23
+ retryable;
24
+ constructor(error) {
25
+ super(error.message);
26
+ this.name = "CliAuthorityBrokerProtocolError";
27
+ this.code = error.code;
28
+ this.retryable = error.retryable === true;
29
+ }
30
+ };
31
+ function isCliAuthorityBrokerUnavailableError(error) {
32
+ return error instanceof CliAuthorityBrokerUnavailableError || typeof error === "object" && error !== null && error.reason === "cli_authority_broker_unavailable" && error.status === 503;
33
+ }
34
+ function isCliAuthorityBrokerProtocolError(error) {
35
+ return error instanceof CliAuthorityBrokerProtocolError;
36
+ }
37
+ function resolveBrokerSocketTarget(endpoint) {
38
+ if (endpoint.startsWith("unix://")) {
39
+ return { kind: "unix", path: endpoint.slice("unix://".length) };
40
+ }
41
+ if (endpoint.startsWith("tcp://")) {
42
+ const url = new URL(endpoint);
43
+ return {
44
+ kind: "tcp",
45
+ host: url.hostname,
46
+ port: Number(url.port)
47
+ };
48
+ }
49
+ throw new Error(`Unsupported CLI authority broker endpoint: ${endpoint}`);
50
+ }
51
+ function createCliAuthorityBrokerSocketInvoker(options) {
52
+ const target = resolveBrokerSocketTarget(options.endpoint);
53
+ return async (request) => {
54
+ return await new Promise((resolve, reject) => {
55
+ const socket = target.kind === "unix" ? createConnection(target.path) : createConnection({ host: target.host, port: target.port });
56
+ let responseBuffer = "";
57
+ let settled = false;
58
+ const timeout = setTimeout(() => {
59
+ finish(() => {
60
+ socket.destroy();
61
+ reject(new Error(`CLI authority broker request at ${options.endpoint} timed out after 5000ms`));
62
+ });
63
+ }, 5e3);
64
+ const finish = (fn) => {
65
+ if (settled) return;
66
+ settled = true;
67
+ clearTimeout(timeout);
68
+ fn();
69
+ };
70
+ socket.setEncoding("utf8");
71
+ socket.on("connect", () => {
72
+ socket.write(`${JSON.stringify(request)}
73
+ `);
74
+ });
75
+ socket.on("data", (chunk) => {
76
+ responseBuffer += chunk;
77
+ });
78
+ socket.on("end", () => {
79
+ finish(() => {
80
+ const payload = responseBuffer.trim();
81
+ if (!payload) {
82
+ reject(new Error(`CLI authority broker at ${options.endpoint} returned no response`));
83
+ return;
84
+ }
85
+ try {
86
+ resolve(JSON.parse(payload));
87
+ } catch (error) {
88
+ reject(error);
89
+ }
90
+ });
91
+ });
92
+ socket.on("error", (error) => {
93
+ finish(() => reject(error));
94
+ });
95
+ });
96
+ };
97
+ }
98
+ async function invokeBrokerRequest(options, request) {
99
+ try {
100
+ const response = await options.invoke(request);
101
+ if (response.ok) return response.result;
102
+ if (response.error.code === "BROKER_UNAVAILABLE") {
103
+ throw new CliAuthorityBrokerUnavailableError(options.endpoint, response.error);
104
+ }
105
+ throw new CliAuthorityBrokerProtocolError(response.error);
106
+ } catch (error) {
107
+ if (isCliAuthorityBrokerUnavailableError(error)) throw error;
108
+ if (isCliAuthorityBrokerProtocolError(error)) throw error;
109
+ throw new CliAuthorityBrokerUnavailableError(options.endpoint, error);
110
+ }
111
+ }
112
+ function createCliAuthorityBrokerClient(options) {
113
+ const pageSize = options.iteratorPageSize ?? DEFAULT_ITERATOR_PAGE_SIZE;
114
+ return {
115
+ get location() {
116
+ return options.location ?? options.endpoint;
117
+ },
118
+ get status() {
119
+ return options.status ?? "broker";
120
+ },
121
+ async open() {
122
+ await invokeBrokerRequest(options, { type: "status" });
123
+ },
124
+ async close() {
125
+ },
126
+ async get(key) {
127
+ const result = await invokeBrokerRequest(options, { type: "get", key });
128
+ if (result.type !== "get") {
129
+ throw new Error(`CLI authority broker protocol mismatch for get at ${options.endpoint}`);
130
+ }
131
+ return result.value;
132
+ },
133
+ async put(key, value) {
134
+ await invokeBrokerRequest(options, { type: "put", key, value });
135
+ },
136
+ async del(key) {
137
+ await invokeBrokerRequest(options, { type: "del", key });
138
+ },
139
+ async batchWrite(ops) {
140
+ await invokeBrokerRequest(options, { type: "batchWrite", ops });
141
+ },
142
+ createBatch() {
143
+ const ops = [];
144
+ return {
145
+ put(key, value) {
146
+ ops.push({ type: "put", key, value });
147
+ },
148
+ del(key) {
149
+ ops.push({ type: "del", key });
150
+ },
151
+ async write() {
152
+ await invokeBrokerRequest(options, { type: "batchWrite", ops });
153
+ }
154
+ };
155
+ },
156
+ iterator(iteratorOptions = {}) {
157
+ return async function* iterate() {
158
+ let cursor = void 0;
159
+ while (true) {
160
+ const result = await invokeBrokerRequest(options, {
161
+ type: "iterator",
162
+ options: iteratorOptions,
163
+ cursor,
164
+ limit: pageSize
165
+ });
166
+ if (result.type !== "iterator") {
167
+ throw new Error(
168
+ `CLI authority broker protocol mismatch for iterator at ${options.endpoint}`
169
+ );
170
+ }
171
+ for (const entry of result.page.entries) {
172
+ yield entry;
173
+ }
174
+ if (result.page.done || !result.page.nextCursor) return;
175
+ cursor = result.page.nextCursor;
176
+ }
177
+ }();
178
+ }
179
+ };
180
+ }
181
+
182
+ // packages/database-engine/cliAuthorityStoreDriver.ts
183
+ import path from "node:path";
184
+ function readCliAuthorityDriver(env) {
185
+ const value = env.NOLO_CLI_AUTHORITY_DRIVER?.trim();
186
+ if (value === "broker") {
187
+ return { driver: "broker", invalidDriver: null };
188
+ }
189
+ return {
190
+ driver: "broker",
191
+ invalidDriver: value ? value : null
192
+ };
193
+ }
194
+ function resolveCliAuthorityRunDir(options = {}) {
195
+ return path.join(resolveNoloHome({
196
+ ...options,
197
+ env: options.env ?? {}
198
+ }), "run");
199
+ }
200
+ function hashString(value) {
201
+ let hash = 0;
202
+ for (let index = 0; index < value.length; index += 1) {
203
+ hash = (hash << 5) - hash + value.charCodeAt(index) | 0;
204
+ }
205
+ return Math.abs(hash);
206
+ }
207
+ function resolveCliAuthorityBrokerPort(options = {}) {
208
+ const envPort = options.env?.NOLO_CLI_AUTHORITY_BROKER_PORT?.trim();
209
+ if (envPort) {
210
+ const port = Number(envPort);
211
+ if (Number.isInteger(port) && port > 0 && port < 65536) return port;
212
+ }
213
+ const noloHome = resolveNoloHome({
214
+ ...options,
215
+ env: options.env ?? {}
216
+ });
217
+ return 47e3 + hashString(noloHome) % 2e3;
218
+ }
219
+ function resolveCliAuthorityStoreDriver(options = {}) {
220
+ return readCliAuthorityDriver(options.env ?? {}).driver;
221
+ }
222
+ function resolveCliAuthorityBrokerSocketPath(options) {
223
+ return path.join(resolveCliAuthorityRunDir(options), "authority-store-broker.sock");
224
+ }
225
+ function resolveCliAuthorityBrokerEndpoint(options) {
226
+ if (options.transport === "tcp") {
227
+ return `tcp://127.0.0.1:${resolveCliAuthorityBrokerPort(options)}`;
228
+ }
229
+ return `unix://${resolveCliAuthorityBrokerSocketPath(options)}`;
230
+ }
231
+ function resolveCliAuthorityBrokerMetadataPath(options) {
232
+ return path.join(resolveCliAuthorityRunDir(options), "authority-store-broker.json");
233
+ }
234
+ function resolveCliAuthorityBrokerHealthPath(options) {
235
+ return path.join(resolveCliAuthorityRunDir(options), "authority-store-broker.health.json");
236
+ }
237
+
238
+ export {
239
+ isCliAuthorityBrokerUnavailableError,
240
+ createCliAuthorityBrokerSocketInvoker,
241
+ createCliAuthorityBrokerClient,
242
+ resolveCliAuthorityStoreDriver,
243
+ resolveCliAuthorityBrokerEndpoint,
244
+ resolveCliAuthorityBrokerMetadataPath,
245
+ resolveCliAuthorityBrokerHealthPath
246
+ };
@@ -0,0 +1,8 @@
1
+ // packages/core/optionalPositiveNumber.ts
2
+ function asOptionalPositiveFiniteNumber(value) {
3
+ return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : void 0;
4
+ }
5
+
6
+ export {
7
+ asOptionalPositiveFiniteNumber
8
+ };
@@ -0,0 +1,64 @@
1
+ // packages/create/space/spaceKeys.ts
2
+ var SEPARATOR = "-";
3
+ var SPACE_PREFIX = "space";
4
+ var SPACE_PREFIX_WITH_SEPARATOR = `${SPACE_PREFIX}${SEPARATOR}`;
5
+ var normalizeSpaceId = (spaceId) => {
6
+ if (!spaceId) return spaceId;
7
+ return spaceId.startsWith(SPACE_PREFIX_WITH_SEPARATOR) ? spaceId.slice(SPACE_PREFIX_WITH_SEPARATOR.length) : spaceId;
8
+ };
9
+ var createSpaceKey = {
10
+ // 空间基础信息的key
11
+ space: (spaceId) => {
12
+ return [SPACE_PREFIX, normalizeSpaceId(spaceId)].join(SEPARATOR);
13
+ },
14
+ // 空间成员的key
15
+ member: (userId, spaceId) => {
16
+ return [SPACE_PREFIX, "member", userId, normalizeSpaceId(spaceId)].join(
17
+ SEPARATOR
18
+ );
19
+ },
20
+ // 查询用户所在的所有空间的范围
21
+ memberRange: (userId) => {
22
+ return {
23
+ start: [SPACE_PREFIX, "member", userId, ""].join(SEPARATOR),
24
+ end: [SPACE_PREFIX, "member", userId, "\uFFFF"].join(SEPARATOR)
25
+ };
26
+ },
27
+ /**
28
+ * 预留:未来若出现“按用户、按空间、且必须跨设备同步”的空间级偏好,
29
+ * 统一使用这个 key family。当前产品主链不要依赖它。
30
+ */
31
+ setting: (userId, spaceId) => {
32
+ return [SPACE_PREFIX, "setting", userId, normalizeSpaceId(spaceId)].join(
33
+ SEPARATOR
34
+ );
35
+ },
36
+ /**
37
+ * 预留:未来如确实需要批量读取空间级远端偏好,再使用这个范围。
38
+ */
39
+ settingRange: (userId) => {
40
+ return {
41
+ start: [SPACE_PREFIX, "setting", userId, ""].join(SEPARATOR),
42
+ end: [SPACE_PREFIX, "setting", userId, "\uFFFF"].join(SEPARATOR)
43
+ };
44
+ },
45
+ // 从成员key中提取空间key
46
+ // 成员 key 格式: space-member-{userId}-{spaceId}
47
+ // userId 是单段(无连字符),spaceId 是 ULID(无连字符)
48
+ spaceFromMember: (memberKey) => {
49
+ const parts = memberKey.split(SEPARATOR);
50
+ if (parts.length < 4) return "";
51
+ const spaceId = parts[parts.length - 1];
52
+ return [SPACE_PREFIX, spaceId].join(SEPARATOR);
53
+ },
54
+ // 从成员key中提取空间ID
55
+ spaceIdFromMember: (memberKey) => {
56
+ const parts = memberKey.split(SEPARATOR);
57
+ return parts.length >= 4 ? parts[parts.length - 1] : "";
58
+ }
59
+ };
60
+
61
+ export {
62
+ normalizeSpaceId,
63
+ createSpaceKey
64
+ };