nolo-cli 0.19.0 → 0.24.0-alpha.13

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 (134) hide show
  1. package/README.md +9 -18
  2. package/{_executeModel-X5PCIZN6.js → _executeModel-ZPNYAEFW.js} +46 -44
  3. package/{action-LT7BRFLK.js → action-5MNAXR5B.js} +7 -6
  4. package/{addContentAction-PL3KKBDH.js → addContentAction-UNSYTVTB.js} +5 -5
  5. package/{addDialogAgentAction-FCMSKYAF.js → addDialogAgentAction-LJGNP2AO.js} +5 -5
  6. package/{agentDeleteCommand-2BZDQV36.js → agentDeleteCommand-5ZV4433K.js} +27 -26
  7. package/{agentEmailCommands-2QJDGRMB.js → agentEmailCommands-Z7KOYDVQ.js} +57 -55
  8. package/{agentListCommands-6VEPTKBI.js → agentListCommands-UQUXJYUN.js} +30 -26
  9. package/{agentMachineCommands-NVVHNWYI.js → agentMachineCommands-53O6P6L5.js} +25 -24
  10. package/{agentRecordCommands-4GGRDMD4.js → agentRecordCommands-ZRYNBSSS.js} +52 -50
  11. package/{agentRunCommand-XOLQNKBZ.js → agentRunCommand-B73MKVOG.js} +55 -54
  12. package/{agentRunControl-Y5AFH5PQ.js → agentRunControl-SNUKXN6J.js} +6 -2
  13. package/{agentRuntimeLocal-7WYWCGL4.js → agentRuntimeLocal-GVNERRKQ.js} +21 -18
  14. package/{agentSlice-EAXPGEYV.js → agentSlice-OJBHIL34.js} +5 -5
  15. package/{appDeleteCommands-77KR2RJ4.js → appDeleteCommands-23Z3Z6KE.js} +23 -22
  16. package/{appDeployCommands-K7CAHGBI.js → appDeployCommands-3MFAR4Z7.js} +23 -22
  17. package/{appDeployStatusCommands-4OEKLTBT.js → appDeployStatusCommands-JHU6GSN4.js} +23 -22
  18. package/{appGetCommands-VM2WDLAZ.js → appGetCommands-24J55H2Y.js} +23 -22
  19. package/{appListCommands-GX6BBA6U.js → appListCommands-HE5KP3PH.js} +23 -22
  20. package/{authCommand-DY6UUL6O.js → authCommand-KGRK6MNU.js} +12 -13
  21. package/{authCommands-XTBV7OFZ.js → authCommands-JSOG2H4E.js} +4 -5
  22. package/{chunk-OWOHNGCN.js → chunk-2MBTWINN.js} +42 -3
  23. package/{chunk-MVQ4TBSD.js → chunk-54VHTARN.js} +1 -1
  24. package/{chunk-RQN4SEKL.js → chunk-5DWZ46RJ.js} +1 -1
  25. package/{chunk-VYHDJEQD.js → chunk-5EDKWSQN.js} +136 -78
  26. package/{chunk-Z4NR32XR.js → chunk-5RGU3J7P.js} +13 -0
  27. package/{chunk-7BUYEZ6U.js → chunk-7H3UTGPM.js} +12 -72
  28. package/{chunk-3ZX7PERL.js → chunk-AAWJ5S3G.js} +20 -7
  29. package/{chunk-SCTYAHYK.js → chunk-ADE6577S.js} +237 -142
  30. package/{chunk-PJSV3IZ5.js → chunk-AOPOTHFK.js} +1 -1
  31. package/{chunk-3ND52WIL.js → chunk-ATWUOTJP.js} +180 -24
  32. package/{chunk-SWDPIPOY.js → chunk-AZW5AHMW.js} +1 -1
  33. package/chunk-CF7S2RYZ.js +376 -0
  34. package/{chunk-L4F3I4SR.js → chunk-CV6BM7LU.js} +4 -6
  35. package/{chunk-G5U6LDLG.js → chunk-CWTT2NZ6.js} +6 -6
  36. package/{chunk-MKA6QE5E.js → chunk-CZHE6LLV.js} +135 -55
  37. package/{chunk-KFEVY3ST.js → chunk-D34RI6NI.js} +18 -8
  38. package/{chunk-XRZJGPFI.js → chunk-FON47ACC.js} +4 -4
  39. package/{chunk-K6EUAOW3.js → chunk-FXFGNOT2.js} +67 -1
  40. package/{chunk-LLWKHDG4.js → chunk-G36SUBHA.js} +14 -6
  41. package/{chunk-REA4JLBH.js → chunk-GD23ZX7Z.js} +7 -6
  42. package/{chunk-ROWQEJRP.js → chunk-GE6IWA5N.js} +12 -4
  43. package/{chunk-EDV7EBOI.js → chunk-GGB6MPHD.js} +2155 -1503
  44. package/{chunk-IYEXFJPC.js → chunk-GNGOZMU2.js} +64 -57
  45. package/{chunk-4T5F7YZQ.js → chunk-I6RJGORZ.js} +1 -1
  46. package/{chunk-DFCFMCY6.js → chunk-J2WT5CEO.js} +2 -2
  47. package/{chunk-AHCY2S2I.js → chunk-JJ2WUBFN.js} +1 -1
  48. package/{chunk-UGUW3FHG.js → chunk-JMSCXQUG.js} +2 -2
  49. package/{chunk-VDXCXCXH.js → chunk-KURQBS7S.js} +1 -1
  50. package/{chunk-FQZZLA3C.js → chunk-KXKQO4Q6.js} +17 -0
  51. package/{chunk-3Q7WHGCB.js → chunk-L65QKSVJ.js} +1 -1
  52. package/{chunk-UAIVG4J6.js → chunk-LEHTC2FI.js} +1 -8
  53. package/{chunk-UBHAWFQ6.js → chunk-LLDGWLML.js} +42 -19
  54. package/{chunk-JLA4FXYC.js → chunk-MALVZUYL.js} +1 -1
  55. package/{chunk-N54HIJVJ.js → chunk-MCXQNEJ3.js} +101 -9
  56. package/{chunk-GFUIQ4RY.js → chunk-MXFQHRSS.js} +1 -1
  57. package/{chunk-LSFAWXKC.js → chunk-N7J63Q6C.js} +1 -0
  58. package/{chunk-6Y7A3OQQ.js → chunk-NRY4GCKJ.js} +2 -0
  59. package/{chunk-ELT65PZW.js → chunk-OXLLFZNF.js} +1 -1
  60. package/{chunk-YGW4G5W5.js → chunk-P3RZ6DHN.js} +133 -25
  61. package/{chunk-5MIDPSSK.js → chunk-PB7G5MAM.js} +3 -3
  62. package/{chunk-HEGV7BH3.js → chunk-PMCKFQYC.js} +1 -1
  63. package/{chunk-23FZYPLC.js → chunk-PTKI7TIN.js} +911 -1064
  64. package/{chunk-MHSGJW4Z.js → chunk-PXPISYEH.js} +44 -14
  65. package/{chunk-I2ZJKTG5.js → chunk-PY7VGC5M.js} +29 -10
  66. package/{chunk-PIZYJVHQ.js → chunk-RM464B7I.js} +4 -4
  67. package/{chunk-XHG22OEX.js → chunk-ROJI6DRT.js} +2 -2
  68. package/{chunk-VNAEBGDK.js → chunk-RZNYL4LW.js} +123 -26
  69. package/{chunk-RVOUXDFU.js → chunk-S6KVFOUG.js} +6 -34
  70. package/{chunk-BV4VEE3W.js → chunk-S7AV3NCK.js} +277 -357
  71. package/{chunk-R35XMF6F.js → chunk-SIUEKVK4.js} +484 -67
  72. package/{chunk-B5TOXZAK.js → chunk-SIZQB7BD.js} +1 -1
  73. package/{chunk-DFFIZ25G.js → chunk-SLOGKB7M.js} +4 -1
  74. package/{chunk-MPVYDS7I.js → chunk-TLYHUIWF.js} +3 -3
  75. package/{chunk-HWW2M4SN.js → chunk-TNM27YZ7.js} +5 -4
  76. package/{chunk-OK6YSWLH.js → chunk-TWA4L7J7.js} +1 -1
  77. package/chunk-UZ6XXCVR.js +50 -0
  78. package/{chunk-DKZFOK24.js → chunk-WCP5FDTF.js} +16 -304
  79. package/{chunk-TRT4I4UD.js → chunk-WSQLK2KR.js} +2 -2
  80. package/{chunk-FXUSIQC2.js → chunk-XNZJVYFS.js} +1 -1
  81. package/{chunk-V3ED5AWK.js → chunk-YJY7HODU.js} +27 -16
  82. package/chunk-YYLHWIW6.js +48 -0
  83. package/{chunk-CZ6NYQTV.js → chunk-ZFL3LTU7.js} +2 -2
  84. package/{chunk-34WPV75U.js → chunk-ZUXIXYJI.js} +1 -1
  85. package/{chunk-VC6OZXO5.js → chunk-ZWJOGMKH.js} +2 -26
  86. package/{cliExecutor-DNE7TCC4.js → cliExecutor-K3F7DMRO.js} +2 -2
  87. package/{codingSkills-36KN5NQT.js → codingSkills-EN6Z6G6U.js} +4 -4
  88. package/{createAgentAutomationAction-GNFF524X.js → createAgentAutomationAction-PO62NUR7.js} +19 -18
  89. package/{createDialogAction-RB55KCLO.js → createDialogAction-ORFRYI3C.js} +22 -20
  90. package/{createPageAction-Y7343GLU.js → createPageAction-XWVMNTYH.js} +20 -19
  91. package/{db-W3O47YGF.js → db-W5UHK4P3.js} +150 -0
  92. package/{dbSlice-CGSRFJN3.js → dbSlice-5BKDURDL.js} +4 -4
  93. package/{dialogCommands-IAZK6YHQ.js → dialogCommands-XTJHROXM.js} +24 -23
  94. package/{dialogSlice-UQAXF23P.js → dialogSlice-DJXC53YW.js} +24 -18
  95. package/{docCreateCommands-I2EWZGCI.js → docCreateCommands-T2XRVXYS.js} +24 -27
  96. package/{docDeleteCommands-IZ45UZKG.js → docDeleteCommands-L7RXFXY3.js} +25 -24
  97. package/{docReadCommands-R6Z4QJYU.js → docReadCommands-M5PYNADQ.js} +24 -23
  98. package/{docStore-5HOJ4D7D.js → docStore-6LKLLFDW.js} +20 -19
  99. package/{docUpdateCommands-2LRBKQPY.js → docUpdateCommands-OA5EGPLQ.js} +24 -27
  100. package/{fetchMessages-BMGVZVSE.js → fetchMessages-W4IKHPCS.js} +2 -3
  101. package/{getPricing-G7DLAST6.js → getPricing-6C3C47Y4.js} +3 -3
  102. package/{handleSendMessageAction-Q4HY35WX.js → handleSendMessageAction-ILFGZTN5.js} +23 -20
  103. package/index.js +74 -74
  104. package/{localDialogRead-4H3QJFLW.js → localDialogRead-JXTAHW2E.js} +2 -2
  105. package/{machineCommands-PKBPQKTY.js → machineCommands-AKAQGPAO.js} +59 -57
  106. package/{machineWsRunDispatch-UZAW4OXJ.js → machineWsRunDispatch-RSBERM64.js} +51 -49
  107. package/{models-DJFSJ7SW.js → models-ILWKIX2Y.js} +2 -2
  108. package/package.json +1 -1
  109. package/{read-3FMPZPER.js → read-F3L3T2WJ.js} +2 -1
  110. package/{readDocTool-VSYHKK3V.js → readDocTool-FOHWVA4R.js} +1 -1
  111. package/{readlineWorkspace-Y2RDOFZG.js → readlineWorkspace-TUH3SFHO.js} +937 -430
  112. package/{removeDialogAgentAction-OAGA2G3U.js → removeDialogAgentAction-QCFGIUIH.js} +8 -7
  113. package/{runAgentClientLoop-NBPIKJ6J.js → runAgentClientLoop-C3QB2EXV.js} +45 -38
  114. package/{setDialogExtraReferencesAction-JZEXA5SL.js → setDialogExtraReferencesAction-DK4CKERU.js} +5 -5
  115. package/{setPrimaryDialogAgentAction-4ZUQQKDG.js → setPrimaryDialogAgentAction-SJSO6N27.js} +8 -7
  116. package/{settingSlice-7MNKHZ6R.js → settingSlice-XNM5AFPU.js} +6 -5
  117. package/{spaceCommands-DHCZ7J5I.js → spaceCommands-SXYOFGUJ.js} +25 -24
  118. package/{spaceSlice-ZXLLG3CR.js → spaceSlice-6BHMRP5O.js} +21 -18
  119. package/{streamAgentChatTurn-L3YW6LSB.js → streamAgentChatTurn-GF5W5OIP.js} +140 -98
  120. package/switchDialogAgentAction-4OAC6QRN.js +61 -0
  121. package/{tableCommands-BEQAGE4I.js → tableCommands-QSZILI7I.js} +1 -1
  122. package/{toolApiClient-QI3YBNWB.js → toolApiClient-ISM4ZQX4.js} +2 -2
  123. package/{tools-ECGXR5QF.js → tools-KBCLJ43G.js} +36 -33
  124. package/{tuiSummaryLlmCaller-OMSCNHXA.js → tuiSummaryLlmCaller-ARIMGILF.js} +6 -6
  125. package/{updateCommands-XTW55TOT.js → updateCommands-AK2RDOFR.js} +8 -2
  126. package/{updateDialogTitleAction-HQ2EUDFT.js → updateDialogTitleAction-LMHZUY4Q.js} +28 -27
  127. package/chunk-DL6EPNIK.js +0 -50
  128. package/chunk-V5R4NZP2.js +0 -78
  129. package/chunk-X4Q4UZEY.js +0 -26
  130. package/queryRunOverlay-O4LOMMPO.js +0 -161
  131. package/runOverlayPresentation-ZO4VCWEU.js +0 -11
  132. package/types-ZSTJ7MPR.js +0 -7
  133. package/{chunk-X7W4TNB4.js → chunk-CMKUBIGW.js} +3 -3
  134. package/{runtimeDoctorCommands-E2OUORHK.js → runtimeDoctorCommands-HSU632DY.js} +3 -3
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  updateContentTitle
3
- } from "./chunk-SCTYAHYK.js";
3
+ } from "./chunk-ADE6577S.js";
4
4
  import {
5
5
  require_date_fns
6
6
  } from "./chunk-M76ECQRD.js";
7
- import {
8
- toErrorMessage
9
- } from "./chunk-HNMXYYJR.js";
10
7
  import {
11
8
  require_react
12
9
  } from "./chunk-3ASDTTEI.js";
10
+ import {
11
+ toErrorMessage
12
+ } from "./chunk-HNMXYYJR.js";
13
13
  import {
14
14
  patch,
15
15
  readAndWait
16
- } from "./chunk-XRZJGPFI.js";
16
+ } from "./chunk-FON47ACC.js";
17
17
  import {
18
18
  asOptionalTrimmedString
19
19
  } from "./chunk-G3SUCT4W.js";
@@ -367,7 +367,7 @@ async function saveDocState(arg, { dispatch, getState }) {
367
367
  }
368
368
  }
369
369
  async function createDocState(args, thunkApi) {
370
- const { createPageAction } = await import("./createPageAction-Y7343GLU.js");
370
+ const { createPageAction } = await import("./createPageAction-XWVMNTYH.js");
371
371
  return createPageAction(args, thunkApi);
372
372
  }
373
373
  function subscribe(listener) {
@@ -2,43 +2,6 @@ import {
2
2
  asTrimmedLowercaseString
3
3
  } from "./chunk-QSJ3HFEF.js";
4
4
 
5
- // packages/integrations/deepseek/models.ts
6
- var deepSeekModels = [
7
- {
8
- name: "deepseek-v4-flash",
9
- displayName: "DeepSeek V4 Flash",
10
- hasVision: false,
11
- contextWindow: 1e6,
12
- maxOutputTokens: 384e3,
13
- jsonOutput: true,
14
- fnCall: true,
15
- supportsTool: true,
16
- supportsReasoningEffort: true,
17
- endpointKey: "chat.completions",
18
- price: {
19
- input: 1,
20
- inputCacheHit: 0.02,
21
- output: 2
22
- }
23
- },
24
- {
25
- name: "deepseek-v4-pro",
26
- displayName: "DeepSeek V4 Pro",
27
- hasVision: false,
28
- contextWindow: 1e6,
29
- maxOutputTokens: 384e3,
30
- jsonOutput: true,
31
- fnCall: true,
32
- supportsTool: true,
33
- supportsReasoningEffort: true,
34
- price: {
35
- input: 3,
36
- inputCacheHit: 0.1,
37
- output: 6
38
- }
39
- }
40
- ];
41
-
42
5
  // packages/ai/agent/liveAudioModel.ts
43
6
  var DEFAULT_GOOGLE_LIVE_AUDIO_MODEL = "gemini-3.1-flash-live-preview";
44
7
 
@@ -409,15 +372,24 @@ var OPENROUTER_MODELS = [];
409
372
  var openrouterModels = OPENROUTER_MODELS;
410
373
 
411
374
  // packages/ai/llm/deepinfra.ts
375
+ var DEEPINFRA_CLAUDE_HAIKU_PRICE = {
376
+ input: 1 * 9,
377
+ output: 5 * 9
378
+ };
379
+ var DEEPINFRA_CLAUDE_SONNET_PRICE = {
380
+ input: 3 * 9,
381
+ output: 15 * 9
382
+ };
383
+ var DEEPINFRA_CLAUDE_OPUS_PRICE = {
384
+ input: 5 * 9,
385
+ output: 25 * 9
386
+ };
412
387
  var deepinfraModels = [
413
388
  {
414
389
  name: "anthropic/claude-haiku-4-5",
415
390
  displayName: "Anthropic: Claude Haiku 4.5",
416
391
  hasVision: true,
417
- price: {
418
- input: 1 * 9,
419
- output: 5 * 9
420
- },
392
+ price: { ...DEEPINFRA_CLAUDE_HAIKU_PRICE },
421
393
  contextWindow: 195e3,
422
394
  maxOutputTokens: 4092,
423
395
  supportsTool: false
@@ -426,10 +398,7 @@ var deepinfraModels = [
426
398
  name: "anthropic/claude-sonnet-5",
427
399
  displayName: "Anthropic: Claude Sonnet 5",
428
400
  hasVision: true,
429
- price: {
430
- input: 3 * 9,
431
- output: 15 * 9
432
- },
401
+ price: { ...DEEPINFRA_CLAUDE_SONNET_PRICE },
433
402
  contextWindow: 976e3,
434
403
  maxOutputTokens: 4092,
435
404
  supportsTool: false
@@ -438,10 +407,7 @@ var deepinfraModels = [
438
407
  name: "anthropic/claude-opus-4-8",
439
408
  displayName: "Anthropic: Claude Opus 4.8",
440
409
  hasVision: true,
441
- price: {
442
- input: 5 * 9,
443
- output: 25 * 9
444
- },
410
+ price: { ...DEEPINFRA_CLAUDE_OPUS_PRICE },
445
411
  contextWindow: 976e3,
446
412
  maxOutputTokens: 4092,
447
413
  supportsTool: false
@@ -451,12 +417,12 @@ var deepinfraModels = [
451
417
  // packages/integrations/xai/models.ts
452
418
  var xaiModels = [
453
419
  {
454
- name: "grok-4.5",
455
- displayName: "Grok 4.5",
420
+ name: "grok-4.6",
421
+ displayName: "Grok 4.6",
456
422
  hasVision: true,
457
423
  contextWindow: 5e5,
424
+ // 价格沿用 grok-4.5 报价($2/$6 ×7),换代后待 live 验证再校准。
458
425
  price: { input: 2 * 7, output: 6 * 7 },
459
- // $2/$6 per MTok × 7
460
426
  fnCall: true,
461
427
  jsonOutput: true
462
428
  }
@@ -519,6 +485,17 @@ var resolveFireworksKimiModel = (model) => {
519
485
  };
520
486
 
521
487
  // packages/ai/llm/platformHosted.ts
488
+ var PLATFORM_HOSTED_CLAUDE_SONNET_5_MODEL = "anthropic/claude-sonnet-5";
489
+ var PLATFORM_HOSTED_CLAUDE_OPUS_4_8_MODEL = "anthropic/claude-opus-4-8";
490
+ var PLATFORM_HOSTED_CLAUDE_MODELS = [
491
+ PLATFORM_HOSTED_CLAUDE_SONNET_5_MODEL,
492
+ PLATFORM_HOSTED_CLAUDE_OPUS_4_8_MODEL
493
+ ];
494
+ var isPlatformHostedClaudeModel = (model) => PLATFORM_HOSTED_CLAUDE_MODELS.some(
495
+ (m) => asTrimmedLowercaseString(model) === m
496
+ );
497
+ var PLATFORM_HOSTED_GROK_4_6_MODEL = "grok-4.6";
498
+ var isPlatformHostedGrokModel = (model) => asTrimmedLowercaseString(model) === PLATFORM_HOSTED_GROK_4_6_MODEL;
522
499
  var PLATFORM_CREDITS_PER_USD = 7;
523
500
  var EXTERNAL_API_DISCOUNT = 0.8;
524
501
  var toPlatformCredits = (usdPerMillion) => Number(
@@ -544,12 +521,64 @@ var PLATFORM_HOSTED_GLM_PRICE = {
544
521
  output: toPlatformCredits(4.4)
545
522
  };
546
523
  var PLATFORM_HOSTED_GLM_52_MODEL = "glm-5.2";
524
+ var PLATFORM_HOSTED_GEMINI_37_FLASH_MODEL = "gemini-3.7-flash";
525
+ var PLATFORM_HOSTED_GEMINI_37_FLASH_PRICE = {
526
+ input: toPlatformCredits(0.75),
527
+ output: toPlatformCredits(3.75),
528
+ cachingWrite: toPlatformCredits(0.075),
529
+ cachingRead: toPlatformCredits(0.075)
530
+ };
547
531
  var PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL = "deepseek-v4-flash";
532
+ var PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL = "deepseek-v4-pro";
533
+ var DEEPSEEK_V4_PRICING_EFFECTIVE_AT_MS = Date.UTC(2026, 7, 16, 16);
534
+ var PLATFORM_HOSTED_DEEPSEEK_FLASH_PEAK_PRICE = {
535
+ input: 3,
536
+ inputCacheHit: 0.1,
537
+ output: 9
538
+ };
539
+ var PLATFORM_HOSTED_DEEPSEEK_PRO_PEAK_PRICE = {
540
+ input: 9,
541
+ inputCacheHit: 0.3,
542
+ output: 27
543
+ };
548
544
  var PLATFORM_HOSTED_DEEPSEEK_FLASH_PRICE = {
549
545
  input: 1,
550
546
  inputCacheHit: 0.02,
551
547
  output: 2
552
548
  };
549
+ var PLATFORM_HOSTED_DEEPSEEK_PRO_PRICE = {
550
+ input: 3,
551
+ inputCacheHit: 0.025,
552
+ output: 6
553
+ };
554
+ var PLATFORM_HOSTED_DEEPSEEK_FLASH_OFF_PEAK_PRICE = {
555
+ input: 1.5,
556
+ inputCacheHit: 0.05,
557
+ output: 4.5
558
+ };
559
+ var PLATFORM_HOSTED_DEEPSEEK_PRO_OFF_PEAK_PRICE = {
560
+ input: 4.5,
561
+ inputCacheHit: 0.15,
562
+ output: 13.5
563
+ };
564
+ var getPlatformHostedDeepSeekV4Price = (model, nowMs = Date.now()) => {
565
+ if (nowMs < DEEPSEEK_V4_PRICING_EFFECTIVE_AT_MS) {
566
+ return model === PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL ? PLATFORM_HOSTED_DEEPSEEK_PRO_PRICE : PLATFORM_HOSTED_DEEPSEEK_FLASH_PRICE;
567
+ }
568
+ const hour = Number(
569
+ new Intl.DateTimeFormat("en-US", {
570
+ timeZone: "Asia/Shanghai",
571
+ hour: "numeric",
572
+ hourCycle: "h23"
573
+ }).format(new Date(nowMs))
574
+ );
575
+ const peak = hour >= 9 && hour < 12 || hour >= 14 && hour < 18;
576
+ if (!peak) {
577
+ return model === PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL ? PLATFORM_HOSTED_DEEPSEEK_PRO_OFF_PEAK_PRICE : PLATFORM_HOSTED_DEEPSEEK_FLASH_OFF_PEAK_PRICE;
578
+ }
579
+ return model === PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL ? PLATFORM_HOSTED_DEEPSEEK_PRO_PEAK_PRICE : PLATFORM_HOSTED_DEEPSEEK_FLASH_PEAK_PRICE;
580
+ };
581
+ var isPlatformHostedDeepSeekV4Model = (model) => model === PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL || model === PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL;
553
582
  var PLATFORM_HOSTED_CHAT_COMPLETIONS_URL = "https://ollama.com/v1/chat/completions";
554
583
  var platformHostedModels = [
555
584
  {
@@ -581,6 +610,16 @@ var platformHostedModels = [
581
610
  supportsTool: true,
582
611
  supportsReasoningEffort: true
583
612
  },
613
+ {
614
+ name: PLATFORM_HOSTED_GEMINI_37_FLASH_MODEL,
615
+ displayName: "Gemini 3.7 Flash",
616
+ hasVision: true,
617
+ price: { ...PLATFORM_HOSTED_GEMINI_37_FLASH_PRICE },
618
+ maxOutputTokens: 65536,
619
+ contextWindow: 1048576,
620
+ supportsTool: true,
621
+ supportsReasoningEffort: true
622
+ },
584
623
  {
585
624
  name: PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL,
586
625
  displayName: "DeepSeek V4 Flash",
@@ -590,11 +629,48 @@ var platformHostedModels = [
590
629
  contextWindow: 1e6,
591
630
  supportsTool: true,
592
631
  supportsReasoningEffort: true
632
+ },
633
+ {
634
+ name: PLATFORM_HOSTED_DEEPSEEK_PRO_MODEL,
635
+ displayName: "DeepSeek V4 Pro",
636
+ hasVision: false,
637
+ price: { ...PLATFORM_HOSTED_DEEPSEEK_PRO_PRICE },
638
+ maxOutputTokens: 384e3,
639
+ contextWindow: 1e6,
640
+ supportsTool: true,
641
+ supportsReasoningEffort: true
642
+ },
643
+ {
644
+ name: PLATFORM_HOSTED_CLAUDE_SONNET_5_MODEL,
645
+ displayName: "Claude Sonnet 5",
646
+ hasVision: true,
647
+ price: { ...DEEPINFRA_CLAUDE_SONNET_PRICE },
648
+ maxOutputTokens: 4092,
649
+ contextWindow: 976e3,
650
+ supportsTool: false
651
+ },
652
+ {
653
+ name: PLATFORM_HOSTED_CLAUDE_OPUS_4_8_MODEL,
654
+ displayName: "Claude Opus 4.8",
655
+ hasVision: true,
656
+ price: { ...DEEPINFRA_CLAUDE_OPUS_PRICE },
657
+ maxOutputTokens: 4092,
658
+ contextWindow: 976e3,
659
+ supportsTool: false
660
+ },
661
+ {
662
+ name: PLATFORM_HOSTED_GROK_4_6_MODEL,
663
+ displayName: "Grok 4.6",
664
+ hasVision: true,
665
+ // 上游 xAI 官方 API:$2/$6 per 1M ×7(同 xai/models.ts 报价口径)。
666
+ price: { input: 2 * 7, output: 6 * 7 },
667
+ maxOutputTokens: 1e5,
668
+ contextWindow: 5e5,
669
+ supportsTool: true
593
670
  }
594
671
  ];
595
672
 
596
673
  export {
597
- deepSeekModels,
598
674
  googleModels,
599
675
  openAIModels,
600
676
  openrouterModels,
@@ -607,8 +683,12 @@ export {
607
683
  isFireworksKimiModel,
608
684
  isDeepInfraKimiModel,
609
685
  resolveFireworksKimiModel,
610
- PLATFORM_HOSTED_GLM_PRICE,
611
- PLATFORM_HOSTED_GLM_52_MODEL,
686
+ isPlatformHostedClaudeModel,
687
+ isPlatformHostedGrokModel,
688
+ PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL,
689
+ PLATFORM_HOSTED_DEEPSEEK_FLASH_PRICE,
690
+ getPlatformHostedDeepSeekV4Price,
691
+ isPlatformHostedDeepSeekV4Model,
612
692
  PLATFORM_HOSTED_CHAT_COMPLETIONS_URL,
613
693
  platformHostedModels,
614
694
  getCloudflareWorkersAiChatCompletionsUrl,
@@ -34,7 +34,9 @@ function shouldStripReasoningContentForOutbound(provider, model) {
34
34
  const p = provider?.trim().toLowerCase();
35
35
  const m = model?.trim().toLowerCase();
36
36
  if (!p || !m) return false;
37
- if (p === "deepseek" || p === "nolo") return m === "deepseek-v4-flash";
37
+ if (p === "deepseek" || p === "nolo") {
38
+ return m === "deepseek-v4-flash" || m === "deepseek-v4-pro";
39
+ }
38
40
  return false;
39
41
  }
40
42
 
@@ -94,17 +96,20 @@ var normalizeToolOutput = (content) => {
94
96
  };
95
97
  var toResponsesTools = (tools) => {
96
98
  if (!Array.isArray(tools) || tools.length === 0) return void 0;
97
- return tools.map((tool) => {
99
+ const normalized = tools.map((tool) => {
98
100
  const fn = tool?.function;
99
- if (!fn?.name) return null;
101
+ const name = fn?.name ?? tool?.name;
102
+ if (!name) return null;
103
+ const parameters = fn?.parameters ?? tool?.parameters;
100
104
  return {
101
105
  type: "function",
102
- name: fn.name,
103
- description: fn.description,
104
- parameters: sanitizeResponsesParameters(fn.parameters),
105
- strict: fn.strict
106
+ name,
107
+ ...typeof (fn?.description ?? tool?.description) === "string" ? { description: fn?.description ?? tool?.description } : {},
108
+ parameters: sanitizeResponsesParameters(parameters),
109
+ ...fn?.strict !== void 0 || tool?.strict !== void 0 ? { strict: fn?.strict ?? tool?.strict } : {}
106
110
  };
107
111
  }).filter(Boolean);
112
+ return normalized.length > 0 ? normalized : void 0;
108
113
  };
109
114
  var convertMessagesToResponsesInput = (messages, options) => {
110
115
  const input = [];
@@ -121,7 +126,12 @@ var convertMessagesToResponsesInput = (messages, options) => {
121
126
  }
122
127
  const role = message.role;
123
128
  if (role === "assistant" && !options?.stripReasoningContent && typeof message.reasoning_content === "string" && message.reasoning_content) {
124
- input.push({ type: "reasoning", content: message.reasoning_content });
129
+ input.push({
130
+ type: "reasoning",
131
+ content: [
132
+ { type: "reasoning_text", text: message.reasoning_content }
133
+ ]
134
+ });
125
135
  }
126
136
  const contentParts = normalizeMessageParts(message.content, role);
127
137
  if (contentParts.length > 0) {
@@ -2,7 +2,7 @@ import {
2
2
  fileKey,
3
3
  getFileIdFromKey,
4
4
  ulid
5
- } from "./chunk-6Y7A3OQQ.js";
5
+ } from "./chunk-NRY4GCKJ.js";
6
6
  import {
7
7
  loadFileFromIndexedDb,
8
8
  removeAction,
@@ -12,7 +12,7 @@ import {
12
12
  readAction,
13
13
  readRequestManager,
14
14
  resolveAgentReadServers
15
- } from "./chunk-3ND52WIL.js";
15
+ } from "./chunk-ATWUOTJP.js";
16
16
  import {
17
17
  asyncThunkCreator,
18
18
  buildCreateSlice,
@@ -704,7 +704,7 @@ var dbSlice = createSliceWithThunks({
704
704
  // 动态 import 在调用期解析,避开 TDZ/求值顺序问题(同下方 share)。
705
705
  read: create.asyncThunk(
706
706
  async (payload, thunkApi) => {
707
- const { readAction: readAction2 } = await import("./read-3FMPZPER.js");
707
+ const { readAction: readAction2 } = await import("./read-F3L3T2WJ.js");
708
708
  return readAction2(payload, thunkApi);
709
709
  },
710
710
  {
@@ -778,7 +778,7 @@ var dbSlice = createSliceWithThunks({
778
778
  // 这里改成动态 import,运行期才解析,彻底断开这条边。
779
779
  share: create.asyncThunk(
780
780
  async (config, thunkApi) => {
781
- const { shareResourceAction } = await import("./action-LT7BRFLK.js");
781
+ const { shareResourceAction } = await import("./action-5MNAXR5B.js");
782
782
  return shareResourceAction(config, thunkApi);
783
783
  }
784
784
  ),
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  loadProfileConfig
3
- } from "./chunk-ROWQEJRP.js";
3
+ } from "./chunk-GE6IWA5N.js";
4
4
  import {
5
5
  resolveDefaultSpawn
6
6
  } from "./chunk-IDZTNRP2.js";
@@ -270,6 +270,69 @@ Nolo Agent CLI Installer & Updater
270
270
  }
271
271
  return exitCode;
272
272
  }
273
+ var NOLO_UPDATE_CHECK_KILL_SWITCH = "NOLO_CLI_NO_UPDATE_CHECK";
274
+ function parseCliVersion(raw) {
275
+ const match = /^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/.exec(raw.trim());
276
+ if (!match) return null;
277
+ return {
278
+ main: [Number(match[1]), Number(match[2]), Number(match[3])],
279
+ pre: match[4] ? match[4].split(".") : []
280
+ };
281
+ }
282
+ function compareCliVersions(a, b) {
283
+ const pa = parseCliVersion(a);
284
+ const pb = parseCliVersion(b);
285
+ if (!pa || !pb) return a.localeCompare(b);
286
+ for (let i = 0; i < 3; i++) {
287
+ if (pa.main[i] !== pb.main[i]) return pa.main[i] < pb.main[i] ? -1 : 1;
288
+ }
289
+ if (pa.pre.length === 0 && pb.pre.length === 0) return 0;
290
+ if (pa.pre.length === 0) return 1;
291
+ if (pb.pre.length === 0) return -1;
292
+ const len = Math.max(pa.pre.length, pb.pre.length);
293
+ for (let i = 0; i < len; i++) {
294
+ const x = pa.pre[i];
295
+ const y = pb.pre[i];
296
+ if (x === void 0) return -1;
297
+ if (y === void 0) return 1;
298
+ if (x === y) continue;
299
+ const xn = /^\d+$/.test(x) ? Number(x) : NaN;
300
+ const yn = /^\d+$/.test(y) ? Number(y) : NaN;
301
+ if (!Number.isNaN(xn) && !Number.isNaN(yn)) return xn < yn ? -1 : 1;
302
+ if (!Number.isNaN(xn)) return -1;
303
+ if (!Number.isNaN(yn)) return 1;
304
+ return x < y ? -1 : 1;
305
+ }
306
+ return 0;
307
+ }
308
+ async function checkForCliUpdate(currentVersion, serverUrl, options = {}) {
309
+ const env = options.env ?? process.env;
310
+ if ((env[NOLO_UPDATE_CHECK_KILL_SWITCH] ?? process.env[NOLO_UPDATE_CHECK_KILL_SWITCH]) === "1") {
311
+ return null;
312
+ }
313
+ if (!currentVersion || !parseCliVersion(currentVersion)) return null;
314
+ const channel = getCliInstallChannel(serverUrl);
315
+ const fetchImpl = options.fetchImpl ?? fetch;
316
+ const timeoutMs = options.timeoutMs ?? 2e3;
317
+ try {
318
+ const res = await fetchImpl(
319
+ `https://registry.npmjs.org/nolo-cli/${channel}`,
320
+ {
321
+ signal: AbortSignal.timeout(timeoutMs),
322
+ headers: { accept: "application/json" }
323
+ }
324
+ );
325
+ if (!res.ok) return null;
326
+ const data = await res.json();
327
+ const latestVersion = data.version;
328
+ if (!latestVersion || !parseCliVersion(latestVersion) || compareCliVersions(latestVersion, currentVersion) <= 0) {
329
+ return null;
330
+ }
331
+ return { latestVersion, channel };
332
+ } catch {
333
+ return null;
334
+ }
335
+ }
273
336
  async function runSelfUpdate(outputOrOptions) {
274
337
  const options = outputOrOptions === void 0 ? {} : isRunSelfUpdateOptions(outputOrOptions) ? outputOrOptions : { output: outputOrOptions };
275
338
  if (isCompiledBinary()) {
@@ -337,5 +400,8 @@ export {
337
400
  resolveSelfUpdateServerUrl,
338
401
  buildCliDoctorText,
339
402
  runStandaloneBundleUpdate,
403
+ NOLO_UPDATE_CHECK_KILL_SWITCH,
404
+ compareCliVersions,
405
+ checkForCliUpdate,
340
406
  runSelfUpdate
341
407
  };
@@ -1,6 +1,5 @@
1
1
  import {
2
2
  cloudflareModels,
3
- deepSeekModels,
4
3
  deepinfraModels,
5
4
  fireworksModels,
6
5
  gmiModels,
@@ -10,19 +9,29 @@ import {
10
9
  platformHostedModels,
11
10
  xaiModels,
12
11
  zaiModels
13
- } from "./chunk-MKA6QE5E.js";
12
+ } from "./chunk-CZHE6LLV.js";
14
13
 
15
14
  // packages/ai/llm/modelAbility.ts
16
15
  var MODEL_ABILITY_TABLE = {
17
16
  "claude-opus-5": { passAt1: 74, benchmarkScore: 61 },
18
17
  "gpt-5.6-sol": { passAt1: 73, benchmarkScore: 59 },
18
+ "claude-fable-5": { passAt1: 70 },
19
19
  "gpt-5.6-terra": { passAt1: 70, benchmarkScore: 55 },
20
20
  "kimi-k3": { passAt1: 69, benchmarkScore: 57 },
21
+ "gpt-5.5": { passAt1: 67 },
22
+ "gpt-5.6-luna": { passAt1: 67, benchmarkScore: 51 },
23
+ "grok-4.6": { passAt1: 67 },
24
+ "deepseek-v4-pro": { passAt1: 63 },
25
+ "claude-opus-4.8": { passAt1: 59 },
26
+ "qwen3.8-max": { passAt1: 57 },
27
+ "muse-spark-1.2": { passAt1: 55 },
21
28
  "grok-4.5": { passAt1: 54, benchmarkScore: 54 },
22
29
  "claude-sonnet-5": { passAt1: 54, benchmarkScore: 53 },
23
- "gpt-5.6-luna": { passAt1: 67, benchmarkScore: 51 },
24
- "glm-5.2": { passAt1: 44, benchmarkScore: 51 },
25
- "gemini-3.6-flash": { passAt1: 49, benchmarkScore: 50 }
30
+ "deepseek-v4-flash": { passAt1: 53 },
31
+ "muse-spark-1.1": { passAt1: 53 },
32
+ "gpt-5.4": { passAt1: 52 },
33
+ "gemini-3.6-flash": { passAt1: 49, benchmarkScore: 50 },
34
+ "glm-5.2": { passAt1: 44, benchmarkScore: 51 }
26
35
  };
27
36
  var EFFORT_SUFFIXES = ["-extra-low", "-low", "-medium", "-high"];
28
37
  function normalizeModelName(raw) {
@@ -53,7 +62,6 @@ var ALL_MODELS = [
53
62
  ...withProvider("openai")(openAIModels),
54
63
  ...withProvider("openrouter")(openrouterModels),
55
64
  ...withProvider("xai")(xaiModels),
56
- ...withProvider("deepseek")(deepSeekModels),
57
65
  ...withProvider("deepinfra")(deepinfraModels),
58
66
  ...withProvider("fireworks")(fireworksModels),
59
67
  ...withProvider("cloudflare")(cloudflareModels),
@@ -11,11 +11,11 @@ import {
11
11
  patch,
12
12
  remove,
13
13
  write
14
- } from "./chunk-XRZJGPFI.js";
14
+ } from "./chunk-FON47ACC.js";
15
15
  import {
16
16
  createAgentKey,
17
17
  toTrimmedString
18
- } from "./chunk-6Y7A3OQQ.js";
18
+ } from "./chunk-NRY4GCKJ.js";
19
19
  import {
20
20
  asyncThunkCreator,
21
21
  buildCreateSlice,
@@ -300,7 +300,7 @@ var slice = createSliceWithThunks({
300
300
  const overrides = {};
301
301
  if (args.systemPromptOverride !== void 0) overrides.prompt = args.systemPromptOverride;
302
302
  if (args.toolsOverride !== void 0) overrides.tools = args.toolsOverride;
303
- const { _executeModel } = await import("./_executeModel-X5PCIZN6.js");
303
+ const { _executeModel } = await import("./_executeModel-ZPNYAEFW.js");
304
304
  return _executeModel(
305
305
  {
306
306
  isStreaming: args.isStreaming ?? false,
@@ -321,7 +321,7 @@ var slice = createSliceWithThunks({
321
321
  * - 循环直到无工具调用或触发其他运行时停止条件
322
322
  */
323
323
  runAgent: create.asyncThunk(async (args, thunkApi) => {
324
- const { runAgentClientLoop } = await import("./runAgentClientLoop-NBPIKJ6J.js");
324
+ const { runAgentClientLoop } = await import("./runAgentClientLoop-C3QB2EXV.js");
325
325
  const { content: loopContent, toolCallCount } = await runAgentClientLoop(
326
326
  {
327
327
  agentKey: args.agentKey,
@@ -337,7 +337,7 @@ var slice = createSliceWithThunks({
337
337
  * 聊天轮次流式 Agent 调用
338
338
  */
339
339
  streamAgentChatTurn: create.asyncThunk(async (args, thunkApi) => {
340
- const { streamAgentChatTurnHandler } = await import("./streamAgentChatTurn-L3YW6LSB.js");
340
+ const { streamAgentChatTurnHandler } = await import("./streamAgentChatTurn-GF5W5OIP.js");
341
341
  return streamAgentChatTurnHandler(args, thunkApi);
342
342
  }),
343
343
  /**
@@ -415,7 +415,8 @@ var slice = createSliceWithThunks({
415
415
  credentialRef,
416
416
  createRawApiKey
417
417
  );
418
- } catch {
418
+ } catch (error) {
419
+ console.error("[agent-credential-sync] push failed", error instanceof Error ? error.message : "unknown error");
419
420
  }
420
421
  }
421
422
  }
@@ -28,7 +28,8 @@ function canonicalizeNoloServerUrl(value) {
28
28
  // packages/cli/client/profileConfig.ts
29
29
  var normalizeProfileServerUrl = canonicalizeNoloServerUrl;
30
30
  function getDefaultProfileConfigPath() {
31
- return join(homedir(), ".nolo", "config.json");
31
+ const noloHome = process.env.NOLO_HOME?.trim();
32
+ return noloHome ? join(noloHome, "config.json") : join(homedir(), ".nolo", "config.json");
32
33
  }
33
34
  function loadProfileConfig(path = getDefaultProfileConfigPath()) {
34
35
  if (!existsSync(path)) return null;
@@ -89,8 +90,8 @@ function buildCliRuntimeEnv(processEnv, config) {
89
90
  const explicitAuthToken = processEnv.AUTH_TOKEN || processEnv.AUTH;
90
91
  const explicitServerUrl = processEnv.NOLO_SERVER || processEnv.NOLO_SERVER_URL || processEnv.BASE_URL;
91
92
  return {
92
- ...processEnv,
93
93
  ...profileEnv,
94
+ ...processEnv,
94
95
  ...explicitAuthToken ? { AUTH_TOKEN: explicitAuthToken } : {},
95
96
  ...explicitServerUrl ? {
96
97
  NOLO_SERVER: explicitServerUrl,
@@ -118,8 +119,15 @@ function saveProfileAgentSelection(selection, path = getDefaultProfileConfigPath
118
119
  if (!config) return null;
119
120
  const profile = config.profiles[config.currentProfile];
120
121
  if (!profile) return null;
121
- profile.agentKey = selection.agentKey.trim();
122
- profile.agentName = selection.agentName.trim();
122
+ const agentKey = selection.agentKey.trim();
123
+ const agentName = selection.agentName.trim();
124
+ if (!agentKey) {
125
+ delete profile.agentKey;
126
+ delete profile.agentName;
127
+ } else {
128
+ profile.agentKey = agentKey;
129
+ profile.agentName = agentName;
130
+ }
123
131
  mkdirSync(dirname(path), { recursive: true });
124
132
  writeFileSync(path, `${JSON.stringify(config, null, 2)}
125
133
  `, "utf8");