nolo-cli 0.32.0 → 0.33.0-alpha.10

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 (179) hide show
  1. package/README.md +6 -12
  2. package/{_executeModel-LTMSIBS4.js → _executeModel-YXWAXPWQ.js} +77 -67
  3. package/{action-HI3VRQLP.js → action-OQWPNKAH.js} +17 -15
  4. package/{addContentAction-NCURJ6PK.js → addContentAction-YVINZQTF.js} +14 -13
  5. package/{addDialogAgentAction-RCY4ECF4.js → addDialogAgentAction-6IOCIEPI.js} +14 -13
  6. package/{agentDeleteCommand-D3MYZK6E.js → agentDeleteCommand-VGHWJN5T.js} +44 -60
  7. package/{agentEmailCommands-6BXS574I.js → agentEmailCommands-ZLRF35I3.js} +91 -81
  8. package/{agentGrantCommands-E7ZZFRHK.js → agentGrantCommands-2LEZDADN.js} +2 -2
  9. package/{agentListCommands-SF3HEUTT.js → agentListCommands-OHZJ7AFP.js} +75 -79
  10. package/{agentMachineCommands-YARVXRR6.js → agentMachineCommands-62PHPGTK.js} +43 -59
  11. package/{agentPullCommand-ARSIDNVC.js → agentPullCommand-TSWAJPS2.js} +5 -5
  12. package/agentRecordCommands-CW2JWERD.js +113 -0
  13. package/agentRunCommand-O4HV7YWA.js +131 -0
  14. package/{agentRuntimeLocal-ATGJY6WC.js → agentRuntimeLocal-4PSBNUOE.js} +37 -51
  15. package/{agentSlice-4XWW344Y.js → agentSlice-OUTQ5O72.js} +16 -14
  16. package/{appDeleteCommands-63JO7RXS.js → appDeleteCommands-VTDBVHYR.js} +40 -56
  17. package/{appDeployCommands-Y7EWYUGM.js → appDeployCommands-WOUP7MDA.js} +40 -56
  18. package/{appDeployStatusCommands-ZBEY3DWB.js → appDeployStatusCommands-N2NWZKEN.js} +40 -56
  19. package/{appGetCommands-QSSOSEYL.js → appGetCommands-GYKLWWCA.js} +40 -56
  20. package/{appListCommands-PH3XWNDX.js → appListCommands-RUWBSEJK.js} +40 -56
  21. package/{authCommand-BBDHMSO6.js → authCommand-YVXVH25I.js} +21 -20
  22. package/{authCommands-4UDEKRE6.js → authCommands-WTW6MEYS.js} +10 -10
  23. package/chatQueueReduxAdapter-2QJAD4KQ.js +181 -0
  24. package/{chunk-EEF23OOK.js → chunk-266VUBLK.js} +7 -7
  25. package/{chunk-TEYN42N3.js → chunk-2IVEXF7P.js} +11 -4
  26. package/{chunk-2HXKAPH7.js → chunk-2QLAVHVK.js} +6 -6
  27. package/{chunk-WTGCTVJG.js → chunk-2QTEYCR7.js} +3 -6
  28. package/{chunk-DOISARTV.js → chunk-2UECQ7RE.js} +1 -1
  29. package/{chunk-E3APEOIM.js → chunk-3GZXL6FM.js} +4 -19
  30. package/{chunk-KGEVMUMI.js → chunk-3RUW3ONU.js} +11 -11
  31. package/{chunk-RXVX5LFR.js → chunk-3UG2IIZ3.js} +1 -1
  32. package/{chunk-O5OMJPPF.js → chunk-3WXRAHCG.js} +6 -5
  33. package/{chunk-V54H24CQ.js → chunk-4F5M2MW5.js} +3 -3
  34. package/{chunk-2ZRP5RUG.js → chunk-4OV7DXFJ.js} +12 -11
  35. package/{chunk-W367V5CH.js → chunk-54BAYVCY.js} +404 -117
  36. package/{chunk-GAF5X6B7.js → chunk-5QW3O3ET.js} +284 -310
  37. package/{chunk-DLWCWUNW.js → chunk-64OVNZXE.js} +1197 -757
  38. package/{chunk-ODS2MVMU.js → chunk-66CWPJK2.js} +19 -303
  39. package/{chunk-PTHDLIRB.js → chunk-6KOS7ZBZ.js} +1 -1
  40. package/{chunk-MXFQHRSS.js → chunk-6XIE5ZGI.js} +1 -1
  41. package/{chunk-ATK5WJOA.js → chunk-6YXDOOSH.js} +4 -4
  42. package/{chunk-SWYMCHM7.js → chunk-75U775RZ.js} +69 -1
  43. package/{chunk-UDA3ZYLW.js → chunk-7YYHKBJP.js} +31 -72
  44. package/chunk-ADLYMQB6.js +642 -0
  45. package/{chunk-ZWJOGMKH.js → chunk-AETZ7AD6.js} +1 -1
  46. package/{chunk-43EPBPZ2.js → chunk-ASDXPOJH.js} +2 -2
  47. package/{chunk-44HACRCK.js → chunk-BANYWEYY.js} +4 -4
  48. package/chunk-BFPSVRCQ.js +1799 -0
  49. package/{chunk-TOW4E763.js → chunk-BJIRLHJR.js} +2 -0
  50. package/{chunk-ZJ2WITOO.js → chunk-BQXOGBFN.js} +2 -2
  51. package/{chunk-4PNU7W7K.js → chunk-C7H5GMXT.js} +107 -125
  52. package/chunk-CPYYM4RJ.js +98 -0
  53. package/{chunk-3GZT3L6F.js → chunk-DDVIBKIB.js} +326 -481
  54. package/{chunk-2K4NDPT5.js → chunk-DFUPZE6V.js} +20 -12
  55. package/{chunk-BGTUGS3T.js → chunk-DKMOY3QI.js} +4 -30
  56. package/chunk-EGRJC4ZN.js +91 -0
  57. package/{chunk-K6QEHQZ3.js → chunk-EKLRRZIN.js} +1 -1
  58. package/{chunk-6HYVJV7B.js → chunk-ESHYE7WU.js} +2 -1
  59. package/{chunk-XFG3BAKN.js → chunk-FMEVI5TG.js} +65 -0
  60. package/{chunk-U4TRT5V4.js → chunk-GEPHJJW4.js} +1 -1
  61. package/chunk-GJXRIOLS.js +241 -0
  62. package/{chunk-VP4WJWKW.js → chunk-GM6PU7B6.js} +431 -345
  63. package/chunk-HS7MLR74.js +38 -0
  64. package/{chunk-3AUWC6EM.js → chunk-HUCT7HID.js} +5 -84
  65. package/chunk-IDAU4UFS.js +437 -0
  66. package/{chunk-Q76I4SXI.js → chunk-IHEC7VBF.js} +1 -1
  67. package/{chunk-OWHNFZNW.js → chunk-IKWTTKWG.js} +4 -4
  68. package/{chunk-3LY4F7SV.js → chunk-INZZJSQF.js} +348 -331
  69. package/{chunk-ZJH3LKEW.js → chunk-IR6W62Q6.js} +102 -15
  70. package/{chunk-RH53LMEJ.js → chunk-J44TVX2O.js} +2 -4
  71. package/{chunk-CF2WZF4N.js → chunk-J6WH4PYZ.js} +0 -8
  72. package/chunk-KHCLMKZZ.js +3062 -0
  73. package/{chunk-WHLVPK32.js → chunk-KMSZPTM6.js} +27 -3
  74. package/{chunk-L3GCUVOH.js → chunk-KSRFVP36.js} +1 -1
  75. package/{chunk-XDHHF73Q.js → chunk-LUIHOUZC.js} +95 -95
  76. package/{chunk-UOJRKY5J.js → chunk-M2YMQOLC.js} +44 -53
  77. package/chunk-M3JEW6N6.js +193 -0
  78. package/{chunk-MITD7CON.js → chunk-MDIAECHA.js} +1461 -301
  79. package/{chunk-IXZX5CJK.js → chunk-MQRZ5QUH.js} +1 -1
  80. package/{chunk-3ASDTTEI.js → chunk-MRWGHF56.js} +2 -0
  81. package/{chunk-Q3CSL43H.js → chunk-N4XRDM26.js} +1 -1
  82. package/{chunk-D34RI6NI.js → chunk-NNWHHCVP.js} +75 -1
  83. package/{chunk-CAENRKNJ.js → chunk-OR2HNLVO.js} +126 -88
  84. package/chunk-OW765XBU.js +10 -0
  85. package/{chunk-VMWR7VNI.js → chunk-PRMMCFIN.js} +13 -9
  86. package/{chunk-JZPBVBIY.js → chunk-QTZD6HBK.js} +18 -8
  87. package/chunk-RCFIB45Q.js +28 -0
  88. package/{chunk-7S54ZGF6.js → chunk-RJKIB55Y.js} +256 -12
  89. package/chunk-RPRRIFXV.js +231 -0
  90. package/chunk-RQFO3CAF.js +300 -0
  91. package/chunk-RY57GLGW.js +188 -0
  92. package/{chunk-YHGHADBQ.js → chunk-SCUETSRP.js} +4 -4
  93. package/{chunk-TA6EA2A3.js → chunk-TFK3HUNQ.js} +182 -20
  94. package/{chunk-LAXMH7JY.js → chunk-UM4H3URE.js} +18 -15
  95. package/{chunk-6YABCOFU.js → chunk-UNHKVD2N.js} +1 -1
  96. package/{chunk-G5GVZAXF.js → chunk-UNOTBWZZ.js} +15 -19
  97. package/{chunk-GE6IWA5N.js → chunk-UNZDCI3O.js} +126 -1
  98. package/chunk-URMS4XY2.js +10 -0
  99. package/{chunk-SFWZUTCI.js → chunk-VBUQYOX7.js} +2 -2
  100. package/{chunk-FXFGNOT2.js → chunk-VFVCYIRQ.js} +1 -1
  101. package/chunk-VIDPVFP3.js +20 -0
  102. package/{chunk-5RDLGLAP.js → chunk-WJSW43QZ.js} +4 -7
  103. package/{chunk-CF7S2RYZ.js → chunk-WLH5BAKX.js} +6 -6
  104. package/{chunk-VVEH6XUE.js → chunk-X2DAEZ3X.js} +1 -1
  105. package/{chunk-2IJAKBK2.js → chunk-X664KVEV.js} +426 -246
  106. package/{chunk-3FCNXC2J.js → chunk-XRO5VGQ6.js} +3735 -1394
  107. package/chunk-Y5GCAMGP.js +9 -0
  108. package/{chunk-O3JR45Q2.js → chunk-YBMI5JAH.js} +44 -44
  109. package/{chunk-V42OE5HT.js → chunk-YDTYDA5W.js} +3 -3
  110. package/chunk-YYLHWIW6.js +48 -0
  111. package/{chunk-AOS5IN2I.js → chunk-ZHYK3N56.js} +1 -1
  112. package/{chunk-PJ2DDQQM.js → chunk-ZURFOV5J.js} +2 -2
  113. package/{chunk-3UGKATZQ.js → chunk-ZWS6DUHX.js} +26 -435
  114. package/chunk-ZZ2MH7LE.js +84 -0
  115. package/{cliExecutor-BBUVQU4L.js → cliExecutor-DW3PHGEL.js} +2 -2
  116. package/{clipboardy-BVE3LVEH.js → clipboardy-MMBYVRLF.js} +166 -372
  117. package/{codingSkills-V35TRR4Y.js → codingSkills-DY5MINPG.js} +5 -4
  118. package/{createAgentAutomationAction-WLRNE7C4.js → createAgentAutomationAction-H6ZRPXBR.js} +41 -31
  119. package/createDialogAction-UJ6LFJYM.js +61 -0
  120. package/{createPageAction-7YROVZ3W.js → createPageAction-KVPT3IRK.js} +57 -47
  121. package/{db-6DPSJ6WT.js → db-3H3JECGY.js} +45 -5
  122. package/{dbSlice-BBL3PEVW.js → dbSlice-UI2VCBLG.js} +13 -12
  123. package/{deleteFile-RJTEPOT4.js → deleteFile-XQXPBFFB.js} +7 -6
  124. package/dialogCommands-6ASXJP3H.js +82 -0
  125. package/{dialogSlice-N4HPG6HM.js → dialogSlice-B7KCGHMY.js} +37 -29
  126. package/{docCreateCommands-GRA5BHSA.js → docCreateCommands-S4E4MKVC.js} +42 -56
  127. package/{docDeleteCommands-ONIJM5MD.js → docDeleteCommands-M7XLKWRM.js} +44 -58
  128. package/{docReadCommands-H55VQ2US.js → docReadCommands-LSCMW2FR.js} +42 -56
  129. package/{docStore-B5AHDNW5.js → docStore-ZYWZWIRB.js} +40 -30
  130. package/{docUpdateCommands-ZQIQVGC2.js → docUpdateCommands-OMRBAFOB.js} +45 -59
  131. package/{fetchMessages-VPPQDDZ4.js → fetchMessages-7QRCCRYK.js} +3 -3
  132. package/{getPricing-QO5TYNCK.js → getPricing-L2ENXWHV.js} +7 -6
  133. package/{handleSendMessageAction-IN5XX5U7.js → handleSendMessageAction-Y2XKODRT.js} +39 -31
  134. package/index.js +74 -74
  135. package/{lib-FYYBQIXS.js → lib-2ZTNRXR4.js} +432 -183
  136. package/{localDialogRead-3DBXVYXS.js → localDialogRead-SLMPV5SK.js} +2 -2
  137. package/{localRuntimeAuthority-NDUA2D7Y.js → localRuntimeAuthority-S77B5QVB.js} +10 -4
  138. package/{localRuntimeDb-GKYRBWLQ.js → localRuntimeDb-N3H3HQ7G.js} +1 -1
  139. package/{machineCommands-H3UMKE76.js → machineCommands-62RUZVSW.js} +95 -85
  140. package/{machineInfo-M6KB6HZN.js → machineInfo-66ZFUMLE.js} +1 -1
  141. package/machineWsRunDispatch-L3HD3FSF.js +129 -0
  142. package/{models-WDUTTYFS.js → models-OX2S5C6Q.js} +2 -2
  143. package/{offlineMarxistsAgentCommand-E6LUG63A.js → offlineMarxistsAgentCommand-GEH6SNNA.js} +1 -1
  144. package/package.json +1 -4
  145. package/{read-64OQDO3I.js → read-2VHEHCAN.js} +8 -7
  146. package/{readDocTool-MXM3T6PE.js → readDocTool-CSWD6NPC.js} +1 -2
  147. package/{readlineWorkspace-XVJZDCSC.js → readlineWorkspace-3MOJWFM7.js} +3358 -3409
  148. package/{removeDialogAgentAction-NEKVAMSH.js → removeDialogAgentAction-2T7BPM3T.js} +19 -17
  149. package/{runAgentClientLoop-H7U53QB6.js → runAgentClientLoop-Y5UW544I.js} +73 -64
  150. package/{runtimeDoctorCommands-WI2YZUSJ.js → runtimeDoctorCommands-KHGQKT3B.js} +6 -6
  151. package/{setDialogExtraReferencesAction-WTOHQDIV.js → setDialogExtraReferencesAction-GPT37HTW.js} +15 -14
  152. package/{setPrimaryDialogAgentAction-LDJOYC4F.js → setPrimaryDialogAgentAction-3746P7IW.js} +19 -17
  153. package/{settingSlice-4M37TN7V.js → settingSlice-FIFOQ6OR.js} +16 -14
  154. package/{skillDiscovery-5U6RYAHN.js → skillDiscovery-KLLKXPUO.js} +4 -4
  155. package/{slateUtils-2M7MUTWX.js → slateUtils-VO2FU36K.js} +1 -1
  156. package/{spaceCommands-7VVKJBDV.js → spaceCommands-NKSBD5G3.js} +45 -241
  157. package/{spaceSlice-T6YK6D34.js → spaceSlice-L44CI2QR.js} +39 -61
  158. package/{streamAgentChatTurn-RQ63QFQ7.js → streamAgentChatTurn-7DU4Z2VJ.js} +1262 -150
  159. package/{switchDialogAgentAction-XVWGKR2Z.js → switchDialogAgentAction-MQTUTQHL.js} +14 -13
  160. package/syncMapping-RK2MANUX.js +43 -0
  161. package/{tableCommands-RJZ3V4TF.js → tableCommands-64FZBAI3.js} +9 -8
  162. package/{toolApiClient-ARGFDJAG.js → toolApiClient-B2MFXMEG.js} +3 -3
  163. package/tools-2JI52WJP.js +99 -0
  164. package/{tuiSummaryLlmCaller-SRZ4QQUP.js → tuiSummaryLlmCaller-EAWQ3IZX.js} +25 -21
  165. package/{updateCommands-AK2RDOFR.js → updateCommands-MNDUIKN7.js} +2 -2
  166. package/{updateDialogTitleAction-BBDSWHNG.js → updateDialogTitleAction-HW33OIJI.js} +49 -38
  167. package/agentRecordCommands-JFZRQJQ4.js +0 -103
  168. package/agentRunCommand-NOX5FLKO.js +0 -121
  169. package/chunk-AYMOSAHE.js +0 -3158
  170. package/chunk-D2BPX6DQ.js +0 -1707
  171. package/chunk-DCDL3GC4.js +0 -171
  172. package/chunk-F3MP7CP6.js +0 -73
  173. package/chunk-WZSRQNQG.js +0 -2587
  174. package/createDialogAction-Y6YV64QB.js +0 -52
  175. package/dialogCommands-XLO5CAHZ.js +0 -95
  176. package/machineWsRunDispatch-HONRUK3R.js +0 -119
  177. package/tools-KYZX3BGO.js +0 -90
  178. package/{chunk-Z5MXSEOJ.js → chunk-RQSOAMPJ.js} +2 -2
  179. package/{chunk-JDSUTNYY.js → chunk-SAQQLJZ5.js} +3 -3
@@ -2,7 +2,7 @@ import {
2
2
  CORE_DRAIN_REASON,
3
3
  isGatewayHttpStatus,
4
4
  parseRetryAfterHeaderMs
5
- } from "./chunk-Z5MXSEOJ.js";
5
+ } from "./chunk-RQSOAMPJ.js";
6
6
  import {
7
7
  asTrimmedLowercaseString
8
8
  } from "./chunk-QSJ3HFEF.js";
@@ -1754,6 +1754,8 @@ export {
1754
1754
  deleteDialogRuntime,
1755
1755
  abortActiveControllers,
1756
1756
  getDialogRuntimeTokens,
1757
+ getPendingUserInputQueue,
1758
+ getLoopStopReason,
1757
1759
  selectDialogRuntimeByKey,
1758
1760
  selectPendingFiles,
1759
1761
  selectActiveControllers,
@@ -14,7 +14,7 @@ function buildCliLocalRuntimeDbEnv(env = process.env) {
14
14
  };
15
15
  }
16
16
  async function getDefaultCliLocalRuntimeDb(options = {}) {
17
- const { getDefaultCliLocalRuntimeDb: getAuthorityBackedDb } = await import("./localRuntimeAuthority-NDUA2D7Y.js");
17
+ const { getDefaultCliLocalRuntimeDb: getAuthorityBackedDb } = await import("./localRuntimeAuthority-S77B5QVB.js");
18
18
  return getAuthorityBackedDb(options);
19
19
  }
20
20
 
@@ -1,3 +1,6 @@
1
+ import {
2
+ asTrimmedLowercaseString
3
+ } from "./chunk-QSJ3HFEF.js";
1
4
  import {
2
5
  isRecord
3
6
  } from "./chunk-KUG52IAP.js";
@@ -5,6 +8,60 @@ import {
5
8
  asOptionalTrimmedString
6
9
  } from "./chunk-G3SUCT4W.js";
7
10
 
11
+ // packages/ai/llm/usageRequestOptions.ts
12
+ var STREAM_USAGE_PROVIDERS = /* @__PURE__ */ new Set([
13
+ "google",
14
+ "openrouter",
15
+ "xai",
16
+ "openai",
17
+ "fireworks",
18
+ "mistral",
19
+ "cloudflare",
20
+ "gmi",
21
+ // OpenAI-compatible hosted providers expose the terminal usage chunk when
22
+ // requested, including DeepInfra and Vultr. Keep this capability decision
23
+ // in the shared seam so proxy and local runtimes cannot drift.
24
+ "deepinfra",
25
+ "vultr",
26
+ // Explicit local-runtime providers with OpenAI-compatible streaming: both
27
+ // DeepSeek official and Ollama honor stream_options.include_usage on their
28
+ // chat.completions endpoints. Without them, locally-configured agents lose
29
+ // token statistics / local billing (the whitelist replaced the previous
30
+ // always-on include_usage).
31
+ "deepseek",
32
+ "ollama",
33
+ // Platform Kimi K3 remap (provider=nolo + kimi-k3) routes to crof.ai, an
34
+ // OpenAI-compatible /v1/chat/completions endpoint; the hosted branch passes
35
+ // "crof" as the usage provider so K3 streams request the terminal usage
36
+ // chunk (same capability decision as deepinfra/vultr).
37
+ "crof"
38
+ ]);
39
+ var EXTRA_USAGE_FIELD_PROVIDERS = /* @__PURE__ */ new Set(["openrouter"]);
40
+ var normalizeProviderName = (providerName) => asTrimmedLowercaseString(providerName);
41
+ var getUsageRequestOptions = (providerName, options) => {
42
+ const normalizedProvider = normalizeProviderName(providerName);
43
+ const api = options?.api ?? "chat-completions";
44
+ if (api === "responses") {
45
+ return EXTRA_USAGE_FIELD_PROVIDERS.has(normalizedProvider) ? {
46
+ usage: {
47
+ include: true
48
+ }
49
+ } : {};
50
+ }
51
+ return {
52
+ ...STREAM_USAGE_PROVIDERS.has(normalizedProvider) ? {
53
+ stream_options: {
54
+ include_usage: true
55
+ }
56
+ } : {},
57
+ ...EXTRA_USAGE_FIELD_PROVIDERS.has(normalizedProvider) ? {
58
+ usage: {
59
+ include: true
60
+ }
61
+ } : {}
62
+ };
63
+ };
64
+
8
65
  // packages/agent-runtime/openAiCompatibleMessages.ts
9
66
  function preserveAgentStateFields(source, target, options) {
10
67
  const mutableTarget = target;
@@ -35,7 +92,7 @@ function shouldStripReasoningContentForOutbound(provider, model) {
35
92
  const m = model?.trim().toLowerCase();
36
93
  if (!p || !m) return false;
37
94
  if (p === "deepseek" || p === "nolo") {
38
- return m === "deepseek-v4-flash" || m === "deepseek-v4-pro";
95
+ return m === "deepseek-v4-flash" || m === "deepseek-v4-flash-vision-exp" || m === "deepseek-v4-pro";
39
96
  }
40
97
  return false;
41
98
  }
@@ -183,6 +240,21 @@ var extractTextFromResponseOutput = (response) => {
183
240
  }
184
241
  return parts.join("");
185
242
  };
243
+ var extractReasoningFromResponseOutput = (response) => {
244
+ const parts = [];
245
+ for (const item of response?.output ?? []) {
246
+ if (item?.type !== "reasoning") continue;
247
+ if (typeof item.content === "string") {
248
+ parts.push(item.content);
249
+ continue;
250
+ }
251
+ for (const content of item.content ?? []) {
252
+ if (typeof content === "string") parts.push(content);
253
+ else if (typeof content?.text === "string") parts.push(content.text);
254
+ }
255
+ }
256
+ return parts.join("");
257
+ };
186
258
  var toDataUrl = (base64Data, mimeType) => {
187
259
  const normalizedMimeType = asOptionalTrimmedString(mimeType) ?? "image/png";
188
260
  return `data:${normalizedMimeType};base64,${base64Data}`;
@@ -252,6 +324,7 @@ function hasImageParts(messages) {
252
324
  }
253
325
 
254
326
  export {
327
+ getUsageRequestOptions,
255
328
  isImageUrlPart,
256
329
  hasImageParts,
257
330
  preserveAgentStateFields,
@@ -260,6 +333,7 @@ export {
260
333
  toResponsesTools,
261
334
  convertMessagesToResponsesInput,
262
335
  extractTextFromResponseOutput,
336
+ extractReasoningFromResponseOutput,
263
337
  extractImagePartsFromResponseOutput,
264
338
  extractToolCallsFromResponseOutput
265
339
  };
@@ -401,8 +401,12 @@ var DEEPINFRA_CLAUDE_SONNET_PRICE = {
401
401
  output: 15 * 9
402
402
  };
403
403
  var DEEPINFRA_CLAUDE_OPUS_PRICE = {
404
- input: 5 * 9,
405
- output: 25 * 9
404
+ input: 5 * 8,
405
+ output: 25 * 8
406
+ };
407
+ var DEEPINFRA_CLAUDE_FABLE_PRICE = {
408
+ input: 10 * 8,
409
+ output: 50 * 8
406
410
  };
407
411
  var deepinfraModels = [
408
412
  {
@@ -424,13 +428,22 @@ var deepinfraModels = [
424
428
  supportsTool: false
425
429
  },
426
430
  {
427
- name: "anthropic/claude-opus-4-8",
428
- displayName: "Anthropic: Claude Opus 4.8",
431
+ name: "anthropic/claude-opus-5",
432
+ displayName: "Anthropic: Claude Opus 5",
429
433
  hasVision: true,
430
434
  price: { ...DEEPINFRA_CLAUDE_OPUS_PRICE },
431
435
  contextWindow: 976e3,
432
436
  maxOutputTokens: 4092,
433
437
  supportsTool: false
438
+ },
439
+ {
440
+ name: "anthropic/claude-fable-5",
441
+ displayName: "Anthropic: Claude Fable 5",
442
+ hasVision: true,
443
+ price: { ...DEEPINFRA_CLAUDE_FABLE_PRICE },
444
+ contextWindow: 976e3,
445
+ maxOutputTokens: 4092,
446
+ supportsTool: false
434
447
  }
435
448
  ];
436
449
 
@@ -464,24 +477,6 @@ var fireworksModels = [
464
477
  }
465
478
  ];
466
479
 
467
- // packages/ai/llm/cloudflare.ts
468
- var getCloudflareWorkersAiChatCompletionsUrl = (accountId = process.env.CLOUDFLARE_ACCOUNT_ID?.trim()) => {
469
- if (!accountId) {
470
- throw new Error(
471
- "CLOUDFLARE_ACCOUNT_ID is required for Cloudflare Workers AI chat completions"
472
- );
473
- }
474
- return `https://api.cloudflare.com/client/v4/accounts/${accountId}/ai/v1/chat/completions`;
475
- };
476
- var cloudflareModels = [];
477
-
478
- // packages/ai/llm/gmi.ts
479
- var GMI_CHAT_COMPLETIONS_URL = "https://api.gmi-serving.com/v1/chat/completions";
480
- var gmiModels = [];
481
-
482
- // packages/ai/llm/zai.ts
483
- var zaiModels = [];
484
-
485
480
  // packages/ai/llm/kimi.ts
486
481
  var PLATFORM_HOSTED_KIMI_K3_MODEL = "kimi-k3";
487
482
  var PLATFORM_HOSTED_KIMI_K26_MODEL = "kimi-k2.6";
@@ -506,52 +501,77 @@ var resolveFireworksKimiModel = (model) => {
506
501
 
507
502
  // packages/ai/llm/platformHosted.ts
508
503
  var PLATFORM_HOSTED_CLAUDE_SONNET_5_MODEL = "anthropic/claude-sonnet-5";
509
- var PLATFORM_HOSTED_CLAUDE_OPUS_4_8_MODEL = "anthropic/claude-opus-4-8";
504
+ var PLATFORM_HOSTED_CLAUDE_OPUS_5_MODEL = "anthropic/claude-opus-5";
505
+ var PLATFORM_HOSTED_CLAUDE_FABLE_5_MODEL = "anthropic/claude-fable-5";
510
506
  var PLATFORM_HOSTED_CLAUDE_MODELS = [
511
507
  PLATFORM_HOSTED_CLAUDE_SONNET_5_MODEL,
512
- PLATFORM_HOSTED_CLAUDE_OPUS_4_8_MODEL
508
+ PLATFORM_HOSTED_CLAUDE_OPUS_5_MODEL,
509
+ PLATFORM_HOSTED_CLAUDE_FABLE_5_MODEL
513
510
  ];
514
511
  var isPlatformHostedClaudeModel = (model) => PLATFORM_HOSTED_CLAUDE_MODELS.some(
515
512
  (m) => asTrimmedLowercaseString(model) === m
516
513
  );
514
+ var PLATFORM_CREDITS_PER_USD = 8;
515
+ var toPlatformCredits = (usdPerMillion) => Number((usdPerMillion * PLATFORM_CREDITS_PER_USD).toFixed(6));
517
516
  var PLATFORM_HOSTED_GROK_4_6_MODEL = "grok-4.6";
518
517
  var isPlatformHostedGrokModel = (model) => asTrimmedLowercaseString(model) === PLATFORM_HOSTED_GROK_4_6_MODEL;
519
- var PLATFORM_HOSTED_QWEN_37_FLASH_MODEL = "qwen3.7-flash";
520
- var PLATFORM_CREDITS_PER_USD = 7;
521
- var EXTERNAL_API_DISCOUNT = 0.8;
522
- var toPlatformCredits = (usdPerMillion) => Number(
523
- (usdPerMillion * EXTERNAL_API_DISCOUNT * PLATFORM_CREDITS_PER_USD).toFixed(
524
- 6
525
- )
526
- );
518
+ var PLATFORM_HOSTED_GROK_PRICE = {
519
+ input: toPlatformCredits(2),
520
+ // 16 credits
521
+ output: toPlatformCredits(6)
522
+ // 48 credits
523
+ };
524
+ var isPlatformHostedKimiK26Model = (model) => asTrimmedLowercaseString(model) === PLATFORM_HOSTED_KIMI_K26_MODEL;
527
525
  var PLATFORM_HOSTED_KIMI_PRICE = {
528
- input: toPlatformCredits(0.6),
529
- output: toPlatformCredits(2.4)
526
+ input: toPlatformCredits(0.4),
527
+ // 3.2 credits
528
+ // 缺了这一项时 calculatePrice 的 nolo 分支会退回 calculateSimpleCost,
529
+ // 把 cache_read_input_tokens 按 input 全价收 —— agentic 循环每轮重放整个
530
+ // 上下文,实测 92% 的 input 是缓存读取,等于按原价重复收 10 倍以上。
531
+ inputCacheHit: toPlatformCredits(0.04),
532
+ // 0.32 credits
533
+ output: toPlatformCredits(3)
534
+ // 24.0 credits (3 * 8 = 24)
530
535
  };
531
536
  var PLATFORM_HOSTED_KIMI_K3_PRICE = {
532
537
  input: 16,
533
- // crof $2 × 8,特殊价不走通用 0.8×7 换算
538
+ // crof $2 × 8
534
539
  inputCacheHit: 2,
535
540
  // crof $0.25 × 8
536
541
  output: 64
537
542
  // crof $8 × 8
538
543
  };
544
+ var PLATFORM_HOSTED_GLM_53_MODEL = "glm-5.3";
545
+ var PLATFORM_HOSTED_GLM_52_MODEL = "glm-5.2";
546
+ var isPlatformHostedGlmModel = (model) => {
547
+ const m = asTrimmedLowercaseString(model);
548
+ return m === PLATFORM_HOSTED_GLM_53_MODEL || m === PLATFORM_HOSTED_GLM_52_MODEL;
549
+ };
539
550
  var PLATFORM_HOSTED_GLM_PRICE = {
540
551
  input: toPlatformCredits(1.4),
552
+ // 11.2 credits
541
553
  inputCacheHit: toPlatformCredits(0.26),
554
+ // 2.08 credits
542
555
  output: toPlatformCredits(4.4)
556
+ // 35.2 credits (4.4 * 8 = 35.2)
543
557
  };
544
- var PLATFORM_HOSTED_GLM_52_MODEL = "glm-5.2";
545
558
  var PLATFORM_HOSTED_GEMINI_37_FLASH_MODEL = "gemini-3.7-flash";
546
559
  var PLATFORM_HOSTED_GEMINI_37_FLASH_PRICE = {
547
560
  input: toPlatformCredits(0.75),
561
+ // 6.0 credits
548
562
  output: toPlatformCredits(3.75),
563
+ // 30.0 credits
549
564
  cachingWrite: toPlatformCredits(0.075),
565
+ // 0.6 credits
550
566
  cachingRead: toPlatformCredits(0.075)
567
+ // 0.6 credits
551
568
  };
569
+ var isPlatformHostedGeminiModel = (model) => asTrimmedLowercaseString(model) === PLATFORM_HOSTED_GEMINI_37_FLASH_MODEL;
570
+ var PLATFORM_HOSTED_QWEN_37_FLASH_MODEL = "qwen3.7-flash";
571
+ var isPlatformHostedQwen37FlashModel = (model) => asTrimmedLowercaseString(model) === PLATFORM_HOSTED_QWEN_37_FLASH_MODEL;
552
572
  var PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL = "deepseek-v4-flash";
573
+ var PLATFORM_HOSTED_DEEPSEEK_FLASH_VISION_EXP_MODEL = "deepseek-v4-flash-vision-exp";
553
574
  var PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL = "deepseek-v4-pro";
554
- var DEEPSEEK_V4_PRICING_EFFECTIVE_AT_MS = Date.UTC(2026, 7, 16, 16);
555
575
  var PLATFORM_HOSTED_DEEPSEEK_FLASH_PEAK_PRICE = {
556
576
  input: 3,
557
577
  inputCacheHit: 0.1,
@@ -562,16 +582,6 @@ var PLATFORM_HOSTED_DEEPSEEK_PRO_PEAK_PRICE = {
562
582
  inputCacheHit: 0.3,
563
583
  output: 27
564
584
  };
565
- var PLATFORM_HOSTED_DEEPSEEK_FLASH_PRICE = {
566
- input: 1,
567
- inputCacheHit: 0.02,
568
- output: 2
569
- };
570
- var PLATFORM_HOSTED_DEEPSEEK_PRO_PRICE = {
571
- input: 3,
572
- inputCacheHit: 0.025,
573
- output: 6
574
- };
575
585
  var PLATFORM_HOSTED_DEEPSEEK_FLASH_OFF_PEAK_PRICE = {
576
586
  input: 1.5,
577
587
  inputCacheHit: 0.05,
@@ -582,25 +592,19 @@ var PLATFORM_HOSTED_DEEPSEEK_PRO_OFF_PEAK_PRICE = {
582
592
  inputCacheHit: 0.15,
583
593
  output: 13.5
584
594
  };
595
+ var isDeepSeekOffPeakBeijingTime = (nowMs = Date.now()) => {
596
+ const beijingHour = (new Date(nowMs).getUTCHours() + 8 + 24) % 24;
597
+ return beijingHour >= 0 && beijingHour < 8;
598
+ };
585
599
  var getPlatformHostedDeepSeekV4Price = (model, nowMs = Date.now()) => {
586
- if (nowMs < DEEPSEEK_V4_PRICING_EFFECTIVE_AT_MS) {
587
- return model === PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL ? PLATFORM_HOSTED_DEEPSEEK_PRO_PRICE : PLATFORM_HOSTED_DEEPSEEK_FLASH_PRICE;
588
- }
589
- const hour = Number(
590
- new Intl.DateTimeFormat("en-US", {
591
- timeZone: "Asia/Shanghai",
592
- hour: "numeric",
593
- hourCycle: "h23"
594
- }).format(new Date(nowMs))
595
- );
596
- const peak = hour >= 9 && hour < 12 || hour >= 14 && hour < 18;
597
- if (!peak) {
598
- return model === PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL ? PLATFORM_HOSTED_DEEPSEEK_PRO_OFF_PEAK_PRICE : PLATFORM_HOSTED_DEEPSEEK_FLASH_OFF_PEAK_PRICE;
600
+ const isOffPeak = isDeepSeekOffPeakBeijingTime(nowMs);
601
+ if (model === PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL) {
602
+ return isOffPeak ? PLATFORM_HOSTED_DEEPSEEK_PRO_OFF_PEAK_PRICE : PLATFORM_HOSTED_DEEPSEEK_PRO_PEAK_PRICE;
599
603
  }
600
- return model === PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL ? PLATFORM_HOSTED_DEEPSEEK_PRO_PEAK_PRICE : PLATFORM_HOSTED_DEEPSEEK_FLASH_PEAK_PRICE;
604
+ return isOffPeak ? PLATFORM_HOSTED_DEEPSEEK_FLASH_OFF_PEAK_PRICE : PLATFORM_HOSTED_DEEPSEEK_FLASH_PEAK_PRICE;
601
605
  };
602
- var isPlatformHostedDeepSeekV4Model = (model) => model === PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL || model === PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL;
603
- var PLATFORM_HOSTED_CHAT_COMPLETIONS_URL = "https://ollama.com/v1/chat/completions";
606
+ var isPlatformHostedDeepSeekV4Model = (model) => model === PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL || model === PLATFORM_HOSTED_DEEPSEEK_FLASH_VISION_EXP_MODEL || model === PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL;
607
+ var isPlatformHostedDeepseekModel = (model) => model === PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL || model === PLATFORM_HOSTED_DEEPSEEK_FLASH_VISION_EXP_MODEL || model === PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL;
604
608
  var platformHostedModels = [
605
609
  {
606
610
  name: PLATFORM_HOSTED_KIMI_K3_MODEL,
@@ -622,12 +626,12 @@ var platformHostedModels = [
622
626
  supportsTool: true
623
627
  },
624
628
  {
625
- name: PLATFORM_HOSTED_GLM_52_MODEL,
626
- displayName: "GLM 5.2",
629
+ name: PLATFORM_HOSTED_GLM_53_MODEL,
630
+ displayName: "GLM 5.3",
627
631
  hasVision: false,
628
632
  price: { ...PLATFORM_HOSTED_GLM_PRICE },
629
633
  maxOutputTokens: 131072,
630
- contextWindow: 1e6,
634
+ contextWindow: 105e4,
631
635
  supportsTool: true,
632
636
  supportsReasoningEffort: true
633
637
  },
@@ -645,7 +649,21 @@ var platformHostedModels = [
645
649
  name: PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL,
646
650
  displayName: "DeepSeek V4 Flash",
647
651
  hasVision: false,
648
- price: { ...PLATFORM_HOSTED_DEEPSEEK_FLASH_PRICE },
652
+ price: { ...PLATFORM_HOSTED_DEEPSEEK_FLASH_PEAK_PRICE },
653
+ peakPrice: { ...PLATFORM_HOSTED_DEEPSEEK_FLASH_PEAK_PRICE },
654
+ offPeakPrice: { ...PLATFORM_HOSTED_DEEPSEEK_FLASH_OFF_PEAK_PRICE },
655
+ maxOutputTokens: 384e3,
656
+ contextWindow: 1e6,
657
+ supportsTool: true,
658
+ supportsReasoningEffort: true
659
+ },
660
+ {
661
+ name: PLATFORM_HOSTED_DEEPSEEK_FLASH_VISION_EXP_MODEL,
662
+ displayName: "DeepSeek V4 Flash Vision Exp",
663
+ hasVision: true,
664
+ price: { ...PLATFORM_HOSTED_DEEPSEEK_FLASH_PEAK_PRICE },
665
+ peakPrice: { ...PLATFORM_HOSTED_DEEPSEEK_FLASH_PEAK_PRICE },
666
+ offPeakPrice: { ...PLATFORM_HOSTED_DEEPSEEK_FLASH_OFF_PEAK_PRICE },
649
667
  maxOutputTokens: 384e3,
650
668
  contextWindow: 1e6,
651
669
  supportsTool: true,
@@ -655,7 +673,9 @@ var platformHostedModels = [
655
673
  name: PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL,
656
674
  displayName: "DeepSeek V4 Pro",
657
675
  hasVision: false,
658
- price: { ...PLATFORM_HOSTED_DEEPSEEK_PRO_PRICE },
676
+ price: { ...PLATFORM_HOSTED_DEEPSEEK_PRO_PEAK_PRICE },
677
+ peakPrice: { ...PLATFORM_HOSTED_DEEPSEEK_PRO_PEAK_PRICE },
678
+ offPeakPrice: { ...PLATFORM_HOSTED_DEEPSEEK_PRO_OFF_PEAK_PRICE },
659
679
  maxOutputTokens: 384e3,
660
680
  contextWindow: 1e6,
661
681
  supportsTool: true,
@@ -671,39 +691,52 @@ var platformHostedModels = [
671
691
  supportsTool: false
672
692
  },
673
693
  {
674
- name: PLATFORM_HOSTED_CLAUDE_OPUS_4_8_MODEL,
675
- displayName: "Claude Opus 4.8",
694
+ name: PLATFORM_HOSTED_CLAUDE_OPUS_5_MODEL,
695
+ displayName: "Claude Opus 5",
676
696
  hasVision: true,
677
697
  price: { ...DEEPINFRA_CLAUDE_OPUS_PRICE },
678
698
  maxOutputTokens: 4092,
679
699
  contextWindow: 976e3,
680
700
  supportsTool: false
681
701
  },
702
+ {
703
+ name: PLATFORM_HOSTED_CLAUDE_FABLE_5_MODEL,
704
+ displayName: "Claude Fable 5",
705
+ hasVision: true,
706
+ price: { ...DEEPINFRA_CLAUDE_FABLE_PRICE },
707
+ maxOutputTokens: 4092,
708
+ contextWindow: 976e3,
709
+ supportsTool: false
710
+ },
682
711
  {
683
712
  name: PLATFORM_HOSTED_GROK_4_6_MODEL,
684
713
  displayName: "Grok 4.6",
685
714
  hasVision: true,
686
- // 上游 xAI 官方 API:$2/$6 per 1M ×7(同 xai/models.ts 报价口径)。
687
- price: { input: 2 * 7, output: 6 * 7 },
715
+ price: { ...PLATFORM_HOSTED_GROK_PRICE },
688
716
  maxOutputTokens: 1e5,
689
717
  contextWindow: 5e5,
690
718
  supportsTool: true
691
- },
692
- {
693
- name: PLATFORM_HOSTED_QWEN_37_FLASH_MODEL,
694
- displayName: "Qwen 3.7 Flash",
695
- hasVision: true,
696
- // 上游 OpenRouter:$0.03/$0.13 per 1M → nolo 8 折 ×7
697
- price: {
698
- input: toPlatformCredits(0.03),
699
- output: toPlatformCredits(0.13)
700
- },
701
- maxOutputTokens: 65536,
702
- contextWindow: 1e6,
703
- supportsTool: true
704
719
  }
705
720
  ];
706
721
 
722
+ // packages/ai/llm/cloudflare.ts
723
+ var getCloudflareWorkersAiChatCompletionsUrl = (accountId = process.env.CLOUDFLARE_ACCOUNT_ID?.trim()) => {
724
+ if (!accountId) {
725
+ throw new Error(
726
+ "CLOUDFLARE_ACCOUNT_ID is required for Cloudflare Workers AI chat completions"
727
+ );
728
+ }
729
+ return `https://api.cloudflare.com/client/v4/accounts/${accountId}/ai/v1/chat/completions`;
730
+ };
731
+ var cloudflareModels = [];
732
+
733
+ // packages/ai/llm/gmi.ts
734
+ var GMI_CHAT_COMPLETIONS_URL = "https://api.gmi-serving.com/v1/chat/completions";
735
+ var gmiModels = [];
736
+
737
+ // packages/ai/llm/zai.ts
738
+ var zaiModels = [];
739
+
707
740
  export {
708
741
  googleModels,
709
742
  openAIModels,
@@ -711,7 +744,7 @@ export {
711
744
  deepinfraModels,
712
745
  xaiModels,
713
746
  fireworksModels,
714
- PLATFORM_HOSTED_KIMI_K26_MODEL,
747
+ PLATFORM_HOSTED_KIMI_K3_MODEL,
715
748
  PLATFORM_HOSTED_KIMI_PROVIDER,
716
749
  isNoloHostedProvider,
717
750
  isFireworksKimiModel,
@@ -719,12 +752,17 @@ export {
719
752
  resolveFireworksKimiModel,
720
753
  isPlatformHostedClaudeModel,
721
754
  isPlatformHostedGrokModel,
755
+ isPlatformHostedKimiK26Model,
756
+ isPlatformHostedGlmModel,
757
+ isPlatformHostedGeminiModel,
722
758
  PLATFORM_HOSTED_QWEN_37_FLASH_MODEL,
759
+ isPlatformHostedQwen37FlashModel,
723
760
  PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL,
724
- PLATFORM_HOSTED_DEEPSEEK_FLASH_PRICE,
761
+ PLATFORM_HOSTED_DEEPSEEK_FLASH_VISION_EXP_MODEL,
762
+ PLATFORM_HOSTED_DEEPSEEK_FLASH_PEAK_PRICE,
725
763
  getPlatformHostedDeepSeekV4Price,
726
764
  isPlatformHostedDeepSeekV4Model,
727
- PLATFORM_HOSTED_CHAT_COMPLETIONS_URL,
765
+ isPlatformHostedDeepseekModel,
728
766
  platformHostedModels,
729
767
  getCloudflareWorkersAiChatCompletionsUrl,
730
768
  cloudflareModels,
@@ -0,0 +1,10 @@
1
+ // packages/database/levelNotFoundError.ts
2
+ function isLevelNotFoundError(error) {
3
+ if (!error || typeof error !== "object") return false;
4
+ const e = error;
5
+ return e.notFound === true || e.name === "NotFoundError" || e.code === "LEVEL_NOT_FOUND" || e.code === "LEVEL_NOT_FOUND_ERROR" || e.message === "NotFound";
6
+ }
7
+
8
+ export {
9
+ isLevelNotFoundError
10
+ };
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  resolveMachineId
3
- } from "./chunk-6HYVJV7B.js";
3
+ } from "./chunk-ESHYE7WU.js";
4
4
  import {
5
5
  getDefaultCliLocalRuntimeDb
6
- } from "./chunk-Q3CSL43H.js";
6
+ } from "./chunk-N4XRDM26.js";
7
7
  import {
8
8
  buildCliRuntimeEnv,
9
9
  clearProfileAuthToken,
@@ -11,28 +11,28 @@ import {
11
11
  getDefaultProfileConfigPath,
12
12
  loadProfileConfig,
13
13
  saveDefaultProfile
14
- } from "./chunk-GE6IWA5N.js";
14
+ } from "./chunk-UNZDCI3O.js";
15
15
  import {
16
16
  resolveAuthTokenFromEnv
17
17
  } from "./chunk-A7GB5UGH.js";
18
18
  import {
19
19
  DEFAULT_NOLO_SERVER_URL
20
20
  } from "./chunk-OLZBQWZU.js";
21
- import {
22
- normalizeServerOrigin
23
- } from "./chunk-CF7PE763.js";
24
21
  import {
25
22
  createMemoryKey,
26
23
  createMemoryOwnerIndexKey,
27
24
  createMemorySubjectKindIndexKey,
28
25
  memoryOwnerRange
29
- } from "./chunk-WHLVPK32.js";
26
+ } from "./chunk-KMSZPTM6.js";
27
+ import {
28
+ asTrimmedNonEmptyStringArray
29
+ } from "./chunk-I42VC5KR.js";
30
30
  import {
31
31
  asTrimmedString
32
32
  } from "./chunk-3EUW3WEO.js";
33
33
  import {
34
- asTrimmedNonEmptyStringArray
35
- } from "./chunk-I42VC5KR.js";
34
+ normalizeServerOrigin
35
+ } from "./chunk-CF7PE763.js";
36
36
 
37
37
  // packages/cli/authCommands.ts
38
38
  import { createInterface } from "node:readline/promises";
@@ -66,6 +66,10 @@ var matchesFilters = (item, filters) => {
66
66
  if (!itemTags.has(tag)) return false;
67
67
  }
68
68
  }
69
+ const contentSub = asTrimmedString(filters.contentSubstring);
70
+ if (contentSub && !(item.content ?? "").toLowerCase().includes(contentSub.toLowerCase())) {
71
+ return false;
72
+ }
69
73
  return true;
70
74
  };
71
75
  var deleteMemoryItemWithIndexesInBatch = (batch, item) => {
@@ -7,14 +7,24 @@ import {
7
7
  unlinkSync,
8
8
  writeFileSync
9
9
  } from "node:fs";
10
+ import { join as join2 } from "node:path";
11
+
12
+ // packages/agent-runtime/noloStateDir.ts
10
13
  import { homedir } from "node:os";
11
14
  import { join } from "node:path";
15
+ function resolveNoloStateDir(name, homeDir) {
16
+ if (homeDir) return join(homeDir, ".nolo", name);
17
+ const noloHome = process.env.NOLO_HOME?.trim();
18
+ return noloHome ? join(noloHome, name) : join(homedir(), ".nolo", name);
19
+ }
20
+
21
+ // packages/agent-runtime/oauthTokenStore.ts
12
22
  var DEFAULT_REFRESH_SKEW_MS = 5 * 60 * 1e3;
13
- function getCredentialsDir(homeDir = homedir()) {
14
- return join(homeDir, ".nolo", "credentials");
23
+ function getCredentialsDir(homeDir) {
24
+ return resolveNoloStateDir("credentials", homeDir);
15
25
  }
16
- function getCredentialPath(provider, homeDir = homedir()) {
17
- return join(getCredentialsDir(homeDir), `${provider}.json`);
26
+ function getCredentialPath(provider, homeDir) {
27
+ return join2(getCredentialsDir(homeDir), `${provider}.json`);
18
28
  }
19
29
  function ensurePrivateDir(dir) {
20
30
  mkdirSync(dir, { recursive: true, mode: 448 });
@@ -30,7 +40,7 @@ function writePrivateFile(path, body) {
30
40
  } catch {
31
41
  }
32
42
  }
33
- function readOAuthCredential(provider, homeDir = homedir()) {
43
+ function readOAuthCredential(provider, homeDir) {
34
44
  const path = getCredentialPath(provider, homeDir);
35
45
  if (!existsSync(path)) return null;
36
46
  const raw = readFileSync(path, "utf8");
@@ -42,18 +52,18 @@ function readOAuthCredential(provider, homeDir = homedir()) {
42
52
  return null;
43
53
  }
44
54
  }
45
- function writeOAuthCredential(provider, credential, homeDir = homedir()) {
55
+ function writeOAuthCredential(provider, credential, homeDir) {
46
56
  const path = getCredentialPath(provider, homeDir);
47
57
  ensurePrivateDir(getCredentialsDir(homeDir));
48
58
  writePrivateFile(path, `${JSON.stringify(credential, null, 2)}
49
59
  `);
50
60
  }
51
- function removeOAuthCredential(provider, homeDir = homedir()) {
61
+ function removeOAuthCredential(provider, homeDir) {
52
62
  const path = getCredentialPath(provider, homeDir);
53
63
  if (!existsSync(path)) return;
54
64
  unlinkSync(path);
55
65
  }
56
- function createOAuthTokenStore(homeDir = homedir()) {
66
+ function createOAuthTokenStore(homeDir) {
57
67
  return {
58
68
  read(provider) {
59
69
  return readOAuthCredential(provider, homeDir);
@@ -0,0 +1,28 @@
1
+ // packages/chat/dialog/actions/builtinDialogLlm.ts
2
+ var BASE_BUILTIN_DIALOG_LLM_CONFIG = {
3
+ apiSource: "platform",
4
+ useServerProxy: true
5
+ };
6
+ var BUILTIN_TITLE_LLM_CONFIG = {
7
+ ...BASE_BUILTIN_DIALOG_LLM_CONFIG,
8
+ provider: "nolo",
9
+ id: "builtin-dialog-title-llm",
10
+ name: "Builtin Dialog Title LLM",
11
+ model: "deepseek-v4-flash",
12
+ prompt: "You are a title generator for chat history. \u4F60\u53EA\u505A\u4E00\u4EF6\u4E8B\uFF1A\u6839\u636E\u5BF9\u8BDD\u5185\u5BB9\u8F93\u51FA\u6700\u7EC8\u6807\u9898\u3002\u786C\u6027\u89C4\u5219\uFF1A1) \u53EA\u8F93\u51FA\u6807\u9898\u8FD9\u4E00\u884C\uFF1B\u4E25\u7981\u8F93\u51FA\u63A8\u7406\u3001\u5206\u6790\u3001\u6B65\u9AA4\u3001\u89E3\u91CA\u3001\u524D\u8A00\u3001\u540E\u8BB0\u3001\u7FFB\u8BD1\u3001\u81F4\u6B49\u6216\u4EFB\u4F55\u989D\u5916\u8BF4\u660E\u30022) \u4E0D\u8981\u56DE\u7B54\u7528\u6237\u8BF7\u6C42\uFF0C\u4E0D\u8981\u5199\u6458\u8981\uFF0C\u53EA\u7ED9\u6807\u9898\u7ED3\u679C\u30023) \u6807\u9898\u5C3D\u91CF\u77ED\uFF1A\u901A\u5E38 2-5 \u4E2A\u8BCD\uFF0C\u82F1\u6587\u4E0D\u8D85\u8FC7 6 \u4E2A\u8BCD\u30024) \u4F7F\u7528\u5BF9\u8BDD\u4E3B\u8BED\u8A00\uFF1B\u6DF7\u5408\u8BED\u8A00\u65F6\u4F18\u5148\u7528\u6237\u4E3B\u8981\u8BED\u8A00\u30025) \u4F18\u5148\u590D\u7528\u5BF9\u8BDD\u4E2D\u7684\u5177\u4F53\u4E3B\u9898\u8BCD\uFF0C\u907F\u514D issue\u3001help\u3001discussion\u3001analysis\u3001update \u8FD9\u7C7B\u7A7A\u6CDB\u8BCD\u30026) \u5FFD\u7565 tool JSON\u3001\u51FD\u6570\u540D\u3001branch label\u3001agent \u540D\u3001\u7CFB\u7EDF\u6307\u4EE4\u548C\u7F16\u6392\u75D5\u8FF9\uFF08\u5982 GPT\u3001Claude\u3001Gemini\uFF09\uFF1B\u6807\u9898\u8981\u843D\u5728\u7528\u6237\u771F\u6B63\u8BA8\u8BBA\u7684\u5BF9\u8C61\u6216\u51B3\u7B56\u4E0A\u30027) \u66F4\u504F\u597D\u201C\u5BF9\u8C61 + \u52A8\u4F5C/\u5224\u65AD\u201D\u7684\u77ED\u6807\u9898\uFF0C\u4F8B\u5982\u201CAI \u90AE\u4EF6\u52A9\u624B\u53D6\u820D\u201D\u201C\u4E1C\u4EAC\u56DB\u65E5\u6162\u65C5\u884C\u201D\u201C\u91CD\u590D\u6263\u8D39\u9000\u6B3E\u201D\u30028) \u7EAF\u6587\u672C\uFF0C\u4E0D\u8981\u9879\u76EE\u7B26\u53F7\u3001\u7F16\u53F7\u3001markdown\u3001emoji\u3002\u6700\u7EC8\u53EA\u8FD4\u56DE\u6807\u9898\u6587\u672C\u3002 Output only the title text."
13
+ };
14
+ var BUILTIN_SUMMARY_LLM_CONFIG = {
15
+ ...BASE_BUILTIN_DIALOG_LLM_CONFIG,
16
+ provider: "nolo",
17
+ id: "builtin-dialog-summary-llm",
18
+ name: "Builtin Dialog Summary LLM",
19
+ model: "deepseek-v4-flash",
20
+ // @deprecated 用 COMPACTION_SUMMARY_SYSTEM_PROMPT(packages/ai/context/compactionShared.ts)。
21
+ // 生产代码已全部迁移;此旧两段式 prompt 仅被 scripts/probes/dialog 探针脚本使用,待探针迁移后删除。
22
+ prompt: "\u4F60\u662F\u4E00\u4E2A\u4E13\u4E1A\u7684\u5BF9\u8BDD\u8BB0\u5FC6\u52A9\u7406\u3002\u8BF7\u57FA\u4E8E\u3010\u73B0\u6709\u8BB0\u5FC6\u3011\u548C\u3010\u65B0\u589E\u5BF9\u8BDD\u3011\uFF0C\u8F93\u51FA\u4E00\u4EFD\u66F4\u65B0\u540E\u7684\u5BF9\u8BDD\u8BB0\u5FC6\u6863\u6848\u3002\u4E25\u683C\u53EA\u8F93\u51FA\u4E0B\u9762\u4E24\u90E8\u5206\uFF0C\u6807\u9898\u5FC5\u987B\u5B8C\u5168\u4E00\u81F4\uFF1A\n\u5173\u952E\u4E8B\u5B9E\u6863\u6848\n- ...\n\u5BF9\u8BDD\u5267\u60C5\u6458\u8981\n- ...\n\u8981\u6C42\uFF1A1) \u4F7F\u7528\u5BF9\u8BDD\u4E3B\u8BED\u8A00\uFF1B\u6DF7\u5408\u8BED\u8A00\u65F6\u4F18\u5148\u8DDF\u968F\u7528\u6237\u4E3B\u8981\u8BED\u8A00\uFF0C\u4E13\u6709\u540D\u8BCD\u4FDD\u7559\u539F\u6587\u30022) \u5173\u952E\u4E8B\u5B9E\u6863\u6848\u53EA\u4FDD\u7559\u4E4B\u540E\u7EE7\u7EED\u5BF9\u8BDD\u4ECD\u6709\u4EF7\u503C\u7684\u4FE1\u606F\uFF0C\u4F8B\u5982\u7528\u6237\u504F\u597D\u3001\u76EE\u6807\u3001\u7EA6\u675F\u3001\u6280\u672F\u6808\u3001\u786E\u5B9A\u7684\u6587\u4EF6\u540D/\u53D8\u91CF\u540D\u3001\u6838\u5FC3\u51B3\u7B56\u3001\u5F85\u529E\u4E8B\u9879\u30023) \u5BF9\u8BDD\u5267\u60C5\u6458\u8981\u5148\u6781\u7B80\u6982\u62EC\u65E7\u4E0A\u4E0B\u6587\uFF0C\u518D\u66F4\u8BE6\u7EC6\u8BB0\u5F55\u6700\u8FD1\u65B0\u589E\u7684\u8FDB\u5C55\u3001\u5206\u6B67\u3001\u7ED3\u8BBA\u548C\u4E0B\u4E00\u6B65\u30024) \u5FFD\u7565\u5BD2\u6684\u3001\u91CD\u590D\u5C1D\u8BD5\u3001\u5DF2\u653E\u5F03\u65B9\u6848\u548C\u65E0\u4EF7\u503C\u5E9F\u8BDD\u30025) \u4E0D\u8981\u7F16\u9020\u672A\u51FA\u73B0\u7684\u4FE1\u606F\uFF0C\u4E0D\u8981\u8F93\u51FA\u5F00\u573A\u767D\u3001\u7ED3\u675F\u8BED\u3001markdown \u4EE3\u7801\u5757\u6216\u989D\u5916\u7AE0\u8282\u3002"
23
+ };
24
+
25
+ export {
26
+ BUILTIN_TITLE_LLM_CONFIG,
27
+ BUILTIN_SUMMARY_LLM_CONFIG
28
+ };